[目指せ.vimrcコピペ脱却]vim-key-mappingの基本的なことまとめ

vimにおけるキーマッピング、そろそろ自分でちゃんと覚えて拡張していきたいので
覚書しておきます。

ぶっちゃけ、:help map@ja すれば全部載ってたので、
ちゃんとしたものが読みたい、という方は
そちらを参照していただければと思います。

mapping基本

:map {lhs} {rhs}

簡単。{lhs}に指定したキー入力を{rhs}にマッピングしてくれる、それだけです。

ただ、マッピングには名前をつけたり、特殊な条件や指定をしたり、
マッピングするためのコマンドも実はいろいろあったりするので、
その辺をまとめてみようと思います。

※この記事ではmappingの削除に関しては扱いません。定義と利用だけ。
※基本的には:help map@jaの焼きまわしです。

mappingの重複

というキーマッピングが定義されていた場合、aaを入力した時点では
どちらのマッピングが適用されるか判断できないので、待機状態になります。

その状態で空白文字を挿入すれば、fooが挿入され、aを入力するとbarが
挿入されます。

特殊な引数

マップコマンドの直後に配置することで、特殊なマッピングを実現できる。

マッピングとモード

僕は、ここをちゃんと把握してなかったから、マッピング用のコマンドが
たくさんあることに困惑してました。

基本的にこの記事で扱うのはmapとnoremap系だけ。

どのモードでのキーマッピングを定義するか、によって
使うコマンドが違います。(normalモード限定でのキーマッピングはnmapもしくはnnoremapを利用する)

更に細かく以下のようなものもあります。

viとvimの違いって、正直全然意識しなかったんですが、この辺の
モードのまとめ方に違いがあるようです。(:help map参照)

特殊キーをマッピングに用いる場合

vimでスペースやESCなどの特殊キーをキーマッピングに利用したい場合は、
以下のように記述します。(一部抜粋、:help keycodes参照)

ここまでくれば、あとは組み合わせ次第ですね。

サンプルを読み解いてみる

今まで、キーマッピングはほとんど他のかたのvimrcを参考に、
そのまんま利用していたんですが、改めて、自分のvimrcを読んでみました。

一番最初の

nnoremap [unite]

は初期化。既に同名のキーマッピングが存在しても
ちゃんと設定されるように、(なにもしない)をマッピングしなおしています。

その後はカンマ(,)を[Unite]という独自キーマッピングにマッピングします。

これによって、ノーマルモードで、カンマが入力されると[Unite]というキーマッピングとして
設定ができます。

以下は、コマンドを更に組み合わせたものです。

,uで :Unite -no-splitが動作するようになっています。

なぜ nmpa , [Unite]だけnnoremapではなく、nmapなのか、は次の項目で
掘り下げていきます。

map系とnoremap系の違い

結論からいうと、map系は再帰的にマッピングされ、noremap系は再帰的にマッピングされない
ということです。

例えば前項で、

nmap , [Unite]

nnoremap , [Unite]

にした場合は、それ以下のnnoremap内で[Unite]というキーマッピングを
参照することができません。(キーマッピングの中でキーマッピングを再帰的に参照しているため)

つまり、めっちゃ簡単にいうと

他のキーマッピングでも使い回したいものはmap系で定義してあげましょう。
ということだと思います。

ただ、もちろん、キーマッピングが増えてくれば、どんどん複雑になっていきますので、
基本的にはnoremap系で、必要があればmap系を利用することがベターかと思われます。

参考リンク

とても詳しく書かれているので、この記事より、こっち読んだほうがいいです・

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です