두 줄을 서로 바꿉니다.


9

문자열의 모든 발생 (예 : string1)을 다른 문자열 (예 : string2)로 변경하고 싶습니다. 정확히 말하면 문서가 길고 이러한 문자열이 여러 번 발생합니다. 내가 현재하고있는 일은 string1-> string3을 교체 한 다음 string2-> string1을 마지막으로 string3-> string2로 바꾸는 것입니다.

이맥스에 이미 기능이 있는지 궁금합니다. 다른 솔루션도 환영합니다.

편집 : 이것은 실제로 주석에 연결된 질문의 복제본입니다. 그러나 문제는 해당 질문에 대한 대답이 항상 효과가있는 것은 아닙니다 (아래 의견 참조). 수락 된 답변의 작성자가 답변을 수정하거나 다른 해결책이 나올 때까지 기다리는 것이 좋습니다. 두 번째로 질문을 게시하기 전에 질문을 봤는데 해당 질문이 표시되지 않았습니다. 두 개의 중복 질문이 있으면 다른 표현을 사용하기 때문에 때때로 유용하며 사용자가 중복 된 질문을 찾으면 올바른 질문을 찾을 수 있습니다.

편집 2 : 텍스트 교체를위한 검색 / 바꾸기와 같은 기능에 대한 대답은 괜찮습니다.



@ T.Verron 스크래치 버퍼에서 "This"를 "that"으로 바꾸려면 링크의 허용 된 답변을 사용하려고했지만 작동하지 않습니다.
이름

어쩌면 나는 너무 빨리 받아 들였다. 마지막 두 인수를 주석으로 처리하면 ( backwardsregion-noncontiguous-p) perform-replace여기에서 작동합니다 (emacs 24.3). 다른 답변을 편집하기 전에 기회가 생기면 이맥스 25에서 테스트 할 것입니다.
T. Verron

대조적으로 @ T.Verron, 패키지 plur 사용을 제안하는 다른 솔루션. 이 상황에서는 문제없이 작동하는 것 같습니다.
이름

다른 질문에서 허용되는 답변을 변경했습니다. 구글에 관해서는, 그렇습니다. 내가하려는 일을 전달하는 키워드를 찾는 데 어려움이있었습니다. 그리고 네, 중복은 좋습니다! blog.stackoverflow.com/2010/11/…
T. Verron

답변:


11

대화식의 경우 query-replace-regexp (CM- %)는 대체를 위해 비교적 알 수없는 \를 사용하여이를 수행 할 수 있습니다.

C-M-% \(string1\)\|\(string2\)
\,(if (equal \& "string1") "string2" "string1")

대체 텍스트에 \와 그 뒤에 lisp 표현식이 있으면 해당 표현식의 값을 대체로 사용합니다. 이 경우 표현식은 "if"이며 true 및 false의 경우 조건을 리턴합니다.

의견에서 그것은 사용하는 것이 좋습니다

\, (\ 1 "string2" "string1"인 경우)

패턴이 string1과 일치하면 \ 1이 "string1"이되고 그렇지 않으면 nil이되기 때문에 작동합니다. Lisp는 0이 아닌 값을 true로 사용합니다. 이것이 효과가 있고 더 짧은 동안 내 대답이 더 유용하다고 생각합니다. 나는 lisp 지식이 제한된 사람이 코드를 더 읽기 쉽다고 생각합니다. "from"패턴이 다음과 같이 주어지면 여전히 작동하므로 두 번째 이점이 있습니다.

\(string1\|string2\)

또는

string1\|string2

2
중복 후보의 일부 의견 \,(if \1 "string2" "string1")은 regexp를 사용하여 더 간단한 구문을 제안했습니다 \(string1\)\|string2.
T. Verron

의 마지막 두 단락을 참조하십시오 (emacs) Regexp Replace.
바질

-1

글쎄, 아마도 매크로를 사용하면 쉬울 것입니다.

F3C-saRETC-bM-tF4. 질문 에이 매크로를 사용하면 다음과 같은 결과가 나타납니다.

다른 문자열 (string2)과 함께 문자열 a (string1)의 모든 발생을 변경하고 싶습니다. 정확히 말하면 문서가 길고 이러한 문자열이 여러 번 발생합니다. 내가 현재하고있는 일은 string1-> string3을 교체 한 다음 string2-> string1을 마지막으로 string3-> string2로 바꾸는 것입니다.

이맥스에 이미 기능이 있는지 궁금합니다. 다른 솔루션도 환영합니다.

나는 그 단어 뒤에 어떤 단어가 있든간에 위치를 바꾸고 a있습니다. 나중에 전체 매크로를 재정의하지 않고도 다른 단어를 바꾸도록 이러한 매크로를 편집 할 수 있습니다 C-xC-kRET.를 사용 하여 매크로를 편집 할 수 있습니다 .


1
나는 질문이 단어를 바꾸는 것과 관련이 없다고 생각합니다.
T. Verron

@ T.Verron 그것은 더 자동화 된 접근 방식을 원합니다.
shackra

1
매크로가하는 것은 각 "a"를 다음 단어와 교환 (전치)하는 것입니다. "문자열"> "문자열 a"등. 그가 원하는 것은 예를 들어 각 "a"를 "the"로 바꾸고 각 "the"를 "a"로 바꾸는 것입니다.
T. Verron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.