<Leader>と自作コマンドの使い分けを考える
vimで何度も使う動作を簡略化する方法は、主に<Leader>
によるコマンド割当かcommand
による自作コマンド作成の2つだと思われる。
この2つをどう使い分けるべきなのか自分なりに調べてまとめることにした。
目次
<Leader>について
<Leader>とは
独自で設定することができるショートカットキーのようなもの。元々備わっているvimのマップコマンドを変更する方法もあるが、それの用途は「どうしても使いにくいキー配置があるので、変えたい」「繰り返し行う複雑な操作を簡単に行いたい」という場合である。1
<Leader>
キーとは、複数キー入力に割り当てられる任意のキーです。このキーを入力すると、複数入力が開始できます。 特別に設定をしていなければ、
はバックスラッシュ(\)に割り当てられてい ます。2
<Leader>の使い方
現在割り当たっている <Leader>
キーは\ が割り当てられている。
調べ方はvimで以下のExコマンドを入力する
:echo mapleader
デフォルトのままなら以下のようなエラーが表示される
E121: Undefined variable: mapleader
<Leader>
キーを変更したい場合は.vimrc
に以下の記述を追加する。
let mapleader = "{割り当てるキー}"
次のように
nnoremap <Leader>{入力キー} {実行コマンド}
例:
nnoremap <Leader>a ggVG (全選択)
nnoremap <Leader>b :echo "Good"<CR> (文字を表示させる)
nnoremap <Leader>c <Home> (Homeキーと同じ動作をさせる)
これでノーマルモード時nmap
で登録しても同様のことが出来る。ただしnmap
は再帰的にコマンドが実行される危険性があるのでnnoremap
を使うほうが良い3
<Leader>のメリット・デメリット
元々vimで登録されているキーバインドが使いづらいものだったり、普段からよく使う一連の動作を自分好みのキー入力で行うことが出来るようになる。 ` ただし、割り当てすぎると候補検索の処理に負担がかかって遅くなってしまうらしい。 どれくらいで遅くなってしまうのかわからないが気に留めておきたい。
If nothing is displayed above this, "Tweet ID:1296618860427141125" has been deleted.
If nothing is displayed above this, "Tweet ID:858962608086433792" has been deleted.
If nothing is displayed above this, "Tweet ID:859015888124526592" has been deleted.
自作コマンドについて
自作コマンド(command)とは
B ここでは自作コマンドと呼んでいるが、やっていることは Vim script に書かれたことを実行している。
Vim scriptはExコマンド(:から始まるコマンド)の集まりです。Exコマンド群をファイルに記述して、それを:source {file}で読み込むことで実行できます。ファイルの拡張子は.vimとつけるのが一般的です。一例ですが、次のコードをsample.vimというファイルに保存して、:source sample.vimを実行するとコマンドラインにgorillaが出力されます。4
自作コマンド(command)の使い方
Vim scriptを記述したファイルを:source hoge.vim
で読み込んだ後、同様にcommand
によって定義したExコマンドを入力すればショートカットキーのように使うことができる。
毎回:source
を入力するのはダルいので、予め.vimrc
で読み込ませると良い。
command! Hello call Hello()
function! Hello()
echo "Hello!!"
endfunction
vimで使うときはこんな感じ
:source Hello.vim
:Hello
" => Hello!!
自作コマンド(command)のメリット・デメリット
複数行に渡って記述したい処理をコマンド化したいなら自作コマンドを定義しておいた方が便利。
<Leader>
で出来なくもないが.vimrc
内の行数が増えて煩雑する為、処理したい内容によってはVim scriptとして定義し外部で管理した方がスッキリするだろう。
ただし、定義するExコマンドの頭文字は必ず大文字にしなければならない。 のだが、そのExコマンドを<Leader>
に割り当てれば全く問題なし。
例えば先程のHelloスクリプトを以下のように.vimrc
で登録してしまえば\ + hでHello!!
が表示されるショートカットキーになる。
nnoremap <Leader>h :Hello
" これでノーマルモードから \ + h と打てば Hello!! と表示される
まとめ
- 繰り返し行う作業をより単純なキー操作で行いたい場合<Leader>を活用すると楽。
- <Leader>は定義しすぎると遅くなる。
- 長く煩雑な処理になってしまうなら<Leader>じゃなく自作コマンド化した方が良い。
- 自作コマンドの頭文字は必ず大文字で定義しなければならない。
- 更にその自作コマンドを<Leader>で定義すれば利便性が上がる。
- 余談だが、どうせ
<Leader>
を使うなら大きく近いボタンに割り当てた方がいいと思ったので.vimrc
にlet mapleader = "\<Space>"
を追記してSpaceに割当を変更してみた。5