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

6

Editar: Versão de trabalho .

Mapeii [[ e ]] para minhas 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 [[ , eles são substituídos por /usr/share/vim/vim72/ftplugin/php.vim . Como faço para me livrar dos mapeamentos PHP enquanto mantenho o meu próprio? Eu tentei

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

de acordo com o tutorial , 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

Usar nnoremap em vez de nmap não ajuda.

Colocar 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

Por isso, encontra o suposto override.

A combinação de nnoremap e o script "after" também não funciona.

    
por l0b0 27.06.2012 / 13:52

3 respostas

3

Definições específicas (específico do tipo de arquivo, específico do projeto, ...) sempre devem ser declaradas locais para o buffer atual. Isso é feito com o qualificador <buffer> para mapeamentos e abreviações (os comandos usam -b e os menus precisam de um plug-in específico para emular isso, variáveis são prefixadas por b: e 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 autocommand como você parece estar fazendo, no entanto, eu recomendaria em vez de usar ftplugins. É muito mais sustentável, e todas as regras relativas à sobreposição das várias definições (mapeamentos, etc.) já são levadas em conta.

" => 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 teria sido melhor para essa pergunta.

    
por 28.06.2012 / 17:59
2

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

    
por 27.06.2012 / 16:08
0

você tentou usar nnoremap em vez de nmap no 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>
    
por 27.06.2012 / 16:22