Vim: ¿Cómo deshacerse del mapa específico del tipo de archivo?

Vim: ¿Cómo deshacerse del mapa específico del tipo de archivo?

Editar:Versión de trabajo.

He mapeado [[y ]]amis propias funciones:

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

Sin embargo, según :verbose map [[estos son anulados por /usr/share/vim/vim72/ftplugin/php.vim. ¿Cómo me deshago de las asignaciones de PHP y mantengo la mía propia? He intentado

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

de acuerdo con latutorial, pero luego recibo mensajes de error al iniciar Vim:

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

Usandonnoremapen lugar de nmapno ayuda.

Poner las asignaciones en~/.vim/after/ftplugin/php.vimtampoco funcionó. vim -Vmuestra:

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

Entonces encuentra la supuesta anulación.

Combinar nnoremapy el script "después" tampoco funciona.

Respuesta1

Las definiciones específicas (específicas del tipo de archivo, específicas del proyecto, ...) siempre se declararán locales en el búfer actual. Esto se logra con el <buffer>calificador para asignaciones y abreviaturas (los comandos usan -by los menús necesitan un complemento específico para emular esto, las variables tienen el prefijo b:y las configuraciones se deben establecer (sic) con :setlocal).

Además, para declararlo (es decir, una definición específica de ft) local al búfer, puede usar el comando automático como parece estar haciendo, sin embargo, recomendaría usar ftplugins. Es mucho más fácil de mantener y ya se tienen en cuenta todas las reglas relativas a la anulación de las distintas definiciones (asignaciones, etc.).

" => 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>

PD: SO o SU habrían sido más adecuados para tal pregunta.

Respuesta2

Intentaría utilizar sugerencias para anular las comprobaciones de complementos predeterminadas descritasaquí. Para resumir: suelte el archivo del complemento de asignaciones al final de la ruta de ejecución (por ejemplo, ~/.vim/after/ftplugin/php.vim) para anular las asignaciones globales.

Respuesta3

¿Intentaste usar nnoremapen lugar de nmapen tu.vimrc

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

información relacionada