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

如何在Vim中移动屏幕而不移动光标?,vim,scroll,cursor-position,Vim,Scroll,Cursor Position,我最近发现了Vim的Ctrl+E和Ctrl+Y快捷键,它们分别以一行步长上下移动屏幕,而不移动光标 您知道有什么命令会将光标留在原来的位置,但会移动屏幕,使光标所在的行成为第一行吗?(在最后一行有一个命令将是一个不错的奖励) 我可以通过手动按Ctrl+E(或Ctrl+Y)正确的次数来实现这一点,但是有一个直接执行此操作的命令会更好 有什么想法吗?Vim要求光标始终在当前屏幕上,但是,您可以将当前位置标记为书签并滚动,然后返回到您所在的位置 mg # This book marks the cu

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

您知道有什么命令会将光标留在原来的位置,但会移动屏幕,使光标所在的行成为第一行吗?(在最后一行有一个命令将是一个不错的奖励)

我可以通过手动按Ctrl+E(或Ctrl+Y)正确的次数来实现这一点,但是有一个直接执行此操作的命令会更好


有什么想法吗?

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

mg  # This book marks the current position as g (this can be any letter)
<scroll around>
`g  # return to g
mg#本书将当前位置标记为g(可以是任何字母)
`g#返回g
您可能会发现对“”的回答很有用

您可以使用该问题中的滚动百分比(0)来执行此操作。

  • zz-将当前行移到中间 在屏幕上的位置
    小心zz,如果您碰巧意外地将Caps锁定,您将保存并退出
    vim
    !)
  • zt-移动当前线路 在屏幕的顶部
  • zb-移动 将当前行添加到 屏风
此外:

  • Ctrl-y将屏幕上移一行
  • Ctrl-e将屏幕向下移动一行
  • Ctrl-u将光标和屏幕向上移动½页
  • Ctrl-d将光标和屏幕向下移动½页
  • Ctrl-b将屏幕上移一页,光标移到最后一行
  • Ctrl-f将屏幕向下移动一页,光标移到第一行
Ctrl-y和Ctrl-e仅在光标移离屏幕时更改光标位置


由于

有时使用K键和J键滚动文本很有用,因此我在.vimrc(也绑定到zs)中有这个“滚动模式”功能


请参见。

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

您应该定义以下选项:

:set nostartofline

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


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

以下是我在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
<代码>“始终保持光标在中间:” nnoremap k kzz nnoremap j jzz NNOREPZZ NNOREPZZ nnoremap G Gzz nnoremap x xzz inoremap zz nnoremap zz Inoremapzzi 诺雷奥奥扎地图 诺雷奥奥扎地图 阿扎地图

使光标停留在屏幕的中间,屏幕将向上或向下移动。

ZEnter确实执行了这个问题所要求的。

奇怪的是,zz不起作用(Ubuntu2016.04 LTS上的vim 7.4.1689没有特殊的.vimrc)

我写了一篇文章,让我可以在不移动光标位置的情况下导航文件。它基于在你的位置和目标位置之间折线,然后跳过折线,或者中止它,完全不移动

当你处于插件模式时,在第一行、最后一行和中间的光标之间快速切换也是很容易的。
我想这将是一个不错的选择。

< P>我惊讶的是没有人使用光标停留在页面中间的选项。 尝试以下方法:

:set so=999

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

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

z回车-->将当前行移到屏幕顶部

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

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

如果不明显:

回车表示回车键或回车键

.表示点或“完全停止”键(

-表示连字符键(
-

值得一提的是,z.避免了在caps lock打开时意外键入ZZ以保存和关闭Vi的危险。

输入vim并键入:

:帮助z

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

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

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

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

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

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


zz-用光标在窗口的中心重新绘制文件。

我的滚动助记符

除了其他答案之外,还要注意
ze
zs
,意思是:将屏幕移到光标的左/右(不移动光标)

+-------------------------------+
^                               |
|c-e(保持光标)|
|H(igh)zt(顶部)|
|                   ^           |
|泽| zs|
|M(iddle)zh/zh-zl/zl|
|                   |           |
|五|
|L(ow)zb(底部)|
|c-y(保持光标)|
五|
+-------------------------------+

同时查看
h
l
t
b
和(使用qwertz键盘)的位置
c-e
c-y
(同时“y”不知何故指向底部)请注意,如果您只关心进入书签行,您可以使用“g”Vim要求光标始终位于当前屏幕上“Vim用户喜欢夸耀一切
+-------------------------------+
^                               |
|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                               |
+-------------------------------+