Não consigo remover o mapeamento de uma combinação de teclas `y <CG>`

8

Quando verifico meus mapeamentos com

:verb nmap y 

eu recebo:

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

Tento desmapear com :unmap y<C-G>e com :unmap y<C-g>, mas não tem efeito e recebo o erro E31: No such mapping.

Como posso remover esse mapeamento? Por que não :unmap y<C-G>trabalha aqui?

Alexey
fonte
Acontece que há um ticket relacionado para o fugitiveplugin.
Alexey #

Respostas:

7

Parece que o mapeamento é local para um buffer, conforme foi definido com o argumento <buffer>.
Ao digitar :unmap y<C-G>, você solicita ao Vim que retire o mapeamento de um mapeamento global cujo {lhs}é y<C-G>, mas provavelmente não existe esse mapeamento global no sistema, daí o erro.

Se você deseja remover o mapeamento do mapeamento local, use o mesmo argumento <buffer>usado para defini-lo::unmap <buffer> y<C-G>

Editar:

Para automatizar o processo, você pode instalar um autocmd observando os acontecimentos VimEnter, BufNewFilee BufReadPost. Ele testaria se o mapeamento existe if !empty(maparg('y<C-G>', 'n'))antes de tentar excluí-lo. Poderia dar algo como:

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

Você não pode escrever isso no seu, vimrcporque o último é fornecido antes dos plugins, o que substituirá qualquer coisa que você faça. Em vez disso, você teria que escrever dentro ~/.vim/after/plugin/mappings.vim. O nome do arquivo ( mappings.vim) não importa, apenas o diretório é importante ( ~/.vim/after/plugin/).

Edição 2:

Como seu último comentário diz, parece que há outra maneira de desativar o mapeamento. fugitiveinstale os mapeamentos <C-R><C-G>e y<C-G>somente se g:fugitive_no_mapsfor diferente de zero. Portanto, se você incluir let g:fugitive_no_maps=1dentro do seu vimrc, y<C-G>não deve ser definido.

user9433424
fonte
A autocmdsolução funciona mais ou menos (exceto o primeiro arquivo correspondido depois lvim). De ~/.vimrc. Não vejo por que anexar ao VimEnterevento. Além disso, BufReadPostnão parece ser muito melhor do que BufRead. E faz sentido enfatizar que não unmapsão permitidos espaços à direita depois . De qualquer forma, a melhor solução é colocar unmaps em ~/.vim/after/ftplugin/FILETYPE.vim( ft ).
X-yuri