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 コマンドライン
調べる必要のあったものだけ、説明を付け加える。 smapとsnoremapはビジュアルモード時に<ctrl-g>を入力した場合とノーマルモードでghと入力した場合に移行するセレクトモードでキー動作を変更したい場合に使う。 セレクトモードでは、印字可能文字を入力することになるので、mapするキーは印字可能文字でない文字がよい。
omapやonoremapはノーマルモードでdやyを入力したときになる演算待ち状態モードでキー動作を変更したい場合に使う。 なので、map先はモーションコマンドになる。
lmapやlnoremapは挿入モード、コマンドラインで<ctrl-^>を入力することで有効になるmapの設定。