転職した

調べた事、学んだ事、思った事、考えた事を個人的にまとめているだけなので内容は保証しないYO!

Vimのmap、noremapについて調べた

mapやnoremapはあるキーを別のvimコマンドに割り当てることができる機能

:map z x

を実行すれば、zを押した時xが実行される(ノーマルモードなら1文字削除される)。

:map yyyy 2dd3p

のように、1文字対1文字である必要はなく、複数文字でよいし、実行するコマンドも複数のオペレータコマンドを使える。 ここはnoremapも同じ。

mapとnoremapの違い

一言で言えば、mapはmapが連鎖するが、noremapは連鎖しない。

:map x p
:map z x

このexコマンドを実行した後にzを押した場合、pが実行される。z->x->pとコマンドを辿って終端のpがvimのコマンドとして実行されるわけだ。

noremapの場合は、このような事はおきない。

:noremap x p
:noremap z x

このexコマンドを実行した後にzを押した場合は、xが実行される。noremapはz->xと辿った後、さらにたどることはせずに、xをvimのコマンドとして実行する。

参考:【図解Vim】mapとnoremap | ここぽんのーと

mapやnoremapの種類

vimにはモードがあるため、mapやnoremapも各々のモード用に種類が存在する。

      コマンド                    モード
 :map   :noremap  :unmap     ノーマル、ビジュアル、選択、演算待ち状態
 :nmap  :nnoremap :nunmap    ノーマル
 :vmap  :vnoremap :vunmap    ビジュアル、選択
 :smap  :snoremap :sunmap    選択
 :xmap  :xnoremap :xunmap    ビジュアル
 :omap  :onoremap :ounmap    演算待ち状態
 :map!  :noremap! :unmap!    挿入、コマンドライン
 :imap  :inoremap :iunmap    挿入
 :lmap  :lnoremap :lunmap    挿入、コマンドライン、Lang-Arg
 :cmap  :cnoremap :cunmap    コマンドライン

引用元:Vim documentation: map

調べる必要のあったものだけ、説明を付け加える。 smapとsnoremapはビジュアルモード時に<ctrl-g>を入力した場合とノーマルモードでghと入力した場合に移行するセレクトモードでキー動作を変更したい場合に使う。 セレクトモードでは、印字可能文字を入力することになるので、mapするキーは印字可能文字でない文字がよい。

参考:Vim documentation: map

omapやonoremapはノーマルモードでdやyを入力したときになる演算待ち状態モードでキー動作を変更したい場合に使う。 なので、map先はモーションコマンドになる。

lmapやlnoremapは挿入モード、コマンドラインで<ctrl-^>を入力することで有効になるmapの設定。

参考:Vim documentation: map