VIM 스타일링: colorscheme 과 vim-airline 설치

다른 주제의 글을 작성하기에 앞서.. 촌스러운 색상의 vim 을 좀 꾸미고 시작해보려 합니다. 괜찮은 colorscheme 과 vim-airline 설치만으로도 많은 변화가 있을꺼예요.

VIM 기본 화면


vim 에 트루 컬러 사용 설정

본 단계는 사용하는 터미널 에뮬레이터가 트루 컬러를 지원하는 경우에만 진행되어야 합니다. 미지원인 경우, 마치 현대 미술 작품같은 괴상한(?) 색의 vim 을 보실 수 있습니다. 전 개인적인 용도로 XShell 6 구입해서 사용중입니다만, 이 툴은 개인적/비상업적인 용도라면 무료이니 한 번 사용해 보시길 권장드립니다. (하이라이트 세트 기능 따봉!!)
vim 에서도 트루 컬러를 지원해야 합니다. 일단 최신 버전이라면 당연히 지원하겠지만, 혹시 모르니 확인 해보기로 합니다. 다음 명령으로 vim 버전 확인 시 +termguicolors 항목이 있어야 하고, 없는 경우 업데이트가 필요합니다.

$ vim --version | grep termguicolors
+autocmd +find_in_path +mouse_xterm +termguicolors

다음으로 .vimrc 에 트루 컬러 설정을 추가합니다.

$ vim ~/.vimrc
..
set termguicolors
...


vim colorscheme 설치

한 사이트에서 재밌는 설문을 진행 중입니다. 2020 Best VIM color-schemes 인데, 본 글 작성 기준 gruvbox 가 1위이므로 한번 사용 해보겠습니다. vim-plug 를 지원하니 ~/.vimrc 에 다음과 같이 gruvbox 을 추가합니다.

$ vim ~/.vimrc
...
call plug#begin('~/.vim/plugged')
...
Plug 'morhetz/gruvbox'
...
call plug#end()
...

수정한 ~/.vimrc 를 저장 후, 바로 읽고 설치를 진행합니다.

:w
:source %
:PlugInstall

설치된 gruvbox 를 적용하기 위해 ~/.vimrc 내 vim-plug 초기화 섹션 다음 아무 곳에다가 아래 라인을 추가하고 저장합니다. gruvbox 에서는 dark, light 두 가지 모드를 지원하고 다음처럼 background 설정으로 정할 수 있습니다. 전 dark 모드로 설정하겠습니다. 추가로 contrast 레벨도 hard, medium, soft 로 지원하는데 마음에 들었던 hard 로 설정합니다.

let g:gruvbox_contrast_dark="hard"
set background=dark
autocmd vimenter * colorscheme gruvbox

vim 재구동하면 다음과 같은 색상의 화면을 보실 수 있습니다.

VIM Gruvbox 적용 화면


vim-airline 설치

잘 알려져 있는 vim-airline 도 설치하겠습니다. VIM의 tab, status line 을 나이스하게 바꿔주는 플러그인이고, 한번 써보면... vim 기본 디자인은 너무 심심하게 느껴집니다. 또한 ctrlp, nerdtree 와 같은 다양한 플러그인들과 연계되어 약간의 편의성을 더 제공합니다.
설치 시 vim-plug 를 지원하므로 ~/.vimrc 내 vim-plug 초기화 섹션에 아래 두 줄을 추가합니다. 위에서 설치한 Gruvbox 에서 vim-airline 테마도 제공하므로 vim-airline-theme 는 당장 쓰일일은 없습니다만 추가해주기로 합니다. 이 테마 플러그인에서 제공하는 테마들은 이 곳에서 확인 가능합니다.

$ vim ~/.vimrc
...
call plug#begin('~/.vim/plugged')
...
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

...
call plug#end()

수정한 ~/.vimrc 를 저장, 바로 읽고 설치를 진행합니다.

:w
:source %
:PlugInstall

이후 vim 재구동 시, vim-airline 이 적용됩니다.

VIM Gruvbox + vim-airline 적용 화면

