我最近发现,Vim的Ctrl+E和Ctrl+Y快捷键可以分别用一行步骤上下移动屏幕,而不需要移动光标。
你知道有什么命令可以让光标留在原地,但会移动屏幕,让光标所在的行变成第一行吗?(最后一行有一个命令将是一个很好的奖励)。
我可以通过手动按下适当次数的Ctrl+E(或Ctrl+Y)来实现这一点,但有一个命令可以以某种方式直接做到这一点会更好。
什么好主意吗?
我最近发现,Vim的Ctrl+E和Ctrl+Y快捷键可以分别用一行步骤上下移动屏幕,而不需要移动光标。
你知道有什么命令可以让光标留在原地,但会移动屏幕,让光标所在的行变成第一行吗?(最后一行有一个命令将是一个很好的奖励)。
我可以通过手动按下适当次数的Ctrl+E(或Ctrl+Y)来实现这一点,但有一个命令可以以某种方式直接做到这一点会更好。
什么好主意吗?
当前回答
我写了一个插件,它可以让我在不移动光标位置的情况下导航文件。它是基于折叠你的位置和目标位置之间的线,然后跳过折叠,或者中止它,根本不移动。
当您处于插件模式时,只需单击j、k或l,就可以轻松地在第一行、最后一行和中间的光标之间快速切换。
我想它会很适合这里。
其他回答
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
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
这样光标就会停留在屏幕中间,屏幕就会上下移动。
输入vim并输入:
:帮助z
Z是用于重绘的vim命令,因此它将相对于您定位光标的位置重绘文件。您的选项如下:
z+ -将光标放在窗口顶部,并在行中第一个非空字符处重绘文件。
z——用光标在窗口底部重绘文件,并以行中第一个非空字符为单位。
z. -将光标置于窗口的中心,并以您行的第一个非空白字符重绘文件。
zt -用光标在窗口顶部重绘文件。
zb -用光标在窗口底部重绘文件。
zz -重新绘制文件,光标位于窗口的中心。