カテゴリー
Linux

mapleader の定義は最初に行うこと! キーマップの Leader が変になった。

誤り

nmap <Leader>c [coc.nvim]
nnoremap [coc.nvim] <Nop>
" Remap keys for gotos
nmap <silent> [coc.nvim]d <Plug>(coc-definition)

let mapleader = "\<Space>"

上記のように書くと、次のようなキーマッピングとなってしまいました。

  • \c -> [coc.nvim]
  • \cd -> coc-definition
  • それ以外での <leader> -> <Space>

原因

  • Vim Script は上から順番に実行される。
  • map にはどうやら Vim Script 実行時の <Leader> が適用されるようだ。
  • <Leader> を使用した map の後に <Leader> を変更しても、 <Leader> を使用した map の内容は変更されない。

なんでこんなことになったのか?

最初の誤った Vim Script 、一瞥しただけで嫌な予感がプンプンする内容です。であるのになぜ、私はこんな風に書いてしまったのでしょうか?

答えは、 .vimrc を整理したためです。

キーマップは .vimrc の最後に書いていました。 プラグイン固有のキーマップを追加したので、まずは .vimrc のキーマップを書いているところに追記し、動作を確認しました。 プラグイン固有のキーマップですので、 プラグイン情報を記述している dein.vim の部分に集めたいと思い、そのようにしました。 .vimrc のキーマップ部分よりも、 dein.vim のプラグイン情報の実行の方が先に実行されるようになっていました。 それで、本記事最初の誤った書き方が生まれてしまったのでした><。

対処

mapleader を .vimrc の dein.vim よりも前で定義するようにしました。 .vimrc はしばしば定義の順番が問題となります。どこに書くのがベストプラクティスかはわかりませんけれども、当然これで解決しました。

おわりに

ついに Vim のキーマッピングを始めるので覚書 – oki2a24 で満足いくキーマップができたと喜んでいたのもつかの間、このようなトラブルに見舞われました><。

冷静になって、現在のキーマップの確認をして、プラグインのキーマップの <Leader> が \ であることを突き止めてから一気に解決しました♪

以上です。

コメントを残す