참고로 region(다른 에디터에서 블럭 개념)을 설정하고 그것을 narrow 시키고 어떤 작업을 수행하고 다시 wide 시키는 것은 고급? 사용법입니다. 아직 emacs를 배운지 얼마 되지 않았다면 이렇게 하는 것보다, 바로 M-x query-replace-regexp를 써서 치환할 때 '!'를 써서 다 한꺼번에 하는 것보다는 'y'나 'n'을 써서 차례로 따라가며 바꿔치기하는 것이 좋습니다.
한가지 더 Emacs의 환상적인? 기능은, recursive edit입니다. 보통 일반적으로 이런 치환 (패턴 A를 패턴 B로 바꾸는)은 아무 editor나 다 지원합니다. 그런데, 만약 이런 치환 작업을 반복하다가 (이 작업과는 상관없이) 따로 고쳐야 할 부분이 발생했다고 합시다. 예를 들면 다음과 같은 상황입니다.
--
AA BB CC
AA BB DD
AA BB CC
AA BB CC
--
위에서 BB를 모두 ZZ로 치환한다고 합시다. 이 때 "M-x query-replace <RET> BB <RET> ZZ <RET>"을 입력하면 가장 처음 BB가 반전되면서 다음과 같이 물어봅니다:
--
AA [u]BB[/u] CC
AA BB DD
AA BB CC
AA BB CC
--
query replacing BB with ZZ: (? for help)
이 때, 'y'를 입력하면 다음과 같이 됩니다:
--
AA ZZ CC
AA [u]BB[/u] DD
AA BB CC
AA BB CC
--
query replacing BB with ZZ: (? for help)
그런데 가만 보니 "DD"가 있는 것을 볼 수 있습니다. 이건 오타입니다. 따라서 고쳐야 하는데, 여기서 바로 고치면 지금 수행중인 치환 작업이 취소가 되어 버립니다. 따라서 보통 다음과 같이 두 가지 방법 중 하나를 쓰게 됩니다.
첫째, 지금하고 있는 치환 작업을 취소하고 DD를 CC로 고친 다음 치환 작업을 계속한다.
둘째, 지금하고 있는 치환 작업을 계속 수행하고 나중에 DD를 CC로 고친다.
그러나 emacs에서는 지금 하고 있는 치환 작업을 잠깐 미뤄두고 DD를 CC로 고친 다음 다시 치환 작업을 계속할 수 있습니다. 아까 치환 작업 도중 "C-r"을 누르면 recursive-edit 모드로 들어가게 되고, 이때 원하는 작업을 수행한 다음, "C-M-c"를 누르면 치환 작업을 계속할 수 있습니다.
두번째 줄로 가서 mark "C-<SPC>", 마지막 줄 마지
두번째 줄로 가서 mark "C-<SPC>", 마지막 줄 마지막 글자까지 가서 narrow-to-region "C-x n n",
이러면 앞으로 모든 명령은 현재 블럭에만 적용됩니다.
여기서 "C-x x"하면 커서가 아까 mark 시작한 곳으로 가게 되고, 이 때 다음 명령을 입력합니다.
M-x query-replace-regexp <RET>
\([^, ]+\) <RET>
, \1 <RET>
그리고 "!"를 입력해서, 전부 바꿉니다.
마지막으로 widen "C-x n w"으로 아까 narrow했던 것을 원상복귀 시킵니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
[quote="cinsk"]두번째 줄로 가서 mark "C-<SPC
안녕하세요~!
cinsk님 답변대로 해보았습니다.
되는것 같은데 결과가 조금 다르게 나오네요.
편집할 내용을 정리해보면.
먼저 블럭 시작을 지정하고 C+x n n 하면 아래처럼 됩니다.
그리고 C+x C+x하여 커서를 옮긴다음 정규식을 사용한 결과는..
이렇습니다. 예상 결과가 다른데 다시한번 답변을 부탁드립니다. ^^;
Ooops~[code:1]\([^, ]+\&
Ooops~
이 아니고,
입니다.
참고로 region(다른 에디터에서 블럭 개념)을 설정하고 그것을 narrow 시키고 어떤 작업을 수행하고 다시 wide 시키는 것은 고급? 사용법입니다. 아직 emacs를 배운지 얼마 되지 않았다면 이렇게 하는 것보다, 바로 M-x query-replace-regexp를 써서 치환할 때 '!'를 써서 다 한꺼번에 하는 것보다는 'y'나 'n'을 써서 차례로 따라가며 바꿔치기하는 것이 좋습니다.
한가지 더 Emacs의 환상적인? 기능은, recursive edit입니다. 보통 일반적으로 이런 치환 (패턴 A를 패턴 B로 바꾸는)은 아무 editor나 다 지원합니다. 그런데, 만약 이런 치환 작업을 반복하다가 (이 작업과는 상관없이) 따로 고쳐야 할 부분이 발생했다고 합시다. 예를 들면 다음과 같은 상황입니다.
위에서 BB를 모두 ZZ로 치환한다고 합시다. 이 때 "M-x query-replace <RET> BB <RET> ZZ <RET>"을 입력하면 가장 처음 BB가 반전되면서 다음과 같이 물어봅니다:
이 때, 'y'를 입력하면 다음과 같이 됩니다:
그런데 가만 보니 "DD"가 있는 것을 볼 수 있습니다. 이건 오타입니다. 따라서 고쳐야 하는데, 여기서 바로 고치면 지금 수행중인 치환 작업이 취소가 되어 버립니다. 따라서 보통 다음과 같이 두 가지 방법 중 하나를 쓰게 됩니다.
첫째, 지금하고 있는 치환 작업을 취소하고 DD를 CC로 고친 다음 치환 작업을 계속한다.
둘째, 지금하고 있는 치환 작업을 계속 수행하고 나중에 DD를 CC로 고친다.
그러나 emacs에서는 지금 하고 있는 치환 작업을 잠깐 미뤄두고 DD를 CC로 고친 다음 다시 치환 작업을 계속할 수 있습니다. 아까 치환 작업 도중 "C-r"을 누르면 recursive-edit 모드로 들어가게 되고, 이때 원하는 작업을 수행한 다음, "C-M-c"를 누르면 치환 작업을 계속할 수 있습니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
아.. 이제 잘 돌아가네요. 고맙습니다. ^^그런데 송구스럽게도 또
아.. 이제 잘 돌아가네요. 고맙습니다. ^^
그런데 송구스럽게도 또 질문을.. ㅠ_ㅠ
우연하게도 etheme가 cinsk님이 만드셨더군요.
http://www.cinsk.org/sw/emacs-scripts/etheme-ko.html
여기에서 etheme.el 을 다운받아서 설치문서대로 했는데
emacs 시작할때 에러가 뜹니다.
이거 죄송스럽지만 A/S좀 부탁드립니다. ;;
제가 쓰는 etheme.el 입니다.
댓글 달기