【一人 vimrc advent calendar 2017】キーマッピングの注意点とか【24日目】
一人 vimrc advent calendar 2017 24日目の記事になります。
今日はクリスマスイヴですね。
ケーキを買いに行ったら売り切れていましたかなしい。
モードごとのキーマッピング
さて、気を取り直して…。
Vim はモードごとに操作が分けられているのはご存知だと思いますが、キーマッピングもモードごとに設定することが出来ます。
代表的なのは以下のようなものになります。
登録コマンド | 削除コマンド | モード |
---|---|---|
: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 |
コマンドライン |
いろいろとありますが、基本的には
:nmap
:nnoremap
:vmap
:vnoremap
:imap
:inoremap
:cmap
:cnoremap
の4つを覚えておけばよいです(あとは textobj 系プラグインを使うなら omap
も。
キーマッピング自体の仕方はまあわかってると思うので省略。
map
と noremap
の違い
Vim でキーマッピングをする上で重要なのが map
と noremap
の違いになります。
と、言っても特に難しくはなくて map
は『再マップされ』、noremap
は『再マップされません』。
どういうことかというと例えば、
imap a aa
とした場合、a
を入力した時に aa
を更に展開しようとするので無限ループします。
一方、
inoremap a aa
の場合は aa
は再展開されないので aa
だけが入力されます。
なのでキーマッピングを行う際に『他に設定したキーマッピングの影響を受けない場合は :noremap
』、『他に設定したキーマッピングの影響を受ける場合は :map
』みたいにして使い分ける必要があります。
と、言っても意図的に展開してほしい場合以外は noremap
を使っておくほうが混乱がないと思います。
ただし、プラグインを使用していると例えば、
nmap hoge <Plug>(hoge-plugin-mapping)
みたいに <Plug>(hoge-plugin-mapping)
をキーマッピングすることがあります。
この <Plug>(hoge-plugin-mapping)
というのは『プラグイン側でマッピングされている設定』になります。
" プラグイン内ではこんな感じでキーマッピングされている nnoremap <silent> <Plug>(hoge-plugin-mapping) :<C-u>Hoge<CR>
なので、このような場合は map
でマッピングする必要があります。
まとめ
キーマッピングについてはいろいろと書きたいことはあるんですが、まー基本的には変な縛りを設けないで自分が使いやすいようなキーマッピングをしておくとストレスなく Vim を使うことが出来るのでよいと思います。
Vim に慣れるのではなくて、自分が使いやすい Vim を目指しましょう。