特定のファイル種別の時だけキーマップを無効化する方法
概要
よくあるこんなので、ダブルクォーテーションの補完を .vim の時だけ解除したい時どうしたらよいか?
知らなかったので纏めました
inoremap { {}<LEFT> inoremap ( ()<LEFT> inoremap [ []<LEFT> inoremap < <><LEFT> inoremap " ""<LEFT> inoremap ' ''<LEFT> " ビジュアルモード vnoremap { "zdi^V{<C-R>z}<ESC> vnoremap [ "zdi^V[<C-R>z]<ESC> vnoremap ( "zdi^V(<C-R>z)<ESC> vnoremap " "zdi^V"<C-R>z^V"<ESC> vnoremap ' "zdi'<C-R>z'<ESC>
ftplugin/vim.vim で解除してみる
silent! iunmap " silent! vunmap "
これをやると、vim系のファイルを読んだ後、他のバッファでもダブルクォーテーションの補完が使えなくなる
他のバッファというか vim 全体に効力か及んでいるみたい
バッファローカルにする
mapの後に
なので、.vimrcと、vim.vim それぞれに
.vimrc側にもつけるのは、
.vimrc
inoremap <buffer> { {}<LEFT> inoremap <buffer> ( ()<LEFT> inoremap <buffer> [ []<LEFT> inoremap <buffer> < <><LEFT> inoremap <buffer> " ""<LEFT> inoremap <buffer> ' ''<LEFT>
silent! <buffer> iunmap " silent! <buffer> vunmap "
そんな感じです
やり方として正しいのか不明
バッファローカルの設定でグローバルな設定を上書きするのが正しいようです
Kanaさんご指摘謝恩!!
アウト。<buffer>はそれを実行したときにカレントバッファにしか影響がない。 例示されているものではvimrcで定義しているものはグローバルに有効にしたいものだから、 <buffer>を付けるとVim起動時に最初に表示されるバッファのみでしか定義されず他のバッファで使えなくなる。 だからそこで<buffer>を使ってはならない。 ftplugin/vim.vimではグローバルな定義を無効化したいのだから、 下記のようにして<buffer>を付けてバッファローカルなものを定義してグローバルな定義を上書きする。
Re: 特定のファイル種別の時だけキーマップを無効化する方法 - かせいさんとこ - while ("im the true Vim master"); - vimグループ
inoremap <buffer> { { inoremap <buffer> " " inoremap <buffer> ' '
そんなかんじー