在VIM中删除光标后面或周围的单词

Man*_*tas 199 vim keyboard-shortcuts

我现在正VIM从TextMate 切换到.我发现^+W在INSERT模式下非常有用.但是,我不仅要删除光标前的单词,还要删除光标后面或周围的单词.

我做了一些谷歌搜索,但我唯一能找到的是^+W删除光标之前的字.

Amj*_*ith 514

正常模式:

daw : delete the word under the cursor    
caw : delete the word under the cursor and put you in insert mode 
Run Code Online (Sandbox Code Playgroud)

  • 将它想象为daw是有帮助的:删除一个单词和caw:改变一个单词. (116认同)
  • 可能值得一提的是,`aw` 是对象选择的一个例子。您可以在可视模式下尝试对象选择,看看它们有什么效果:http://vimdoc.sourceforge.net/htmldoc/motion.html#object-select (4认同)

小智 98

I think it's just daw

daw - delete a word
Run Code Online (Sandbox Code Playgroud)

  • @AK_迟到的响应,但如果你在一个单词的中间,`dw`将从光标删除到单词的结尾,而`daw`将删除整个单词和空格.`diw`将删除整个单词而不触及它周围的空格. (5认同)
  • @REACHUS最初的字符'd`表示你'删除'.'a'是一种参数,指定删除包括分隔符.最后是'w',另一个`参数` - 如果你将 - 指定一个`word`单位将被删除. (3认同)
  • 我知道 `a` 是用于在光标 [count] 次之后添加文本的命令。但是 `daw` 是如何工作的? (2认同)
  • `dw`和`daw`有什么区别? (2认同)

Wha*_*awg 74

你应该做的是为一系列命令创建某个键的imap,在这种情况下,命令会使你进入正常模式,删除当前单词,然后让你回到插入:

:imap <C-d> <C-[>diwi
Run Code Online (Sandbox Code Playgroud)

  • ":h diw"为很多有用的shrtcts! (26认同)
  • 使用<Co>的奖励积分.它在Normal模式下执行一个命令并直接跳回到Insert,所以像`imap <Cd> <Co> diw`这样的东西也可以.它也不会创建一个撤销点,<Esc>几乎总是这样做. (12认同)
  • 额外点与c交换d并删除尾随i ;-) (9认同)

And*_*ndy 66

以下适用于普通模式:我同意Dan Olson的回答,即对于大多数删除,您应该处于正常模式.更多细节如下.

如果光标在单词内:
diw删除单词(不包括空格)
daw以删除单词周围(包括下一个单词前的空格).

如果光标位于单词的开头,只需按dw.

这可以乘以通常的移动数字,例如2w来向前移动2个单词,所以d2w删除两个单词.

插入模式^ w
在Vim中使用hjkl进行移动的想法是,将手放在主行上会更有效率.在一个单词的末尾^ w非常适合快速删除单词.如果你已进入插入模式,输入一些文本并使用箭头键结束在你反对主行哲学的单词的中间.
如果您处于正常模式并且想要更改单词,则可以简单地使用c(更改)而不是d(删除),如果您想要完全更改单词,并重新进入插入模式而无需i返回打字.


Nad*_*mli 42

你的意思是?

dw
Run Code Online (Sandbox Code Playgroud)

  • 迟到了,但是dw会从当前位置删除到单词的结尾,从开头删除整个单词使用diw或daw (10认同)

Dan*_*son 20

在插入模式下看起来没有任何内置方式,这就是问题所在.其他一些答案对于普通模式是正确的,并且指出可以创建自定义映射以在插入模式下添加功能.

老实说,你应该在普通模式下完成大部分删除操作.^ W很清楚,但是我不确定我是否可以想到我宁愿这样做而不是esc进入正常模式并拥有更强大的删除命令.

Vim以这种方式与许多其他编辑器(包括TextMate)截然不同.如果您有效地使用它,您可能会发现您不会在插入模式下花费太多时间.

  • "它看起来不像是一种方式......" - 有无数的方法可以做到这一点 - 没有*内置的方式,afaik.虽然我完全同意Dan关于插入模式与普通模式的说法,但您当然可以简单地定义插入模式映射,请参阅":help imap",如果您确实需要插入模式中的功能,则可以执行任何您想要实现的操作. (4认同)

krm*_*mld 20

要删除两个空格之间的所有字符,请在正常模式下:

daW
Run Code Online (Sandbox Code Playgroud)

要删除一个单词:

daw 
Run Code Online (Sandbox Code Playgroud)


Nas*_*V N 12

删除光标所用diw
的整个单词要删除光标所在的整个单词,ciw
如果你不想删除整个单词但要删除你所在的位置,请使用插入模式.dw/cw


myc*_*elo 5

不幸的是,插入模式没有这样的命令。在VIM中,要删除光标下的整个单词,可以viwd在NORMAL模式下键入。这意味着“ V isual块 nner W¯¯ ORD d elete”。使用大写字母W来包含标点符号。


0xF*_*0xF 5

由于删除单词的方法有很多,因此我们来举例说明。

假设您编辑:

foo-bar quux
Run Code Online (Sandbox Code Playgroud)

并在光标位于“栏”中的“ a”上时调用命令:

foo-bquux  # dw:  letters then spaces right of cursor
foo-quux   # daw: letters on both sides of cursor then spaces on the right 
foo- quux  # diw: letters on both sides of cursor
foo-bquux  # dW:  non-whitespace then spaces right of cursor
quux       # daW: non-whitespace on both sides of cursor then spaces on the right
 quux      # diW: non-whitespace on both sides of cursor
Run Code Online (Sandbox Code Playgroud)