Я часто делаюобратный порядок строки, чтобы найти и заменить строки в Vim
:s/foo/bar/g
*move to different line*
:s/bar/foo/g
на разных линиях. Есть ли простой способ поменять их, чтобы я мог быстро выполнить вторую версию?
Я часто делаюобратный порядок строки, чтобы найти и заменить строки в Vim
:s/foo/bar/g
*move to different line*
:s/bar/foo/g
на разных линиях. Есть ли простой способ поменять их, чтобы я мог быстро выполнить вторую версию?
Вы можете попробовать Abolish плагин (git homepage):
:Subvert/{foo,bar}/{bar,foo}/g
Без плагина:
:%s/foo\|bar/\=submatch(0) ==# 'foo' ? 'bar' : 'foo'/g
Вы можете использовать dict
в Vim
:%s/foo\|bar/\={'foo':'bar', 'bar':'foo'}[submatch(0)]/g
Быстрое использование только один раз вариант заключается в следующем:
:s/~/<c-r>//g<cr>
~
совпадает с последней заменой и <c-r>/
вставит текущую строку поиска из "/
регистра. Поэтому переворачивание подстановки. Слово предупреждения состоит в том, что ~
может использоваться только один раз, потому что после замены он будет изменен. Также выполнение поиска между заменами приведет к изменению регистра "/
.
В качестве альтернативы вы можете попытаться использовать окно командной строки, чтобы отредактировать команду как текст в любом другом окне.
Используйте q:
, чтобы открыть окно командной строки из нормального режима или нажмите Ctrl-F из командной строки (предполагается, что значение по умолчанию для 'cedit'
).
У Drew Neil есть эпизод vimcasts, который имеет дело с refining search patterns via the command-window, который похож.
:h /~
:h c_CTRL-R
:h quote/
:h cmdwin
:h q:
:h 'cedit'
Вы хотите поменять местами вокруг? Пример, который вы дали seens делать «ничего» sice «foo», будет «foo» после замены. – Mithrandir
Я отредактировал его, чтобы сделать его более ясным. Я хотел бы сделать что-нибудь найти и заменить где-нибудь, а затем один обратный ему в другом месте. Это бывает достаточно часто для меня ... – invisiblerhino
Возможный дубликат [this] (http://stackoverflow.com/questions/6237908/how-to-write-only-one-pattern-to-exchange-two-strings-in -Два-пути-в-VIM) – kev