Применить команду нормального режима для регулярных выражений

10

Я использую следующее регулярное выражение для сопоставления строки документации под определением функции Clojure:

\vdefn.*\n\s*\zs"([^"]|\n)*"

Есть ли способ запустить команду нормального режима gq(формат строки) для всех совпадений этого шаблона в данном файле?


источник

Ответы:

10

Сила g:

:g/\vdefn.*\n\s*\zs"([^"]|\n)*"/normal gngq

Часть между /s довольно понятна, так как это регулярное выражение из вашего исходного вопроса.

normal gngqв конце это несколько интересно. gnвыберет следующее совпадение регулярного выражения и gq, конечно, отформатирует этот выбор (как вы упомянули в своем вопросе).

:gэто действительно отличная часть. Это, на мой взгляд, одна из самых полезных функций Vim. Команда gex принимает регулярное выражение и команду Ex и выполняет команду в каждой строке, с которой совпадает регулярное выражение. Если вы еще не узнали об этом :g, я настоятельно рекомендую это сделать, поскольку это значительно повысит вашу производительность. Несколько ресурсов являются собственностью Vim :help :gили Power of g на вики Vim.

Дверная ручка
источник
gnДеталь выбора из строки , в которой Vинициируется к следующему (не тот , на той же линии) вхождение шаблона. Документация Vim гласит, что если активен визуальный режим, выбор расширяется от текущей строки до следующего шаблона. Это вызывает нежелательное поведение.
@merb Ой, не понял этого. Ред.
дверная ручка
Выбор по-прежнему от строки матча до следующего матча. Выполнение команд в обычном режиме вручную показывает, что //s<cr>оставляет меня в начале матча в текущей строке, но //e<cr>оставляет меня в конце следующего матча, а не в текущем.
1
Проблема, кажется, с //s<cr>V. Когда я бегу, :normal Vя вхожу в режим визуальной линии, как и ожидалось. Когда я бегу, :normal //s<cr>мой курсор приземляется на первый "матч, как и ожидалось. Когда я бегу, :normal //s<cr>Vу меня нет визуального выбора.
1
Решил это. Команда должна быть normal gngq. Предлагая редактировать.