在Vim中顺利滚动的最好方法是什么?
Vim中的主要滚动命令是:
- Ctrl – B和Ctrl – F ,以及PageUp和PageDown滚动整页
- Ctrl – U和Ctrl – D默认为半页滚动
- Ctrl – Y和Ctrl – E滚动一行
前两者每次都失去了视觉上下文,所以我开发了重复击中后者的不良习惯( Ctrl – Y和Ctrl – E )。
由于目前没有第一方支持平滑滚动,所以最不引人注意的解决方法/插件是什么?
我根据任务使用Vim和GVim,如果没有一个真正适合两者的好黑客,我很乐意单独定制它们。 鼠标滚轮在GVim中很好地工作,但我正在寻找基于键盘的解决scheme。
更新 :现在我已经推动了这个代码,按照指导原则进行了重构: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 <CU> :call SmoothScroll(1)<Enter> nnoremap <CD> :call SmoothScroll(0)<Enter> inoremap <CU> <Esc>:call SmoothScroll(1)<Enter>i inoremap <CD> <Esc>:call SmoothScroll(0)<Enter>i
特征:
- 滚动Vim
scroll
选项的底部。 - 可定制的滚动速度(调整
sleep
命令的时间参数;我使用十毫秒)。 注意 :就像减慢video的帧速率一样,如果你减慢平滑滚动太多,它将是滚动的,而不是平滑的滚动。 但是,无论什么最适合你。 - 以正常或插入模式工作。
注意 :所有的复制和粘贴,请记住^
字符表示一个控制字符; 复制粘贴将产生无效的结果,这些必须手动input!
-
^Y
– CTRL – V然后CTRL – Y -
^E
– CTRL – V然后CTRL – E
但是, <CU>
和<Enter>
风格的语法按照字面input, 地图命令智能地将它们转换为控制字符。
使用鼠标
这个问题提到用鼠标滚动在GVim中运行良好,但是需要键盘解决scheme。 这意味着提交者可能对鼠标解决scheme感兴趣,如果它在常规terminalVim中工作的话。
对于我来说,开启鼠标支持可以顺利滚动鼠标滚轮。 另外,对于我来说,平滑的滚动是最重要的,当我环顾四周(即在正常模式),而不是当我正在编辑(插入模式),如果我不积极编辑,需要我的手留在键盘在任何时候都被删除,所以这个效果很好。
在这个问题的基础上,虽然看起来有些人不仅仅是简单地打开鼠标(我只是使用set mouse=n
),还要做更多的手动设置:
我的.vimrc
有以下几行
set mouse=a map <ScrollWheelUp> <CY> map <ScrollWheelDown> <CE>
在vim的tips.txt中有一个简单的重新映射:
Smooth scrolling *scroll-smooth* If you like the scrolling to go a bit smoother, you can use these mappings: :map <CU> <CY><CY><CY><CY><CY><CY><CY><CY><CY><CY><CY><CY><CY><CY><CY><CY> :map <CD> <CE><CE><CE><CE><CE><CE><CE><CE><CE><CE><CE><CE><CE><CE><CE><CE>
最近的插件
我在这里发布了类似的东西 ,但基本上有一个伟大的插件,我们现在可以用于滚动,称为terryma / vim-smooth-scroll 。 它提供了一个非常好的和平滑的滚动。
安装非常简单:
1我使用Vundle,所以我只是将其添加到.vimrc.bundles中 :
Bundle terryma/vim-smooth-scroll
在2016年4月29日发布的Vundle最新版本中,您可以将其放在.vimrc中 :
Plugin 'terryma/vim-smooth-scroll'
2如文档中所述,您可以设置3个参数: 距离 , 持续时间和速度 。
我在我的.vimrc文件中使用这个:
noremap <silent> <cb> :call smooth_scroll#up(&scroll*2, 10, 4)<CR> noremap <silent> <cf> :call smooth_scroll#down(&scroll*2, 10, 4)<CR>
这不是完全平滑的滚动,但这是我如何处理跳跃页面时不丢失上下文。
设置如此= 7
'scrolloff''so'number(default 0)global
{Vi无此function}
保持光标上方和下方的最less数量的屏幕线条。 这将使您在工作的地方可以看到一些上下文。 如果将其设置为非常大的值(999),则光标线始终位于窗口的中间(文件的开头或结尾除外,或者换行较长时)。 要水平滚动,请参阅“sidescrolloff”。 注:设置“兼容”时,此选项设置为0。
我所做的是将键盘重复速度设置得非常快,大约120个字节/秒,延迟小。 然后我映射到4j和4k我使用j和k来上下导航源代码,上下移动光标很好,很快,很顺利。 但是这里有很好的一面,这在Linux上是可行的,而不是Windows。 多年以来,X11的键盘input工作方式使得当您按住j时显然会开始输出j个字符。 但是当你按住j然后再按ctrl键时,X11开始输出cj字符,而不必重新按j键。 那么当你松开ctrl键并仍然按住j时,X11会继续放置j。 所以j使光标开始向下移动,并且可以周期性地按下ctrl,而不用让j给它一个提升,一个颠簸。
另外,我做德文所做的,我把scrolloffset设置为5。
最后,我交换ctrl和大写locking。 ctrl键的默认位置是完全减速的(没有违规意图)。 它使你必须旋转你的左手。 我几乎从来没有使用大写locking,所以我交换了它们。 然后,我的左手粉红色的手指可以到达Ctrl键没有任何瑜伽动作。
这些东西多年来一直为我工作。 我只使用vim,从来没有gvim。
无耻的插件,但我在这里创build了一个插件,您可以使用它来轻松调整滚动animation的距离,速度和持续时间: https : //github.com/terryma/vim-smooth-scroll
插件cskeeters / vim-smooth-scroll支持平滑滚动,不需要configuration。 它支持使用zt
, zz
和zb
平滑滚动。 这是Terryma插件的一个分支。 一些公开的拉请求已被应用。
我刚刚发现这个名为“加速平滑滚动”的插件(“用于加速平滑滚动的Vim插件(映射到<CD>/<CU>
, <CF>/<CB>)
”),可以通过Vundle把这行放在你的.vimrc里:
Plugin 'yonchu/accelerated-smooth-scroll'
然后重新启动Vim并运行:PluginInstall
命令,然后重新启动Vim并正常使用<CD>
( Ctrl + D )和<CO>
( Ctrl + O )命令。
不幸的是,这个插件也移动光标,而不是我想要的:像<CE>
和<CY>
命令一样滚动屏幕。