【问题标题】:what's the difference between command cw and ciw in Vim?Vim 中的命令 cw 和 ciw 有什么区别?
【发布时间】:2017-06-05 02:55:15
【问题描述】:

这是a link我在stackoverflow中找到的关于这个问题的。

但如果没有具体的例子,我仍然无法理解“更改内部单词”和“更改单词”之间的区别。

我在我的vim中测试了这两个命令,最后发现没有区别,请举个例子帮助我理解,谢谢!

【问题讨论】:

标签: vim


【解决方案1】:

以上答案涉及如何他们表现不同,我想分享一些关于为什么他们表现不同的想法。

首先,在 vim 的世界中,wiw 具有不同的语义,都可以看作target(见下文):

  • w 中的 cw 指的是 Motion 对象
  • iw in ciw 指的是TextObject

其次,在 Vim 编辑中,Operator(在您的情况下为c/change,以及y/yankd/delete=/indenting=/indenting>/shifting 等)和目标 strong>(在您的情况下为wiw)与使用visual selection + operator 相比,可以帮助您以更少的击键次数实现您想做的事情。

TextObject 定义目标范围(开始和结束位置)。

Motion 本质上是用来移动光标的,所以它只定义了 final-target-position(移动的目的地)。

一些值得阅读的好材料:

  1. :h motion.txt 第 4、5 部分
  2. 来自atom-vim-mode-plus 的高级主题教程

【讨论】:

  • ciw 中,文本对象是iw 而不是w,它代表inner word
  • 你的回答让我更清楚这两个命令是如何工作的,而且它们似乎很容易使用,但我从来没有想过要找到这些命令的理论,以前似乎很容易使用,和你一样帮助,我想我以后会更多地学习任何东西,而不仅仅是工作!感谢你所做的一切!你启发了我。
【解决方案2】:

请注意,cw 默认情况下有点“不标准”的行为,因为它的行为与ce 完全一样:它只工作到当前单词的结尾(如ecede, ye) 而不是在下一个单词的开头包含空格(如wdwyw)。

因此,我建议将这些映射添加到您的 vimrc

" Have `cw` adhere to its actual movement `w`, instead of duplicating `ce`.
nnoremap cw dwi
nnoremap cW dWi

并习惯于通常使用ce。键入 ce 实际上比 cw if you养成在c之后用无名指而不是中指按e的习惯。


如果您希望将cw 保留为与ce 重复的默认分配,则可以通过额外的击键访问其“正确”功能:dwi(或vwc)。

(请注意,我发现 dwicw 打字效率更高,因为键的位置,尽管有额外的键。)


第二个映射的解释:W (Shift+w) 适用于 vim 所谓的“WORDS”,它计算每个非空白字符,例如标点符号,作为单词的一部分;而w 适用于“单词”,它只包含不间断的字母、数字和下划线序列(默认情况下)。

【讨论】:

    【解决方案3】:

    这是一个例子:

    foo bar baz
        ^
    

    在这种情况下,键入 cw 和 ciw 将给出相同的结果(光标位于 'bar' 的 'b' 上)。 考虑一下:

    foo bar baz
         ^
    

    cw 将产生

    foo b baz
         ^
    

    ciw 将产生的位置

    foo  baz
        ^
    

    因此它会更改整个单词,而不管光标位置如何。非常有用,我喜欢这个命令。 caw(或aw)命令也非常有用:

    foo bar baz
         ^
    -> caw
    foo baz
        ^
    

    aw 也包含空格。使用v(可视)命令尝试这些命令,看看它们都做了什么。另外,请阅读motion.txt,第 6 部分。

    【讨论】:

    • 非常感谢您为我提供了这么多额外的信息,非常感谢,我现在明白了!这就像一个魔术!
    【解决方案4】:
    someword
        ^        (cursor)
    

    顺时针

    some_
        ^        (cursor)
    

    从光标变为词尾。离开单词的开头。


    对比

    someword
        ^        (cursor)
    

    ciw

    _
    ^            (cursor)
    

    从头到尾改变整个单词。

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 2013-05-01
      • 2011-04-16
      • 2023-01-26
      • 2011-07-22
      • 1970-01-01
      • 2019-08-29
      • 2011-11-23
      相关资源
      最近更新 更多