我最近发现了 Vim 的 Ctrl+E 和 Ctrl+Y 快捷键,它们分别以一行的步长上下移动屏幕,而不移动光标。
您是否知道任何将光标留在原处但移动屏幕以使具有光标的行成为第一行的命令? (在最后一行有一个命令将是一个不错的奖励)。
我可以通过手动按适当次数的 Ctrl+E(或 Ctrl+Y)来实现这一点,但是有一个以某种方式直接执行此操作的命令会很好。
有任何想法吗?
zz - 将当前行移动到屏幕中间(小心 zz,如果你不小心打开了 Caps Lock,你将保存并退出 vim!)
zt - 将当前行移动到屏幕顶部
zb - 将当前行移动到屏幕底部
此外:
Ctrl-y 将屏幕上移一行
Ctrl-e 屏幕下移一行
Ctrl-u 将光标和屏幕向上移动 ½ 页
Ctrl-d 将光标和屏幕向下移动 ½ 页
Ctrl-b 将屏幕上移一页,光标到最后一行
Ctrl-f 屏幕下移一页,光标到第一行
Ctrl-y 和 Ctrl-e 仅在光标移出屏幕时更改光标位置。
由 www.lagmonster.org/docs/vi2.html 提供
:help CTRL-E
说Mnemonic: Extra lines.
Ctrl-b
: back Ctrl-f
: forward Ctrl-u
: up Ctrl-d
: down Ctrl-y
和 Ctrl-e
有点绝望,但它们在 u 'up' 和 d 'down' 旁边所以这几乎是最接近的?
Vim 要求光标始终在当前屏幕上,但是,您可以将当前位置标记为书签,然后滚动然后返回到您所在的位置。
mg # This book marks the current position as g (this can be any letter)
<scroll around>
`g # return to g
Ctrl-O
代表另一个非常棒的,“反引号,句号”让您回到上次编辑的位置。
mg
标记位置,滚动,用 'g
转到标记就完成了。现在您可以调用可配置的键来四处走动,感觉就像光标从未离开过当前位置。瞧!
我很惊讶没有人使用将光标保持在页面中间的 Scrolloff
选项。试试看:
:set so=999
这是 Vim wiki 上第一个推荐的方法并且效果很好。
:set scrolloff=4
将要求光标始终距离窗口顶部或底部至少 4 行,因此您始终至少有一点上下文。
这是我在 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
使光标停留在屏幕中间,屏幕上下移动。
我过去使用过这些快捷键(注意:单独的击键,即点击 z,放手,点击后续键):
zt ...或... z enter --> 将当前行移动到屏幕顶部
zz ...或... z 。 --> 将当前行移动到屏幕中心
zb ...或... z - --> 将当前行移至底部
如果不明显:
enter 表示 Return 或 Enter 键。
. 表示 DOT 或“句号”键 (.
)。
- 表示连字符键 (-
)
对于它的价值,z。如果大写锁定打开,则通过意外键入 ZZ 来避免保存和关闭 Vi 的危险。
更多信息::help scroll-cursor
z
然后 t
对我的小树桩来说有点牵强🤸♂️
使用 Ctrl+D、Ctrl+F、Ctrl+B、Ctrl+U、G、H、M、L、gg 时将光标留在同一列
您应该定义以下选项:
:set nostartofline
我的滚动记忆...
添加到其他答案还要注意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
以及(使用 qwertz 键盘)c-e
和 c-y
的位置(“y”也以某种方式指向底部)记住屏幕移动的位置。
您可以在光标移动命令前加上一个数字,这将多次重复该命令
10Ctrl+E 将执行 Ctrl+E 10 次而不是 1 次。
输入 vim 并键入:
:help z
z 是用于重绘的 vim 命令,因此它将相对于您放置光标的位置重绘文件。您拥有的选项如下:
z+ - 用光标在窗口顶部重绘文件,并且在你的行的第一个非空白字符处。
z- - 用光标在窗口底部重绘文件,并且在您的行的第一个非空白字符处。
z。 - 用光标在窗口中心重绘文件,并在您的行的第一个非空白字符。
zt - 用光标在窗口顶部重绘文件。
zb - 用光标在窗口底部重绘文件。
zz - 用光标在窗口中心重绘文件。
zEnter 正是这个问题所要求的。
它可以在奇怪的 zz 不起作用的地方工作(Ubuntu 2016.04 LTS 上的 vim 7.4.1689,没有特殊的 .vimrc)
您可能会发现“Scrolling Vim relative to cursor, custom mapping”的答案很有用。
您可以使用该问题中的 ScrollToPercent(0)
来执行此操作。
我写了一个 plugin,它使我能够在不移动光标位置的情况下导航文件。它基于折叠您的位置和目标位置之间的线,然后跳过折叠,或者中止它并且根本不移动。
在插件模式下,只需单击 j、k 或 l,即可轻松在第一行光标、最后一行光标和中间光标之间快速切换。
我想这里会很合适。
不定期副业成功案例分享
xdotool
或triggerhappy
。最后,显示你的大写锁定状态(不能在 Vimscript 中完成。)...xev -q
、cat /proc/bus/input/devices
来查找要查询的设备,evtest
或thd ... --dump /dev/input/event<#>
来检查状态等。如果您绝对必须进行系统范围的重新映射,请在至少交换两个锁,如 caps <--> num - 但问题更多的是忘记它已经开启,因为如果你以前想要它,你会继续使用它,无论是什么地图。在文件/用户/系统之前破坏 Vim 的风险。z.
而不是zz
,以防你碰巧有大写锁定,zz
不会那么友好。