Vim: как изменить окружение фразы (разного типа и длины) - PullRequest
0 голосов
/ 28 мая 2018

У меня есть файл Rmarkdown, и я хочу перевести его в медиа-вики-файл, потому что это разные языки разметки, у них разный синтаксис, и я хочу найти способ изменить их все с помощью команды substitute.

Два варианта использования:

  1. Изменить заголовки # title, ## subtitle и т. П. На =title= и ==subtitle==,
  2. Изменить окружение$inline formula$, $$standalone formula $$ и тому подобное для <math>inline formula</math> и :<math>standalone formula</math>.

Два отличаются тем, что первым я хочу сопоставить начало фразы, а затем окружить еенекоторые другие символы, а второй меняет один вид окружения на другой.Я не хочу записывать некоторые макросы, потому что фраза может сильно отличаться, и их много.Я пробовал некоторые команды, такие как %s/=*/*/gc или %s/$*$/<math>*</math>/gc, но они не работали, поэтому я думаю, что мог испортить регулярные выражения (мои знания о регулярных выражениях довольно ограничены, и я не уверен, какой из символов должен бытьсбежал в Vim).

1 Ответ

0 голосов
/ 28 мая 2018

На каждом диалекте регулярного выражения * - это жадный квантификатор, который означает «0 или более предшествующего атома, как можно больше», тогда как он означает «любой символ», когда используется как глобус (в вашей оболочке,например).

Поскольку в Vim для подстановок используются регулярные выражения, а не глобусы, должно быть понятно, почему :%s/=*/*/gc и %s/$*$/<math>*</math>/gc не делают ничего полезного.

Еще одна проблема с вашимПопытка состоит в том, что вы как-то ожидаете, что механизм регулярных выражений будет угадывать, какую часть совпадения использовать в замене.Это делается путем повторного использования «подвыражений», иногда называемых «группами захвата».

См. :help \(, :help \1 и http://vimregex.com/.

  1. Изменитьзаголовки #title, ##subtitle и т. п. =title= и ==subtitle==,
:%s/^\(#\+\)\(.*\)/\=repeat('=',len(submatch(1))).submatch(2).repeat('=',len(submatch(1)))

Обратите внимание, что заголовки уценки имеют неправильный формат.

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