And*_*ner 70 vim scroll smooth-scrolling
Vim中的主要滚动命令是:
对于前两者,我每次都失去视觉背景,所以我养成了重复击中后者(Ctrl- Y和Ctrl- E)的坏习惯.
由于目前没有第一方支持平滑滚动,最不受欢迎的变通办法/插件是什么?
我根据任务使用Vim和GVim,如果没有一个真正好的hack适用于两者,我很乐意单独定制它们.鼠标滚轮在GVim中运行良好,但我正在寻找基于键盘的解决方案.
Kei*_*son 34
更新:我现在已将此代码推: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
Run Code Online (Sandbox Code Playgroud)
特征:
scroll选项的基础.sleep命令的时间参数;我使用10毫秒).注意:就像减慢视频的帧速率一样,如果你将光滑的滚动速度放慢太多,那将是不稳定的滚动,而不是平滑的滚动.但无论哪种方式最适合你.注意:所有复制和粘贴的人都要记住,该^字符表示一个控制字符; 复制粘贴将产生无效结果,必须手动输入!
^Y- CTRL- V然后CTRL-Y^E- CTRL- V然后CTRL-E然而,<C-U>和<Enter>风格的语法被原样输入那些字符; map命令会智能地将它们转换为控制字符.
问题提到用鼠标滚动在GVim中运行良好,但需要键盘解决方案.这对我来说意味着,如果它在常规终端Vim中工作,那么提问者可能对鼠标解决方案感兴趣.
对我来说,打开鼠标支持可以平滑滚动鼠标滚轮.另外,对我来说,平滑滚动是最重要的,当我环顾四周时(即在正常模式下),而不是在我编辑时(在插入模式下),如果我没有主动编辑,我的手需要留在键盘在任何时候都被删除,所以这很好用.
但是,在这个问题的基础上,似乎有些人不得不做一些手动设置,而不仅仅是打开鼠标(我只是使用set mouse=n):
我.vimrc有以下几行
set mouse=a
map <ScrollWheelUp> <C-Y>
map <ScrollWheelDown> <C-E>
Run Code Online (Sandbox Code Playgroud)
And*_*ner 10
在vim的tips.txt中有一个简单的重映射黑客:
Smooth scrolling *scroll-smooth*
If you like the scrolling to go a bit smoother, you can use these mappings:
:map <C-U> <C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y><C-Y>
:map <C-D> <C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E><C-E>
Run Code Online (Sandbox Code Playgroud)
我在这里发布了类似的东西,但基本上有一个很棒的插件,我们现在可以用来滚动,称为terryma/vim-smooth-scroll.它提供了非常漂亮和流畅的滚动.
安装非常简单:
1我使用Vundle所以我只是在.vimrc.bundles中添加它:
Bundle terryma/vim-smooth-scroll
Run Code Online (Sandbox Code Playgroud)
在2016年4月29日的最新版Vundle中,您可以将它放在.vimrc中:
Plugin 'terryma/vim-smooth-scroll'
Run Code Online (Sandbox Code Playgroud)
2如文档中所述,您可以设置3个参数:距离,持续时间和速度.
我在我的.vimrc文件中使用它:
noremap <silent> <c-b> :call smooth_scroll#up(&scroll*2, 10, 4)<CR>
noremap <silent> <c-f> :call smooth_scroll#down(&scroll*2, 10, 4)<CR>
Run Code Online (Sandbox Code Playgroud)