Заменить внутри заменить в Vim - PullRequest
3 голосов
/ 13 ноября 2011

Как вы заменяете внутри замены?

Я знаю, что вы можете вставить текущее слово под курсором в замену, но я хочу выполнить замену, прежде чем использовать его в качестве вывода.

Например:

  • Наличие документа, прошедшего через clbuttic filter и замена слов, которые, как вы знаете, были затронуты в худшем случае, например деинституционализация (подсказка: Совещание Соединенных Штатов Америки).В файле также есть некоторые слова, которые должным образом заменены.
  • Изменение o на 0 в Wooloomooloo (и только для этого слова) по всему документу

Пример из реальной жизни(из моей истории vim) находится в латексном документе и запускает

%s/\\begin{table}\[h\]/\\begin{table}\[H\]/c

, где я дублирую строку, чтобы получить незначительное изменение.

Ответы [ 2 ]

2 голосов
/ 13 ноября 2011

Заменить o на 0 просто:

:s/o/0/g

Возможно, вы хотите знать, как применить его к (визуальному) выбору?

:s/\%Vo/0/g

Редактировать Скорее всего, что вы хотите (см. Комментарии)

:%s/\<\zs[Wolm]\+\>\ze/\=substitute(submatch(0), 'o', '0', 'g')/g

Что это делает:

  • [Wolm]\+ соответствует последовательности, состоящей из W, o, l, m
  • \<[Wolm]\+\> совпадает (независимо) слова одного и того же (поэтому Wooloomooloo или mooW, Wlomo все совпадут, но не amool и т. Д.)
  • \zs отмечает начало матча для замены, \ze конец
  • \=substitute(submatch(0), 'o', '0', 'g') заменяет совпадение (между \zs и \ze), но заменяет 0 на o

Вы можете начать с этого паттерна

  • заменив [Wolm]\+ фактической целью
  • добавление необязательного контекста вне \zs...\ze, чтобы вы могли уменьшить совпадения
  • добавление \c в начале шаблона для включения сопоставления без учета регистра
0 голосов
/ 31 июля 2012

Попробуйте набрать Ctrl - f во время написания команды :sub. Это откроет окно командной строки и позволит вам использовать обычный режим vim для редактирования вашей команды. Если вы нажмете Enter в этом режиме, текущая строка будет выполнена. Если вы нажмете Ctrl - c , вы вернетесь в режим командной строки с текущей строкой в ​​качестве текущего текста.

Окно командной строки также происходит, когда вы случайно набираете q:. (Я знаю, что сделал это много, прежде чем понять, для чего он нужен. Он также имеет историю ваших предыдущих команд. Также попробуйте то же самое во время поиска / или введите q/.

См. Также :help cmdline-window

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