VIM Поиск / Замена пробелов между 2 скобками или столбцами - PullRequest
4 голосов
/ 24 марта 2010

С учетом следующей строки:

[aaaa bbbb cccc dddd] [decimal](18, 0) NULL,

Как бы вы заменили пробелы только между первым набором скобок в Vim? Как будет выглядеть команда / s?

Обновление:

Это ожидаемый результат

    [aaaa_bbbb_cccc_dddd] [decimal](18, 0) NULL,

Ответы [ 3 ]

7 голосов
/ 24 марта 2010

Самый простой способ сделать это - визуально выбрать содержимое строки [] ed и выполнить замену только для этого выбора:

vi]:s/\%V \%V/_/g

Это не очень хорошо работает, если вы пытаетесь делать что-то программно. В этом случае вы можете сопоставить всю строку [] ed и использовать выражение замены для построения результата.

:s/\[[^\]]*\]/\=substitute(submatch(0), ' ', '_', 'g')/g
1 голос
/ 24 марта 2010

с обычной настройкой 'magic', которую вы хотите сделать

:s/] \[/][/

или более причудливо

:s/]\zs\s\+\ze\[//

или с магическим уровнем, явно установленным в регулярном выражении

:s/\V]\zs\s\+\ze[//

\ zs и \ ze ограничивают замену областью, которую они включают.

\ M полностью отключает магию, поэтому каждый комбо-символ или персонаж без префикса \ воспринимается буквально.

'magic' (:help 'magic') - это глобальная опция, которая определяет, как интерпретируются потенциально специальные символы в регулярных выражениях.

0 голосов
/ 30 марта 2010

Вы всегда можете перейти к интерактивному поиску и замене, что можно сделать с помощью флага c

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