Vim:针对tex文件的精确段落跳转

时间:2015-08-19 15:27:46

标签: vim keyboard-shortcuts

我想在vim中更改tex文件中{}的行为。

在tex文件中,段落通常用一个或多个空行分隔。

光标应该与段落的第一行上的nroff宏(例如.sh)类似地放置,而不是在分隔的空白行上。 Afaik,调整:set paragraphs不允许这样做(see here)。

值得注意的角落案例包括:\indent\noindent\paragraph{}\subparagraph{}以及更多。不幸的是,全面的解决方案会非常复杂,请参阅https://tex.stackexchange.com/q/13085/in-how-many-ways-can-you-create-a-paragraph-in-latex

但我不需要这个。即使我使用\paragraph{},我也会在其前面添加一个空行。

因此,此问题应限于空行并将光标放在下一个非空白行上。

说明:

  • 映射不应触及搜索历史记录。
  • 应修改
  • jumplist(与{}相同的行为)。

这个问题是由junegunn的插件limelight.vim推动的。

1 个答案:

答案 0 :(得分:0)

一种方法是:

nnoremap g} :call search('^$\n\s*\zs\S')<CR>
nnoremap g{ :call search('^$\n\s*\zs\S', 'b')<CR>

剩余问题:

  • 改进可以是将闭合折叠(例如,插件vimtex折叠的部分)作为单个段落处理。
  • 尊重'foldopen'阻止设置(与{}相同的行为)
    这可能也解决了第一个问题。
  • 无法转到文件的开头。

改进的映射

nnoremap <silent> g} 
            \ :let old = @/
            \ <bar>/^$\n\s*\zs\S<CR>
            \ <bar>:nohlsearch
            \ <bar>call histdel('/', -1)
            \ <bar>let @/ = old<CR>
nnoremap <silent> g{
            \ :let old = @/
            \ <bar>?\(^$\n\s*\zs\S\)\<bar>\%^<CR>
            \ <bar>:nohlsearch
            \ <bar>call histdel('/', -1)
            \ <bar>let @/ = old<CR>
  • 不污染搜索记录
  • 设置:set 'foldopen'包含blocksearch(默认为默认)与{}相同的关于弃号的行为
  • 修改了
  • jumplist:使用CTRL-ICTRL-O循环也是如此。 (:h jumplist
  • 允许转到文件的开头

剩余问题II:

  • hlsearch已关闭。如果用户想要保留当前搜索并希望突出显示它们,则必须进一步改进映射。可能会发生闪烁。

注释

  • 允许g{从第一段跳到最后一段,g}从最后一站跳到第一段(与{}的行为不同)
  • dg}不起作用(运营商+ g} / g{)。在这种情况下,无论如何我更喜欢d}