更新:我现在已经将这段代码推:help write-plugin
送到了Github repo ,根据指南进行了一些重构。
使用键盘
这是我的.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
特征:
scroll
在 Vim选项的底部滚动。
- 可自定义的滚动速度(调整
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>