Я часто ловлю себя пытается заменить , например , foo
с bar
и bar
с foo
в буфере.
Я обычно делаю это либо:
- 3 запроса-Заменяет:
aaa -> @@@
,bbb -> aaa
,@@@ -> bbb
- отказаться от автоматизации и просто сделать замену вручную
Я предполагаю, что можно заставить что-то работать, используя ,
синтаксис, query-replace-regexp
чтобы проверить, соответствует ли строка aaa
или bbb
. Но полученный синтаксис был бы слишком громоздким, поэтому я никогда не пробовал его.
Дело в том, что с учетом того, насколько распространена задача, я думаю, что должен быть лучший, одношаговый, способ сделать это, встроенный или в существующем пакете. Есть?
replace
refactoring
Т. Веррон
источник
источник
query-replace
, я знаю, что это обычно быстрее,M-% str1 str2
чем перемещать точку и делать изменения вручную. Это приятно, потому что мне не нужно тратить время на размышления о том, что будет быстрее, даже если есть только один случайstr1
. В идеале я хотел бы, чтобы инверсия текста была такой же быстрой, чтобы я мог использовать ее, не задумываясь об этом.(setq a (prog1 b (setq b a)))
. И может быть даже проще.\,(if \1 "b" "a")
особенно уродливым (против регулярного выражения\(a\)\|b
), но все же слова нужно вводить дважды, если это вас беспокоит.\(aaa\)\|bbb
?Ответы:
Вот небольшая команда, которая сделает это:
источник
query-replace
для инверсии, чтобы он сохранил все свои особенности? Это не соответствует 100% определению в моем emacs, но я все еще с 24.5 ...query-replace
семейства функций из последней версии, поэтому он сохраняет все функции. В конце функции я добавил рекомендованный способ замены строк, упомянутый в руководстве по Emacs.backward
иregion-noncontiguous-p
при вызовеperform-replace
. Это общая проблема, или это означает, что интерфейсperform-replace
изменился между версиями?Установить плур
и запустить команду
plur-query-replace
и ввод
{foo,bar}
и его замена{bar,foo}
Нажмите,
y
чтобы заменить вхождения по желанию.Существуют также неинтерактивные и похожие на поиск варианты этой команды.
источник
;)
plur
требуетemacs 24.4
.