我如何改变 vim 中的滚轮行为,使其滚动而不是移动光标?

我如何改变 vim 中的滚轮行为,使其滚动而不是移动光标?

我希望向上滚动相当于c-y c-y c-y,向下滚动相当于c-e c-e c-e。文档这里似乎表明情况应该已经如此,或者我可以通过将其放入我的来解决这个问题.vimrc

map <ScrollWheelUp> <C-Y>
map <S-ScrollWheelUp> <C-U>
map <ScrollWheelDown> <C-E>
map <S-ScrollWheelDown> <C-D>

这两种解决方案似乎都不起作用。我正在使用vimUbuntu 11.10 中的终端。

答案1

很抱歉您遇到了这个问题。其实很简单。只需将以下行添加到您的 ~/.vimrc 中:

set mouse=a

启用此功能后,您将无法(在 *nix 中)通过简单地用鼠标选择来从 vim 中复制内容;但如果您在选择时按住ShiftOption对于 OSX),它将像以前一样工作。

答案2

来自我的 ~/.gvimrc:

"           Scroll Wheel = Up/Down 4 lines
"   Shift + Scroll Wheel = Up/Down 1 page
" Control + Scroll Wheel = Up/Down 1/2 page
"    Meta + Scroll Wheel = Up/Down 1 line
 noremap <ScrollWheelUp>     4<C-Y>
 noremap <ScrollWheelDown>   4<C-E>
 noremap <S-ScrollWheelUp>   <C-B>
 noremap <S-ScrollWheelDown> <C-F>
 noremap <C-ScrollWheelUp>   <C-U>
 noremap <C-ScrollWheelDown> <C-D>
 noremap <M-ScrollWheelUp>   <C-Y>
 noremap <M-ScrollWheelDown> <C-E>
inoremap <ScrollWheelUp>     <C-O>4<C-Y>
inoremap <ScrollWheelDown>   <C-O>4<C-E>
inoremap <S-ScrollWheelUp>   <C-O><C-B>
inoremap <S-ScrollWheelDown> <C-O><C-F>
inoremap <C-ScrollWheelUp>   <C-O><C-U>
inoremap <C-ScrollWheelDown> <C-O><C-D>
inoremap <M-ScrollWheelUp>   <C-O><C-Y>
inoremap <M-ScrollWheelDown> <C-O><C-E>

这会产生一个不良的副作用,即滚轮不会滚动鼠标光标下的窗口,而是滚动当前活动的窗口。

至于终端中的 Vim 是否能够使用鼠标滚动,这取决于您的终端仿真器在使用滚轮时是否会将转义序列传递给 Vim。Xterm 可以做到这一点,尽管这可能需要您提供一些帮助 — 请参阅“ :help xterm-mouse-wheel”。

答案3

这就是我的设置方式。zz每次移动光标时,屏幕垂直居中。它保持可视模式以突出显示大块代码。如果处于插入模式,它会先退出。

需要注意的一点是,我个人不需要像另一位海报设置的那样设置更大的滚动增量.vimrc,因为我的 MX Master 鼠标滚轮具有自由旋转模式,vim 可以轻松跟上。

set mouse=a

nnoremap <ScrollWheelDown> jzz
nnoremap <ScrollWheelUp>   kzz
vnoremap <ScrollWheelDown> jzz
vnoremap <ScrollWheelUp>   kzz
inoremap <ScrollWheelDown> <Esc>jzz
inoremap <ScrollWheelUp>   <Esc>kzz

相关内容