VIM에서 Tab 을 Sapce 로
vim 로 개발을 하고 있는데, 공통 개발 가이드로 tab 대신 space 4칸을 쓰기로 결정했다.
그런데, Makefile 같은 경우에는 반드시 tab 을 써야하기 때문에, 파일을 종류에 따라서 tab 을 사용하는 정책을 다르게 정해주어야 한다.
구글에서 일반적인 가이드는 아래와 같다. 하지만 아래와 같은 방법으로는 Makefile 일 경우에도 tab 을 space 로 변환시켜 주게 된다.
"새로운 라인을 시작할 때, smart 하게 auto indentation 을 수행한다
set smartindent
"tab을 눌렀을때 인식하는 칸 수
set tabstop=4
"tab 을 space 로 확장하라는 설정
set expandtab
set et
">>, << 키로 들여/내어 쓰기할 때, 스페이스 개수
set shiftwidth=4
가장 쉬운 방법중에 하나는 vim 으로 Makefile 을 열고 :set noexpandtab 을 매번 쳐주고 시작하는 것이다. 까먹을 수도 있고, 매우 귀찮다. 더 좋은 방법을 찾아보자.
구글링을 하다보면, 아래와 같은 가이드가 있다. 좋은 방법중 하나인 것 같다. 원하는 파일 타입에 따라서 tab 설정을 할 수 있다.
(참고 : https://github.com/brutasse/dotfiles/blob/master/vimrc)
filetype plugin indent on " enable file type detectionautocmd FileType cpp setlocal tabstop=4 shiftwidth=4 expandtab autocmd FileType c setlocal ts=4 sw=4 sts=4 et smartindent
반드시 filetype plugin indent on 명령을 수행하여 file type 을 감지할 수 있도록 해주어야 한다.
현재 사용하고 있는 방법은 autocmd BufEnter 를 사용하는 방법이다. 위의 방법과 같이 특정한 파일 type 에 대해서 설정을 해주면 세부적으로 설정할 수 있어서 좋은데, 내가 사용하는 환경에서는 특정 파일에서만 tab 을 space 로 변환하면 되었기 때문에, 아래와 같은 한줄로 설정할 수 있다.
(참고: https://goo.gl/N8IBr)
filetype plugin indent on
autocmd BufEnter *.\(c\|cpp\|java\|h\) set et
BufEnter 는 http://vimdoc.sourceforge.net/htmldoc/autocmd.html#BufEnter 설명으로 보면 buffer 에 entering 된 이후에 호출되는 이벤트로 filetype 별로 설정을 할때 많이 사용된다고 한다. autocmd 의 event 중 하나다.
(vim 에서 :buffers 를 실행하면 edit 하는 파일의 리스트를 보여준다. 여기서 buffer 라는게 편집중인 하나의 파일을 의미하는 것으로 추정할 수 있다.)
(참조 : https://bakyeono.net/post/2015-08-13-vim-tab-madness-translate.html,
원문 : https://joshldavis.com/2014/04/05/vim-tab-madness-buffers-vs-tabs)
즉 위 라인의 설명은 파일을 edit 하게되었을 때, 해당 buffer 를 읽어오게 되면 파일 타입중 *.c, *.cpp, *.java, *.h 파일에 대해서 expandtab 을 수행하라는 의미이다.
.vimrc 에 위 내용을 설정해놓으면 c, cpp, java, h 파일에 대해서 tab 이 space 로 잘 변환되고, Makefile 등의 파일은 tab 이 정상적으로 입력된다.
강제 Tab 입력하기
<Ctrl+v> + <tab>
Ctrl+v 를 누른 후에 tab 키를 누르면 원래대로 tab 키가 먹힌다.
이전 명령 설정 파일 찾기
:verb set expandtab?Last set from /usr/share/vim/vim74/ftplugin/python.vim
'IT 기술 > 개발환경_유틸 관련 팁' 카테고리의 다른 글
[git] git reset 후 commit message 재사용 (0) | 2022.01.12 |
---|---|
[Python 개발환경] pip 설치/사용법 (3) | 2018.09.26 |
[GIT] commit message 유지하면서 commit 에 포함된 파일 제거하기 (0) | 2018.05.29 |
[git/gerrit] gerrit 을 사용한 여러 project 함께 빌드 (0) | 2018.04.26 |
[RFC 2119] MAY, MAY NOT, SHALL, SHOULD 의 사용 (0) | 2017.03.03 |