Удалить из курсора до n-го вхождения символа x

15

Я знаю, что могу удалить от курсора до и включая первое вхождение символа x с d/x<CR>или с, v/x<CR>dесли я хочу сначала увидеть выделение, а затем удалить. Как я могу удалить из текущей позиции курсора до n- го вхождения x ?

Например, если курсор находится после первого пробела в

Яда Яда Яда Яда
Яда Яда Яда X
Яда Яда Яда X
Яда Яда Яда X

XX

и я набираю команду, чтобы удалить до третьего х результат должен быть:

яда
хх

Эрвин Ройяккерс
источник

Ответы:

21

Ты можешь сделать :

wd4/x<Enter>

Если вы начинаете в левом верхнем углу вашего текста

объяснение

  • w : перейти к началу следующего слова
  • d : удалять
  • 4/x<Enter> : до 4-го появления х

Если вы не знаете, сколько раз вы хотели бы сделать это заранее, вы также можете сделать: d/x<Enter>и затем нажать, .чтобы повторить

edi9999
источник
5
Дополнительный совет: Это также работает с fи друзьями ( F, t, T, ;): например , 2fxпоможет вам в секунду x, или 2;повторят последний fраз.
Мартин Турной
1
@Carpetsmoker: это работает только для букв в текущей строке.
Юрген Кремер
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" раз.

поэтому, чтобы удалить до 1-го вхождения x, вы должны использовать 1dfx. Точно так же, чтобы удалить до 3-го вхождения x, вы бы использовали 3dfx.

thenakulchawla
источник
1
Я думаю, что вы пропустили слово «макрос»: в vim макрос - это последовательность ключей, записанная в регистр, и вызов @xгде xваш регистр. То, что вы имеете в виду, это команда в нормальном режиме.
statox
Да, я имел в виду нормальную команду. Но это верно и для макроса. Мы можем запустить макрос n раз, добавив число перед макросом.
thenakulchawla
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$
Kaz
источник