Eu frequentemente me pego tentando substituir, por exemplo, foo
por bar
e bar
com foo
em um buffer.
A maneira como costumo fazer é:
- 3 query-substitui:
aaa -> @@@
,bbb -> aaa
,@@@ -> bbb
- desista da automação e faça a substituição manualmente
Suponho que seja possível fazer algo funcionar usando a ,
sintaxe query-replace-regexp
para testar se a sequência correspondente é aaa
ou bbb
. Mas a sintaxe resultante seria muito complicada, por isso nunca tentei realmente.
A questão é que, dada a complexidade de uma tarefa, acho que deve haver uma maneira melhor de fazer uma única etapa, integrada ou em um pacote existente. Existe?
replace
refactoring
T. Verron
fonte
fonte
query-replace
, eu sei que geralmente é mais rápido doM-% str1 str2
que mover o ponto e fazer a alteração manualmente. É legal, porque não preciso perder tempo pensando no que será mais rápido, mesmo que haja apenas uma ocorrência destr1
. Idealmente, gostaria que a inversão de texto fosse tão rápida quanto possível, para que eu possa usá-la sem pensar também.(setq a (prog1 b (setq b a)))
. E pode até haver uma maneira mais simples.\,(if \1 "b" "a")
especialmente feio (contra uma regexp de\(a\)\|b
), mas ainda assim as palavras precisam ser digitadas duas vezes, se isso a incomoda.\(aaa\)\|bbb
?Respostas:
Aqui está um pequeno comando que fará isso:
fonte
query-replace
inversão, para que ele retenha todos os seus recursos? Não corresponde a 100% da definição nos meus emacs, mas eu ainda estou com 24,5 ...query-replace
família de funções da versão mais recente, portanto mantém todos os recursos. Ao final da função, adicionei minha maneira recomendada de trocar as strings mencionadas no manual do Emacs.backward
eregion-noncontiguous-p
da chamada paraperform-replace
. É um problema geral ou significa que a interfaceperform-replace
mudou entre as versões?Instalar plur
e execute o comando
plur-query-replace
e entrada
{foo,bar}
e sua substituição{bar,foo}
Pressione
y
para substituir as ocorrências conforme desejado.Existem também variantes não interativas e semelhantes a pesquisas deste comando.
fonte
;)
plur
requeremacs 24.4
.