vim - vim 中的 'word' 是什么?

标签 vim lexical-analysis

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

int main () {
    printf("hello");
    return 0;
}

在 vim 中,w 将单词向右移动,但究竟什么是“单词”?


例如,如果我将光标放在 printfp 上,按 w 会将您带到 (然后按另一个 w 跳过 " 并将光标放在 helloh 上。为什么 >" 跳过了吗?

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

现在光标在 returnr 上。按 w 会将光标置于 0 上,而按另一个 w 现在会将光标置于 ; 上。所以在这种情况下,; 没有像上一行那样被跳过。这是为什么?


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

最佳答案

来自 :help word:

A word consists of a sequence of letters, digits and underscores, or a sequence of other non-blank characters, separated with white space (spaces, tabs, ). This can be changed with the 'iskeyword' option. An empty line is also considered to be a word.

如果您改用大写字母 W:

A WORD consists of a sequence of non-blank characters, separated with white space. An empty line is also considered to be a WORD.

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

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

关于vim - vim 中的 'word' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888321/

相关文章:

vim - Vim-在自动命令上定义缓冲区变量

vim - Vim 中的中欧字符并打印(PDF)它们

python - 匹配多个正则表达式组并删除它们

c - 为什么 Flex 程序会永远等待并且不打印任何内容?

html - 是否可以使用 HTML 通过电子邮件发送 vim 的内容

ruby - 在 vim/macvim 中更改 $PATH 以便找到正确的 ruby​​ 二进制文件

python - 如何在 Vim 中为 Python 代码切换注释和取消注释

java - 与 StringTokenizer 及同类产品相比,使用 ANTLR、JavaCC 或 JFlex 有何优点/缺点?

ruby - 加快我的词法分析算法

lex - 如果由于 REJECT 而 Lex 程序中不存在匹配规则怎么办?