我最近发现了 Vim 的快捷键 Ctrl+E 和 Ctrl+Y 可以分别将屏幕上下移动一行,而不会移动光标。
你知道有什么命令可以让光标保持原位,但是将屏幕移动到光标所在的那一行并作为第一行吗?(如果有命令能将屏幕移动到最后一行那就更好了)
我可以通过手动按适当次数的 Ctrl+E(或者 Ctrl+Y)来实现此功能,但希望有一个可以直接完成此操作的命令。
有什么建议吗?
我最近发现了 Vim 的快捷键 Ctrl+E 和 Ctrl+Y 可以分别将屏幕上下移动一行,而不会移动光标。
你知道有什么命令可以让光标保持原位,但是将屏幕移动到光标所在的那一行并作为第一行吗?(如果有命令能将屏幕移动到最后一行那就更好了)
我可以通过手动按适当次数的 Ctrl+E(或者 Ctrl+Y)来实现此功能,但希望有一个可以直接完成此操作的命令。
有什么建议吗?
另外:
Ctrl-y 和 Ctrl-e 只有在需要移动时才会改变光标位置。
:help CTRL-E
says Mnemonic: Extra lines.
- Niko Belliczt
+ 3Ctrl+y
的组合键,这样当前行就会在屏幕顶部,但我仍然可以看到我正在编写的代码的上方范围的一部分。 - aviggianoVim要求光标始终在当前屏幕内,但您可以将当前位置设置为书签,滚动屏幕,然后返回到原来的位置。
mg # This book marks the current position as g (this can be any letter)
<scroll around>
`g # return to g
mg
标记位置,滚动一下,用'g
跳转到标记处),然后就完成了。现在你可以调用可配置的键来移动光标,感觉就像光标从未离开当前位置一样。大功告成! - DrBeco:set scrolloff=4
将要求光标始终距离窗口顶部或底部至少 4 行,这样您就始终能获得一些上下文信息。 - Soren Bjornstad我曾经使用过以下快捷键(注意:分别按下每个键):
z t 或 z enter --> 将当前行移动到屏幕顶部
z z 或 z . --> 将当前行移动到屏幕中央
z b 或 z - --> 将当前行移动到屏幕底部
如果不明确:
enter 意思是回车或者 Enter 键。
. 意思是点号或者“句号”键 (.
)。
- 意思是连字符键 (-
)。
值得一提的是,使用 z. 可以避免在大写锁定开启时意外输入 ZZ 导致保存并关闭 Vi 的风险。
更多信息请参考::help scroll-cursor
z
到 t
有点太过勉强了 ♂️。 - ipatch这是我的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
使光标保持在屏幕中央,而屏幕会上下移动。
我用来滚屏的口诀是...
除了其他答案中提到的,还要注意 ze
和 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 |
+-------------------------------+
还要看一下键盘上 h
、l
、t
和 b
的位置(在德语键盘上还有 c-e
和 c-y
,并且 "y" 键某种方式指向底部),记住屏幕移动时它们的位置。
如果你想在使用Ctrl+D、Ctrl+F、Ctrl+B、Ctrl+U、G、H、M、L、gg时光标停留在同一列,请定义以下选项:
:set nostartofline
打开vim并输入以下命令:
:help z
z是vim中的重绘命令,它会根据光标所在位置重新绘制文件。你有以下几个选项:
z+ - 将光标放置于窗口的顶部,并定位到行的第一个非空字符。
z- - 将光标放置于窗口的底部,并定位到行的第一个非空字符。
z. - 将光标放置于窗口的中央,并定位到行的第一个非空字符。
zt - 将光标放置于窗口的顶部。
zb - 将光标放置于窗口的底部。
zz - 将光标放置于窗口的中央。
您可以在光标移动命令前面加上一个数字,这将重复执行该命令的次数
10Ctrl+E会执行10次Ctrl+E,而不是一次。
xev -q
、cat /proc/bus/input/devices
查找要查询的设备,以及evtest
或thd ... --dump /dev/input/event<#>
来检查状态等。如果你绝对必须进行系统范围的重新映射,至少交换两个锁定键,如Caps <--> Num - 但问题更多的是忘记它是否打开,因为如果你之前需要它,你会继续使用它,无论使用什么映射。风险在于破坏文件/用户/系统之前的Vim。 - John Pconfirm()
的 BufWritePre 自动命令。此外,您可以将大写锁定键映射到 Vim 理解但未映射的键或组合键,然后在插入/替换模式下手动或通过 https://github.com/tpope/vim-capslock 等工具专门模拟大写锁定。您可能不需要在 Vim 之外使用它,但如果需要,请编写 xmodmap 脚本以恢复更改,或查看程序是否支持自己的映射(并做好记录)。 - John Pz.
而不是zz
,因为在这种情况下,zz
会显得不太友好。 - Anthony Awuley