fish shell上で快適(個人的感想)なneovim&python環境を構築してみた
どうもDI部の岩澤です。
突然ですが、neovimっていいですよね。
pythonもいいですよね。
つまり、neovimで快適にpython書けたら最高ですよね!!(笑顔)
そこで、neovimで快適なpython環境を構築してみました。
環境
macOS Mojave 10.14.4
iTerm2 Build 3.2.8
fish version 2.7.1
NVIM v0.3.1
方針
- fish shell上で使う
- pythonまわり
- pyenv使いたい
- 仮想環境をactivateしていたらそちらを優先したい
- 通常はneovim用の仮想環境を参照したい
- 入力補完したい
- そのままpythonを実行したい
- neovimまわり
- 色々表示したい
こんな感じになりました
左側のウィンドウでファイルを選択して開いたり、現在開いているファイルの実行結果が右下に表示されています。
各種設定ファイルと解説
fish
fishのインストールについては以下を参考にしました。
fish shell を使いたい人生だった | DevelopersIO
~/.config/fish/fish.config
- neovimの設定を~/.config/ にまとめるためXDG_CONFIG_HOME定数を設定
- pyenvとvirtual-env回りの設定
# neovimの設定ファイル配置場所 set -gx XDG_CONFIG_HOME "$HOME/.config" # pyenv関連設定 eval (pyenv init - | source) eval (pyenv virtualenv-init - | source) set -x PYENV_ROOT (pyenv root)
neovimのインストールとneovim用仮想環境の構築
以下を参照に構築しました。
Setting up Python for Neovim · deoplete-plugins/deoplete-jedi Wiki
※fish shellを使っているので、
$ pyenv activate neovim3
は
$ source ~/.pyenv/versions/neovim3/bin/activate.fish
で読み替える必要があります。
neovimの設定構成について
neovimの設定です。
設定内容が多いため、複数ファイルに分けています。
各ファイルの内容については以下を参照してください。
setting_files(1.0.0.0001)
ファイル | 説明 |
---|---|
~/.config/nvim/init.vim | メインの設定ファイル。プラグインやスキーマ読み込み |
~/.config/nvim/keymap.rc.vim | keymap設定をまとめたファイル |
~/.config/nvim/options.rc.vim | オプション設定をまとめたファイル |
~/.config/nvim/dein/dein.toml | 共通のプラグイン |
~/.config/nvim/dein/dein_lazy.toml | 言語依存のプラグイン |
~/.config/nvim/plugins/*.rc.vim | プラグインごとの設定をまとめたファイル |
~/.config/nvim/init.vim
(1) activateした仮想環境があればそちらを参照し、ない場合はデフォルトの仮想環境を参照
activate中はVIRTUAL_ENVに設定が入っているので、それを参照します。
ない場合はデフォルト仮想環境を参照します。
また、QuickRun実行時にデフォルト仮想環境のpythonを認識させるため$PATHに追記しています。
(2) 管理プラグイン「dein」を使用するための設定
プラグインの登録はdein.toml, dein_lazy.tomlに記載するようになっています。
未インストールのプラグインは自動インストールします。
(未登録プラグインの自動アンインストールもできるのですが、体感できるほど起動が遅くなるのでコメントアウトしています)
(3) カラースキーマ設定
コメント色を変えたかったのでその設定も書いています。
if &compatible set nocompatible endif " (1) activateした仮想環境があればそちらを参照し、ない場合はデフォルトの仮想環境を参照 if exists("$VIRTUAL_ENV") let g:python3_host_prog = $VIRTUAL_ENV . '/bin/python' else let g:python3_host_prog = $HOME . '/.pyenv/versions/neovim3/bin/python' " QuickRun実行時対応 let $PATH = $HOME . '/.pyenv/versions/neovim3/bin:' . $PATH endif " (2) 管理プラグイン「dein」を使用するための設定 " Add the dein installation directory into runtimepath set runtimepath+=~/.cache/dein/repos/github.com/Shougo/dein.vim if dein#load_state('~/.cache/dein') call dein#begin('~/.cache/dein') call dein#add('~/.cache/dein/repos/github.com/Shougo/dein.vim') " TOML を読み込み、キャッシュしておく let g:rc_dir = $XDG_CONFIG_HOME . '/nvim/dein' let s:toml = g:rc_dir . '/dein.toml' let s:lazy_toml = g:rc_dir . '/dein_lazy.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() endif " 未インストールのプラグインがあればインストールを行う if dein#check_install() call dein#install() endif filetype plugin indent on syntax enable " (3) カラースキーマ設定 " コメントの色を固定する(colorschemeより前に設定すること) autocmd ColorScheme * highlight Comment ctermfg=167 guifg=#008800 set background=dark colorscheme atom-dark-256 runtime! options.rc.vim runtime! keymap.rc.vim
導入プラグインについて
快適な環境構築のため、複数のpluginをインストールしています。
外観とか
- gosukiwi/vim-atom-dark: A vim theme inspired by Atom's default dark theme
カラースキーマです。 -
vim-airline/vim-airline: lean & mean status/tabline for vim that's light as air
-
vim-airline/vim-airline-themes: A collection of themes for vim-airline
ステータスラインのテーマ設定ができるプラグインです。良い感じにしてくれます。 -
Yggdroot/indentLine: A vim plugin to display the indention levels with thin vertical lines
インデントを可視化してくれます。
便利系プラグイン
- Shougo/unite.vim: Unite and create user interfaces
-
Shougo/vimfiler.vim: Powerful file explorer implemented by Vim script
vimがfile explorer化します。tree形式で選択し、複数同時に開いたり、pngファイルもOS設定に従って開けたりします。
※画面2枚目の左側を表示はこれです。 -
Shougo/vimproc.vim: Interactive command execution in Vim.
非同期実行やOSの環境変数を参照してコマンドを実行してくれます。thinca/vim-quickrunと組合わせて使っています。 - thinca/vim-quickrun: Run commands quickly.
保存していなくても書き途中のプログラムを実行できるプラグインです。
python関連
- w0rp/ale: Asynchronous linting/fixing for Vim and Language Server Protocol (LSP) integration
pep8対応用です。細かいところまで整形してくれるオカン的プラグインです。入れましょう。
なお設定値は以下のサイトを参考にしました。
ALE(on NeoVim)でPythonコードを楽に整形する - Qiita
- miyakogi/vim-virtualenv: Work with python virtualenvs in vim
Pythonの仮想環境をvimが参照するようになるプラグインです。
入力補完
- Shougo/deoplete.nvim: Dark powered asynchronous completion framework for neovim/Vim8
- deoplete-plugins/deoplete-jedi: deoplete.nvim source for Python
- davidhalter/jedi-vim: Using the jedi autocompletion library for VIM.
入力補完関連のプラグインです。jedi-vimだけ設定をしています。
- 補完ウィンドウは手動、CTRL+Spaceで表示
- 補完ウィンドウが開いたときは未選択状態
[[plugins]] repo = 'davidhalter/jedi-vim' on_ft = ['python','py'] hook_source = ''' let g:jedi#popup_on_dot = 0 " ドット(.)を入力したとき自動で補完しない(Ctrl+Space) let g:jedi#popup_select_first = 0 " 補完候補の1番目を選択しない let g:jedi#show_call_signatures = 1 " 関数の引数表示 autocmd FileType python setlocal omnifunc=jedi#completions " 補完エンジンはjediを使う autocmd FileType python setlocal completeopt-=preview " ポップアップを表示しない '''
まとめ
かなりの時間がかかってしまいましたが、いい感じな環境が作れて今は満足しています。
次はlanguage server protocol での入力補完が気になっているので手を出すかもしれません。
参考文献
Setting up Python for Neovim · deoplete-plugins/deoplete-jedi Wiki
neovim向けのPython周りの設定で参考にしました。
NeoBundle から dein.vim に乗り換えたら爆速だった話 - Qiita deinの自動インストールについてです。
[dein.vim] hook の便利な使い方 - Qiita
deinのhook_add, hook_sourceについて詳細な説明があります。
ALE(on NeoVim)でPythonコードを楽に整形する - Qiita
ALEプラグインの設定で参考にしました。
NeoVim用のPython環境を整える - Qiita
pyenvと固定値回りの設定を参考にしました。
neovimの設定ファイルとディレクトリの置き場 - neovim/vim入門
neovimの設定ファイルのディレクトリ構築を参考にしました。
Neovim の設定を綺麗に整理してみた - Qiita
プラグイン設定ファイルのディレクトリ構成を参考にさせていただきました。