为什么`cw`和`ce`做同样的事情?


15

这始终使我对wW运动命令感到困惑- cdhange命令一起使用时,它们的工作方式似乎与单独使用或与elete命令一起使用时的工作方式不同。


例如,将光标放在此文本的“ q”上:

The quick brown fox jumps over the lazy dog.

在中输入dw结果

The brown fox jumps over the lazy dog.

并在中输入de结果

The  brown fox jumps over the lazy dog.

(注意“ The”和“ brown”之间的两个空格。)


yANK命令还对待we不同,如可以通过比较显示yeP

The quickquick brown fox jumps over the lazy dog.

ywP

The quick quick brown fox jumps over the lazy dog.

但是,输入ceslow<Esc>或会cwslow<Esc>导致相同的结果

The slow brown fox jumps over the lazy dog.

这在某处有记录吗?它背后的逻辑是什么?如何预测使用该命令的结果w

Answers:


18

这是特例。请在“特殊情况”下查看WORD文档

特殊情况:如果光标位于非空白位置,则将“ cw”和“ cW”视为“ ce”和“ cE”。这是因为“ cw”被解释为更改字,并且一个字不包含以下空格。{Vi:在空白处接着其他空白处时,“ cw”仅更改第一个空白;这可能是一个错误,因为“ dw”会删除所有空格}

另一种特殊情况:当将“ w”运动与运算符结合使用时,最后移出的单词在一行的末尾,该单词的末尾成为操作文本的末尾,而不是下一个单词的第一个单词线。

“ e”的原始Vi实现是有问题的。例如,如果前一行为空,则“ e”命令将在行的第一个字符处停止。但是,当您使用“ 2e”时,不会发生这种情况。在Vim中,“ ee”和“ 2e”是相同的,这更合乎逻辑。但是,这会导致Vi和Vim之间的不兼容性很小。


1
Neovim 0.2.1添加了一个“ cpoptions”标志“ _”(下划线)来切换此行为。neovim.io/doc/user/options.html#'cpoptions
贾斯汀·M.·凯斯

6

可以简单解释运动cw与行为之间的区别dw:通常,如果您想更改一个单词,您将在其后留空白,而删除一个单词则建议您也要删除该空白。

如果您确实希望空白由于​​某种原因而消失(我经常这样做,但是想不出一个例子),请使用awmotion caw

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.