dein.vimで管理していたColorschemeの設定でハマった

Neovimのロゴ
Neovim

dein.vimでのプラグイン管理でColorschemeの設定でハマったときのちょっとしたメモ。

Vim(Neovim)の設定を変更したあとの起動時に毎回Colorschemeの読み込みでhookエラーが出ていた。
Vimの背景色もNONEに設定してiTerm2で設定しているアルファが適用されるようにしている。
気がついたら出るようになってたので、最初はまったく心当たりがなく「なんのこっちゃ???」と思った。
しかし、設定を変更する度にエラーが出たりするのはなんだか気持ちが悪いなぁと思ったので、見直してみる。

設定変更前

" init.vim
" dein Scripts ===================================================
let s:config_dir = expand('$XDG_CONFIG_HOME/nvim')
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')

  call dein#load_toml(s:config_dir . '/dein.toml',      {'lazy': 0})
  call dein#load_toml(s:config_dir . '/dein_lazy.toml', {'lazy': 1})

  call dein#end()
  call dein#save_state()
endif

if dein#check_install()
  call dein#install()
endif
# dein.toml
[[plugins]]
repo = 'cocopon/iceberg.vim'
hook_add = '''
  set termguicolors
  autocmd VimEnter * nested colorscheme iceberg
  autocmd colorscheme * highlight Normal      ctermbg=NONE guibg=NONE
  autocmd colorscheme * highlight NonText     ctermbg=NONE guibg=NONE
  autocmd colorscheme * highlight Folded      ctermbg=NONE guibg=NONE
  autocmd colorscheme * highlight EndOfBuffer ctermbg=NONE guibg=NONE
  syntax on
'''

結論から言うと、設定を書く順番に問題があったっぽい。

  1. dein.vimの公式ドキュメントのQAに「colorschemeはdein#end()の後ろに書いてね」と書いてある
  2. Vimの背景透過設定(autocmd colorscheme * highlight...のあたり)はColorschemeより前にロードして、Colorschemeがロード時にNONEとして上書きするようにしないとだめっぽい。(言われてみて「そりゃそうか」ってなった)

設定変更後

" init.vim
" Default setting ================================================
filetype on
filetype plugin on
filetype indent on

...

autocmd colorscheme * highlight Normal      ctermbg=NONE guibg=NONE
autocmd colorscheme * highlight NonText     ctermbg=NONE guibg=NONE
autocmd colorscheme * highlight Folded      ctermbg=NONE guibg=NONE
autocmd colorscheme * highlight EndOfBuffer ctermbg=NONE guibg=NONE

...

" dein Scripts ===================================================
let s:config_dir = expand('$XDG_CONFIG_HOME/nvim')
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')

  call dein#load_toml(s:config_dir . '/dein.toml',      {'lazy': 0})
  call dein#load_toml(s:config_dir . '/dein_lazy.toml', {'lazy': 1})

  call dein#end()
  call dein#save_state()
endif

if dein#check_install()
  call dein#install()
endif

syntax enable
colorscheme iceberg
# dein.toml
[[plugins]]
repo = 'cocopon/iceberg.vim'

DiffはGitHubで見られます

Colorschemeに関連する設定があっちこっちに散らばっている印象がする。
dein-hooksの使い方やVimscriptをもうちょっと習熟すればワンチャンあるかなって思う。
Vimの背景透過設定はColorschemeを変えても使うものなので、「これはこれでいいか」と思い直した。

またそのうち盆栽業の時間を見つけて整理したい。(盆栽業、心が落ち着く作業なのよ)

ところで……はてブってtomlのシンタックス、対応してないのね(´°ω°)チーン