vim系は慣れると使いやすのですが環境設定が大変です。自分も最初は環境構築まで数日かかりました。
なので、後輩Vimmerが同じミスをしないように流れを記しておこうと思います。エラーが出たらコメント欄にどうぞ。
事前準備としてhomebrewを入れておきましょう。
neovim
vimでもいいんですが、設計をモダンにして高速化・機能追加などを図ったバージョンであるneovimをお勧めします。deinとかでもneovimが推奨されています。
brew install neovim
また、Python側にneovimと併用するためのパッケージが必要となるのでそれも入れてください。
pip3 install neovim
init.vim
neovimの設定ファイルは.vimrcではなくinit.vimです。
場所は~/.config/nvim/init.vim
にしましょう。
deinを導入するときは、本家webサイトにあるようなコードを貼っつけとけば最低限は大丈夫です。ただ、もっと管理しやすい方法をこの後に書くのでコピペはもう少し待ってください。
tomlファイル
deinを使ってパッケージをガンガン入れていくわけですが、パッケージは何十個も入れることを考えると直接書くとそれだけで100行くらい行っちゃうのでが読みづらいです。外部ファイルから読み込むことでスリムにしましょう。~/.config/nvim/toml/dein.toml
,~/.config/nvim/toml/dein_lazy.toml
に空のテキストファイルを入れた状態でinit.vimを次のようにします。
ただし、gitが使えるようにしておいてください(brew install git
)。
"plugin settingslets:cache_home= expand('~/.config/nvim')lets:dein_dir=s:cache_home.'/dein'lets:dein_repo_dir=s:dein_dir.'/repos/github.com/Shougo/dein.vim'if!isdirectory(s:dein_repo_dir)call system('git clone https://github.com/Shougo/dein.vim '. shellescape(s:dein_repo_dir))endiflet&runtimepath =s:dein_repo_dir.",".&runtimepath
if exists("$VIRTUAL_ENV")if!empty(glob("$VIRTUAL_ENV/bin/python3"))letg:python3_host_prog= substitute(system("which python"),'\n','','g')elseletg:python_host_prog= substitute(system("which python"),'\n','','g')endifendifif&compatible
set nocompatible
endifif dein#load_state(s:dein_dir)call dein#begin(s:dein_dir)" プラグインリストを収めた TOML ファイル" 予め TOML ファイル(後述)を用意しておくletg:rc_dir=s:cache_home.'/toml'lets:toml=g:rc_dir.'/dein.toml'lets:lazy_toml=g:rc_dir.'/dein_lazy.toml'" TOML を読み込み、キャッシュしておくcall dein#load_toml(s:toml,{'lazy':0})call dein#load_toml(s:lazy_toml,{'lazy':1})" 設定終了call dein#end()call dein#save_state()endifif dein#check_install(['vimproc.vim'])call dein#install(['vimproc.vim'])endifif has('vim_starting')&& dein#check_install()call dein#install()endif
これでneovimを起動するとdein自身のインストールが始まります。
tomlファイルの形式
百聞は一見にしかず。自分のtomlファイルの一部を貼り付けておくのでご覧ください。
[[plugins]]repo='Shougo/dein.vim'[[plugins]]repo='Shougo/vimproc.vim'hook_post_update='''letcmd='make'letg:dein#plugin.build=cmd'''[[plugins]]repo='Shougo/defx.nvim'[[plugins]]repo='Shougo/neosnippet-snippets'
[[plugins]]repo='Shougo/deoplete.nvim'hook_source='''letg:deoplete#enable_at_startup=1inoremap<expr><tab>pumvisible()?"\<C-n>":\neosnippet#expandable_or_jumpable() ?\"\<Plug>(neosnippet_expand_or_jump)":"\<tab>"letg:deoplete#auto_complete_delay=50letg:deoplete#enable_camel_case=0letg:deoplete#enable_ignore_case=0letg:deoplete#enable_refresh_always=0letg:deoplete#enable_smart_case=1letg:deoplete#file#enable_buffer_path=1letg:deoplete#max_list=100'''on_i=1[[plugins]]repo='Shougo/neosnippet'hook_source='''imap<C-k><Plug>(neosnippet_expand_or_jump)smap<C-k><Plug>(neosnippet_expand_or_jump)xmap<C-k><Plug>(neosnippet_expand_target)ifhas('conceal')setconceallevel=2concealcursor=nivendif'''on_i=1depends=['neosnippet-snippets'][[plugins]]repo='davidhalter/jedi'on_ft='python'[[plugins]]repo='zchee/deoplete-jedi'hook_source='''letg:deoplete#sources#jedi#server_timeout=20'''on_ft='python'
解説すると、
- dein_lazyの方は一定条件が満たされるまで起動しないプラグイン。起動速度を速くできる。
- on_ftにfiletypeを指定すると条件付けできる。on_i=1とするとインサートモードに入った瞬間に読み込みを開始する。
- dependsを使うと依存関係を指定できる。
- hook_sourceの内容はこのプラグインが読み込まれる時に実行される。
くらいでしょう。
もっと詳しくはこの記事が参考になるかもです。
これに乗っているものを全て入れないといけないわけではないですが、Pythonの補完をするためには最低限deopleteとjediとdeoplete-jediは入れてください。
仕上げ
この状態でneovimを起動して、:UpdateRemotePlugins
を実行すると諸々のファイルが読み込まれ、補完ができるようになります。
うまくいかない場合は:checkHealth
を実行してみてください。
なお、自分のnvimファイルはここで公開しています。参考にしてください。