在vim的转义模式下w和W有什么区别?


19

我在看vim help quickref命令来移动光标。以下几行使我感到困惑,因为我发现它们都工作相同。有人可以举例说明一下。

N  w            N words forward
N  W            N blank-separated WORDS forward

对于e和E同样适用。

Answers:


34

根据这份备忘单,它似乎可以归结为标点符号。

w   jump by start of words (punctuation considered words)
W   jump by words (spaces separate words)
e   jump to end of words (punctuation considered words)
E   jump to end of words (no punctuation)

演示使用 w

          w的ss

演示使用 W

          W的ss

请注意,在第一个演示中,如何w连续命中光标落在标点上,而在第二个演示中,跳过标点。这是小写命令和它们的大写等效项之间的区别。


@slm:非常感谢您的演示。有了这样的演示,也无需阅读ans
rahul.deshmukhpatil 2013年

5

它实际上很简单,w只是跳到下一个单词,但是任何标点符号或空格都会破坏单词。 W就像具有工业强度的下一个单词命令一样,单词只能由空格分隔,无论是制表符,空格还是换行符。 w如果需要处理,也可以在定界标点处停止。

我发现区别最有用的是主机名:

birdman.cartoons.fictional.com # Fictional host

使用w,您可以停在主机名和点的每个部分。 W只是跳过整个主机名,然后转到#。这些都同样适用于dc删除和更改的话。

如果位于上一行的开头,则如果要替换birdman.cartoons为其他内容,则可以3cw用来替换前两个部分和中间的点。如果W不重新输入整个主机名,就无法做到这一点。


2

通过考虑标点符号如何影响Vim界定单词的概念,可以最好地理解这一差异。

对于此示例文本:

This line is space separated with no commas
however, this line is—note—comma, separated,see

w会很乐意跳到第一行中每个单词的首字母,因为只有空格可以协商。它在第2行上的标点符号会严重失败,并会落在每个单词的第一个字母以及逗号和破折号的位置。要在第2行的一个单词之间切换,您需要使用Shiftw1

1.即使那样,Vim仍然将“是-注释-逗号”视为一个单词。


1

差异可以在vim的内部帮助页面中找到。首先让我们用:helpw或w描述w和W :help W

  • w [向前数]个单词。|独家| 运动。
  • W [count]个单词向前。|独家| 运动。

现在我们想知道单词和单词的定义是什么。使用:help word和再次查找手册:help WORD,我们找到它们。

  • 单词由a sequence of letters, digits and underscores或组成a sequence of other non-blank characters, separated with white space(空格,制表符,)。可以使用“ iskeyword”选项更改。空行也被视为一个单词。
  • 单词由组成a sequence of non-blank characters, separated with white space。空行也被视为WORD。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.