我最近发现,Vim的Ctrl+E和Ctrl+Y快捷键可以分别用一行步骤上下移动屏幕,而不需要移动光标。

你知道有什么命令可以让光标留在原地,但会移动屏幕,让光标所在的行变成第一行吗?(最后一行有一个命令将是一个很好的奖励)。

我可以通过手动按下适当次数的Ctrl+E(或Ctrl+Y)来实现这一点,但有一个命令可以以某种方式直接做到这一点会更好。

什么好主意吗?


当前回答

另外:

Ctrl-y将屏幕向上移动一行 Ctrl-e将屏幕向下移动一行 Ctrl-u移动光标和屏幕向上½页 Ctrl-d移动光标和屏幕下移½页 Ctrl-b将屏幕上移一页,光标移到最后一行 Ctrl-f向下移动屏幕一页,光标到第一行

Ctrl-y和Ctrl-e仅在光标要移出屏幕时才更改光标位置。

由www.lagmonster.org/docs/vi2.html提供

其他回答

Zz -移动电流线到中间 屏幕上的 (小心zz,如果你不小心打开了Caps Lock,你会保存并退出vim!) Zt——移动电流线 到屏幕的顶部 Zb -移动 当前行到底部 屏幕

这是我在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

这样光标就会停留在屏幕中间,屏幕就会上下移动。

您可以在光标移动命令前加上一个数字,这将重复该命令多次

10Ctrl+E将执行10次Ctrl+E而不是1次。

你可能会发现“相对于光标滚动Vim,自定义映射”的答案很有用。

您可以使用该问题的ScrollToPercent(0)来完成此操作。

当使用Ctrl+D, Ctrl+F, Ctrl+B, Ctrl+U, G, H, M, L, gg时,将光标留在同一列

您应该定义以下选项:

:set nostartofline