Vim: Como se livrar do mapa específico do tipo de arquivo?

Vim: Como se livrar do mapa específico do tipo de arquivo?

Editar:Versão de trabalho.

Eu mapeei [[e ]]paraminhas próprias funções:

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

No entanto, de acordo com :verbose map [[estes são substituídos por /usr/share/vim/vim72/ftplugin/php.vim. Como faço para me livrar dos mapeamentos PHP enquanto mantenho os meus? eu tentei

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

de acordo comtutorial, mas recebo mensagens de erro na inicialização do 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

Usandonnoremapem vez de nmapnão ajuda.

Colocando os mapeamentos em~/.vim/after/ftplugin/php.vimtambém não funcionou. vim -Vmostra:

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

Portanto, ele encontra a suposta substituição.

Combinar nnoremape o script "depois" também não funciona.

Responder1

Definições específicas (específicas do tipo de arquivo, específicas do projeto, ...) devem sempre ser declaradas locais para o buffer atual. Isso é feito com o <buffer>qualificador para mapeamentos e abreviações (os comandos usam -be os menus precisam de um plugin específico para emular isso, as variáveis ​​são prefixadas por b:e as configurações devem ser definidas (sic) com :setlocal).

Além disso, para declará-lo (ou seja, uma definição específica de ft) local para o buffer, você pode usar o autocommand como parece estar fazendo, mas eu recomendo usar ftplugins. É muito mais fácil de manter e todas as regras relativas à substituição das diversas definições (mapeamentos, etc.) já foram levadas em consideração.

" => 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 ou SU teriam sido mais adequados para tal pergunta.

Responder2

Eu tentaria usar dicas para anular as verificações de plug-in padrão descritasaqui. Resumindo: coloque o arquivo do plugin de mapeamentos no final do runpath (por exemplo, ~/.vim/after/ftplugin/php.vim) para substituir os mapeamentos globais.

Responder3

você tentou usar nnoremapem vez de nmapem seu.vimrc

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

informação relacionada