
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
Usandonnoremap
em vez de nmap
não ajuda.
Colocando os mapeamentos em~/.vim/after/ftplugin/php.vim
também não funcionou. vim -V
mostra:
...
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 nnoremap
e 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 -b
e 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 nnoremap
em vez de nmap
em 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>