I często znajduję się próbując zastąpić np foo
z bar
a bar
z foo
w buforze.
Zazwyczaj robię to w następujący sposób:
- 3 query-Zastępuje:
aaa -> @@@
,bbb -> aaa
,@@@ -> bbb
- zrezygnuj z automatyzacji i po prostu zrób to ręcznie
Przypuszczam, że możliwe jest uzyskanie działania przy użyciu ,
składni w query-replace-regexp
celu sprawdzenia, czy dopasowany ciąg to aaa
lub bbb
. Ale wynikowa składnia byłaby zbyt kłopotliwa, więc tak naprawdę nigdy tego nie próbowałem.
Chodzi o to, biorąc pod uwagę, jak powszechne jest to zadanie, myślę, że musi istnieć lepszy, jednoetapowy sposób, albo wbudowany, albo w istniejącym pakiecie. Jest tu?
replace
refactoring
T. Verron
źródło
źródło
query-replace
wiem, że zazwyczaj szybszeM-% str1 str2
jest przesunięcie punktu i wykonanie zmiany ręcznie. To miłe, ponieważ nie muszę tracić czasu na myślenie o tym, co będzie najszybsze, nawet jeśli jest tylko jedno wystąpieniestr1
. Idealnie byłoby, gdyby inwersja tekstu była tak szybka, żebym mogła z niej korzystać również bez zastanowienia.(setq a (prog1 b (setq b a)))
. I może być nawet prostszy sposób.\,(if \1 "b" "a")
szczególnie brzydkie (w stosunku do wyrażenia regularnego\(a\)\|b
), ale nadal słowa muszą być wpisywane dwukrotnie, jeśli ci to przeszkadza.\(aaa\)\|bbb
?Odpowiedzi:
Oto małe polecenie, które to zrobi:
źródło
query-replace
inwersji, aby zachować wszystkie swoje funkcje? Nie pasuje do 100% definicji w moich emacach, ale wciąż mam 24,5 ...query-replace
rodziny funkcji z najnowszej wersji, więc zachowuje wszystkie funkcje. Na końcu funkcji dodałem zalecany sposób zamiany ciągów wymienionych w podręczniku Emacsa.backward
iregion-noncontiguous-p
od połączenia doperform-replace
. Czy to ogólny problem, czy oznacza to, że interfejsperform-replace
zmieniał się między wersjami?Zainstaluj plur
i uruchom polecenie
plur-query-replace
oraz dane wejściowe
{foo,bar}
i ich wymiana{bar,foo}
Naciśnij,
y
aby zamienić wystąpienia według potrzeb.Istnieją również nieinteraktywne i podobne do isearch warianty tego polecenia.
źródło
;)
plur
wymagaemacs 24.4
.