キーの組み合わせ「y <CG>」のマッピングを解除できません


8

でマッピングをチェックするとき

:verb nmap y 

私は得る:

n  y<C-G>      *@:call setreg(v:register, <SNR>104_recall())<CR>
        Last set from ~/.vim/bundle/vim-fugitive-2.2/plugin/fugitive.vim

私はそれをアンマップしよう:unmap y<C-G>とし:unmap y<C-g>たが、それは効果がありませんし、私はエラーを取得しますE31: No such mapping

このマッピングを削除するにはどうすればよいですか?:unmap y<C-G>ここで動作しないのはなぜですか?


それは、関連があるが判明したチケットのためのfugitiveプラグイン。
Alexey

回答:


7

引数で定義されたため、マッピングはバッファに対してローカルであるよう<buffer>です。
あなたが入力すると:unmap y<C-G>、あなたは、そのグローバル・マッピングマッピング解除するためにVimをお願いし{lhs}ているのy<C-G>が、あなたのシステムには、このような世界的なマッピングがエラーが故におそらくありません。

ローカルマッピングをマップ解除する場合は、<buffer>それを定義するために使用したのと同じ引数を使用する必要があります。:unmap <buffer> y<C-G>

編集:

プロセスを自動化するには、イベントを見てautocmdをインストールすることができVimEnterBufNewFileそしてBufReadPostif !empty(maparg('y<C-G>', 'n'))削除する前に、マッピングが存在するかどうかをテストします。それは次のようなものを与える可能性があります:

augroup custom_fugitive
    autocmd!
    autocmd VimEnter,BufNewFile,BufReadPost * if !empty(maparg('y<C-G>', 'n')) | unmap <buffer> y<C-G>| endif
augroup END

vimrc後者はプラグインの前に供給されるため、これを書き込むことはできません。代わりに、内部に記述する必要があります~/.vim/after/plugin/mappings.vim。ファイル名(mappings.vim)は関係ありません~/.vim/after/plugin/。重要なのはディレクトリ()だけです。

編集2:

あなたの最後のコメントが言うように、マッピングを無効にする別の方法があるようです。fugitiveマッピング<C-R><C-G>をインストールし、y<C-G>それg:fugitive_no_mapsがゼロ以外の場合のみ。あなたが含まれている場合のでlet g:fugitive_no_maps=1、あなたの内側にvimrcy<C-G>定義されるべきではありません。


autocmdソリューション多かれ少なかれ作品(後に最初に一致したファイルを除きますlvim)。から~/.vimrcVimEnterイベントに添付する理由がわかりません。また、BufReadPostよりもはるかに優れているようには見えませんBufRead。また、後にスペースを置くことunmapはできません。とにかく、より良い解決策はunmapsを~/.vim/after/ftplugin/FILETYPE.vimft)に入れることです。
x-yuri 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.