And*_*ech 1 vim lexical-analysis
假设我们在vim atm中有以下内容:
int main () {
printf("hello");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在vim中,w向右移动一个单词,但究竟什么构成了一个"单词"?
举例来说,如果我有光标p的printf
,迫切w需要u到(
和按另一个w跳过"
,并把光标放在h
的hello
.为什么"
跳过了?
按下另一个w现在将您带到另一个"
之前,)
然后按另一个w
带您到下一行.为什么在)
和;
跳过?
而现在的光标在r
的return
.按a w使光标打开0
,按另一个w现在光标在;
.所以在这种情况下,;
与前一行不同,没有跳过.为什么是这样?
我希望我的问题足够清楚,但我只想了解这一切是如何运作的.
来自:help word
:
单词由一系列字母,数字和下划线或一系列其他非空白字符组成,用空格(空格,制表符)分隔.可以使用'iskeyword'选项更改此设置.空行也被认为是一个单词.
如果你使用资本W代替:
WORD由一系列非空白字符组成,用空格分隔.空行也被认为是WORD.
在您的示例中,w
将任何非关键字字母序列视为单词.
编辑:设置virtualedit
也将影响这个:你必须让它取消设置,因为跳过行终点标点符号w
(在行的末尾添加一些空格以查看差异).如果设置virtualedit=onemore
光标将能够停止超出行尾的一个空格,并且不会跳过行最终标点符号.