Vim移动命令(1)基本移动命令 讲解了基本的移动命令,对于左右的移动,使用h, l来进行移动,但是它的粒度太细了,一次只能移动一个字符位置。
Vim提供了基于单词/字串的移动命令,能让我们在一行中,每次移动一个单词/字串。
单词和字串的定义
首先我们得知道什么是单词(Vim中用word表示),什么是字串(Vim中用WORD表示)。
单词的定义有两种方式,如下
- 由字母,数字和下划线组成的字符序列,例如
66hello
就是一个单词。 - 如果没有字母,数字或下划线,仅通过非空白字符组成的字符序列,也是一个单词。例如
,./
是一个单词。
字串的定义比较简单,只要是非空白字符组成的字符序列,都是字串 。从这个定义看,单词是字串的一个子集。例如I'm David
中,I'm
就是一个字串。
基于单词/字串的移动命令
移动命令 | 说明 |
---|---|
w | 移动到下一个单词的开头 |
W | 移动到下一个字串的开头 |
e | 移动到当前单词的末尾,或者下一个单词的末尾 |
E | 移动到当前字串的末尾,或者下一个字串的末尾 |
b | 移动到当前单词的开头,或者前一个单词的开头 |
B | 移动到当前字串的开头,或者前一个字串的开头 |
ge | 移动到上一个单词的结尾 |
gE | 移动到上一个字串 的结尾 |
这个比较好记忆,小写字母代表单词的移动,大小字母代表字串的移动。在实际中操作几下就很容易记住了。
范围边界问题
移动命令在Vim都都有一个inclusive
/exclusive
的概念,这是很多新手非常疑惑的一个问题,看下下面的一个例子。
命令 | 文本 |
---|---|
My name is Frank Chow! | |
dw | My name is Chow! |
黄色背景表示光标所在的位置,初始时,光标在Frank的首字母上,通过dw命令,删除了Frank以及后面一个空格,最后光标位于Chow的首字母上。
w的范围是从当前光标到下一个单词的开关,但是使用dw
删除时,并没有删除Chow的首字母。 因为w是exclusive
的命令,也就是说范围的右侧为开区间。
如果光标位于单词的首字符上,而使用de
可以完整删除一个单词,这表明e命令是inclusive
的,也就是说范围右侧为区间。
那么移动命令到底是开区间还是闭区间,这个可以在Vim中通过:h motion.txt
查询文档,然后在实际中熟能生巧。