Обратный порядок строки для поиска и строки для замены в vim - PullRequest
1 голос
/ 17 января 2012

Я часто замечаю, что делаю

:s/foo/bar/g
*move to different line*
:s/bar/foo/g

на разных строках.Есть ли простой способ поменять их местами, чтобы я мог быстро запустить вторую версию?

Ответы [ 3 ]

2 голосов
/ 17 января 2012

Быстрая опция однократного использования заключается в следующем

:s/~/<c-r>//g<cr>

~ соответствует последней замене, а <c-r>/ вставит текущую строку поиска из регистра "/. Поэтому переворачиваю подмену. Предупреждение состоит в том, что ~ может использоваться только один раз, потому что после замены он будет изменен. Также выполнение поиска между заменами приведет к изменению регистра "/.

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

Используйте q:, чтобы открыть окно командной строки из обычного режима, или нажмите ctrl-f из командной строки (при условии установки по умолчанию 'cedit').

У Дрю Нейла есть эпизод vimcasts, в котором рассматривается уточнение шаблонов поиска через командное окно , которое аналогично.

:h /~
:h c_CTRL-R
:h quote/
:h cmdwin
:h q:
:h 'cedit'
2 голосов
/ 17 января 2012

Вы можете попробовать плагин Abolish ( git homepage ):

 :Subvert/{foo,bar}/{bar,foo}/g

Без плагина:

 :%s/foo\|bar/\=submatch(0) ==# 'foo' ? 'bar' : 'foo'/g
1 голос
/ 17 января 2012

Вы можете использовать dict в vim

:%s/foo\|bar/\={'foo':'bar', 'bar':'foo'}[submatch(0)]/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...