Vimで特定ファイルタイプでだけキーマップを無効化

Vimのノーマルモードの改行(<CR>)には,挿入モードと同じようにその場で改行できるように~/.vimrcに以下のキーマップを割り当てている。

nnoremap <CR> i<CR><ESC>

しかし,quickfix-windowやロケーションウィンドウ(ファイルタイプ:qf)やでは改行で対象箇所にジャンプする機能がある。上記キーマップがあるため,<CR>を入力すると以下のエラーが出てうまくジャンプできない。

E21: Cannot make changes, 'modifiable' is off

オプションmodifiableがoffになっているのにファイルを修正しようとしてエラーになってしまっている。

このジャンプの機能は残しておきたいので,quickfix-windowでは自分で定義した上記のキーマップを無効化したい。

以下のサイトで特定ファイルタイプでキーマップを無効化する方法が記されている。

参考:特定のファイル種別の時だけキーマップを無効化する方法 – かせいさんとこ

これによると,特定ファイルタイプでだけバッファーローカルの設定でグローバルな設定を上書きすればよいとのことだ。つまり,以下の内容のファイルタイプごとの設定ファイル~/.vim/after/ftplugin/qf.vimを作ればよい。

" \file qf.vim

if exists("b:did_ftplugin_qf") | finish | endif let b:did_ftplugin_qf = 1 "" Disable line break nnoremap <buffer> <CR> <CR>

ここでは,自分で定義した<CR>をもともとの<CR>に割り当て直している。

これで特定ファイルでだけキーマップを無効化できた。

2016-09-24追記:実際のところ,今回実現したいことは上記のように個別のファイルでの設定は不要で簡単にできた。以下の内容を~/.vimrcに記入すればいい。

"" Insert line break by Enter
autocmd BufEnter * if &modifiable | nnoremap <buffer> <CR> i<CR><ESC> | endif

autocmdでバッファーを開くたびに,modifiableが有効かどうか判定し,有効であるときだけそのバッファーでキーマップを有効にしている。これにより,QuickFixだけでなく,VimのHelpなどでもキーマップを無効(厳密には未設定なだけ)にでき,Enterでタグジャンプできる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です