Ich kann die Zuordnung einer Tastenkombination "y <CG>" nicht aufheben

8

Wenn ich meine Zuordnungen mit überprüfe

:verb nmap y 

Ich bekomme:

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

Ich versuche es mit :unmap y<C-G>und mit zu entfernen :unmap y<C-g>, aber es hat keine Auswirkung und ich erhalte den Fehler E31: No such mapping.

Wie kann ich diese Zuordnung entfernen? Warum funktioniert :unmap y<C-G>hier nicht?

Alexey
quelle
Es stellt sich heraus, dass es ein verwandtes Ticket für das fugitivePlugin gibt.
Alexey

Antworten:

7

Es scheint, dass die Zuordnung lokal zu einem Puffer ist, wie er mit dem Argument definiert wurde<buffer> .
Wenn Sie eingeben :unmap y<C-G>, Sie Vim stellen eine globale Zuordnung unmap der {lhs}ist y<C-G>, aber es gibt wahrscheinlich keine solche globale Kartierung auf Ihrem System daher die Fehler.

Wenn Sie die Zuordnung der lokalen Zuordnung aufheben möchten, müssen Sie dasselbe Argument <buffer>verwenden, mit dem sie definiert wurde::unmap <buffer> y<C-G>

Bearbeiten:

Um den Prozess zu automatisieren, können Sie ein Autocmd installieren, das die Ereignisse überwacht VimEnter, BufNewFileund BufReadPost. Es würde testen, ob das Mapping vorhanden ist if !empty(maparg('y<C-G>', 'n')), bevor versucht wird, es zu löschen. Es könnte etwas geben wie:

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

Sie konnten dies nicht in Ihr schreiben, vimrcda letzteres vor Ihren Plugins bezogen wird, die alles überschreiben würden, was Sie tun. Stattdessen müssten Sie es innen schreiben ~/.vim/after/plugin/mappings.vim. Der Dateiname ( mappings.vim) spielt keine Rolle, nur das Verzeichnis ist wichtig ( ~/.vim/after/plugin/).

Bearbeiten 2:

Wie Ihr letzter Kommentar sagt, scheint es eine andere Möglichkeit zu geben, die Zuordnung zu deaktivieren. fugitiveInstallieren Sie die Zuordnungen <C-R><C-G>und y<C-G>nur, wenn sie g:fugitive_no_mapssich von Null unterscheiden. Also, wenn Sie let g:fugitive_no_maps=1in Ihre aufnehmen vimrc, y<C-G>sollte nicht definiert werden.

user9433424
quelle
Die autocmdLösung funktioniert mehr oder weniger (mit Ausnahme der ersten übereinstimmenden Datei danach lvim). Von ~/.vimrc. Ich verstehe nicht, warum ich an ein VimEnterEreignis gebunden bin . Auch BufReadPostscheint nicht viel besser zu sein als BufRead. Und es ist sinnvoll zu betonen, dass keine nachfolgenden Leerzeichen danach unmaperlaubt sind. Eine bessere Lösung ist es, unmaps in ~/.vim/after/ftplugin/FILETYPE.vim( ft ) zu setzen.
X-Yuri