Perl регулярное выражение в vim? - PullRequest
2 голосов
/ 07 февраля 2012

Как мне написать эту команду perl regex replace в Vim? (Взято из этого учебника pandoc epub ):

perl -i -0pe \
's/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg' \
*/*.markdown

Ответы [ 3 ]

4 голосов
/ 07 февраля 2012

Я не могу говорить за -i -0pe флаги, но регулярное выражение:

s/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg

Будет:

s/^Insert\s*\(.*\).png\s*\n\(.*\)$/!\[\2](..\/figures\/\1-tn.png)/g

Обратите внимание, что вы должны избегать групп захвата и что я использовал .* вместо [^\n]* во второй группе захвата. Вам не нужен многострочный флаг.

3 голосов
/ 07 февраля 2012

Многое из того, что вы ищете, зависит от того, на что установлена ​​ваша «волшебная» настройка.см. :help magic для получения дополнительной информации о том, какие символы использует vim буквально.

0 голосов
/ 07 февраля 2012

Превратите ваш существующий однострочный в конвейерный фильтр

perl -pe 's/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg'

Затем используйте 1G!G или :%! в Vim для передачи текущего файла через этот фильтр, например,

:%!perl -pe 's/^Insert\s*(.*)\.png\s*\n([^\n]*)$/!\[\2](..\/figures\/\1-tn.png)/mg'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...