Vim:如何滚动光标线呢?

时间:2011-03-08 03:24:10

标签: vim

通过为{strong>滚动设置:set scrollbind,可以将Vim的拆分窗口视图中的两个窗口相互绑定以进行滚动。完成此操作后,如果我在一个窗口中向下滚动光标,其他窗口将随之向下滚动。

但是,两个窗口中的游标并没有相互绑定。我使用:set cursorline突出显示了光标所在的当前行。如何使突出显示的光标线在其他窗口中同时滚动?

5 个答案:

答案 0 :(得分:16)

我自己不使用它,我可能会忽略这一点,但

:set cursorbind

似乎完全符合您的要求。

答案 1 :(得分:6)

我刚遇到同样的情况(只有两个窗口可以比较),我做的是:

:set cursorbind
:set scrollbind
:set cursorline

然后

:map <Down> j<C-w><C-w><C-w><C-w>
:map <Up> k<C-w><C-w><C-w><C-w>

这导致每次按下向上或向下箭头在窗口之间来回切换一次,这会更新另一个窗口上的光标位置(你可以:redraw!<CR>而不是丑陋的窗口切换,但看起来很糟糕当移动太快时)。当然,有许多方法可以在没有箭头的线条之间移动,所以这远非完美。

但是,由于这对我来说不是主要的工作模式,主要用于比较diff因任何原因而无法查看的文件,我觉得这个设置实际上已经足够好了。 / p>

答案 2 :(得分:4)

当我想要进行&#34;跨窗口列跟踪时,我想出了这个解决方案。在vimdiff会话中(除了&#34;跨窗口行跟踪&#34;)。可能这也可以解决你的问题。

首先在每个窗口启用cursorcolumncursorbindcursorlinescrollbind

:windo set cursorcolumn | set cursorbind | set cursorline | set scrollbind

然后map hjkl个动作键来更新每个动作的光标位置。

:nmap h h:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
:nnoremap j j:let curwin=winnr()<CR>:keepjumps windo redraw<CR>j:execute curwin . "wincmd w"<CR>
:nmap k k:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
:nmap l l:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>

答案 3 :(得分:2)

我发现vim文档中的这个页面认为您可能会觉得有用:http://vimdoc.sourceforge.net/htmldoc/scroll.html#scroll-binding

有时我发现从马口直接是最好的。

答案 4 :(得分:1)

我对cychoi's answer进行了微小的改动。在diff模式下重新映射h,j,k,l并删除&#39; j&#39;点击了cychoi的原始映射:

if &diff
  au VimEnter * windo set cursorcolumn | set cursorbind | set cursorline | set scrollbind
  nmap h h:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
  nmap j j:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
  nmap k k:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
  nmap l l:let curwin=winnr()<CR>:keepjumps windo redraw<CR>:execute curwin . "wincmd w"<CR>
endif

我认为此设置适用于CSV逐行差异。