추가로, 사용중인 폰트가 Powerline 기호들을 지원한다면 vim-airline 의 powerline-font 옵션을 활성화해서 조금 더 다양한 기호와 함께 예뻐질 수 있습니다. Powerline 기호들을 지원하는 폰트들을 설치하는 방법은 다음과 같습니다.

  1. Nerd Fonts 사이트에서 OS 에 따라 다운받아 사용
  2. D2Coding 폰트와 같이 폰트 자체에서 Powerline 기호를 지원하는 폰트를 사용
  3. Ubuntu의 경우에는 Powerline 기호가 패치된 폰트 패키지를 설치하여 사용

1번의 경우는 다른 글에서 조금 더 자세히 다룰 예정이니 본 글에서는 스킵하겠습니다. 2번의 경우가 제가 사용하는 방법이며, 평소 사용하던 폰트라 저의 경우는 추가 작업은 없었습니다. 3번의 경우는 다음과 같이 사용 가능합니다.

$ sudo apt-get install fonts-powerline
[sudo] password for xxxxxx:
...
Setting up fonts-powerline (2.7-3) ...
Processing triggers for fontconfig (2.13.1-2ubuntu3) ...
$

이후 Ubuntu 의 터미널 폰트 설정을 xxx for Powerline 이라는 postfix 가 붙은 폰트 중 하나를 선택해서 사용해주시면 되고, 폰트 리스트는 이 곳에서 확인 가능합니다.

마지막으로 ~/.vimrc 에 vim-airline 관련 설정을 추가합니다. 전 다음과 같이 설정했으며 필요에 따라 변경하시면 됩니다.

" Smarter tab line 활성화: 모든 파일 버퍼 출력
let g:airline#extensions#tabline#enabled = 1
" Tab line 구분자 '|' 로 설정
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
" Tab line 에 파일명만 출력되도록 설정
let g:airline#extensions#tabline#formatter = 'unique_tail'
" Powerline-font 활성화
let g:airline_powerline_fonts = 1

이렇게 vim 스타일링이 끝났습니다. 아래는 본 글의 과정들이 적용된 최종 화면입니다.


gruvbox 배경색 강제 변경

회사에도 똑같이 설정하고 써봤는데, gruvbox 의 배경색이 완전 검은색이 아니라서 좀 거슬립니다. gruvbox github 페이지 뒤져봐도 배경색만 커스텀 할 방법은 보이지 않아, 플러그인 코드를 직접 수정하기로 합니다. gruvbox github 페이지를 보면 background=dark, contrast=hard 인 경우, 배경색 코드가 #1d2021 입니다. 해당 플러그인이 설치된 경로로 가서 한번 찾아보겠습니다.

$ cd ~/.vim/plugged/gruvbox/
~/.vim/plugged/gruvbox$ grep -rn "1d2021" *
colors/gruvbox.vim:89:let s:gb.dark0_hard = ['#1d2021', 234] " 29-32-33

어딜 수정해야 할지 바로 알 수 있습니다. 다음과 같이 해당 파일 내 배경색 부분(#1d2021, 아래 밑줄쳐진 부분)을 검은색 코드(#000000)으로 변경 후 저장&종료합니다.

~/.vim/plugged/gruvbox$ vim colors/gruvbox.vim
...
" fill it with absolute colors
let s:gb.dark0_hard = ['#000000', 234] " 29-32-33
let s:gb.dark0 = ['#282828', 235] " 40-40-40
let s:gb.dark0_soft = ['#32302f', 236] " 50-48-47
...

이후 vim 구동 시 아래처럼 배경색이 검은색으로 잘 변경된 것을 확인할 수 있습니다.


* Environment

- HW: DS920+ (Synology NAS)
- OS: Ubuntu 20.04 (Docker container)
- vim 8.1


* References

- slant.co: What are the best VIM color-schemes?​
- GitHub: morhetz/gruvbox
- GitHub: vim-airline/vim-airline
- GitHub: vim-airline/vim-airline-themes
- GitHub: powerline/fonts
- GitHub: ryanoasis/nerd-fonts
- GitHub: naver/d2codingfont
- XShell 6

Leave a Comment