从光标删除直到字符x的第n次出现


16

我知道我可以从光标中删除字符x,直到并且包括该字符的第一个出现d/x<CR>v/x<CR>d如果要先看到选择内容,然后再删除。如何从当前光标位置删除直到出现x的n个?

例如,如果光标在中的第一个空格之后

yada yada yada yada
yada yada yada x
yada yada yada yada x
yada yada yada x

xx

和I型指令,以除去对第三个X的结果需要是:

亚达
xx

Answers:


22

你可以做 :

wd4/x<Enter>

如果您从文字的左上方开始

说明

  • w :移至下一个单词的开头
  • d :删除
  • 4/x<Enter> :直到x的第4次出现

如果您不知道事先要执行的次数,也可以执行:d/x<Enter>然后单击.以重复


5
特别提示:这也适用于f和朋友(FtT;):例如,2fx将让你的第二个x,或2;将重复去年f的两倍。
马丁·图尔诺伊

1
@Carpetsmoker:这仅适用于当前行中的字母。
尔根·克雷默(JürgenKrämer)

5

您可以通过键入

<n>df<x>

哪里:

<n> is the number of occurrence of particular character
df<x> means delete till you find the occurrence of character x

0
<n>macro 

在vim中通常用于重复宏“ n”次。

因此,为了删除直到x的第1次出现,您可以使用 1dfx。同样,要删除直到第3次出现x,您可以使用3dfx


1
我认为您忘记了“宏”一词:在vim中,宏是记录在寄存器中的键序列,调用时您的寄存器@x在哪里x。您所指的是普通模式命令。
statox

是的,我的意思是普通命令。但这对于宏也是如此。我们可以通过在宏前面加一个数字来运行该宏n次。
那么akulchawla

1
是的,这是真的。我只是指出这<n>macro不是vim中用于宏的标准符号,并且由于您的答案使用的是普通模式命令,因此它与kapil的命令几乎相同。
statox

0

鉴于:

yada yada yada$
yada yada yada x$
yada yada yada x$
yada yada yada x$
xx$

其中$指示行的结尾(:set list模式),如果光标位于yada第一行的第二个开始处,则首先我们必须使用备份到前一个空格h,以将其包括在删除中。然后就4d/xEnter。换句话说,只是前面的一个数d/x。结果是:

yada$
xx$
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.