Застосувати команду звичайного режиму до регулярних збігів


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 Whoops, цього не усвідомлював. Відредаговано.
Doorknob

Вибір все ще йде від лінії до наступного матчу. Якщо перейти до команд звичайного режиму вручну, ви побачите, що //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.