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


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. Предлагая редактировать.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.