Vim: Wie wird man die dateitypspezifische Karte los?

Vim: Wie wird man die dateitypspezifische Karte los?

Bearbeiten:Arbeitsversion.

Ich habe abgebildet [[und ]]zumeine eigenen Funktionen:

nmap <silent> ]] :let &tabstop += 1 <CR> :echo 'tabstop =' &tabstop <CR>
nmap <silent> [[ :let &tabstop -= &tabstop > 1 ? 1 : 0 <CR> :echo 'tabstop =' &tabstop <CR>

Diese werden jedoch laut :verbose map [[überschrieben durch /usr/share/vim/vim72/ftplugin/php.vim. Wie werde ich die PHP-Mappings los und behalte gleichzeitig meine eigenen? Ich habe versucht

autocmd FileType php unmap! [[
autocmd FileType php unmap! ]]

entsprechend derLernprogramm, aber dann erhalte ich beim Start von Vim Fehlermeldungen:

Error detected while processing FileType Auto commands for "php":
E31: No such mapping
E31: No such mapping
Press ENTER or type command to continue

Verwenden vonnnoremapanstatt nmaphilft nicht.

Einfügen der Zuordnungen in~/.vim/after/ftplugin/php.vimhat auch nicht funktioniert. vim -Vzeigt:

...
finished sourcing /usr/share/vim/vim72/ftplugin/php.vim
...
finished sourcing /home/user/.vim/after/ftplugin/php/php.vim

Es findet also die vermeintliche Außerkraftsetzung.

Auch die Kombination nnoremapmit dem „After“-Skript funktioniert nicht.

Antwort1

Bestimmte Definitionen (dateitypspezifisch, projektspezifisch, ...) müssen immer lokal für den aktuellen Puffer deklariert werden. Dies wird mit dem <buffer>Qualifizierer für Zuordnungen und Abkürzungen erreicht (Befehle verwenden -bund Menüs benötigen ein bestimmtes Plugin, um dies zu emulieren, Variablen werden mit vorangestellt b:und Einstellungen müssen mit gesetzt werden :setlocal).

Um es (also eine ft-spezifische Definition) lokal für den Puffer zu deklarieren, können Sie außerdem Autocommand verwenden, wie Sie es anscheinend tun, ich würde jedoch stattdessen die Verwendung von ftplugins empfehlen. Es ist viel wartungsfreundlicher und alle Regeln zum Überschreiben der verschiedenen Definitionen (Zuordnungen usw.) sind bereits berücksichtigt.

" => ftplugin/php/php_my_stuff.vim
" headers guards...
...
:nnoremap <silent> <buffer> ]] :setlocal ts+=1<cr>:set ts?<cr>
:nnoremap <silent> <buffer> [[ :setlocal ts-=1<cr>:set ts?<cr>

PS: SO oder SU wäre für eine solche Frage besser geeignet gewesen.

Antwort2

Ich würde versuchen, Hinweise zum Überschreiben der beschriebenen Standard-Plugin-Prüfungen zu verwendenHierUm es zusammenzufassen: Legen Sie Ihre Mapping-Plugin-Datei spät im Runpath ab (z. B. ~/.vim/after/ftplugin/php.vim), um die globalen Mappings zu überschreiben.

Antwort3

haben Sie versucht, nnoremapanstelle von nmapin Ihrem.vimrc

nnoremap <silent> ]] :let &tabstop += 1 <CR> :echo 'tabstop =' &tabstop <CR>
nnoremap <silent> [[ :let &tabstop -= &tabstop > 1 ? 1 : 0 <CR> :echo 'tabstop =' &tabstop <CR>

verwandte Informationen