또 괜히 삽질 한번..
Vim 에서 자동 완성계는 YouCompleteMe 가 꽉잡고 있는 형국이다. 나도 몇년째 그냥 그걸 쓰고 있는데.. 오늘 문득, 다른 대안은 없을까하다가, deoplete.nvim 을 발견하게 됐다.
헌데, 개발자에 의하면, 이 프로그램은 완성(즉, 개발 끝!)되었고, 문제점이 생겼을 경우에만 조치를 취할 예정이라고 한다. 그러면서 ddc.vim 을 추천했는데, 이건 최소 vim 8.2.0662 에서부터 돌아간다. (ddc.vim 설치법은 따로 정리했다.)
여기서 문제!
내가 사용 중인 일부 vim 들은 8.0 / 8.1 에 머물러 있다고!
그렇다고 vim 만을 최신판으로 올리자니 그것도 귀찮고..(우분투용으로 비공식 PPA 가 있긴 하다. 다만, arm 용은 제공되지 않는다. 이유는 알 수 없지만, 빌드에 실패된 상태 그대로 남아있다. 반면, 같은 제작자가 만든 vim-daily 에는 arm 용도 올라와있다.) 그리하여 그냥 deoplete.nvim 을 택하기로 했다.
다만, deoplete.nvim 도 vim 8.1 부터 사용 가능하다. 우분투 18.04 에는 8.0 대 vim 이 제공되고 있기에, 여기선 결국 PPA 등으로 vim 새 판을 설치해야한다.
vim 은 오래된 동네이기에, 딱 고정된 설치법보다는, 여러 대안이 존재한다. 특히 plug-in 을 다루는 방법에 다양한 접근법이 있는데, vim-plug 도 그 중 하나다. 따라서, vim-plug 을 먼저 설치해줘야 한다.
Vundle 로도 가능하긴 할텐데, 최신 유행(?)은 vim-plug 이다. 따라서 Vundle 은 과거의 추억으로 남기기로 한다.
Vim-Plug 설치
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
이러면 ~/.vim/autoload/plug.vim
이란 파일이 생긴다. 이걸로 vim-plug 설치는 끝이다.
보다 자세한 설명은 Tutorial 참고.
YCM 은 Vundle 로 설치하게끔 알려져있지만, vim-plug 으로도 되긴 된다.
다만, 조금 이해(와 더불어 인내까지도)가 필요한 모양이다.
deoplete.nvim 설치
vim 에 설치하려면 ~/.vimrc
에 이런 식으로 내용을 추가한다. call plug#begin
과 call plug#end
사이에 Plug
명령을 넣는다.
" Plugins will be downloaded under the specified directory. call plug#begin(has('nvim') ? stdpath('data') . '/plugged' : '~/.vim/plugged') if has('nvim') Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' } else Plug 'Shougo/deoplete.nvim' Plug 'roxma/nvim-yarp' Plug 'roxma/vim-hug-neovim-rpc' endif let g:deoplete#enable_at_startup = 1 " List ends here. Plugins become visible to Vim after this call. call plug#end()
여기서 nvim
은 NeoVim 을 의미하는 듯 한데.. 따라서 그냥 Vim 을 사용할 땐 if 문을 빼줘도 관계없을 듯 하다.
추가 프로그램 설치(Python)
deoplete 이 제대로 돌아가려면, 다음 두가지 꾸러미가 필요하다.
$ pip3 install -U msgpack pynvim
최종 명령
이제, vim 을 재실행하고, :PlugInstall
명령을 내리면 끝!
만약 뭔가 오류가 발생한다면 해당 내용을 잘 살핀 뒤 해결하도록 한다. msgpack
이나 pynvim
이 없으면 당연히 제대로 설치되지 않는다.
deoplete 설명서가 다소 불친절해서(라기보다는 전문가용으로 투박하게 써있기에), 적절한 설치법을 알게되기까지 시간이 좀 걸렸다. 게다가 vim-plug 사용법까지 공부해야 했기 때문에 더더욱 시간이 걸렸다.
다른 언어는 안쓰니 모르겠고, 내가 사용하고자 했던 Shell script 는 잘 지원된다. 변수명만 재사용할 수 있으면 되는데, 그 목적으로는 충분히 만족한다. YouCompleteMe 는 꽤 덩치가 큰데 비해, 이건 그렇지 않아서 SBC 에서도 큰 무리없이 사용할 수 있겠다. 다만, 큐비트럭에서 써보니, 확실히 로딩 시간이 좀 오래걸리긴 한다. 이건 어쩔 수 없나..