
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 vonnnoremap
anstatt nmap
hilft nicht.
Einfügen der Zuordnungen in~/.vim/after/ftplugin/php.vim
hat auch nicht funktioniert. vim -V
zeigt:
...
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 nnoremap
mit 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 -b
und 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, nnoremap
anstelle von nmap
in 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>