如何在不移动光标的情况下移动屏幕?
我最近发现了Vim的Ctrl + E和Ctrl + Y快捷键,它们分别以一行一行的方式上下移动屏幕, 而不用移动光标 。
你知道任何命令离开光标的地方,但移动屏幕,使光标线成为第一行吗? (有最后一行的命令将是一个不错的奖金)。
我可以通过手动按下Ctrl + E (或Ctrl + Y )来达到这个目的,但是有一个命令,直接以某种方式直接进行就好了。
有任何想法吗?
- z z – 将当前行移动到屏幕中间
( 小心z z ,如果碰巧碰巧有Caps Lock ,你会保存并退出vim
!) - z t – 将当前行移动到屏幕的顶部
- z b – 将当前行移动到屏幕的底部
另外:
- Ctrl – y将屏幕向上移动一行
- Ctrl – e将屏幕向下移动一行
- Ctrl – u将光标和屏幕向上移动1/2页
- Ctrl – d将光标和屏幕向下移动1/2页
- Ctrl – b将屏幕向上移动一页,光标移至最后一行
- Ctrl – f将屏幕向下移动一页,光标移至第一行
如果Ctrl – y和Ctrl – e将被移出屏幕,则只会改变光标的位置。
Vim要求光标始终处于当前屏幕中,但是,您可以将当前位置添加为书签,然后返回到原来的位置。
mg # This book marks the current position as g (this can be any letter) <scroll around> `g # return to g
使用Ctrl + D , Ctrl + F , Ctrl + B , Ctrl + U , G , H , M , L , g g将光标留在同一列
你应该定义下面的选项:
:set nostartofline
你可以用你的光标移动命令作为数字的前缀,并且会多次重复该命令
1 0 Ctrl + E将做Ctrl + E 10次而不是一次。
你可能会发现下面这个问题非常有用: 滚动Vim相对于游标,自定义映射 :你可以使用ScrollToPercent(0)
从这个问题来做到这一点。
这是我在vimrc中的解决scheme:
nnoremap k kzz nnoremap j jzz nnoremap p pzz nnoremap P Pzz nnoremap G Gzz nnoremap x xzz inoremap <ESC> <ESC>zz nnoremap <ENTER> <ENTER>zz inoremap <ENTER> <ENTER><ESC>zza nnoremap o o<ESC>zza nnoremap O O<ESC>zza nnoremap a a<ESC>zza
这样光标将停留在屏幕的中间,屏幕会上下移动。
有时使用K和J键滚动文本是有用的。 所以我有这个“滚动模式”function在我的.vimrc(也绑定在ZS)
scroll_mode.vim
回车确实是这个问题所要求的。
它奇怪的z z不工作的地方(Ubuntu 2016.04 LTS上的vim 7.4.1689,没有特别的.vimrc)