Closed17

neovimの設定わまりを見直す(と見せかけてdeinの導入メモになった) @macOS

sh090sh090

拝啓

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

sh090sh090

とりあえず 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
sh090sh090

構成 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
sh090sh090

とりあえず submodule やめるか?
あと プラグイン見直し

sh090sh090

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/*
sh090sh090

call plug#begin を書いたファイルを読むと Unknown function: plug#begin て言われる 。。

install 先があかんかった。 公式に書いてることは守りましょう。
https://github.com/junegunn/vim-plug#unix-linux

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'
sh090sh090

vim-plug と pluginの自動インストールが乗ってるけど、 コマンドラインからやるよなー と思う。
dotfilesの インストールスクリプトでも nvim 起動してたら手間だし
https://github.com/junegunn/vim-plug/wiki/tips#automatic-installation

同じページにある以下のコマンドで、プラグインのインストールできた
標準出力になんもでんのがわかりずらい

nvim -es -u .config/nvim/init.vim -i NONE -c "PlugInstall" -c "qa"
sh090sh090

vim.jp slackで一時期、前略プロフィールぽいのが流行ったので埋めてみる

OS: macOS
Shell: zsh
ターミナルエミュレータ:iTerm2
ブラウザ: chrome
キーボード: HHKB Professional Type-S 
ポインティングデバイス: なし
Vim/Neovim: Neovim
プラグインマネージャー: 
LSP: 
補完: 
FF: 
タスクランナー: 
カラースキーム: 
statusline: 
スニペット: 
ファイラー: 
ターミナル拡張: tmux
IME: 

LSPファイラーFFも全然追えてない。。

sh090sh090

やっぱdein.vimにする 笑

https://github.com/Shougo/dein.vim#requirements

プラグインごとの設定個別に書きたい。(他のパッケージマネージャでもできるやつあるのかな)

git submodules じゃなくて普通にインストールする。
README.md のスクリプトを1行にしてみたスクリプト

bash -c "$(curl -fsSL https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh)" _ ~/.cache/dein

保存先は ~/.cache/dein

sh090sh090

dein.vim にする 2

こんなdein.vimの設定。とりあえず。オプションとか見れてない

https://github.com/Shougo/dein.vim/blob/master/doc/dein.txt

" ======================
" 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

sh090sh090

変数は別ファイルに描こうかな
あとinstall処理も

sh090sh090

ちょっと変えた
いったんこれでいく。

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
sh090sh090

横道

shell から dein#install() したい

nvim -es -u ~/.config/nvim/init.vim -i NONE \
-c "try | call dein#install() | finally | qall! | endtry" -V1

これでいけた

sh090sh090

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

sh090sh090

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
sh090sh090

おしまい

入れてたプラグイン一旦全消しした。
前はvimの記事を見て手当たりしだい入れてたけど、その後 特に触らない。とかが多かったので
操作性あたりを学びつつ、不便な点を埋めてくスタイルにしたい。

LSPタスクランナー あたりはどうにかしたいな。

このスクラップは2021/05/30にクローズされました