neovimの設定わまりを見直す(と見せかけてdeinの導入メモになった) @macOS
拝啓
vim 歴かれこれ 4,5年
使い始めは .vimrc のカスタマイズ
とか、プラグインを導入して見た目や操作をいい感じにしたり
と楽しかったんだけど メインエディタにするのはしんどいな と思ってました。
しかし、 vim の操作性はすごい好きなので IDEに vimの拡張機能突っ込んでいままでやってきました。
vim 自体もちょっと複雑なテキスト編集したいときに使ってる感じ
vimの操作そこまで詳しいわけじゃないし、vscode × Neo Vimも気になるので再入門してみる。
使ってる(た)やつ
neovim:https://github.com/neovim/neovim
プラグインマネージャー: Shougo/dein.vim: Dark powered Vim/Neovim plugin manager
とりあえず neovim ver0.5にする @mac
0.4 → 0.5
$ brew unlink neovim
$ brew uninstall neovim
$ brew install --HEAD neovim
場合によっては luajit
も更新必要
brew unlink luajit
brew install luajit --HEAD
nvim --version │
NVIM v0.5.0-dev+nightly
構成 before
beforeというかいまいまの構成
.config/nvim
├── dein # submoduleで登録してる dein.vim
├── init.vim # メインファイル
└── vimrc.d
├── dein
│ ├── plugins-lazy.toml
│ ├── plugins.toml
│ └── rc.vim # dein.vimの設定
├── init
│ ├── basic.vim # set色々書いてる
│ └── keymap.vim # keymap色々書いてる
└── plugins
├── denite.vim
├── deoplete.vim
├── fugitive.vim
├── lightline.vim
└── neoterm.vim
とりあえず submodule やめるか?
あと プラグイン見直し
git submoduleの削除
git submodule deinit -f サブモジュールのパス
git rm -f サブモジュールのパス
rm -rf .git/modules/サブモジュールのパス
gitでsubmoduleを削除する方法をご紹介! | Qumeruマガジン
いけた
dotfileで管理してる人は .gitmodules
も削除したがいいかも
vim-plug にしてみる
junegunn/vim-plug: Minimalist Vim Plugin Manager
install
sh -c 'curl -fLo $HOME/.config/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
curl の --create-dirs
てオプション初めて知った。
インストール自体は病で終わる
dotfile管理してる .config/nvim
をhome directory にリンク貼ってるので .gitignore
しとく
これやり方あかんかも
# nvim plugins
.config/nvim/site/*
call plug#begin
を書いたファイルを読むと Unknown function: plug#begin て言われる 。。
install 先があかんかった。 公式に書いてることは守りましょう。
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
vim-plug と pluginの自動インストールが乗ってるけど、 コマンドラインからやるよなー と思う。
dotfilesの インストールスクリプトでも nvim 起動してたら手間だし
同じページにある以下のコマンドで、プラグインのインストールできた
標準出力になんもでんのがわかりずらい
nvim -es -u .config/nvim/init.vim -i NONE -c "PlugInstall" -c "qa"
vim.jp slackで一時期、前略プロフィールぽいのが流行ったので埋めてみる
OS: macOS
Shell: zsh
ターミナルエミュレータ:iTerm2
ブラウザ: chrome
キーボード: HHKB Professional Type-S
ポインティングデバイス: なし
Vim/Neovim: Neovim
プラグインマネージャー:
LSP:
補完:
FF:
タスクランナー:
カラースキーム:
statusline:
スニペット:
ファイラー:
ターミナル拡張: tmux
IME:
LSP
とファイラー
、FF
も全然追えてない。。
やっぱdein.vimにする 笑
プラグインごとの設定個別に書きたい。(他のパッケージマネージャでもできるやつあるのかな)
git submodules じゃなくて普通にインストールする。
README.md のスクリプトを1行にしてみたスクリプト
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh)" _ ~/.cache/dein
保存先は ~/.cache/dein
dein.vim にする 2
こんなdein.vimの設定。とりあえず。オプションとか見れてない
" ======================
" dein.vim Setting
" ======================
if &compatible
set nocompatible
endif
let s:dein_path = expand('~/.cache/dein')
let s:dein_repo_path = s:dein_path . '/repos/github.com/Shougo/dein.vim'
let s:toml_path = expand('~/.config/nvim/vimrc.d/dein')
if &runtimepath !~# '/dein.vim'
if !isdirectory(s:dein_repo_path)
execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_path
endif
execute 'set runtimepath^=' . s:dein_repo_path
endif
let g:dein#enable_notification = 1
if !dein#load_state(s:dein_path)
finish
endif
call dein#begin(s:dein_path)
call dein#load_toml(s:toml_path . '/plugins.toml', {'lazy': 0})
call dein#load_toml(s:toml_path . '/plugins-lazy.toml', {'lazy': 1})
call dein#end()
call dein#save_state()
filetype plugin indent on
syntax enable
if dein#check_install()
call dein#install()
endif
変数は別ファイルに描こうかな
あとinstall処理も
ちょっと変えた
いったんこれでいく。
if &compatible
set nocompatible
endif
augroup Plugin_Hook
autocmd!
augroup END
let s:cache_home = empty($XDG_CACHE_HOME) ? expand('~/.cache') : $XDG_CACHE_HOME
let s:config_home = empty($XDG_CONFIG_HOME) ? expand('~/.config') : $XDG_CONFIG_HOME
let s:dein_path = s:cache_home . '/dein'
let s:dein_repo_path = s:dein_path . '/repos/github.com/Shougo/dein.vim'
let s:toml_path = s:config_home . '/nvim/vimrc.d/dein'
if &runtimepath !~# '/dein.vim'
if !isdirectory(s:dein_repo_path)
execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_path
endif
execute 'set runtimepath^=' . s:dein_repo_path
endif
" === Load Dein
if dein#load_state(s:dein_path)
call dein#begin(s:dein_path)
call dein#load_toml(s:toml_path . '/plugins.toml', {'lazy': 0})
call dein#load_toml(s:toml_path . '/plugins-lazy.toml', {'lazy': 1})
call dein#end()
call dein#save_state()
endif
filetype plugin indent on
syntax enable
if has('vim_starting') && dein#check_install()
call dein#install()
endif
横道
shell から dein#install() したい
nvim -es -u ~/.config/nvim/init.vim -i NONE \
-c "try | call dein#install() | finally | qall! | endtry" -V1
これでいけた
dein にする 3
dein 固有変数とかコマンド定義する
" === Variable
let g:dein#enable_notification = 1
let g:dein#install_max_processes = 16
let g:dein#install_github_api_token = $GITHUB_API_TOKEN
" === Command
command! -nargs=0 DeinInstall :call s:deinInstall()
command! -nargs=0 DeinUpdateSelf :call dein#update('dein.vim')
command! -nargs=0 DeinUpdate :call dein#check_update(v:true)
command! -nargs=0 DeinClean :call s:deinClean()
function! s:deinInstall()
if dein#check_install()
call dein#install()
else
echo '[ERR] already installed.'
endif
endfunction
function! s:deinClean()
if len(dein#check_clean())
call map(dein#check_clean(), 'delete(v:val, "rf")')
call dein#recache_runtimepath()
else
echo '[ERR] no disabled plugins'
endif
endfunction
$GITHUB_API_TOKEN
が空の場合も、 dein#check_update
で特にエラー出たりしないっぽい。
ので ないときはメッセージだすみたいな処理いれたらわかりやすいけど、 VimScript雑魚なのでTODO
dein#check_update(v:true)
で 全てのpluginアップデートしてくれるぽい
let g:dein#install_github_api_token = $GITHUB_API_TOKEN
で設定してるけど
$GITHUB_API_TOKEN
が空の場合特にエラーとか表示されない。
のでスクリプト化
-
DeinUpdateSelf
でdein.vim自体のアップデート -
DeinUpdate
でプラグイン全体のアップデート
command! -nargs=0 DeinUpdateSelf :call s:deinUpdate('self')
command! -nargs=0 DeinUpdate :call s:deinUpdate()
function! s:deinUpdate(...)
if empty($GITHUB_API_TOKEN)
echo '[ERR] needs $GITHUB_API_TOKEN'
return
endif
if a:0==0
call dein#check_update(v:true)
elseif a:1=='self'
call dein#update('dein.vim')
endif
endfunction
おしまい
入れてたプラグイン一旦全消しした。
前はvimの記事を見て手当たりしだい入れてたけど、その後 特に触らない。とかが多かったので
操作性あたりを学びつつ、不便な点を埋めてくスタイルにしたい。
LSP
と タスクランナー
あたりはどうにかしたいな。