在vim中构成“单词”的是什么?

时间:2009-12-11 14:13:28

标签: vim lexical-analysis

假设我们在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。这是为什么?


我希望我的问题足够清楚,但我只想了解这一切是如何运作的。

2 个答案:

答案 0 :(得分:9)

来自:help word

  

单词由一系列字母,数字和下划线组成,或者a   其他非空白字符的序列,用空格分隔(空格,   标签,)。可以使用'iskeyword'选项更改此设置。空行   也被认为是一个词。

如果您使用资本W代替:

  

WORD由一系列非空白字符组成,用白色分隔   空间。空行也被认为是WORD。

在您的示例中,w也将任何非关键字字母序列视为单词。

编辑:virtualedit的设置也会对此产生影响:您必须取消设置,因为w会跳过行终点标点符号(在行尾添加一些空格以查看区别)。如果设置virtualedit=onemore,光标将能够停止超出行尾的一个空格,并且不会跳过行最终标点符号。

答案 1 :(得分:2)

从vim中输入

:help word-motions

您将获得所寻求的所有解释。