16 Vim 심화 - Surround
- vim
- 2021. 12. 20.
Vim 생태계에는 surround 라는 플러그인이 존재한다. 이는 vim 에서 괄호를 컨트롤할 수 있는 강력한 기능을 제공한다.
https://github.com/tpope/vim-surround
위 링크를 통해서 사실상 surround 플러그인 설치법, 사용법을 모두 익힐 수 있다.
Vim Plugin Surround
surround 는 vim 의 유명한 플러그인 중의 하나이다. VSCode Extension 인 Vim 에서는 surround 를 기본 플러그인으로 제공하고 있을정도로 유명한 플러그인이다.
surround 적용하기
웬만한 IDE 의 Vim Extension 은 surround 를 기본 플러그인으로 탑재하고 있다. 다만, 활성되지 않은 상태로 존재하는데, surround 를 활성화시키는 방법은 다음과 같다. (상술했듯이, VSCode 에서는 이 명령 없이도 기본적으로 surround 가 활성화되어있다.)
:set surround
다만, 이렇게 surround 를 활성시키는 경우 IDE 또는 Vim 을 실행시킬 때마다 해당 명령을 입력해주어야 한다는 것인데, vimrc(vim 설정 파일) 파일에 surround 플러그인이 항상 활성화되도록 지정할 수도 있다. 운영체제, IDE 별로 설정법이 다르므로 이에 대한 자세한 설명은 다음 글을 참조하도록 하자. https://github.com/johngrib/simple_vim_guide/blob/master/md/vimrc.md
surround 로 할 수 있는 일
먼저 surround 의 의미대로 '감싸는'대상은 surround 플러그인의 제어 대상이다.
surround 의 제어 대상
- 괄호 (, {, [, ], }, )
- 따옴표 ', ", `
- 태그 <any>
먼저, surround 플러그인으로 어떤 동작을 수행할 수 있는지 알아보는게 순서일 것 같다. surround 를 활용해서 다음과 같은 일들을 수행할 수 있다.
surround 로 할 수 있는 일 (surround 는 surround 의 제어 대상(위)을 의미한다.)
- `ys{모션}{씌울 surround}` - surround 씌우기
💡 이 동작은 visual 모드로부터 `S` 명령어로도 진입이 가능하다. - `ds{지울 surround}` - surround 지우기
- `cs{모션}` - surround 변경
Vim Surround with GIF
surround 의 github 페이지에 모든 내용이 축약되어있으므로, 여기서 surround 의 기능을 상세히 소개하기보다, gif 스크린샷으로 어떤 일들을 할 수 있는지 간략히 살펴보도록 하자.
ys - surround 씌우기
`ys{모션}{surround}` 명령어로 대상을 지정한 surround 로 감쌀 수 있다. 닫히는 괄호를 사용하면, 괄호 안쪽에 공백이 포함되지 않는다.
ys3w)
열리는 괄호를 활용하면 괄호와 감싸는 대상 사이에 공백이 포함된다.
ys3w(
필자는 자주 사용하는 기능은 아니지만, 태그를 씌울 수도 있다. 속성을 함께 기입하더라도 문제 없다.
💡 아무래도 이 기능은 VSCode Extension Vim(v1.21.10) 에서는 정상적으로 작동하지 않는 것 같아 보입니다. intelliJ 의 Vim Extension 에서 동작하는 모습으로 대체합니다. 태그 surround 에 관하여는 제 컴퓨터 환경에서 VSCode, IntelliJ, (Original) Vim 모두에서 의도치 않은 동작들을 서로 다른 모습으로 보여주었습니다.
ys$<div class="line">
ds - surround 지우기
vim 은 자체적으로 감싸는 대상을 모두 지우기가 가능했다. `da{감싸는 대상}` 또는 `di{감싸는 대상}` 으로 그 동작이 가능했다. 만약 괄호만 지우고 싶거나, 따옴표만 지우고 싶다면? 정확히 괄호 즉, 감싸는 대상만을 지우는 기능은 surround 에서 제공한다.
열리는 괄호는 '공백 포함'을 의미하므로, 커서가 위치한 곳에 포함된 괄호를 안쪽 공백을 포함하여 삭제할 수 있다.
ds(
마찬가지로 닫히는 괄호를 활용하면 양쪽 공백을 포함하지 않고 괄호만 지우기도 가능하다.
ds)
cs - surround 바꾸기
surround 를 변경하기도 가능하다. 특히 따옴표 ', ", ` 사이에 변환하는 경우 유용하다.
다음 코드는 홑따옴표 `'`로 감싸진 영역을 쌍따옴표 `"`로 변경하는 명령이다. `cs{FROM surround}{TO surround}` 형태로 사용할 수 있다.
cs'"
surround 명령도 micro macro(dot command)를 활용하여 반복할 수 있다.
cs 명령어로 surround 괄호로 변경시 공백을 포함하고 싶다면 열린 괄호를 사용해주면 된다. 닫힌 괄호는 공백이 포함되지 않는다.
cs")
cs"(
이상으로 surround 기능을 알아보았다. 특히 프로그래머에게 유용한데, 프로그래머는 괄호나 따옴표를 다룰 일이 많기 때문이다. 이 포스팅에서는 다양한 상황들을 다루지 못했지만, 생각보다 자주 해당 기능을 찾게 될 것이다. 괄호나 따옴표를(사실 태그는 자주 사용하지 않음) 씌우고, 삭제하고, 다른 surround 로 대체할 수 있다는 사실을 기억하도록 하자.
다음 시간에는 Vim 의 기능이면서, 생각보다 자주 쓰이지만, '기본편'에서 다루지 못했던 기능들을 살펴보도록 한다.
'vim' 카테고리의 다른 글
15 Vim 심화- 찾아 바꾸기 (substitute) (0) | 2021.12.20 |
---|---|
14 Vim 심화 - Macro (매크로) (2) | 2021.12.18 |
13 Vim 기본 - 기본편 요약, 치트시트, 커리큘럼 (5) | 2021.12.06 |
12 Vim 기본 - undo(되돌리기), redo(재실행) (0) | 2021.12.05 |
11 Vim 기본 - 명령 n번 반복하기 (0) | 2021.12.05 |