通过为{strong>滚动设置:set scrollbind
,可以将Vim的拆分窗口视图中的两个窗口相互绑定以进行滚动。完成此操作后,如果我在一个窗口中向下滚动光标,其他窗口将随之向下滚动。
但是,两个窗口中的游标并没有相互绑定。我使用:set cursorline
突出显示了光标所在的当前行。如何使突出显示的光标线在其他窗口中同时滚动?
答案 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;)。可能这也可以解决你的问题。
首先在每个窗口启用cursorcolumn
,cursorbind
,cursorline
和scrollbind
。
: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逐行差异。