DjangoやPythonを普段書くのでfishの良さとか、Django使う人にNeoVimを活用していく人が増えればいいですねっと。。
Mac上でインストールの方法
shellで
brew tap neovim/neovim
完了したら
brew install --HEAD neovim
~/.config/nvim/ を作成
mkdir ~/.config/nvim/
~/.config/nvim/init.vimが設定ファイルになるので作成。
vim ~/.config/nvim/init.vim
Python3の設定
brew install pyenv
pyenv install python 3.7.0
## Fish Shellの設定
```~/.config/fish/config.fish
# Path to Oh My Fish install.
set -gx OMF_PATH $HOME/.local/share/omf
" (中略)
" ↓ -xがないとエクスポートできないので注意。
set -x XDG_CONFIG_HOME ~/.config/ XDG_CONFIG_HOME
export $XDG_CONFIG_HOME
" 一番最後はこれになっている
source $OMF_PATH/init.fish
プラグインを書き込むファイルの事前作成
~/.config/nvim/ 上に下記ファイルを作成しておく。
・dein.toml
・dein_lazy.toml
ここから設定に入る。
let g:python3_host_prog = expand('~/.pyenv/versions/neovim3/bin/python')
を入れることで
python3の設定ができるのでdeoplete.vimなどpython3が必要なものが入る。
~/.config/nvim/init.vim
" 行数setnumbersetnoswapfile" insertモードから抜ける
inoremap <silent> jj <ESC>
inoremap <silent><C-j>j
inoremap <silent> kk <ESC>
inoremap <silent><C-k>k
noremap wb
noremap bw" vを二回で行末まで選択
vnoremap v $h
noremap j gj
noremap k gk
" ft+hで左端まで移動
noremap <S-h> ^
"shift+lで右端まで移動
noremap <S-l> $
filetype indent on" ファイルタイプ別のプラグイン/インデントを有効にするfiletype plugin indent onset expandtab
set hlsearch " 検索マッチテキストをハイライト
set ignorecase " 大文字小文字を区別しない
set incsearch " インクリメンタルサーチ
set matchtime=3 " 対応括弧のハイライト表示を3秒にする
set tabstop=2set scrolloff=5set smartcase " 検索文字に大文字がある場合は大文字小文字を区別
set smarttab
set showmatch " 対応する括弧などをハイライト表示する
set shiftwidth=2set softtabstop=4set expandtab
set foldcolumn=4set foldmethod=indent "(インデントで折りたたみを自動作成してくれる)set list " 不可視文字の可視化
" ESCを二回押すことでハイライトを消す
nmap <silent><Esc><Esc>:nohlsearch<CR>" プラグインがインストールされるディレクトリlets:dein_dir= expand('~/.cache/dein')" dein.vim 本体lets:dein_repo_dir=s:dein_dir.'/repos/github.com/Shougo/dein.vim'" dein.vim がなければ github から落としてくるif&runtimepath !~# '/dein.vim'if!isdirectory(s:dein_repo_dir)
execute '!git clone https://github.com/Shougo/dein.vim's:dein_repo_direndif
execute 'set runtimepath^='. fnamemodify(s:dein_repo_dir,':p')endif" 設定開始if dein#load_state(s:dein_dir)call dein#begin(s:dein_dir)" プラグインリストを収めた TOML ファイル" 予め TOML ファイルを用意しておくletg:rc_dir= expand("~/.config/nvim/")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()endif" もし、未インストールものものがあったらインストールif dein#check_install()call dein#install()endif
あとはお好みでプラグインを足す。
~/.config/nvim/dein.vim
[[plugins]]
repo ='Shougo/dein.vim'[[plugins]] # toml syntax
repo ='cespare/vim-toml'
on_ft ='toml'[[plugins]] # カラースキーマ
repo ='w0ng/vim-hybrid'
hook_add ='''
set background=dark'''
[[plugins]] # NerdTree
repo ='scrooloose/nerdtree'[[plugins]] # NerdTree
repo ='jistr/vim-nerdtree-tabs'
hook_add ='map <silent><C-e> <plug>NERDTreeTabsToggle<CR>'[[plugins]] # ステータスバー改造プラグイン
repo ='vim-airline/vim-airline'
hook_add ='''
letg:airline_mode_map={ \'__':'-', \'n':'N', \'i':'I', \'R':'R', \'c':'C', \'v':'V', \'V':'V', \'':'V', \'s':'S', \'S':'S', \}" パワーラインでかっこよくletg:airline_powerline_fonts=1" カラーテーマ指定してかっこよくletg:airline_theme='badwolf'" タブバーをかっこよくletg:airline#extensions#tabline#enabled =1" 選択行列の表示をカスタム(デフォルトだと長くて横幅を圧迫するので最小限に)letg:airline_section_z= airline#section#create(['windowswap','%3p%% ','linenr',':%3v'])" virtulenvを認識しているか確認用に、現在activateされているvirtualenvを表示(vim-virtualenvの拡張)letg:airline#extensions#virtualenv#enabled =1" gitのHEADから変更した行の+-を非表示(vim-gitgutterの拡張)letg:airline#extensions#hunks#enabled =0" Lintツールによるエラー、警告を表示(ALEの拡張)letg:airline#extensions#ale#enabled =1letg:airline#extensions#ale#error_symbol ='E:'letg:airline#extensions#ale#warning_symbol ='W:''''
[[plugins]] # vimから離れないでGitが使える
repo ='tpope/vim-fugitive'
hook_add ='''
nmap [figitive]<Nop>
map <Leader>g[figitive]
nmap <silent>[figitive]s :<C-u>Gstatus<CR>
nmap <silent>[figitive]d:<C-u>Gdiff<CR>
nmap <silent>[figitive]b:<C-u>Gblame<CR>
nmap <silent>[figitive]l:<C-u>Glog<CR>'''
[[plugins]] # vimから離れないでGitが使える
repo ='airblade/vim-gitgutter'[[plugins]] # liner実行プラグイン
repo ='w0rp/ale'
hook_add ='''
" エラー行に表示するマークletg:ale_sign_error='⨉'letg:ale_sign_warning='⚠'" エラー行にカーソルをあわせた際に表示されるメッセージフォーマットletg:ale_echo_msg_format='[%linter%] %s [%severity%]'" エラー表示の列を常時表示letg:ale_sign_column_always=1" ファイルを開いたときにlint実行letg:ale_lint_on_enter=1" ファイルを保存したときにlint実行letg:ale_lint_on_save=1" 編集中のlintはしないletg:ale_lint_on_text_changed='never'" lint結果をロケーションリストとQuickFixには表示しない" 出てると結構うざいしQuickFixを書き換えられるのは困るletg:ale_set_loclist=0letg:ale_set_quickfix=0letg:ale_open_list=0letg:ale_keep_list_window_open=0" 有効にするlinterletg:ale_linters={\'python':['flake8'],\}" ALE用プレフィックス
nmap [ale]<Nop>
map <C-k>[ale]" エラー行にジャンプ
nmap <silent>[ale]<C-P><Plug>(ale_previous)
nmap <silent>[ale]<C-N><Plug>(ale_next)'''
[[plugins]] # pep8準拠のインデントにしてくれる。
repo ='Vimjas/vim-python-pep8-indent'[[plugins]] # コメントアウトが楽になる
repo ='tomtom/tcomment_vim'
add_hook ='let g:tcommentMapLeader1 = <C-=>'[[plugins]] # 囲える。
repo ='tpope/vim-surround'[[plugins]] # HTMLタグの生成
repo ='mattn/emmet-vim'[[plugins]] # python等の言語の文法チェックを自動的にやってくれる
repo ='scrooloose/syntastic'[[plugins]] # カッコを自動で閉じる
repo ='Townk/vim-autoclose'[[plugins]] # ifとかの終了宣言を自動で挿入してくれる
repo ='tpope/vim-endwise'
add_hook ='''
{'autoload':{'insert':1,}}'''
[[plugins]] # 行末の半角空行を可視化
repo ='bronson/vim-trailing-whitespace'[[plugins]] # ログに色付け
repo ='vim-scripts/AnsiEsc.vim'[[plugins]] # フォントズーム
repo ='thinca/vim-fontzoom'
on_cmd =['Fontzoom']
on_map =['<Plug>(fontzoom-']gui=1[[plugins]]
repo ='davidhalter/jedi-vim'
on_ft ='python'[[plugins]]
repo ='tell-k/vim-autopep8'
add_hook ='''
{'for':'python'}letg:autopep8_max_line_length=99letg:autopep8_disable_show_diff=1
autocmd FileType python map <buffer><F8>:call Autopep8()<CR>'''
[[plugins]] # css3のシンタックス
repo ='hail2u/vim-css3-syntax'[[plugins]] # html5のシンタックス
repo ='taichouchou2/html5.vim'[[plugins]] # jsシンタックス
repo ='billyvg/tigris.nvim'
on_ft =['javascript','javascript.jsx']
hook_post_update ='''
letg:dein#plugin.build ='./install.sh'letg:tigris#enabled =1letg:tigris#on_the_fly_enabled =1letg:tigris#delay =300'''
[[plugins]]
repo ='Shougo/denite.nvim'[[plugins]]
repo ='Shougo/deoplete.nvim'
add_hook ='let g:deoplete#enable_at_startup = 1'[[plugins]]
repo ='Shougo/neosnippet-snippets'
dein_lazy.toml(こっちは遅延ロードのもの。)
~/.config/nvim/dein_lazy.vim
[[plugins]]
repo ='Shougo/deoplete.nvim'
hook_source ='''
letg:deoplete#enable_at_startup =1
inoremap <expr><tab> pumvisible() ? "\<C-n>": \ neosnippet#expandable_or_jumpable() ?
\"\<Plug>(neosnippet_expand_or_jump)":"\<tab>"'''
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)if has('conceal')set conceallevel=2 concealcursor=niv
endif'''
on_i =1
on_ft =['snippet']
depends =['neosnippet-snippets']# dein_lazy.toml
[[plugins]]
repo ='Shougo/deoplete.nvim'
hook_source ='''
letg:deoplete#enable_at_startup =1
inoremap <expr><tab> pumvisible() ? "\<C-n>": \ neosnippet#expandable_or_jumpable() ?
\"\<Plug>(neosnippet_expand_or_jump)":"\<tab>"'''
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)if has('conceal')set conceallevel=2 concealcursor=niv
endif'''
on_i =1
on_ft =['snippet']
depends =['neosnippet-snippets']
neovimを起動して:echo has('python3')で1が返ってきた場合、python3の設定はできてる。
参考になったサイト
NeovimでモダンなPython環境を構築する
Mac で Neovim を Python の開発環境にする。
[個人的NeoVim環境(Python編) - Diary over Finite Fields]
(https://blog.515hikaru.net/entry/2017/06/25/043035)
[今度こそVimを攻略したい:neovimをインストールして最高のdev UXを手に入れるまで(その1) - Studio Andy]
(http://studio-andy.hatenablog.com/entry/2018/02/04/120259)
[Neovimはじめました & 2016年vimrc大掃除]
(https://muunyblue.github.io/c95d62c68196b2d0c1c1de8c7eeb6d50.html)