目录

  • ​​Vim光标移动简介​​
  • ​​Vim移动光标命令​​
  • ​​上、下、左、右移动​​
  • ​​行级移动​​
  • ​​文件首尾移动​​
  • ​​单词级移动​​
  • ​​匹配单词级移动​​
  • ​​匹配括号移动​​
  • ​​屏幕级移动​​
  • ​​段落级移动​​
  • ​​翻页​​
  • ​​屏幕行和实际行​​
  • ​​光标移动实际行与屏幕行​​
  • ​​自定义映射面向行的动作命令​​
  • ​​光标移动和其他命令联动​​
  • ​​参考​​


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)

vim学习三之光标移动汇总_自定义


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