vim删除向后的把戏


119
  • 如何删除左侧的单词?换句话说,当光标停在单词的末尾时,将其删除。
  • 如何删除行首的字符?
  • 如何删除左侧的第一个空格?

  • 还有其他涉及单词删除的技巧吗?

Answers:


163

通常,d <motion>将在<motion>之后从当前位置删除到结束位置。这意味着:

  1. d <leftArrow>将删除当前字符和左字符
  2. d $将从当前位置删除到行尾
  3. d ^将从当前反向删除到第一个非空白字符
  4. d0将从当前倒退到行首删除
  5. dw删除当前到当前单词的末尾(包括尾随空格)
  6. db删除当前到当前单词的开头

阅读本文以了解可以与“ d”命令结合使用的所有内容。


1
另一个方便快捷的方式,以防您db难以记住: 5. dw or d<ctrl+rightarrow>6. db or d<ctrl+leftarrow>
Crisboot

6
而不是打字d<leftArrow>dh代替,因为h是移动的关键左
Dylanthepiguy

4
为什么会接受这个答案?d <leftArrow>(以及dw除外)不会删除OP想要的光标下的字符。
listerreg

73

我曾多次遇到这种情况。我想删除第10行中的所有空格,以便在逗号后与第9行合并。

在此处输入图片说明

这基本上是VIM中的简单行联接。

kJ 做到了(下面观看)

Vim连接线


9
我一直在到处找这个!
functionvoid

2
哈哈,我想要这个,我也不知道如何在Google中描述它。太幸运了,我向下滚动=))
Thai Tran

1
不敢相信我手动完成了多少次。这正是我在寻找的东西,谢谢!
tobiasandersen

1
这正是我想要的。Vim每天
打动

4
对此的解释是:k=向上,J=将下面的行连接到当前行,并在两者之间留一个空格。您也可以kgJ在没有空格的情况下加入。gJ=连接下面的行,中间没有空格。通过备忘

31

回答点#3,diwdaw都非常优秀。


4
我感到很难过的是,当您遇到最后一个字母时,没有两个字符的命令可以向后删除单词,因为在诸如notepad ++,gedit等标准编辑器中,您可以轻松使用CTRL + Backspace ...除此之外vim很棒。
itmuckel

3
@ roggan87如果您使用的是单词的最后一个字母,请db删除最后一个字母之前的字母,但仍保留最后一个字母。
Prashanth Chandra

2
您能解释这些命令中间的ia做什么吗?我知道开头d是“删除”,我想结尾w是“单词”。
卡尔·G

1
@CarlG最好的解释是在中:help text-objects。前段非常简洁,我认为描述得很好。
兰迪·莫里斯

5
<kbd> i </ kbd>是“内部”,<kbd> a </ kbd>是“ a”,如“一个单词”一样。前者将不包括封闭的空格,而后者将包括尾部空白(如果有),否则将包括前一个空格。非常有帮助,谢谢。
卡尔·G

25

在插入模式下:

  • ^ w
  • ^ u
  • 无法回答我的问题;-)

除此以外:

  • dw
  • v0x
  • 无法回答我的问题;-)

我不知道我可以在Vim中的“插入”模式下删除单词。这很有帮助。
DJO田

18

在命令模式下:

  1. bdw,返回删除单词。
  2. d^(至第一个非空白)d0(至第一个字符)
  3. BdW (转到第一个空格,删除到下一个空格)

(社区维基,随时可以破解。)


14
  1. db (如果光标在单词之后)或 bdw
  2. d0(或者d^如果您要删除到第一个非空白字符)
  3. dEdtSpace删除到第一个空格或d/\sEnter删除到下一个空格字符。

编辑

由于问题已更改,因此删除了左边第一个空格字符3,因此我的答案应更改为:

  1. dBdShiftTSpace删除回到第一个空格或d?\sEnter删除到先前的空白字符。

看到:

:help motion.txt
:help WORD

#3的电话好。我不确定如何处理任何空格。值得一提的是,dF <SPACE>会删除多达<SPACE>的内容,而dT <SPACE>会将<SPACE>保留在那里。
Mark Biek 09年

来到这里寻找类似的东西bdw。剩下的字符(最初在光标下面的那个)db一直让我烦恼。
Deiwin

8

我觉得没有一个答案是完整的:

通常,您通常使用d<motion>和很少启动删除操作x

注意:N未指定时,其行为类似于N=1(删除单个字符)

离散字符:

<N>x -删除右边的N个字符

d<N><left-arrow> -删除左侧的N个字符

d<N><right-arrow> -删除右边的N个字符

字边界:

注意:第一个前/后一个字是光标下方的一个字

d<N>b -从第N个单词的开头删除到当前位置

d<N>e -从当前位置删除到第N个单词的末尾

d<N>w-与之相同,d<N>e包括结尾空格

diw -删除光标下的整个单词

daw-与之相同,diw包括结尾空格

线边界:

d0 -从行首删除到当前位置

d^ -从第一个非空白char删除到当前位置

d$ -从当前位置删除到行尾


1

/ <CR>x

(向前搜索空格,按Enter进入那里,x删除)

也许有一种更神奇的方式来做,但是我不知道。


如果要删除左边的第一个空格,请点击?而不是在我的示例中。
brettkelly
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.