Vim:如何滚动光标线呢?

Ash*_*ppa 15 vim

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

但是,两个窗口中的游标并没有相互绑定.我曾经常常:set cursorline突出显示光标所在的当前行.如何使突出显示的光标线同时在另一个窗口中滚动?

Pri*_*ash 17

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

:set cursorbind
Run Code Online (Sandbox Code Playgroud)

似乎完全按照你的意愿行事.

  • 而且,我今天学到了一些关于vim的新知识.这是一个多么丰富的应用程序! (4认同)
  • Prince Goulash:谢谢,cursorbind命令好像在那里走了一半.滚动窗口时光标不会更新.但是,当我切换到下一个窗口时,光标会同步. (3认同)

小智 8

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

:set cursorbind
:set scrollbind
:set cursorline
Run Code Online (Sandbox Code Playgroud)

然后

:map <Down> j<C-w><C-w><C-w><C-w>
:map <Up> k<C-w><C-w><C-w><C-w>
Run Code Online (Sandbox Code Playgroud)

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

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


cyc*_*hoi 6

当我想在vimdiff会话中进行“跨窗口列跟踪”(除了“跨窗口行跟踪”之外)时,我想出了这个解决方案。可能这也可以解决您的问题。

首先启用cursorcolumncursorbindcursorlinescrollbind每个窗口上。

:windo set cursorcolumn | set cursorbind | set cursorline | set scrollbind
Run Code Online (Sandbox Code Playgroud)

然后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>
Run Code Online (Sandbox Code Playgroud)