更新:现在,我已将此代码(根据其指南进行了某种程度的重构)推:help write-plugin
送至Github存储库。
使用键盘
这是我的东西.vimrc
:
function SmoothScroll(up)
if a:up
let scrollaction="^Y"
else
let scrollaction="^E"
endif
exec "normal " . scrollaction
redraw
let counter=1
while counter<&scroll
let counter+=1
sleep 10m
redraw
exec "normal " . scrollaction
endwhile
endfunction
nnoremap <C-U> :call SmoothScroll(1)<Enter>
nnoremap <C-D> :call SmoothScroll(0)<Enter>
inoremap <C-U> <Esc>:call SmoothScroll(1)<Enter>i
inoremap <C-D> <Esc>:call SmoothScroll(0)<Enter>i
特征:
- 在Vim
scroll
选项的基础上滚动。
- 可自定义的滚动速度(调整
sleep
命令的时间参数;我使用十毫秒)。注意:就像减慢视频的帧速率一样,如果您减慢平滑滚动的速度,则将是抖动滚动,而不是平滑滚动。但是,最适合您的是什么。
- 在普通或插入模式下工作。
注意:所有复制粘贴操作,请记住该^
字符表示控制字符;复制粘贴将产生无效的结果,必须手动输入这些结果!
^Y
- CTRL-V那么CTRL-Y
^E
- CTRL-V那么CTRL-E
但是,<C-U>
and<Enter>
样式语法的字面意义是这些字符。map命令智能地将它们转换为控制字符。
使用鼠标
该问题提到在GVim中使用鼠标滚动效果很好,但是需要键盘解决方案。这对我来说意味着,如果问询者可以在常规终端Vim中工作,那么它可能会对鼠标解决方案感兴趣。
对我来说,打开鼠标支持可以平滑地滚动鼠标滚轮。另外,对我来说,平滑滚动是最重要的,这时我环顾四周(即在正常模式下),而不是在编辑时(在插入模式下),并且如果我不积极进行编辑,则需要我的手一直保持在始终都卸下键盘,因此效果很好。
但是,基于此问题,似乎有些人需要做更多的手动设置,而不仅仅是简单地打开鼠标(我只是使用set mouse=n
):
我.vimrc
有以下几行
set mouse=a
map <ScrollWheelUp> <C-Y>
map <ScrollWheelDown> <C-E>