vim 和普通的文本编辑器不一样,不能用鼠标拖动,需要用快捷键操作,控制光标所在位置。
1、行内移动
h/l:前/后移一个字符。b/w:前/后移到一个单词的开头处(以特殊字符包括空格为分界线)。B/W:前/后移连续大单词的开头处(以空格字符为分界线)。ge/e:前/后移到一个单词的结尾处(单词定义类似于b/w)。gE/E:前/后移到一个单词的结尾处(单词定义类似于B/W)。0或|/^/$:移动到一行的最开始/第一个非空白字符/结尾。- 上述几乎所有快捷键前面都可以添加数字,比如
4h前移 4 个字母,2|移动到该行起始第 2 个字母位置。但3^的 3 无效,而3$是后面第三行的行尾。
2、行间移动
可以通过Ctrl+O/Ctrl+I在历史位置里往前/往后快速跳转。如果文件已经关闭,将自动打开对应文件。:jumps可以查看具体的历史记录。
k/l:上移/下移一行。3k/3l:上移/下移指定行数( 3 行)。:123/123gg/123G:跳转到指定的行数(第 123 行)。gg/G:跳转到文档最开头/结尾。%:跳转到匹配的括号(包括大小括号、中括号、花括号)。75%:跳转到文档的 75%处。H/M/L:光标快速跳转到屏幕 上部/中部/下部 位置,屏幕显示的内容不变。zt/zz/zb:光标在文档里的位置不变,但在屏幕上的位置移动到 上部/中部/下部。PgUp/PgDn:屏幕显示内容上下翻页,光标会移动到屏幕的 上部 / 下部。Space(空格):屏幕显示内容往下翻页,光标移动到屏幕的中部。
3、标记跳转
ma:标记位置a,小写字母。本文件内有效,多个文件可以有同样的标记名。mA:标记位置A,全局有效。全局有效,多个文件会互相覆盖,且可以在多个文件之间跳转。`a/`A:跳转到之前标记的位置a。"a:跳转到标记位置a的行的第一个非空白字符上。一般不常用。
:marks可以查看所有的标记位置,也包括下面的特殊标记。
3.1、特殊标记
vim 内置了一些自动标记,灵活应用可以在文档内快速跳转。
.:上一次修改的地方。^:上一次编辑模式退出(但不一定修改了)的地方。0:最近编辑位置。该位置是上次 vim 退出前的最后编辑位置。1到9:历史位置(全局),数字大的表示更近的。"(双引号):上次退出 Vim 时的本文件的光标位置。`(反引号):上次跳转位置。重复按可以在上次位置和当前位置之间不断切换,类似于间隔按Ctrl+O和Ctrl+I。[/]:上一次编辑或复制的起始/结束位置。(但部分配置可能屏蔽了`[和`])
还有一些特殊标记不光可用于跳转,还有其它特殊功能:
m<和m>标记一个区域起始结束位置,标记后gv即可按照这两个位置快速选中区域,以便后续操作。 选中区域也会更新该特殊标记。
4、段落移动
{/}:快速移动到当前段落的开始和结束的空行位置(段落是指一段连续的非空行)。[[/]]:快速在单个函数/类之间跳动。只考虑最外层的级别,不会在类里的多个函数之间跳动。[{/]}:在匹配的大括号{和}之间跳转。多次按[{,会不断往前跳到上一层的{。]}类似。[(/]):和上面类似,只是匹配(和)。
5、查找跳转
fx/Fx:向后/前查找指定的字母x。然后,和;可以正向/反向重复查找。但注意该查找不跨行。tx/Tx:和上面的类似,只是光标会停留在搜索到的字符之前。/ss:快速查找指定的字符串xx,支持正则表达式。可以用n/N正向/反向重复查找和跳转。gd:在当前函数块查找当前单词的定义处。不会考虑语意,所以可能和实际情况不符。gD:在当前文件查找当前单词的定义处(第一次出现的地方)。
Q. E. D.