我现在从TextMate切换到VIM。我发现^+W在插入模式下非常有用。但是,我不仅要删除游标之前的单词,还要删除游标之后或周围的单词。

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


你是说像?

dw

以下内容适用于普通模式:我同意Dan Olson的回答,对于大多数删除操作,您应该处于正常模式。详情如下。

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

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

这可以通过添加用于移动的常用数字来相乘,例如2w向前移动2个单词,因此d2w删除两个单词。

Insert Mode ^w The idea of using hjkl for movement in Vim is that it's more productive to keep your hands on the home row. At the end of a word ^w works great to quickly delete the word. If you've gone into insert mode, entered some text and used the arrow keys to end up in the middle of the word you've gone against the home-row philosophy. If you're in normal mode and want to change the word you can simply use the c (change) rather than d (delete) if you'd like to completely change the word, and re-enter insert mode without having to press i to get back to typing.


如果要删除游标之前的一定数量的字符,可以使用x。如果要删除游标之后的一定数量的单词,可以使用dw(以3个单词为例,可以使用3dw删除多个单词)。一般来说,如果要删除光标周围的内容,可以使用daw。


不太清楚“之前”和“之后”的用法,但你试过了吗

dw

?

编辑:我猜你在寻找在插入模式中使用的东西。奇怪的是,在文档中什么也找不到,似乎只有ctrl-w。


在旧的vi中,b将光标移动到单词的开头,在光标之前,w将光标移动到单词的开头,在光标之后,e将光标移动到单词的末尾,而dw将光标从光标删除到单词的末尾。

如果键入wbdw,则删除光标周围的单词,即使光标位于单词的开头或末尾。请注意,单词后面的空格被认为是要删除的单词的一部分。


在插入模式下似乎没有内置的方法,这就是问题所在。其他一些答案对于普通模式是正确的,并指出可以创建自定义映射以在插入模式中添加功能。

老实说,你应该在正常模式下进行大部分删除操作。^W是整洁的,但我不确定我能想到一种情况,我宁愿这样做,而不是esc进入正常模式,并有更强大的删除命令在我的处置。

在这方面,Vim与许多其他编辑器(包括TextMate)非常不同。如果您正在高效地使用它,您可能会发现在插入模式上花费的时间并不多。


正常模式:

daw : delete the word under the cursor    
caw : delete the word under the cursor and put you in insert mode 

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

:imap <C-d> <C-[>diwi

重复删除单词时,接受的答案失败,请尝试以下解决方案:

" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw

它映射CTRL-BackSpace,也在正常模式下工作。


我想这只是乌鸦

daw - delete a word

我做了两个映射,以便在插入模式和退出插入模式时保持一致性。

:map <'Key of your choice'> caw

:imap <'Key of your choice'> <'Esc'> caw


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

daW

只删除一个词:

daw 

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


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


我不仅要删除光标之前的单词,而且要删除光标之后或周围的单词。

在这种情况下,可以将OP提出的解(即使用<c-w>)与接受的答案结合起来,得到:

inoremap <c-d> <c-o>daw<c-w>

或者(更短的解决方案):

inoremap <c-d> <c-o>vawobd

样例输入:

word1 word2 word3 word4
               ^------------- Cursor location

输出:

word1 word4

既然有这么多删除单词的方法,让我们来举例说明。

假设你编辑:

foo-bar quux

当光标在'bar'中的'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