Emacs에서도 멋지게 대체하고 싶습니다.
Emacs x 정규식
Emacs의 오랜 라이벌인 Vim은 정규 표현식을 사용한 대체가 강력한 것으로 알려져 있습니다.
실제로, Vimmer가 수수께끼의 타이핑을 하고 소스 코드가 뻔뻔하게 변해가는 모습을 본 적이 있는 사람은, 「나도 이런 편집을 할 수 있으면 좋겠다」라고 생각할지도 모릅니다.
이 페이지에서는, 이 Vimmer 의 괄호 좋은 치환을 Emacser 에서도 간단하게 할 수 있도록(듯이) 하는 것을 목적으로 합니다.
환경 구축 Emacs는 확장력이 심상이 아니다(별로 Vim도 VSCode도 확장하지 않으면 단지 문진입니다만), 것으로 알려져(원인으로 갈등) 되고 있습니다만, 이 당을 신속하게 해결하는 것에, Spacemacs 있습니다.
Spacemacs 는 Emacs 의 확장 기능을 간단하게 도입할 수 있도록 한 것이며, 본 환경 구축에서는 이쪽을 이용합니다.
rm -rf ~/.emacs.d
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
위의 명령을 실행 한 후 Emacs를 시작하면 Spacemacs의 기본 설정을들을 수 있다고 생각합니다. 주의해야 할 점은 keybind 를 듣는 부분에서 emacs 를 선택해야 한다는 점입니다. 이렇게하면 Emacs의 표준 키 바인딩을 사용할 수 있습니다. 다른 키 바인딩을 선택할 수 있지만 Emacser가 Spacemacs를 사용하려면 여기를 사용하는 것이 더 쉽습니다.
확장 기능 추가
C-x C-f ~/.spacemacs 에서 Spacemacs 구성 파일인 .spacemacs 를 엽니다. 기본적으로는 dotspacemacs-configuration-layers 와 dotspacemacs-additional-packages , #dotspacemacs/user-config 를 만나서 다양한 확장 기능을 조정합니다.
이번에는 정규식과 그 대체를 지원하기 위한 패키지인 visual-regexp 와 visual-regexp-steroids 를 도입합니다.
dotspacemacs-configuration-layers
'(
;;;
;; ---------------------------------------------------- ----------------
;; Example of useful layers you may want to use right away.
;; Uncomment some layer names and press <SPC f e R> (Vim style) or
;; <M-m f e R> (Emacs style) to install them.
;; ---------------------------------------------------- ----------------
;; 다음 추가
ivy
auto-completion
better-defaults
;; ...
)
dotspacemacs-additional-packages '(
;; 다음 추가
visual-regexp
visual-regexp-steroids
)
(defun dotspacemacs/user-config ()
"..."
;; 다음 추가
(global-set-key (kbd "M-%") 'vr/query-replace)
)
이것을 쓰면, M-m f e R ( M-x dotspacemacs/sync-configuration-layers ) 로 설정 파일을 반영합니다.
Tips:
Spacemacs를 사용하면 M-m과 M-x C-x를 접두사로 붙여 적용 가능한 명령을 미니 버퍼에 표시 할 수 있습니다.
예를 들어, M-m이면 명령 목록이 표시됩니다. 그리고 major mode commands인 m 를 다음에 눌러, e (emacs/spacemacs) r (dotspacemacs/sync-configuration-layers) (와)과 인터랙티브에 커멘드 입력을 실시해, 원하는 커멘드를 실행할 수가 있습니다.
대학 등에서 무리하게 Emacs 를 이용하는 것을 강요시킬 수 있는 경우, 이러한 커멘드는 암기시키는 것이 일반적입니다만, Spacemacs 에서는 이러한 기능을 확인하면서 실행할 수가 있습니다. 확실히 그들은 Emacs를 싫어하게 하기 위하여 수업을 하고 있는 것임에 틀림없다. 
Emacs 정규식 우선은 간단하게 선택·치환해 본다
예로서 다음의 텍스트를 이용해 설명을 진행해 갑니다.
Hello.
Hey!
Hi!
Hoge.
먼저 Emacs로 검색해 봅시다. 명령은 C-s 또는 M-ms s s입니다. 그러면 Swiper: 라는 입력 버퍼가 나타나므로 여기에 Hello. 를 입력해 봅시다. 타이핑할 때마다 필터링이 이루어지고 있는지 확인할 수 있다고 생각합니다.
좁히기를 할 수 있으면, 다음에 치환을 해 봅시다.
M-%로 대체를 시작해 봅니다. 먼저 M-% Hello. [RET] Hello. 무엇에서 무엇으로 대체하는지 시각적으로 알 수 있다고 생각합니다. ?로 대체하는 방법을 선택할 수 있습니다. 예를 들어 y 로 지금 선택되고 있는 캐릭터 라인을 치환해, n 로 치환하지 않고 다음의 선택사항에 천이 합니다. !는 모든 문자열을 일괄 치환하는 방법으로 범위 선택(C-SPC + 화살표)과 조합하여 범위 내 일괄 치환을 할 수 있습니다. 
정규식의 특수 기호
Emacs에서 정규식의 특수 기호는 다음과 같습니다.
기호
의미
예(regex -> match)
.
일부 문자
h.llo -> hello
x\*
x의 0회 이상의 반복
hel\*o -> helllllllo
x+
x의 1회 이상의 반복
hel\*o -> helllllllo
x?
x가 존재하거나 없을 수 있습니다.
hela?lo -> hello
x\{i,j\}
x가 i 회 이상 j 회 이하 존재한다.
hel\{1,3\}o->helllo
[…]
… 내 중 하나와 일치
h[A-z]\*o -> hello
[^…]
… 안에 어울리지 않는다.
[1-9]\*1 -> hello1
^
행의 시작과 일치
^hello->hello
$
행 끝에 일치
hello$ -> hello
\
1. 특수 기호 이스케이프
he\$llo -> he$llo
2. 특수한 정규 표현 시스템의 도입
C-q C-j
개행(\n)
백 슬래시 (\)를 사용하여 Emacs 특정 정규 표현식 시스템을 사용할 수 있습니다.
이 예제를 몇 가지 소개합니다. Or 선택 (\|)
hello\|hy -> hello 그룹화 (\(...\))
\(hello\|hy\)! -> hy! 단어 (\b)
\bhello -> hello
이것은 hogehellohy와 일치하지 않습니다. 변수명 등의 치환에 적합하다고 말할 수 있습니다. 덧붙여 \B 는 그 반대입니다. 모든 문자(\w)
h\w+o -> hello 모든 특수 문자(\W)
h\w+\W+o -> hell___o 공백 문자(\s-)
hogeho\s-+geho -> hogeho geho 선택한 항목 복원(\)
치환을 실시하는데 있어서, 원래의 단어를 이용한 변환을 하고 싶은 경우가 있다고 생각합니다. 그럴 때는 \{idx} 를 사용하는 것으로 매치한 캐릭터 라인을 이용할 수가 있습니다.
예를 들어, hello 에 대해, \(hel\)\(lo\) [RET] \1\1\2 로 하는 것으로, helhello 라고 할 수 있습니다. emacs-lisp 함수 호출 (\,)
\, 를 사용하여 emacs-lisp 함수 중 일부를 사용할 수 있습니다.
예를 들어, hello 에 대해, \(\w+\) [RET] \,(capitalize \1) 로 하는 것으로, Hello 와 할 수 있습니다.
Tips:
#capitalize
선두 대문자
#downcase
소문자화
#upcase
대문자화
replace-count
지금까지의 교체 횟수 정규 표현식을 사용하여 바꾸기
앞의 예를 생각해 봅시다.
Hello.
Hey!
Hi!
Hoge. 예 1
Q. 다음과 같이 바꾸십시오.
Hello.
Hey.
Hi.
Hoge.
A. 답변 예
! [RET] . 예 2
Q. 다음과 같이 바꾸십시오.
Hello.
HeyHey!
HiHi!
Hoge.
A. 답변 예
\(\w+\)\(!\) [RET] \1\1\2 응용 대체 예 1.
jan feb mar apr may jun jul aug sep oct nov dec
이것을,
Jan 1
Feb 2
Mar 3
Apr 4
May 5
Jun 6
Jul 7
Aug 8
Sep 9
Oct 10
Nov 11
Dec 12
합니다.
A. 답변 예
\(\w+\)\s-? [RET] \,(capitalize \1) \,(+ 1 replace-count) [C-q C-j]
Reference
이 문제에 관하여(Emacs에서도 멋지게 대체하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MeguruMokke/items/a10316f13d88351b7ad0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
rm -rf ~/.emacs.d
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
Reference
이 문제에 관하여(Emacs에서도 멋지게 대체하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MeguruMokke/items/a10316f13d88351b7ad0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)