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

时间:2009-05-07 10:14:16

标签: vim keyboard-shortcuts

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

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

16 个答案:

答案 0 :(得分:497)

普通模式:

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

答案 1 :(得分:94)

我认为这只是daw

daw - delete a word

答案 2 :(得分:73)

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

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

答案 3 :(得分:66)

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

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

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

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

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

答案 4 :(得分:40)

你的意思是?

dw

答案 5 :(得分:20)

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

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

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

答案 6 :(得分:19)

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

daW

只删除一个单词:

daw 

答案 7 :(得分:12)

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

中删除

答案 8 :(得分:5)

不幸的是,

插入模式没有这样的命令。在VIM中,要删除光标下的整个单词,可以在NORMAL模式下键入viwd。这意味着“ V isual-block nner W ord D elete”。使用大写W来包含标点符号。

答案 9 :(得分:2)

要删除光标前的一定数量的字符,可以使用X.在光标后删除一定数量的,可以使用dw(可以使用3dw删除多个字)例如3个字)。一般来说,要删除光标周围,可以使用daw。

答案 10 :(得分:2)

不完全确定您对“之前”和“之后”的使用情况,但是您尝试了吗

dw

编辑:我猜你正在寻找在插入模式下使用的东西。奇怪的是,文档中没有任何内容,ctrl-w似乎就是全部。

答案 11 :(得分:2)

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

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

答案 12 :(得分:2)

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

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

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

答案 13 :(得分:2)

我进行了两次映射,因此我可以在插入和插入模式中获得一致性。

:map <'Key of your choice'> caw

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

答案 14 :(得分:2)

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

假设您进行编辑:

foo-bar quux

并在光标位于“栏”中的“ 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

答案 15 :(得分:0)

  

我不仅要删除光标前的单词,还要删除光标后面或周围的单词。

在这种情况下,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