假设我们在vim atm中有以下内容:
int main () {
printf("hello");
return 0;
}
在vim中, w 向右移动一个单词,但究竟是什么构成了一个'单词'?
例如,如果我将光标放在printf
的 p 上,按 w 将您带到(
并按另一个 w 跳过"
并将光标放在h
的{{1}}上。为什么跳过hello
?
按下另一个 w 现在转到"
之前的另一个"
,然后按另一个)
将您带到下一行。为什么跳过w
和)
?
现在光标位于;
的{{1}}上。按 w 将光标移到r
上并按另一个 w 现在将光标移到return
上。因此,在这种情况下,与前一行不同,未跳过0
。这是为什么?
我希望我的问题足够清楚,但我只想了解这一切是如何运作的。
答案 0 :(得分:9)
来自:help word
:
单词由一系列字母,数字和下划线组成,或者a 其他非空白字符的序列,用空格分隔(空格, 标签,)。可以使用'iskeyword'选项更改此设置。空行 也被认为是一个词。
如果您使用资本W代替:
WORD由一系列非空白字符组成,用白色分隔 空间。空行也被认为是WORD。
在您的示例中,w
也将任何非关键字字母序列视为单词。
编辑:virtualedit
的设置也会对此产生影响:您必须取消设置,因为w
会跳过行终点标点符号(在行尾添加一些空格以查看区别)。如果设置virtualedit=onemore
,光标将能够停止超出行尾的一个空格,并且不会跳过行最终标点符号。
答案 1 :(得分:2)
从vim中输入
:help word-motions
您将获得所寻求的所有解释。