如何移动屏幕而不在Vim中移动光标?

ere*_*eOn 565 vim scroll cursor-position

我最近发现了Vim的Ctrl+ ECtrl+ Y快捷键,分别用一行步骤上下移动屏幕,而不移动光标.

你知道任何将光标留在原处的命令,但是移动屏幕使得有光标的线成为第一行吗?(拥有最后一行的命令将是一个很好的奖励).

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

有任何想法吗?

Kev*_*han 831

  • zz- 将当前行移动到屏幕中间
    (小心zz,如果您偶然发生Caps Lock意外,您将保存并退出vim!)
  • zt - 将当前行移动到屏幕顶部
  • zb - 将当前行移动到屏幕底部

  • zt / zz / zb - 固定光标并将屏幕移动到 **t**op/center(german:'**z**entrum')/ **b**ottom <---> H / M / L -固定屏幕并将光标移动到**高**高/**中**中/**低**低位置 (8认同)
  • @HappyGreenKidNaps阻止锁定密钥的地图尽快控制! (3认同)
  • 我更喜欢 `z.` 而不是 `zz`,以防你碰巧锁定了大写字母,`zz` 不会那么友好。 (3认同)
  • 查询大写锁定状态非常依赖于环境。我听说它不能在Vimscript中完成,因此我已经接受了。如果您想走这条路,可以使用xev -q,cat / proc / bus / input / devices查找要查询的设备并使用evtest或thd ... --dump / dev / input / event <#>`来检查状态,等等。如果您绝对必须在系统范围内进行重新映射,则至少要交换两个锁,例如caps <-> num-但问题更是使它忘记了,因为如果您以前想要它,无论使用哪种地图,您都将继续使用它。冒着在文件/用户/系统之前破坏Vim的风险。 (2认同)

Pau*_*ler 592

另外:

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

Ctrl- yCtrl- e只有在光标移出屏幕时才更改光标位置.

http://www.lagmonster.org/docs/vi2.html提供

  • @ulidtko:efter(瑞典语之后),yore(意思是过去),up,down,back,forward.(后退和前进的词比上下都长,所以他们自然会将屏幕移动更长的距离;) (87认同)
  • 我猜yester,就像在昨天会是一个更好的助记符虽然^^ (12认同)
  • `:help CTRL-E` 说`助记符:额外的行。` (2认同)

GWW*_*GWW 36

Vim要求光标始终位于当前屏幕中,但是,您可以将当前位置标记为滚动,然后返回到您所在的位置.

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g
Run Code Online (Sandbox Code Playgroud)

  • 我从未遇到过这样的情况,我希望光标位于你看不到的地方.当然,当你滚动时光标会移动,但你可以回到你平凡的地方(这样你就可以看到你实际上的位置,而不仅仅是猜测).双击回一个,`Ctrl-O`换另一个非常好的,"反击,句号"让你回到你上次编辑的地方. (7认同)
  • "Vim要求光标始终在当前屏幕中"Vim用户喜欢吹嘘一切都可以在vim中配置.这个不是.我在滚动浏览文件时不想移动光标.对我来说是违规的 (4认同)
  • @gedalat,当您滚动离开时,这在其他编辑器中是非常烦人的,不知道光标在哪里,必须使用鼠标单击某个位置才能使光标返回。或者,您认为自己在“这里”,开始键入,它突然跳回到光标所在的位置,此时您无法跳回到滚动的位置,因为只跟踪了光标位置。让光标跟随您的去向无疑是一件好事。 (2认同)

Jes*_*nee 20

我很惊讶没有人使用Scrolloff将光标保持在页面中间的选项。试试看:

:set so=999
Run Code Online (Sandbox Code Playgroud)

这是 Vim wiki 上第一个推荐的方法,效果很好。

  • 如果您不希望光标始终位于中间*右*,您可以将其设置为较小的值。例如,“:setscrolloff=4”将要求光标始终距离窗口顶部或底部至少 4 行,因此您始终至少有一点上下文。 (5认同)

Hen*_*nry 16

这是我在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
Run Code Online (Sandbox Code Playgroud)

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

  • 如何将'scrolloff'设置为'lines'的一半值? (7认同)

Ale*_*sev 13

要光标停留在相同的列当您使用Ctrl+ D,Ctrl+ F,Ctrl+ B,Ctrl+ U,G,H,M,L,gg

您应该定义以下选项:

:set nostartofline
Run Code Online (Sandbox Code Playgroud)

  • 我每次都忘记/混淆它:zt / zz / zb-​​固定光标并将屏幕移至** t ** op / center(德语:'** z ** entrum')/ ** b **底部&lt;- -&gt; H / M / L-固定屏幕并将光标移至** H **高度/ ** M **中间/ ** L **低位置 (2认同)

Raz*_*zle 11

我过去使用过这些快捷键(注意: 单独的击键,即点击z,松开,点击后续键):

z enter --> 将当前行移动到屏幕顶部

z . --> 将当前行移动到屏幕中心

z - --> 将当前行移到底部

如果不明显:

enter表示ReturnEnter键。

.表示 DOT 或“句号”键 ( .)。

-表示连字符键 ( -)

无论如何,如果大写锁定打开,则z.可以避免因意外键入而保存和关闭 Vi 的危险ZZ


Joe*_*Joe 8

输入vim并输入:

:help z

z是用于重绘的vim命令,因此它将相对于光标所在位置重绘文件。您可以选择的选项如下:

z+- 将光标置于窗口顶部并在该行的第一个非空白字符处重新绘制文件。

z-- 使用窗口底部的光标和该行的第一个非空白字符重新绘制文件。

z.- 将光标置于窗口中心并在该行的第一个非空白字符处重新绘制文件。

zt- 用窗口顶部的光标重画文件。

zb- 用窗口底部的光标重画文件。

zz- 将光标置于窗口中心重绘文件。


eli*_*eli 8

我的滚动助记符...

添加到其他答案也注意zeand 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                               |
+-------------------------------+
Run Code Online (Sandbox Code Playgroud)

还要查看键盘上handltand的位置b(使用 qwertz 键盘)c-ec-y(还有“y”以某种方式指向底部)以记住屏幕移动的位置。


yun*_*zen 5

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

10Ctrl+ E将做Ctrl+ E10次​​而不是1次。


Nic*_*oul 5

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

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