Удалить соответствующий шаблон поиска в VIM - PullRequest
51 голосов
/ 21 октября 2011

Есть фраза, которую я хочу найти в VIM.Найдя, я хочу удалить эту фразу.Какой самый простой способ циклически повторять все экземпляры (n) и удалять совпадения один за другим (я не хочу удалять все из них).

ПРИМЕЧАНИЕ. Я знаю, что могу удалить определенное количество символов или количество слов, но я хочу специально удалить «совпадение» из моего поиска.Возможно ли это?

Ответы [ 4 ]

73 голосов
/ 21 октября 2011

http://vim.wikia.com/wiki/Search_and_replace

Попробуйте выполнить поиск и замените:

:% s / Foo / бар / дс

Измените каждое 'foo' на 'bar', но сначала запросите подтверждение.

Нажмите y или n, чтобы изменить или сохранить текст.

31 голосов
/ 21 октября 2011

Я могу придумать 3 способа:

Способ, который проще всего объяснить, это

:%s/phrase to delete//gc

но вы также можете (лично я использую этот второй чаще) регулярно выполнять поиск фразы для удаления

/phrase to delete

Vim приведет вас к началу следующего вхождения фразы.

Перейдите в режим вставки (нажмите i) и используйте клавишу Delete, чтобы удалить фразу.

Нажмите escape, когда вы удалили всю фразу.

Теперь, когда вы сделали это один раз, вы можете нажать n, чтобы перейти к следующему появлению фразы, а затем нажать точку / точку "." клавиша для выполнения только что выполненного вами действия по удалению

Продолжайте нажимать n и точку, пока не закончите.

Наконец, вы можете выполнить поиск удаляемой фразы (как во втором методе), но на этот раз вместо перехода в режим вставки вы

Подсчитайте количество символов, которое вы хотите удалить

Введите этот номер (с помощью цифровых клавиш)

Нажмите клавишу x - символы должны быть удалены

Продолжить с помощью n и точки, как во втором методе.

PS - И если вы еще не знали, вы можете сделать заглавную букву n, чтобы переместиться назад через поиск совпадений.

10 голосов
/ 21 октября 2011

Простым решением является использование команды :substitute с подтверждением:

:%s///gc

Эта команда заменяет вхождения последнего шаблона поиска (который используется, если шаблон пропущен) пустой строкой.

Кроме того, можно определить сопоставления выбора текстовых объектов, чтобы они работали конкретно с совпадением последнего шаблона поиска под курсором.Следующие два сопоставления могут использоваться в визуальном режиме или в режиме ожидания оператора для выбора текста от начала предыдущего совпадения последнего шаблона поиска до его конца.

vnoremap <silent> i/ :<c-u>call SelectMatch()<cr>
onoremap <silent> i/ :call SelectMatch()<cr>
function! SelectMatch()
    if search(@/, 'bcW')
        norm! v
        call search(@/, 'ceW')
    else
        norm! gv
    endif
endfunction

Используя эти сопоставления, можно удалитьсопоставьте под курсором di/, примените любой другой оператор или визуально выберите его с помощью vi/.

5 голосов
/ 05 ноября 2015

Лучше всего использовать:

:%s/phrase//gc

c запрашивает подтверждение перед каждым удалением. g позволяет выполнять несколько замен в одной строке.

Вы также можете просто выполнить поиск с помощью /phrase, выбрать следующее совпадение с помощью gn и удалить его с помощью d.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...