我现在从TextMate切换到VIM
。我在INSERT模式下发现^+W
非常有用。但是,我不仅要删除光标前的单词,还要删除光标后面或周围的单词。
我做了一些谷歌搜索,但我唯一能找到的是^+W
删除字符BEFORE光标。
你应该做的是为一系列命令创建某个键的imap,在这种情况下,命令会使你进入正常模式,删除当前单词,然后让你回到插入:
:imap <C-d> <C-[>diwi
由于有很多方法可以删除一个单词,让我们来说明一下。
假设您编辑:
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
要删除光标前的一定数量的字符,可以使用X.要删除光标后的一定数量的字,可以使用dw(例如,可以使用3dw删除多个字,例如3个字)。一般来说,要删除光标周围,可以使用daw。
在旧的vi中,b
将光标移动到光标前的单词的开头,w
将光标移动到光标后的单词的开头,e
将光标移动到光标后的单词的末尾,dw
从光标删除到结尾这个词。
如果键入wbdw
,则删除光标周围的单词,即使光标位于单词的开头或末尾。请注意,单词后面的空格被认为是要删除的单词的一部分。
不完全确定你使用“之前”和“之后”,但你试过了吗?
dw
?
编辑:我猜你正在寻找在插入模式下使用的东西。奇怪的是,文档中没有任何内容,ctrl-w似乎就是全部。
尝试重复删除单词时,接受的答案失败,请尝试此解决方案:
" delete current word, insert and normal modes
inoremap <C-BS> <C-O>b<C-O>dw
noremap <C-BS> bdw
它映射CTRL-BackSpace,也在正常模式下工作。
我做了两个映射,所以我可以在插入和插入模式下获得一致性。
:map <'Key of your choice'> caw
:imap <'Key of your choice'> <'Esc'> caw
我不仅要删除光标前的单词,还要删除光标后面或周围的单词。
在这种情况下,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
正常模式:
daw : delete the word under the cursor
caw : delete the word under the cursor and put you in insert mode
我认为这只是daw
daw - delete a word
以下适用于普通模式:我同意Dan Olson的回答,即对于大多数删除,您应该处于正常模式。更多细节如下。
如果光标在单词内:
diw
删除单词(不包括空格)
daw
删除单词周围(包括下一个单词之前的空格)。
如果光标位于单词的开头,只需按dw
即可。
这可以通过添加用于移动的通常数字来乘以,例如, 2w向前移动2个单词,所以d2w删除了两个单词。
插入模式^ w
在Vim中使用hjkl进行移动的想法是,将手放在主行上更有效率。在一个单词的末尾^ w非常适合快速删除单词。如果你已进入插入模式,输入一些文本并使用箭头键结束在你反对主行哲学的单词的中间。
如果你处于正常模式并希望改变单词,你可以简单地使用c
(更改)而不是d
(删除)如果你想完全改变单词,并重新进入插入模式而不必按i
回去打字。
你的意思是?
dw
在插入模式下看起来没有任何内置方式,这就是问题所在。其他一些答案对于普通模式是正确的,并且指出可以创建自定义映射以在插入模式下添加功能。
老实说,你应该在普通模式下完成大部分删除操作。 ^ W很清楚,但是我不确定我是否可以想到我宁愿这样做而不是esc进入正常模式并拥有更强大的删除命令。
Vim以这种方式与许多其他编辑器(包括TextMate)截然不同。如果您有效地使用它,您可能会发现您不会在插入模式下花费太多时间。
要删除两个空格之间的所有字符,请在正常模式下:
daW
要删除一个单词:
daw
要删除光标所在的整个单词,请使用diw
要删除光标所在的整个单词,并使用ciw
进入插入模式
如果你不想删除整个单词但删除你在哪里dw/cw
不幸的是,插入模式没有这样的命令。在VIM中,要删除光标下的整个单词,可以在NORMAL模式下键入viwd
。这意味着“视觉块内部词删除”。使用大写W
包括标点符号。