Skip to content
Kazuyuki Ikeda edited this page Jul 4, 2014 · 2 revisions

vim部 03

今日はmapのお話

mapとは

特定のキー入力をほかのキー入力に変えますよ ex) a => abcって打つ, F1 => :tab :h

mapの使い方

:map <元のキー> <変えた後のキー>
:map a bcdef

ふつうは モード + 再帰呼び出し(ON,OFF) + map

:nnoremap -> ノーマルモードの再帰呼び出ししないmapって意味
=> n がノーマルモード
   nore が再帰呼び出ししない
   mapマップ

モード指定は

  • n: ノーマルモード
  • c: コマンド
  • v: ヴィジュアルモード
  • i: インサートモード

インサートモードCtrl-R,=の時は多分コマンドモードで解釈

使い方例

# シングルクォートで囲む
vnoremap ' di'<C-R>"'<ESC>
vnoremap ( di(<C-R>")<ESC>
# F1キーでヘルプ
nnoremap <F1> :tab :h<CR>
nnoremap <F2> :NERDTreeToggle<CR>
# 超おすすめ
inoremap <silent> jj <ESC>
# コマンド履歴を巡る
cnoremap <C-N> <Down>
cnoremap <C-P> <Up>
nunmap これでmapの削除

:h map

nmap書いたけど使わないほうがいいよ

キーモーションとかに割り当てられてるキーを使うと 結構面倒なことになりますよ

nnoremap wf :execute "split " . expand("<cfile>")<CR>
  1. vimが遅くなる

vim側からすると次のキーが押されるまで命令を解釈できない -> 次のキー入力まで待つので遅く感じる

  1. マクロがおかしくなる

マクロだと結果が同じだといったな あれは嘘だ マクロで記録されない情報がある

マクロだと超スピードでキーを走らせるので、 手入力の場合はmapが発動しなかった編集も発動しちゃう

じゃあどうやってmap考えようか

  1. それ本当にノーマルモードでやる必要ある?
  2. F1~F12キーを使えないか
  3. 短縮入力っていうのでもできない?
  4. モーションに被らないか見よう
  5. 絶対使わないと思うキーだけやる
  6. (デフォルトでバックスラッシュ)で始まるmapは安全