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.