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

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

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

173724 次浏览

你是说像?

dw

下面是正常模式:我同意Dan Olson的回答,你应该在大多数删除正常模式。详情如下。

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

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

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

< p > 插入模式^w < br > 在Vim中使用hjkl进行移动的想法是,将您的手放在主行上会更有效率。在一个单词的末尾^w可以很好地快速删除这个单词。如果你进入了插入模式,输入了一些文本,然后用方向键把文本放到了单词的中间,那么你就违背了主行原则 如果你在正常模式下,想要改变单词,你可以简单地使用c (change)而不是d (delete),如果你想完全改变单词,并重新进入插入模式,而不必按i来返回输入

如果要删除游标前面一定数量的字符,可以使用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

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。意思是“__abc2visual -block nner Word Delete”。使用大写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