Vim有单词(word)和字串(WORD)两种概念。word是指由iskeyword选项定义的字符串;而WORD则是指用空白符分隔的字符串。可以使用:help word
和:help WORD
命令,查看更多帮助信息。
在word间移动
[count]b | 向后移动count个words |
[count]e | 向前移动count个words,并且将光标置于word的末尾. |
[count]ge | 向后移动count个words,并且将光标置于WORD的末尾. |
[count]w | 向前移动count个words. |
按照通常的定义,单词是一系列字母的组合。然而在C程序中,则认为字母、数字和下划线来组成一个单词,比如size56就会被认为是一个单词。但是在LISP程序中,可以在变量名中使用-,这时会认为total-size是一个单词,而在C程序中这却会被认为是两个单词。那么如何来解决这些定义的差异呢?Vim的解决方案是,使用以下选项来定义哪些是一个单词的,而哪些又不是。
:set iskeyword=specification
查看当前选项,可以使用下面的命令:
:set iskeyword?
命令会返回一组用逗号分隔的值(以下是在Windows下的默认值):
iskeyword=@,48-57,_,192_255
如果我们想要单词中的字母是专一的元音,可以使用以下命令:
:set iskeyword=a,e,i,o,u
我们还可以使用横线来指定字母的范围。如果要指定所有的小写字母,可以用下面的命令:
:set iskeyword=a-z
对于那些不能直接指定的字符,可以使用十进制的数字来表示。如果我们要指定小写字母和下划线为一个单词,可以使用下面的命令:
:set iskeyword=a-z,45
排除某一个字符,可以在这个字符前加上一个前缀^。例如我们可以定义一个单词由除了q以外的小写字符组成:
:set iskeyword=@,^q
iskeyword(命令iskeyword可以简记为isk)选项使用以下特殊字符:
a | 字符a |
a-z | 所有由a到z的字符 |
@ | 由函数isalpha()所定义的所有字符 |
@-@ | 字符@ |
^x | 除了x以外的字符 |
^a-c | 除了a到c以外的字符 |
可以使用:help iskeyword
命令,查看更多帮助信息。
在WORD间移动
[count]B | 向后移动count个WORDS |
[count]E | 向前移动count个WORDS,并且将光标置于WORD的末尾. |
[count]gE | 向后移动count个WORDS,并且将光标置于WORD的末尾. |
[count]W | 向前移动count个WORDS. |
可以使用:help word-motions
命令,查看在词间移动的更多帮助信息。
w | 向前移动一个word |
e | |
b | 向后移动一个word |
set iskeyword | 定义word选项 |
W | 向前移动一个WORD |
E | |
B | 向后移动一个WORD |