[Vim問題] Leaderキーってなに?

キーってなに?

この記事では、Vim / neovim 独特の考え方の一つ、 <Leader> というキー操作/キーマッピングについてご紹介します。

[解答] コマンドの割り当てに使える特殊キー

ノーマルモードでコマンド入力するには、英数字/記号 あるいは Ctrl/Shift などのキー単体もしくは組み合わせて行います。

Vim / Neovim / iVim では、キーにコマンドを新たに割り当てようとすると、既に割り当たっている機能を諦めなければいけないことが多々あります。これは Vim が多機能な故の悩みです。

その中で、gU のように、複数のキー入力を前提としているコマンドも存在しますが、こちらも既に割り当てられているコマンドが多数存在して、空きが少ないのが難点です。

そこで <Leader>キーを使うと、もっと自由な割り当てができるようになります。つまり、<Leader>キーを使った複数キー入力にコマンドを割り当てるなら機能が被らない、という利点があるわけです。

<Leader>キーとは、複数キー入力に割り当てられる任意のキーです。この<Leader>キーを入力すると、複数入力が開始できます。

Vim標準の<Leader>は?

特別に設定をしていなければ、<Leader> はバックスラッシュ(\)に割り当てられています。

iVim(iPadキーボード)の場合、キーとバックスラッシュ(\)は別物となります。そのため、別に割り当てた方が無難です。

<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コマンドの補足情報

  • 利用頻度[star rate=5]
  • 便利さ[star rate=5]
  • 覚え易さ[star rate=3]

関連する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:
変数 “mapleader” はマップを定義するときに使用されます。”mapleader” を変更しても、すでに定義されているマップには影響しません。

map – Vim日本語ドキュメント

こちらは、Vim上では下記のコマンドでヘルプを確認できます。

:help <Leader>
:help mapleader

ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。

参考書籍

こちらの書籍が参考になります。

[temp id=3]

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Vim力アップして、そろそろ上級 Vimmer の仲間入りしたいIT系エンジニアの端くれです。読んでくる訪問者の皆様と一緒に、Vim力を上げていくことができる記事が書ければと考えています。

目次