Vim 什么构成';单词';在维姆?

Vim 什么构成';单词';在维姆?,vim,lexical-analysis,Vim,Lexical Analysis,假设我们在vim atm中有以下内容: int main () { printf("hello"); return 0; } 在vim中,w向右移动一个单词,但“单词”的确切构成是什么 例如,如果我将光标放在printf的p上,按w将u带到(并按另一个w将跳过“,并将光标放在hello的h上。为什么跳过” 现在,按另一个w键将转到)之前的另一个“,然后按另一个w键将转到下一行。为什么跳过)和; 现在光标位于return的r上。按a w键将光标移到0上,按另一个w键将光标移到;

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

int main () {
    printf("hello");
    return 0;
}
在vim中,w向右移动一个单词,但“单词”的确切构成是什么


例如,如果我将光标放在
printf
的p上,按w将u带到
并按另一个w将跳过
,并将光标放在
hello
h
上。为什么跳过

现在,按另一个w键将转到
之前的另一个
,然后按另一个
w键将转到下一行。为什么跳过

现在光标位于
return
r
上。按a w键将光标移到
0
上,按另一个w键将光标移到
上。因此,在这种情况下,
不像前一行那样被跳过。这是为什么



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

来自
:help word

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

如果您使用大写字母W:

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

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


编辑:
virtualedit
的设置也会影响这一点:您必须将其取消设置,因为
w
正在跳过行末标点符号(在行末添加一些空格以查看差异)。如果您设置了
virtualedit=onemore
,光标将能够停在行尾之外的一个空格处,行尾标点符号将永远不会被跳过。

来自
:help word

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

如果您使用大写字母W:

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

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

编辑:
virtualedit
的设置也会影响这一点:您必须将其取消设置,因为
w
正在跳过行末标点符号(在行末添加一些空格以查看差异)。如果您设置了
virtualedit=onemore
,光标将能够停在行尾之外的一个空格处,行尾标点符号将永远不会被跳过。

在vim中,键入

:help word-motions
您将获得所需的所有解释。

从vim中输入

:help word-motions
你会得到你想要的所有解释