为什么d {motion}命令与Vim中的{motion}命令不一致?

实验1

>打开Vim,并在缓冲区中只插入以下一行文本。

hello world

换句话说,按i,键入hello world并按Esc。
>按0将光标定位在第一行的第一个字符。
>按e。光标移动到o。
>按0将光标重新定位在第一行的第一个字符处。
>按de。您将看到从h到o的字符已删除。只剩下下面的文本。

world

实验2

>打开Vim,并在缓冲区中只插入以下一行文本。

hello world

换句话说,按i,键入hello world并按Esc。
>按0将光标定位在第一行的第一个字符。
>按w。光标移动到w。
>按0将光标重新定位在第一行的第一个字符处。
>按dw。你会看到从h到的字符已被删除。只剩下下面的文本。

world

然而,我期待从h到w的一切都被删除,只剩下下面的文本。

orld

首先让我引用:help d下面。

*d*
["x]d{motion}           Delete text that {motion} moves over [into register
                        x].  See below for exceptions.

在实验1中,由于从h移动到o并且确保从h到o(包括h和o)的足够的一切的运动被删除

在实验2中,由于w从w移动到w,但是从h到w(包括h和w)的一切都不被删除。为什么?

dw,de和db的行为总结如下。

Command    Deletes character under the    Deletes character under the
           initial cursor position?       final cursor position?
-------    ---------------------------    ---------------------------
dw         Yes                            No
de         Yes                            Yes
db         No                             Yes

为什么三个命令的行为不一致?

包括光标以下的字符到包括世界的最后一个字符的所有东西,e是包含的运动。

dw从光标以下的字符中切除所有内容,并将其包括到下一个字,并排除下一个字,w是独占运动。

你的问题的答案不在于:help d(de和dw完全一致),但在:help e和:help w(e和w不必工作相同,因为,因为文档说,一个是包容性的,另一种是排他性的)。

始终记住,Vim中的一切都是关于可组合性:de不是de,它应用于e。

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...