#evil evil-surround 모드로 괄호를 감싸고 지우고 변경한다

1 minute read

괄호 쌍을 만들어주는 패키지를 추가했다. 코드를 추가할 땐, 불편함이 없다. 아니 닫는 괄호를 신경 쓰지 않아도 되니 편하다. 하지만 코드를 수정할 때, 필요 없는 닫는 괄호가 추가돼서 불편하다. 괄호 쌍을 만들어주는 패키지를 추가했다면 선택한 코드를 괄호로 감싸는 기능을 추가해야 완전체가 된다.

(use-package evil-surround
  :config
  (global-evil-surround-mode t))

evil mode를 사용하고 있어서 evil-surround mode를 설치했다. surround.vim 플러그인을 emacs로 포팅한 패키지다. evil mode를 사용하지 않는다면 smartparens 모드에 감사는 기능이 있으니 고려할만하다. Emacs and Pairs 글을 참고해 괄호로 감싸는 함수에 키를 바인딩해서 사용하면 된다.

surround.vim 예제가 좋아서 evil-surround가 퍼갔다. 이보다 좋은 예제가 안 떠올라 나도 가져왔다. 커서는 * 문자로 표시했다.

"He*llo world!"

cs"> 입력하면

<He*llo world!>

이렇게 변경된다. cs 키는 감싼 문자를 변경한다.

<q>He*llo world!</q>

cs><q> 입력 결과. 태그도 지원한다.

{He*llo world!}

cst} 입력 결과. 여기서 t 키는 태그다. 텍스트 오브젝트(text object) 문자를 그대로 지원한다.

He*llo world!

ds} 입력 결과. 감싼 문자를 제거한다.

[He*llo] world!

ysiw] 입력 결과. ys 키는 감싸는 문자를 추가한다. 여기서 iw 키도 텍스트 오브젝트다.

{ He*llo } world!

cs]{ 입력 결과. 여는 괄호, 닫는 괄호도 깨알같이 구분해서 활용한다. (, {, [ 문자는 한 칸을 띄워서 감싸고 ), }, ] 문자는 빈칸 없이 감싼다.

({ He*llo } world!)

yssb 입력 결과. s 키는 텍스트 오브젝트에서 문장이고 b 키는 괄호를 의미한다. ), }, ], > 문자 대신 b, B, r, a 문자를 사용할 수도 있다.

He*llo world!

ds}ds) 입력 결과.

<em>He*llo</em> world!

ysiw<em> 입력 결과.

<p class="important">
<em>He*llo</em> world!
</p>

VS<p class="important"> 입력 결과. V 키로 visual mode로 전환해 Hello가 있는 줄을 선택한다. visual mode에서는 S 키를 눌러 감싸는 문자를 입력할 수 있다. 태그에 속성까지 붙여서 추가했다.

"he*llo world"

다시 이 예제에서 시작.

print("hello world")

ysa"fprint 입력 결과. 이건 기대 이상이다. 함수 이름을 쉽게 넣을 수 있는 f 인자가 존재하다니.

링크

C-x C-s C-x C-c