この記事では、Vim / neovim 独特の考え方の一つ、 <Leader> というキー操作/キーマッピングについてご紹介します。
[解答] コマンドの割り当てに使える特殊キー
ノーマルモードでコマンド入力するには、英数字/記号 あるいは Ctrl/Shift などのキー単体もしくは組み合わせて行います。
Vim / Neovim / iVim では、キーにコマンドを新たに割り当てようとすると、既に割り当たっている機能を諦めなければいけないことが多々あります。これは Vim が多機能な故の悩みです。
その中で、gU のように、複数のキー入力を前提としているコマンドも存在しますが、こちらも既に割り当てられているコマンドが多数存在して、空きが少ないのが難点です。
そこで <Leader>キーを使うと、もっと自由な割り当てができるようになります。つまり、<Leader>キーを使った複数キー入力にコマンドを割り当てるなら機能が被らない、という利点があるわけです。
<Leader>キーとは、複数キー入力に割り当てられる任意のキーです。この<Leader>キーを入力すると、複数入力が開始できます。
Vim標準の<Leader>は?
特別に設定をしていなければ、<Leader> はバックスラッシュ(\)に割り当てられています。
<Leader>キーの確認
現在割り当たっている <Leader>キーを確認するには、次のコマンドを実行します。
:echo mapleader
変数 “mapleader” の値が、<leader>キーを示します。
E121: Undefined variable: mapleader
このようにエラー表示される場合は、デフォルトから変更されていません。つまり、\ が<Leader>キーとして割り当てられています。
<Leader>キーの割り当て
この <Leader>キーは、次のように割り当てられます。
:let mapleader = "{割り当てるキー}"
設定ファイル(.vimrc / init.nvim など)に書くなら、このようになります。
let mapleader = "{割り当てるキー}"
いろんな流派があるようで、様々なキーに割り当てているようです。例えば、次のような感じです。
let mapleader = "\<Space>" let mapleader = " " let mapleader = "," let mapleader = "-" let mapleader = "_"
インターネットの記事を見る限りは、<Space>に割り当てているケースが圧倒的に多そうでした。
「一番大きいキーに割り当てるのが合理的だよね。」と言っている海外Vimmerも居るようです。
理由は様々ですが、自分の押しやすい位置のキーに設定しましょう。
コマンドを<Leader>キーでマッピングする
次のように <Leader> を使ったキー操作に、任意のコマンドをマッピングできます。
nmap <Leader>{入力キー} {実行コマンド} nnoremap <Leader>{入力キー} {実行コマンド}
nmap または nnoremap で設定する例です。もっと具体的な例だと次のようになります。
nnoremap <Leader>a ggVG (全選択) nnoremap <Leader>b :echo "Good"<CR> (文字を表示させる) nnoremap <Leader>c <Home> (Homeキーと同じ動作をさせる)
実行コマンド自体は、通常のキーマッピングと変わりません。
補足
デフォルトのキーマッピングをとにかく潰したくない人には、必要不可欠な機能と言えます。
特に、Vimプラグインをたくさん利用する人は、この<Leader>キーを使った複数キー入力にコマンドを割り当てた方が副作用が少なくて良いと思います。
ただ、たくさん割り当てれば割り当てるほど、覚えるのが大変になっていくのが難点ですね。割り当たっているけど、あまり使っていない/使うべき場面で使えていないキーマッピングもたくさん…
このVimコマンドの補足情報
- 利用頻度
- 便利さ
- 覚え易さ
関連するVimヘルプ
Vim のヘルプでは下記のように解説されています。
mapleader
マップコマンドで特別な文字列 “<Leader>” を使用すると、その部分が変数 “mapleader” に設定された文字列で置き換わります。”mapleader” が空文字列のときや設定されていない場合にはバックスラッシュが使用されます。例:
:map <Leader>A oanother line<Esc>
これは次のものと同じ意味です:
:map \A oanother line<Esc>
しかし次のように設定したあとでは:
:let mapleader = “,”
次のものと同じ意味になります:
:map ,A oanother line<Esc>
Note:
map – Vim日本語ドキュメント
変数 “mapleader” はマップを定義するときに使用されます。”mapleader” を変更しても、すでに定義されているマップには影響しません。
こちらは、Vim上では下記のコマンドでヘルプを確認できます。
:help <Leader> :help mapleader
ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。
参考書籍
こちらの書籍が参考になります。
Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。
こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。
Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。