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

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

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

什么好主意吗?


当前回答

输入vim并输入:

:帮助z

Z是用于重绘的vim命令,因此它将相对于您定位光标的位置重绘文件。您的选项如下:

z+ -将光标放在窗口顶部,并在行中第一个非空字符处重绘文件。

z——用光标在窗口底部重绘文件,并以行中第一个非空字符为单位。

z. -将光标置于窗口的中心,并以您行的第一个非空白字符重绘文件。

zt -用光标在窗口顶部重绘文件。

zb -用光标在窗口底部重绘文件。

zz -重新绘制文件,光标位于窗口的中心。

其他回答

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

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

zEnter正是这个问题所要求的。

它可以在奇怪的zz不能工作的地方工作(Ubuntu 2016.04 LTS上的vim 7.4.1689,没有特殊的.vimrc)

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

您应该定义以下选项:

:set nostartofline

另外:

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

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

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

我的滚动记忆法…

添加到其他答案也要注意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”以某种方式指向底部)在键盘上的位置,以记住屏幕的移动位置。