微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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)

请添加图片描述

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