我最近发现,Vim的Ctrl+E和Ctrl+Y快捷键可以分别用一行步骤上下移动屏幕,而不需要移动光标。
你知道有什么命令可以让光标留在原地,但会移动屏幕,让光标所在的行变成第一行吗?(最后一行有一个命令将是一个很好的奖励)。
我可以通过手动按下适当次数的Ctrl+E(或Ctrl+Y)来实现这一点,但有一个命令可以以某种方式直接做到这一点会更好。
什么好主意吗?
我最近发现,Vim的Ctrl+E和Ctrl+Y快捷键可以分别用一行步骤上下移动屏幕,而不需要移动光标。
你知道有什么命令可以让光标留在原地,但会移动屏幕,让光标所在的行变成第一行吗?(最后一行有一个命令将是一个很好的奖励)。
我可以通过手动按下适当次数的Ctrl+E(或Ctrl+Y)来实现这一点,但有一个命令可以以某种方式直接做到这一点会更好。
什么好主意吗?
当前回答
您可以在光标移动命令前加上一个数字,这将重复该命令多次
10Ctrl+E将执行10次Ctrl+E而不是1次。
其他回答
这是我在vimrc中的解决方案:
"keep cursor in the middle all the time :)
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>zzi
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza
这样光标就会停留在屏幕中间,屏幕就会上下移动。
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, gg时,将光标留在同一列
您应该定义以下选项:
:set nostartofline
你可能会发现“相对于光标滚动Vim,自定义映射”的答案很有用。
您可以使用该问题的ScrollToPercent(0)来完成此操作。
我的滚动记忆法…
添加到其他答案也要注意ze和zs,意思是:将屏幕光标向左/向右移动(不移动光标)
+-------------------------------+
^ |
|c-e (keep cursor) |
|H(igh) zt (top) |
| ^ |
| ze | zs |
|M(iddle) zh/zH <--zz--> zl/zL |
| | |
| v |
|L(ow) zb (bottom) |
|c-y (keep cursor) |
v |
+-------------------------------+
还可以观察h、l、t和b以及(用qwertz键盘)c-e和c-y(也就是“y”以某种方式指向底部)在键盘上的位置,以记住屏幕的移动位置。