Видалити з курсору до n-го появи символу x


16

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

Наприклад, якщо курсор знаходиться після першого пробілу в

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

xx

і я набираю команду для видалення до третього x, результат повинен бути:

yada
xx

Відповіді:


22

Ви можете зробити :

wd4/x<Enter>

Якщо ви починаєте в лівій верхній частині тексту

Пояснення

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

Якщо ви не знаєте, скільки разів ви хотіли б зробити це заздалегідь, ви також можете зробити це: d/x<Enter>і натисніть, .щоб повторити


5
Додаткова порада: Це також працює з fі друзями ( F, t, T, ;): наприклад , 2fxдопоможе вам в секунду x, або 2;повторять останній fраз.
Мартін Турноїй

1
@Carpetsmoker: Це працює лише для літер у поточному рядку.
Jürgen Krä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, ви б використали 1dfx. Аналогічно, для видалення до 3-го появи x ви б використали 3dfx.


1
Я думаю, що ви неправильно використали слово "макрос": in vim макрос - це послідовність ключа, записаного в реєстрі, і викликуйте, @xде xзнаходиться ваш реєстр. Що ви маєте на увазі, це звичайна команда режиму.
statox

Так, я мав на увазі звичайну команду. Але це справедливо і для макросу. Ми можемо запустити макрос n разів, додавши число перед макросом.
thenakulchawla

1
Так, це правда. Я тільки вказував, що <n>macroце не стандартні позначення vim для макросів, і оскільки у вашій відповіді використовується команда у звичайному режимі, це майже те саме, що і у капіля.
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$
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.