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

And*_*ech 1 vim lexical-analysis

假设我们在vim atm中有以下内容:

int main () {
    printf("hello");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在vim中,w向右移动一个单词,但究竟什么构成了一个"单词"?


举例来说,如果我有光标pprintf,迫切w需要u到(和按另一个w跳过",并把光标放在hhello.为什么"跳过了?

按下另一个w现在将您带到另一个"之前,)然后按另一个w带您到下一行.为什么在);跳过?

而现在的光标在rreturn.按a w使光标打开0,按另一个w现在光标在;.所以在这种情况下,;与前一行不同,没有跳过.为什么是这样?


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

Mic*_*unn 9

来自:help word:

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

如果你使用资本W代替:

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

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

编辑:设置virtualedit也将影响这个:你必须让它取消设置,因为跳过行终点标点符号w(在行的末尾添加一些空格以查看差异).如果设置virtualedit=onemore光标将能够停止超出行尾的一个空格,并且不会跳过行最终标点符号.