繁体   English   中英

如何在 Vim 中不移动光标的情况下移动屏幕?

[英]How to move screen without moving cursor in Vim?

我最近发现了 Vim 的Ctrl + ECtrl + Y快捷键,它们分别以一行的步长上下移动屏幕,而无需移动光标

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

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

有任何想法吗?

  • z z - 将当前行移动到屏幕中间
    小心z z ,如果您碰巧不小心打开了大写锁定,您将保存并退出vim !)
  • z t - 将当前行移动到屏幕顶部
  • z b - 将当前行移动到屏幕底部

此外:

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

Ctrl - yCtrl - e仅在光标移出屏幕时更改光标位置。

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

Vim 要求光标始终位于当前屏幕上,但是,您可以为当前位置添加书签,滚动然后返回到您所在的位置。

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

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

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

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

:set so=999

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

使用Ctrl + DCtrl + FCtrl + BCtrl + UGHMLg g时将光标留在同一列

您应该定义以下选项:

:set nostartofline

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

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

ž。 --> 将当前行移动到屏幕中心

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

如果不明显:

enter表示ReturnEnter键。

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

-表示连字符键 ( - )

对于它的价值, z 如果大写锁定打开,则避免因意外键入Z Z而保存和关闭 Vi 的危险。

我的滚动助记符...

添加到其他答案也注意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                               |
+-------------------------------+

还要查看键盘上hl以及tb以及(使用 qwertz 键盘) cecy (还有“y”以某种方式指向底部)的位置,以记住屏幕移动的位置。

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

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

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

您可以使用该问题中的ScrollToPercent(0)来执行此操作。

z Enter正是这个问题所要求的。

它可以在奇怪的z z不起作用的情况下工作(Ubuntu 2016.04 LTS 上的 vim 7.4.1689,没有特殊的 .vimrc)

输入 vim 并输入:

:help z

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

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

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

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

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

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

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

有时使用KJ键滚动文本很有用,所以我的 .vimrc 中有这个“滚动模式”功能(也绑定到z s )。

scroll_mode.vim

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

当您处于插件模式时,只需单击jkl在第一行的光标、最后一行的光标和中间的光标之间快速切换也很容易。

我想它会很适合这里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM