Если я хочу удалить каждое слово, это легко, потому что я бы сделал что-то вроде этого:
:s%/WORD//g
Но что если я захочу сделать xyz
для каждого случая «СЛОВО»? Например, допустим, я хочу удалить каждую строку, содержащую «WORD». Я могу придумать пару способов сделать это, но ни один из них не кажется идеальным.
1)
/WORD
и затем нажмите вручную, ddnddnddnddn...
пока больше нет вхождений. Но это занимает много времени, если есть много строк для этого.
2)
qd/WORD<enter>ddq
а затем угадать, сколько раз WORD происходит, а затем, например:
500@d
Но это либо А) пропустит кучу строк, либо Б) удалит кучу лишних строк.
Есть лучший способ это сделать?
500@d
как вы описываете, на самом деле безопасно. Воспроизведение макроса остановится, как только условие поиска не будет найдено. Таким образом, вы просто увидите ошибку «Шаблон не найден: СЛОВО» после того, как все строки, содержащие его, будут удалены.Ответы:
Вы можете использовать
:global
и:normal
команды для этого. Команда:global
имеет следующий синтаксис:Это будет запускать «команду» при каждом появлении «шаблона». Затем вы можете использовать
:normal
команду для запуска серии нажатий клавиш при каждом появлении слова с помощью:global
. Вот так:Если эти нажатия клавиш включают специальные клавиши, например
<Ctrl>
, вы можете объединить их с:execute
командой, например, так:Обратите внимание, что вы должны ставить обратную косую черту перед каждым появлением специального ключа.
Подробнее об этих командах смотрите
:help :normal
и:help :global
.источник
Просто для полноты, вы можете использовать
:substitute
, если вы соответствуете - в вашем примере (удалить всю строку, которая имеет WORD) - всю строку, содержащую WORD, например:Это имеет неявное «заменить совпадение ничем», то есть это более короткая форма:
В сочетании с
\zs
,\ze
,\(
-\)
(группировка), и\=
(в части замены) сsubmatch()
,:substitute
может быть очень мощным.источник
Кажется, вы ищете
:global
.источник
:delete
а не обычной операциейd
.:normal
. А если вам нужны специальные ключи, вам может даже понадобиться:exe
-> `exe" normal aFooFar \ <esc> "