kick the base

Houdiniと、CG技術と、日々のこと。

Vim: キーマッピング基礎1 - キャンセルとハイライト

コピペではなく自分自身で.vimrcを育てていこうシリーズ第2回目(前回はこちら)は、キーマッピングについてです。例のごとくプラグインは使わない方向なので、素のVimでお試しいただけます。 各設定をひとつづつ説明していくので、便利だなと思ったところだけお使いいただければと思います。

最終的なキーマッピング

基礎ということで下記のようなシンプルなセッティングになっています。 こちらを.vimrcに書くことで次回起動時に反映させることができます。

本連載記事では下記設定をひとつづつ解説していくことになります。

実際にぼくが使用している.vimrcはもっと設定がありますが、説明しない部分は割愛しています

inoremap <C-c> <ESC>
noremap <C-c><C-c> :nohlsearch<Cr><Esc>
nnoremap Y y$
nnoremap + <C-a>
nnoremap - <C-x>
cnoremap <C-p> <Up>
cnoremap <C-n> <Down>
nnoremap j gj
nnoremap k gk
nnoremap gj j
nnoremap gk k
nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>
cnoremap <expr> %% getcmdtype() == ':' ? expand('%:h').'/' : '%%'
set pastetoggle=<f5>
map <f6> :!open -a textedit %<CR>
let mapleader = "\<Space>"
nnoremap <Leader>/ /\v
nnoremap <Leader>?  ?\v

素の状態でVimを起動するには

下記コマンドで起動すればデフォルト状態のVimを起動することができます。すでにカスタマイズをされている方はこちらを利用して試してみてください。

$ vim -u NONE -N

<C-c>を完全な<ESC>に

inoremap <C-c> <ESC>

Vimのデフォルトの挙動では<C-c><ESC>は微妙に挙動が異なります。それを完全に同じものとして扱う設定です。

ちなみにどのように違うかというと、

  • ノーマルモードへ移行する際の前置数値の扱い
  • InsertLeave イベント発行の有無

と言った感じです。

Vimに元々キーアサインされている<C-[>は完全に<ESC>と同じ挙動なので、こちらに慣れている方は使い分けても良いでしょう。

ぼくはEmacsからVimに乗り換えた関係で、<C-g>に近いポジションの<C-c>をキャンセル*1に割り当てたという感じです。

Emacsでは<C-g>がキャンセルとなっています

<C-c><C-c>で検索のハイライトを消す

noremap <C-c><C-c> :nohlsearch<Cr><Esc>

上記コードがマッピングに該当するのですが、検索時のハイライトを有効にする下記コードも.vimrcに追加しておいてください。

set hlsearch

検索し終わった後、毎回:nohlserchを実行するのは面倒なので、<C-c><C-c>(2回連続押し)で検索のハイライトを消す機能を付与しています。

また直接Vimとは関係ありませんが、JetBrains社のIDE*2にはIdeaVIMという公式プラグインがあり、本プラグインはVimの挙動をかなり良い感じでエミュレートしてくれます。

本プラグインはなんと.ideavimrcを作成することで挙動をカスタマイズすることができ、下記コードも認識してくれます。スゴイ!

set hlsearch
noremap <Esc> :nohlsearch<Cr><Esc>

まとめ

今回はキャンセルとハイライトの設定についてお話しました。この連載も長くなりそうですので、気長にお付き合いください。

本ブログでのVimに関する記事について

  • Vimの環境
  • 表記方法
  • 記事の見解

などはこちらにまとまっていますのでご参照ください。

*1:Vimではキャンセルではなくノーマルモードへ戻るという意味合いですが、本記事では便宜上このように呼称しています

*2:このメーカーは様々な言語用のIDEを出しているのですが、ぼくはPython用のPyCharmというIDEを使っています。賢くてオススメのIDEです。HTML/CSS/JSも書けます