在Vim中,如何删除单词的后缀?

7
在vim中,正常模式下,如果光标在一个单词内,但不是最后一个字母,de将删除单词的后缀,从光标所在位置开始。如果光标在最后一个字母上,x也会删除它,而de则会跳到下一个单词的结尾。
在这两种情况下都适用的命令是什么?
目的是将该命令包含在宏中。

2
该行为不取决于单词的长度,而是取决于光标的位置。如果光标位于单词的最后一个字符上,则 e 命令也会跳到下一个单词的末尾。 - ib.
没错,再次感谢。问题已经被纠正了。 - galath
1
已经回答过了,但是cw对你也可能有用。它可以做你所描述的事情,而且还可以让你进入编辑模式。 - El Yobo
谢谢@ElYobo,cw更容易记住! - galath
4个回答

4

如果您喜欢,可以尝试使用vwged代替de,并定义如下的映射。

:nnoremap <leader>de vwged

看起来它能完全满足你的需求。


2
你可以尝试使用d/\>命令,该命令可删除直到下一个单词边界的内容。

1
如果您的单词分隔符是空格,dt<space> 将起作用。 t 将匹配到指定字符之前的所有字符。

一些有用的注释:dw - 删除所谓的“小”单词。例如在“settings.config”中,如果您在“s”上,dw将删除.之前的所有内容,要删除整个字符串,请使用dW(删除“大”单词)。 - Nemoden
为了概括这个解决方案:dtC,其中C是要删除的单词的倒数第二个字符旁边的字符。 - ib.
但是如果你的单词后面跟着逗号、分号或其他不是单词的字符怎么办呢?你需要一种方法来跳到下一个单词边界。 - Nathan Fellman
@Nathan 是的,要使用这个解决方案,您需要寻找单词末尾旁边的字符,并在 dt 后键入它(例如,dt;)。为了摆脱这种需求,请尝试我的答案中的映射。 - ib.

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接