验证过的:
Vim 行首和行尾:行首-Shift+6 或0(数字0)或 I(大写I),行尾-A(大写A),数字1然后Shift+6,跳到当前行的行尾,数字n然后Shift+6跳到第n行的行尾(从当前行的开始数)
未验证的:
vim在同一行内跳转是操作最多的,而且vim提供了足够强大的跳转方法, 主要分为两类:一种是在单词的移动,一种是基于搜索的跳转。
按单词移动
我们知道,英文文档的主体是单词,通常用空白字符(包括空格、制表符和回车换行符)来分隔单词。vim中提供了许多命令来按单词移动。
w 将光标右移一个字。光标停留在下一个字的字首位置。
W 将光标右移一个字。光标停留在下一个字的字首位置(即使两个字之间存在标点符号)。
b 将光标左移一个字。光标停留在下一个字的字首位置。
B 将光标左移一个字。光标停留在下一个字的字首位置(即使两个字之间存在标点符号)。
e 把光标移至当前所在字(或下一个字)的最后一个字符位置。
E 同上,只是以空格字符作为字的分隔符。
^ 把光标移至当前行的起始位置,也即当前行的第一个非空白字符位置
0(零)把光标移至当前行的起始位置,第一个非空白字符之前,简单点说就是^ 的前面
$ 把光标移至当前行的行尾,也即当前行的最后一个字符位置。
n| 光标移动到第n列。
要根据单词来移动,首先要把文本分隔为一个个独立的单词。vim在对单词进行分隔时,会把iskeyword选项中的字符做为单词的组成字符。也就是说,一个单词(word)由iskeyword选项中定义的字符构成,它前面、后面的字符不在iskeyword选项定义的字符中。例如,如果我们把iskeyword选项设置为a-z,A-Z,48-57,,那么”FooBar_123“被做为一个单词,而”FooBar-123“被做为三个单词:”FooBar“, “-“和”123“。”a-z,A-Z,48-57,“中的48-57表示ASCII码表中的数字0-9,更多的关于iskeyword内容可以阅读:《vim技巧: iskeyword 与 单词间移动光标的设置》
vim中,移动光标到下一个单词的词首,使用命令w,移动光标到上一个单词的词首,使用命令b;移动光标到下一个单词的结尾,用命令e,移动光标到上一个单词的结尾,使用命令ge。
上面这些命令都使用’iskeyword‘选项中的字符来确定单词的分界,还有几个命令,只把空白字符当做”单词“的分界。当然,这里说的”单词“已经不是传统意义上的单词了,而是由非空白字符构成一串字串。命令”W“移动光标到下个字串的开始,命令”B“移动到上个字串的开始;命令”E“移动到下个字串的结尾,命令”gE“移动到上个字串的结尾。和上面的命令比较一下,发现什么规律没有?
移动到指定字符
如果我们想在当前行内快速移动到指定字符 ,可以使用f, t, F, T命令。
f 命令移动到光标右边的指定字符上,例如,”fx“,会把移动到光标右边的第一个’x’字符上。
F 命令则反方向查找,也就是移动到光标左边的指定字符上。
t 命令和”f“命令的区别在于,它移动到光标右边的指定字符之前。例如,”tx“会移动到光标右边第一个’x’字符的前面。
T 命令是”t“命令的反向版本,它移动到光标右边的指定字符之后。
这四个命令只在当前行中移动光标,光标不会跨越回车换行符。
可以在命令前面使用数字,表示倍数。例如,”3fx“表示移动到光标右边的第3个’x’字符上。
; 命令重复前一次输入的f, t, F, T命令,
, 命令会反方向重复前一次输入的f, t, F, T命令。
这两个命令前也可以使用数字来表示倍数。