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

时间:2010-08-11 13:21:23

标签: vim scroll cursor-position

我最近发现了 Ctrl + E Ctrl + Y 的Vim快捷方式,分别向上移动了屏幕并且向下一步,而不移动光标

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

我可以通过手动按 Ctrl + E (或 Ctrl + Y )来实现此目的有时间,但有一个命令,不知何故直接这样做会很好。

有什么想法吗?

14 个答案:

答案 0 :(得分:776)

  • z z - 将当前行移至中间位置 的屏幕
    小心 z z ,如果您碰巧有 Caps Lock 意外,您将节省并退出vim!)
  • z t - 移动当前行 到屏幕顶部
  • z b - 移动 当前行到底部 屏

答案 1 :(得分:550)

此外:

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

Ctrl - y Ctrl - e 只有在光标移出屏幕时才会改变光标位置

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

答案 2 :(得分:33)

Vim要求光标始终位于当前屏幕中,但是,您可以将当前位置的书签滚动,然后返回到原来的位置。

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

答案 3 :(得分:11)

当您使用 Ctrl + D Ctrl + F 时,将光标留在同一列中, Ctrl + B Ctrl + U G H < / kbd>, M L g g

您应该定义以下选项:

:set nostartofline

答案 4 :(得分:11)

这是我在vimrc中的解决方案:

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

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

答案 5 :(得分:6)

我的滚动助记符...

添加到其他答案中还要注意zezs,这意味着:将屏幕移至光标的左/右(不移动光标)

+-------------------------------+
^                               |
|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                               |
+-------------------------------+

还要查看hltb的位置,以及(使用qwertz键盘)c-ec-y的位置(键盘上的“ y”也指向底部)以记住屏幕的移动位置。

答案 6 :(得分:5)

您可以使用数字为光标移动命令添加前缀,这将多次重复该命令

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

答案 7 :(得分:4)

您可能会发现此问题的答案很有用:Scrolling Vim relative to cursor, custom mapping:您可以使用该问题中的ScrollToPercent(0)来执行此操作。

答案 8 :(得分:4)

我很惊讶没有人使用Scrolloff选项,该选项将光标停留在页面中间。 尝试使用:

:set so=999

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

答案 9 :(得分:3)

z 输入完全符合此问题的要求。

它工作奇怪地 z z 不起作用(在Ubuntu 2016.04 LTS上vim 7.4.1689没有特殊的.vimrc)

答案 10 :(得分:2)

有时使用K和J键滚动文本很有用。 所以我有这个&#34;滚动模式&#34;我的.vimrc中的函数(也在zs上绑定)

scroll_mode.vim

答案 11 :(得分:2)

我过去曾经使用过这些快捷方式:

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

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

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

如果不明显:

enter 表示 Return Enter 键。

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

-表示HYPHEN键(-

对于它的值, z 通过意外键入 Z Z 如果大写锁定已打开。

答案 12 :(得分:1)

我写了一个新的插件,它使您能够在不移动光标位置的情况下导航孔文件。它基于折叠您的位置和目标位置之间的线条,然后跳过折叠。或者中止它并且根本不动。

它也很容易在光标之间快速切换是第一行,光标是最后一行,光标在中间只需点击j,k或l(当你处于插件模式时)。 )

我想这会很合适: https://github.com/anschnapp/move-less

答案 13 :(得分:0)

输入vim并输入:

:help z

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

z + -使用光标在窗口的顶部和行的第一个非空白字符处重绘文件。

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

z。-使用光标在窗口的中心和行的第一个非空白字符处重绘文件。

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

zb -使用光标位于窗口底部的方式重绘文件。

zz -使用光标位于窗口中心的位置重绘文件。