*이 튜토리얼은 NeoVim 0.20-dev 기준으로, 기존 Vim 사용자의 입장에서 OS X/Linux 사용자를 위해 작성되었습니다.

목차

  1. 설치
  2. 새로운 기능
  3. NeoVim용 설정
  4. NeoVim용 플러그인

1. 설치

  • Mac의 경우에는 Homebrew를 이용해서 설치할 수 있다: brew install neovim/neovim/neovim
  • Ubuntu에서는 PPA를 통해 설치할 수 있다:
# https://github.com/neovim/neovim/wiki/Installing-Neovim
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:neovim-ppa/unstable
sudo apt-get update
sudo apt-get install neovim

init.vim

:h vimrc를 보면 $XDG_CONFIG_HOME/nvim/init.vim에 작성하라고 되어있는데, OS X에는 $XDG_CONFIG_HOME변수가 설정되어있지 않지만 뭐 대충 무시하고 ~/.config에다 만들면 되는 것 같다.

# 이건 :h nvim-from-vim 을 입력하면 확인할 수 있다.
mkdir -p ${XDG_CONFIG_HOME:=$HOME/.config}
ln -s ~/.vim $XDG_CONFIG_HOME/nvim
ln -s ~/.vimrc $XDG_CONFIG_HOME/nvim/init.vim

을 하면 별다른 이상 없이 Neovim에서 Vim의 설정을 대부분 그대로 이용할 수 있다. 내 경우는 Syntastic, YouCompleteMe를 비롯한 플러그인들이 모두 그대로 작동하는것을 확인할 수 있었다. 뭐 여기에 대해서 더 궁금한게 있다면 :h nvim-from-vim를 입력해서 읽어보자.

2. 새로운 기능

Terminal Buffer

NeoVim은 버퍼로 터미널을 쓸 수 있다. :bel sp 50 | resize 10 | terminal (*terminalterm으로 줄여 써도 된다)을 입력하면 짠~

그냥 보면 뭐 그저 그런 기능처럼 보이지만, 써본 결과 Vim의 경험(노멀 모드에서의 명령어)이 터미널에서 그대로 유지되니까 은근히 매력있는 기능으로 느껴진다. 다만, 터미널 모드에서 노멀 모드로 빠져나오는 키 조합(<CTRL-\><CTRL-n>)이 좀 귀찮으니 다음 파트도 읽고 키를 리맵하는걸 추천한다.

3. NeoVim용 설정

Window(buffer) 이동 키 조합 간소화

NeoVim에는 아까 보았듯이 터미널 버퍼가 새로 생겨서, 이때 사용할 수 있는 키 리매핑 명령어도 생겼다. tnoremap 처럼 터미널 모드라서 t 접두사가 붙는다. 이를 이용해 윈도우(버퍼)간 이동을 <ALT(Option)-{H,J,K,L}> 로 할 수 있게 리맵을 해보자.

if has('nvim')
    :tnoremap <A-h> <C-\><C-n><C-w>h
    :tnoremap <A-j> <C-\><C-n><C-w>j
    :tnoremap <A-k> <C-\><C-n><C-w>k
    :tnoremap <A-l> <C-\><C-n><C-w>l
endif
:nnoremap <A-h> <C-w>h
:nnoremap <A-j> <C-w>j
:nnoremap <A-k> <C-w>k
:nnoremap <A-l> <C-w>l

이때 iTerm2(OS X)에서는 주의해야 할 점이 있다. iTerm2에서 Option키의 동작을 바꿔주지 않으면 키가 먹히지 않기때문에 Profiles에서 아래처럼 Option키의 동작 설정을 +Esc로 바꿔주어야 한다.

Terminal Scrollback 버퍼 크기 설정

init.vimlet g:terminal_scrollback_buffer_size = 100000을 추가하면 터미널 에뮬레이터의 스크롤백 버퍼 크기를 지정할 수 있다다(1..100000). 기본값은 100인데, 100줄보다 더 이전의 출력을 보고싶다면 이 부분을 수정하면 된다.

마우스 비활성화

NeoVim은 어째서인지 마우스를 기본적으로 활성화시켜놓았다. 아무래도 마우스 부분을 많이 고쳐서 더 쓸만하게 만들었기 때문인 것 같은데, 덕분에 평소에 Vim의 기본값인 마우스 비활성화 상태에만 익숙해진 난 고생을 했다. 마우스 비활성화는 init.vimset mouse=r 이나 set mouse=c를 추가하면 된다.

4. NeoVim용 플러그인

NeoVim의 가장 큰 특징중 하나는 Asynchronous Plugin Architecture를 지원한다는 것이다. 빠른 속도를 기대할 수 있지 않을까(Edit: Vim 8에서 Vim에도 이러한 기능이 추가되었다). 그리고 Vim의 경우에는 Python 없이 Vim을 컴파일했을 경우 이를 Vim(과 플러그인)에서 사용하기 위해서는 Vim을 아예 재컴파일 해야 했지만, NeoVim의 경우에는 pip(or pip3) install neovim처럼 분리된 형태로 설치할 수 있다. 후술하겠지만 이게 정말 훌륭한 아이디어인 것은 pyenv와 같은 python virtual environment와 충돌 없이 Vim을 이용할수 있다는 점이다.

vim-plug

(Vim 8에서도 비슷하게 이용할수 있다) 기존의 플러그인 매니저(e.g. Vundle)와 비슷하지만 좀 더 편리한 기능을 몇가지 지원한다. 대표적으로는:

  • Parallel installation/update of plugins - 설치가 매우 빠르다
  • Lazy(On-demand) Loading - 플러그인을 필요로 할때만 로드되게 할 수 있어 Vim을 빠르게 켤 수 있게 해준다
  • Post-update hook - 플러그인 설치 후에 해야 할 일을 지정해놓으면 알아서 수행된다
    예를들어 YouCompleteMe의 경우, ./install.py --clang-completer와 같은 일을 수행해야 플러그인의 사용이 가능한데, 이를 플러그인 설치/업데이트시에 자동으로 수행하게 할 수 있다, 그것도 병렬적으로 수행되므로 다른 플러그인을 다운로드하는 동안에 이루어지게 할수 있다!
  • 플러그인의 버전 관리, 그리고 종속성 관리가 편리하다

python-mode

Python-mode는 파이썬을 이용할 때에 있었으면~ 싶은, 아쉬웠던 기능들을 모아둔 플러그인이다. Autocompletion, Syntax Highlighting, Refactoring, Go To Definition, Flake8 Check 등등..

이 플러그인은 정말 NeoVim과 잘 맞는다. Vim을 쓸 때에는 pyenvpyenv-virtualenv 를 이용하면서 Python의 환경을 바꿀때마다 버전과 설치된 패키지가 다름에도 불구하고 제대로 반영되지 않는 경우(e.g. 컴파일시에 사용한 Python 버전으로만 동작)가 많았는데, NeoVim을 쓰면 각 환경에서 pip install neovim만 해 두면 인식된(활성화된) 환경의 Python을 이용하게 되어 굉장히 편리하다.