【问题标题】:Vim: word vs WORDVim:单词与单词
【发布时间】:2014-05-20 19:04:31
【问题描述】:

我正在学习 Vim,无法理解 wordWORD 之间的区别。

我从 Vim 手册中得到以下内容。

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

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

我觉得wordWORD 是一回事。它们都是一系列用空格分隔的非空白字符。空行可以同时视为wordWORD

问题:
它们之间有什么区别?
为什么/什么时候有人会使用WORD 而不是word

我已经完成了 Google 和 SO 搜索,但他们的搜索引擎将 WORD 解释为 word,所以就像我在搜索 Vim word vs word 一样,当然找不到任何有用的东西。

【问题讨论】:

  • :h 03.1 对此进行了解释甚至说明。请查看用户手册。
  • @Al.G.很高兴知道。谢谢!
  • 英文“or”有歧义。他们的意思是:一个单词由一系列(字母或数字或下划线)、XOR(其他非空白字符的序列)组成,用空格(空格、制表符、)分隔。我>
  • @user1433150 这很有帮助,谢谢。但即使有了这样的澄清,仍然有一些令人困惑的地方。他们说:“或一系列其他非空白字符,用空格(空格、制表符、)分隔”,但如果这是真的,那么它只是意味着 any 单词。所以在我看来,他们说“它是一个较小的集合 XOR 一切”。对吗?

标签: vim


【解决方案1】:

为了补充前面的答案……我把它想象成这样; WORD大于单词,它包含更多...

【讨论】:

  • 哇,一张图讲一千个字! (或者是一千个字……)
【解决方案2】:

这是理解“单词”定义时的语法问题。

我一开始在这个定义的中文版中卡住了(可能是误译)。


定义绝对正确,但应该这样读:

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, <EOL>).

只有在分隔两个相同类型的“单词”时才需要空格字符


括号中的更多示例如下:

(example^&$%^Example) 三个“单词”:(example), (^&$%^) and (Example)

(^&^&^^ &&^&^) 两个“字”:(^&^&^ ^) 和 (&&^&^)

(我们在stackoverflow中)五个“单词”:(we),('),(re),(in)和(stackoverflow)

【讨论】:

    【解决方案3】:

    换一种说法。如果您的编码,并且想要通过在分隔符处停止的行和“()。[],:”使用w。

    如果你想绕过这些,直接跳到像小说或短篇小说那样的话,请使用 W。

    对于编码,小 w 可能是最常用的。取决于您在代码中的位置。

    【讨论】:

      【解决方案4】:

      根据 Vim 文档 (:h 03.1)

      • 单词以非单词字符结尾,例如“.”、“-”或“)”。

      • WORD 严格以空格结尾。这可能不是正常意义上的单词,因此是大写的。

      例如。

                 ge      b          w                             e
                 <-     <-         --->                          --->
          This is-a line, with special/separated/words (and some more). ~
             <----- <-----         -------------------->         ----->
               gE      B                   W                       E
      

      如果您的光标位于 m(以上)

      • 一个词意味着“更多”(即用“)”分隔的非词字符)

      • 而 WORD 表示“更多”。 (即仅由空格分隔)

      同样,如果你的光标在 p(特殊的)

      • 一个词意味着“特殊”
      • 而 WORD 表示“特殊/分隔/单词”

      【讨论】:

        【解决方案5】:

        如果我在下一行的光标位于app 上时执行viw ("select inner word"),它会选择app

        app/views/layouts/admin.blade.php

        如果我在光标位于同一位置时执行viW (WORD),它会选择整个字符序列。 WORD 包含words 不包含的字符,这些字符类似于英文单词,例如星号、斜线、圆括号、方括号等。

        【讨论】:

        • 上述解释的最后一段不清楚。它遗漏了一些可以使差异变得清晰的关键词。
        【解决方案6】:
        • 一个 WORD 总是由 空格 分隔。
        • 单词由非关键字字符分隔,这些字符是可配置的。空白字符不是关键字,通常其他字符(如()[],-)也不是。因此,一个词通常小于一个词;词导航更细。

        示例

        This "stuff" is not-so difficult!
        wwww  wwwww  ww www ww wwwwwwwww    " (key)words, delimiters are non-keywords: "-! and whitespace
        WWWW WWWWWWW WW WWWWWW WWWWWWWWWW   " WORDS, delimiters are whitespace only
        

        【讨论】:

        • 请注意,您可以使用 :set iskeyword 来更改 'W' 的作用。有关详细信息,请参阅 :help 'iskeyword'。
        • 上面的例子是错误的。双引号也是单词(或一个单词的一部分,取决于 'iskeyword' 选项)。因此它也应该用'w'标记。以及破折号。
        • @Flashrunner 这取决于 Jared Ross 提到的 'iskeyword' 选项。默认情况下,它就像我写的那样工作。
        • :set iskeyword=a-z,A-Z,\",- |This |"stuff" |is |not-so |difficult|! :set iskeyword=a-z,A-Z |This |"|stuff|" |is |not|-|so |difficult|! | - 是 'w' 停止的地方。如您所见,它始终是一个词。
        • Jared Ross 的评论也是错误的。 iskeyword 改变了 'w' 的作用,而不是 'W'。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-26
        相关资源
        最近更新 更多