Многострочное редактирование, начинающееся с того же символа (= знак) [без макросов?] - PullRequest
1 голос
/ 20 марта 2020

Я работаю над ansible playbook, где VIm, кажется, оказывается чрезвычайно полезным инструментом (много похожих шаблонов в стиле / форматировании и т. Д.), И я надеюсь взять мою текущую ситуацию ( с тех пор как было написано), чтобы превратить его в урок Vim.

Я широко использовал блоки кода для многострочного редактирования, но я думаю, что я достиг их предела и хотел обратиться к рисунку из того, как я мог бы подойти к созданию линейных изменений более динамично. В этом сценарии у меня есть блок кода, который я пытаюсь преобразовать

из:

rcon.port=25575
rcon.password=strong-password
enable-rcon=true

в:

- { regexp: '^rcon.port', line: 'rcon.port=25575' }
- { regexp: '^rcon.password', line: 'rcon.password=strong-password' }
- { regexp: '^enable-rcon', line: 'enable-rcon=true' }

Чтобы сделать это, Первая часть довольно проста. Shift-I, затем ctrl-V для блока, пересеките строки для редактирования, введите - { regexp: '^", чтобы перейти к следующему:

- { regexp: '^rcon.port=25575
- { regexp: '^rcon.password=strong-password
- { regexp: '^enable-rcon=true

К сожалению, оттуда я немного растерялся как макрос (и или не слишком ли это или нет) мне все еще немного неясно. Есть ли какие-либо возможные подходы к решению этой проблемы, кроме макросов?

Я не ищу полное решение, а просто подсказку для лучшего (или единственного подхода) здесь, и если есть какие-то уловки, чтобы думать об этом с помощью Vim.

Любые ссылки на хорошую документацию / учебные материалы по макросам также будут УДИВИТЕЛЬНЫМИ! Я все еще новичок в Vim, так что терпите меня ... спасибо!

Ответы [ 2 ]

3 голосов
/ 20 марта 2020

Построение @ Стивена Уоррена ответьте на следующие работы по мере необходимости:

:%s/^\(\(.\+\)=.\+\)/- regex: '\2', line: '\1' }/

Соответствующий раздел:

  • С начала линии ^

  • В нем две группы, а не одна \(\)

    • Первая группа - это внешняя группа, которая соответствует вся строка

    • Вторая группа - это внутренняя группа, которая соответствует до =

  • Соответствует одному или больше символов \+ используется вместо жадного * для сопоставления любой из сторон =

Раздел замены:

  • В основном ваш ожидаемый выходной вызов для ранее согласованных групп \1 и \2
2 голосов
/ 20 марта 2020

Возможно что-то вроде следующих подстановок регулярных выражений:

:%s/^\(.*\)$/- { regexp: '^\1' }/

Или с визуально выбранными всеми соответствующими строками:

CTRL-o

:s/^\(.*\)$/- { regexp: '^\1' }/

Я полагаю, я следует объяснить это немного подробнее:

: войти в командный режим.

% Применить ко всем строкам.

s Заменить.

/ xxx / гггг / Замените xxx на yyy.

^ Привязка в начале входной строки

(xxx) (в строке соответствия) захватывает все совпадения xxx.

\ 1 (в строке замены) замените на любое совпадающее (xxx).

. * Соответствует любому количеству любых символов.

$ Якорь в конце входной строки.

Строка замены выводится в результат буквально без какой-либо интерпретации, за исключением таких вещей, как \ 1.

...