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

问题描述 投票:190回答:16

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

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

vim keyboard-shortcuts
16个回答
74
投票

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

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

3
投票

由于有很多方法可以删除一个单词,让我们来说明一下。

假设您编辑:

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

2
投票

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


2
投票

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

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


2
投票

不完全确定你使用“之前”和“之后”,但你试过了吗?

dw

?

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


2
投票

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

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

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


2
投票

我做了两个映射,所以我可以在插入和插入模式下获得一致性。

:map <'Key of your choice'> caw

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


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

504
投票

正常模式:

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

96
投票

我认为这只是daw

daw - delete a word

66
投票

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

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

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

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

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


41
投票

你的意思是?

dw

20
投票

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

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

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


19
投票

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

daW

要删除一个单词:

daw 

12
投票

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


5
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.