- Today
- Total
Byeo
4. Vimrc-3 (Folding) 본문
4. Vimrc-3 (Folding)
이번 포스트에서는 코딩의 능률을 올릴 수 있는 folding에 대해서 정리해보도록 하겠습니다.
목차
이 글은 [vim tips: folding fun] 문서를 참고하여 제작하였습니다.
Folding (폴딩) 이란?
폴딩이란, 아래 사진과 같이 특정 코드 영역을 숨기는 기능을 의미합니다.
만약 prime()함수가 기존에 다음과 같이 있었다고 가정해보죠.
개발 과정에서 이 prime함수를 더 이상 수정할 일이 없다면 숨겨도 괜찮을 것입니다. 이 때 폴딩을 하면 다음과 같이 코드 일부를 숨길 수 있습니다.
코드가 짧으면 모두 펼쳐져 있어도 상관 없겠지만, 수백 줄, 수천 줄에 이르기 시작하면 코드가 어디 있는지 파악이 어려워지기 시작합니다. 이러한 상황에서 개발을 계속 해야 하는 경우, 폴딩을 사용하여 필요한 부분만 보이도록 하는 것이 능률을 향상 시키는데 도움이 될 것입니다.
이제 폴딩이 무엇이고 언제 쓰면 좋은지 알아봤으니 어떻게 사용하는지 알아보도록 하겠습니다.
Folding Enable
폴딩은 다음 명령어를 통해 enable 및 disable 할 수 있습니다.
set foldenable (<-> set nofoldenable)
Folding Method
폴딩의 기준으로는 다음과 같은 option들을 제공합니다.
set foldmethod=manual
set foldmethod=indent
set foldmethod=expr
set foldmethod=marker
set foldmethod=syntax
set foldmethod=diff
- manual : 기준 없이 유저의 마음대로 폴딩을 수행할 수 있습니다.
- indent : 들여쓰기를 기준으로 폴딩을 수행합니다. 같은 들여쓰기 수준이면 같은 폴딩 레벨을 지닙니다.
- expr : 유저가 정의한 규칙에 따라서 폴딩을 수행합니다. 만약에 method를 expr로 사용한다면 다음과 같이 foldexpr도 직접 정해줘야 합니다.
set foldexpr=getline(v:lnum)[0]==\"a\" "문장에서 첫 글자가 a인 문자를 같은 폴딩 level로 취급합니다.
- marker : 유저가 정의한 문자열을 기준으로 폴딩을 수행합니다. 만약에 method로 marker를 사용한다면, 다음과 같이 foldmarker를 정의해줄 수 있습니다. default는 {{{, }}} 입니다.
set foldmarker=/*,*/ "주석 기호 /*, */ 를 하나의 폴딩 level로 취급합니다.
- syntax : 언어 문법을 인식하고, 해당 문법에 따라 폴딩을 수행합니다. 대부분의 언어는 $VIMRUNTIME/syntax폴더에 vim파일 (e.g., c.vim, python.vim)로 존재합니다.
- diff : vim diff모드를 사용할 때 내용이 다른 line을 제외하고는 모두 폴딩합니다. (vim diff 모드에서 동작하는 명령어)
Folding 단축키
Folding level control
zo : 커서 위치의 폴딩을 한 단계 내립니다. (1 level open)
zO : 커서 위치의 폴딩을 모든 단계 내립니다. (All level open)
zc : 커서 위치의 폴딩을 닫습니다. (1 level close)
zC : 커서 위치의 폴딩을 모든 단계 올립니다. (All level close)
zr : 파일 내의 모든 폴딩을 한 단계 내립니다.
zR : 파일 내의 모든 폴딩을 모든 단계 내립니다. (모든 폴딩이 open 됨)
zm : 커서 위치의 폴딩을 한 단계 올립니다.
zM : 파일 내의 모든 폴딩을 한 단계 올립니다. (모든 폴딩이 close 됨)
- 폴딩 단계가 오를수록 코드가 덜 보이게 됩니다.
Movement on Folding
zj : 다음 폴딩 위치로 커서를 이동합니다.
zk : 이전 폴딩 위치로 커서를 이동합니다.
[z : 현재 커서의 열린 폴딩에서 시작위치로 이동합니다.
]z : 현재 커서의 열린 폴딩에서 끝 위치로 이동합니다.
Manual Folding
visual mode + zf : 블록된 만큼 폴딩
zf2j : 현재 커서로부터 3줄 (커서 위치 줄 포함)을 폴딩
:20,30 fold : 20줄 부터 30줄 까지 폴딩
zfa} : 현재 커서로부터 다음 '}' 문자와 상응하는 '{' 사이의 영역을 폴딩 - ')', ']', '>' 모두 가능
zf/string : 현재 커서부터 "string" 까지 폴딩 (zf/return0 과 같이 사용 가능)
zd : 현재 커서의 manual 폴딩을 제거
zE : 문서 내의 모든 manual 폴딩을 제거
Folding Configuration
Foldnestmax
set foldnextmax=10
폴딩의 최대 중첩 단계를 지정합니다.
위 사진에서 +"- - - - -" 는 현재 이 폴딩이 몇 단계인지를 의미합니다.
Foldlevel
set foldlevel=3
현재 문서전체를 폴딩할 레벨을 지정합니다. 폴딩 레벨은 0부터 시작합니다. 만약 foldlevel=0으로 지정하면 모든 폴딩이 닫힙니다. (zM과 동일)
Foldlevelstart
set foldlevelstart=3
foldlevel은 문서에서 직접 폴딩 레벨을 지정했다면, foldlevelstart는 문서를 open할 때 foldlevel을 지정합니다.
다음 포스트는 custom key binding에 대해서 다뤄보도록 하겠습니다.
'프로그래밍 (Programming) > Vim' 카테고리의 다른 글
6. Vimrc-5 (Space & Tab) (0) | 2021.07.27 |
---|---|
5. Vimrc-4 (편집 위치 불러오기) (0) | 2021.07.15 |
3. Vimrc-2 (UI) (0) | 2021.07.09 |
2. Vimrc-1 (테마) (0) | 2021.07.08 |
1. Vim 기초 (0) | 2021.07.02 |