目录
Vim 光标移动命令,包括移动 vim 光标到行首、行跳转、vim 匹配单词和匹配括号跳转,Vim 翻页命令等。
Vim光标移动简介
Vi/Vim中进行光标移动的命令是针对不同的操作单位而设计;不同的命令对应不同的操作单位。
在执行Vim光标移动命令时,首先要分清楚是采用哪种操作单位:一个字符、一个句子、一个段落、一行、一屏、一页。
确定操作单位后,需要确定命令重复执行的次数。
Vim 光标移动命令的操作对象范围计算公式为:操作范围 = 操作次数 x 操作单位
例如:5h 命令表示左移 5 个字符,8w 命令右移 8 个单词。
Vim移动光标命令
上、下、左、右移动
^
k
<h l>
j
v
Vim的上下左右移动光标命令是经过精心设计的,我们在使用编辑器时最常用的操作是下移光标。
而键盘上的 j、k 按键使用最方便,所以分别用来作为下移、上移光标。
h、l 分别位于 j、k 的两侧,根据其所在方位用来实现光标的左移和右移。
行级移动
0 移动光标到当前行行首
$ 移动光标到当前行行尾
^ 移动光标到当前行的第一个非空字符
nG 移动光标到当前文件的第n行
:n 移动光标到当前文件的第n行 (同上)
文件首尾移动
gg 或 :0 移动光标到当前文件的第一行
GG 或 :$ 移动光标到当前未经的最后一行
单词级移动
w 或 W 移动到下一单词的开头(word)
b 或 B 移动到上一单词的开头
e 或 E 移动到光标所在单词的末尾(end of word)
W、B、E命令操作的单词是以空白字符(空格、Tab)分隔的字串。
比如字符串“str1-str2 str3-str4”,对W、B、E命令来说是两个单词,而对w、b、e命令来说则是四个单词。
匹配单词级移动
* 移动光标到匹配光标当前所在单词的下一个单词
# 移动光标到匹配光标当前所在单词的上一个单词
匹配括号移动
% 移动光标到括号另外半部分
括号包括()、{}、[]
屏幕级移动
H 移动光标到屏幕的第一行
M 移动光标到屏幕的中间一行
L 移动光标到屏幕的最后一行
段落级移动
} 移动光标到当前段落的末尾
{ 移到光标到当前段落的开头
翻页
Ctrl + f 向前滚动一页
Ctrl + b 向后滚动一页
Ctrl + u 向前滚动半页
Ctrl + d 向后滚动半页
屏幕行和实际行
与许多文本编辑器不同,Vim 会区分实际行与屏幕行。当 Vim 的 wrap 设置被启用时(缺省启用),每个超出窗口宽度的文本行都会被回绕显示(自动换行),来保证所有文本都能在当前窗口中完整展示出来。
因此,文件中的一行可能会被显示为屏幕上的若干行,从而出现了Vim 实际行与屏幕行的差异。
光标移动实际行与屏幕行
当 Vim 启用 number 选项设置成显示行号后,以行号开头的行对应一个实际行,它们会占据着屏幕上的一行或几行;若某一行文本为适应窗口宽度而回绕时,回绕行的前面则不会显示行号。
Vim普通模式下使用 j 和 k 命令可向下及向上移动光标,注意:这里提到的行移动是指实际行。
而如果需要按屏幕行向下、向上移动光标,则需要分别使用Vim命令 gj 和 gk。
对于移动光标到行首、行尾等操作,Vim 也提供了对应以屏幕行为对象的命令。下表对操作实际行和屏幕行的命令进行了总结。
命令 光标动作
j 向下移动一个实际行
gj 向下移动一个屏幕行
k 向上移动一个实际行
gk 向上移动一个屏幕行
0 移动到实际行的行首
g0 移动到屏幕行的行首
^ 移动到实际行的第一个非空白字符
g^ 移动到屏幕行的第一个非空白字符
$ 移动到实际行的行尾
g$ 移动到屏幕行的行尾
自定义映射面向行的动作命令
如果想让 j 及 k 命令操作屏幕行而不是实际行,可以通过Vim按键映射修改默认的 j、k的功能。
把以下按键配置配置项加到 ~/.vimrc 文件中即可实现自定义面向屏幕行的动作命令。
nnoremap k gk
nnoremap gk k
nnoremap j gj
nnoremap gj j
注:上述映射项使 j 和 k 基于屏幕行向下或向上移动,而 gj 和 gk 则基于实际行向下和向上移动,与 Vim 的缺省设置刚好相反。
光标移动和其他命令联动
很多命令都可以和Vim教程网总结的vim光标移动命令连动。
基本命令模式为:<start_position><command><end_position>。
例如,Vim 命令 0y$ 拆开分别表示:0 移动光标到当前行首;y 复制;$ 当前行尾。所以,命令 0y$ 意味着复制光标当前所在行所有内容。
例如,Vim 命令 ye,表示从当前位置拷贝到当前所在单词的最后一个字符。
参考
光标移动汇总:
https://vimjc.com/vim-cursor.html
光标移动之实际行和屏幕行:
https://vimjc.com/vim-line-downward.html