Há um projeto de programação em que trabalho, onde todo mundo usa uma tabsize de 4, então acho isso mais direto set tabstop=4
no meu ~/.vimrc
. No entanto, prefiro que isso não afete todos os arquivos editados - apenas os deste projeto - digamos que todos os arquivos em um determinado diretório (e seus subdiretórios).
Existe uma maneira de eu facilmente definir variáveis condicionalmente com base no prefixo de diretório do arquivo?
Respostas:
Configuração central
Se não há problema em configurar as exceções locais centralmente, você pode colocar esses autocmds no seu
~/.vimrc
:Por outro lado, se você deseja que a configuração específica seja armazenada com o projeto (e não deseja incorporar isso em todos os arquivos via modelines ), você tem as duas opções a seguir:
Configuração local com funcionalidade incorporada
Se você sempre iniciar o Vim a partir do diretório raiz do projeto, o
permite a leitura de um
.vimrc
arquivo do diretório atual. Você pode colocar os:set ts=4 sw=4
comandos lá.Configuração local através do plugin
Caso contrário, você precisa da ajuda de um plugin; existem vários no vim.org; Posso recomendar o plug-in localrc , que permite até a configuração específica do tipo de arquivo local.
Observe que a leitura da configuração do sistema de arquivos tem implicações de segurança; você pode querer
:set secure
.fonte
autocmd
método que não está funcionando, verifique se não há links simbólicos no caminho - tive que colocar o caminho completo sem links simbólicos antes que funcionasse para mim (no OS X 10.9)Você pode configurar o vim para ler outros comandos usando o
source
comando (so). Adicione isso ao seu~/.vimrc
- ele pesquisará o diretório atual e, se o arquivo .vimrc_proj não encontrado, pesquisará .vimrc_proj no diretório pai.Em seguida, adicione qualquer comando personalizado nos
.vimrc_proj
arquivos de configuração para se adequar aos seus projetos.fonte
Você pode usar um plug-in para o Vim para resolver o problema de uma maneira mais geral, tentando detectar o recuo.
O plugin de minha escolha é o DetectIndent . Demorou algum tempo para eu testar todos os garfos do plug-in para encontrar um que atendesse às minhas necessidades. O original estava muito próximo, mas não exatamente, então eu fiz meu próprio garfo .
Para depuração, é muito útil
:set verbose=1
executar o plugin novamente com:DetectIndent
fonte
Uma solução possível que ainda não foi mencionada é subir um nível acima e implementar scripts de shell específicos do projeto para iniciar o seu ambiente vim.
Isso permite que configurações específicas do vim sejam aprovadas usando a
-S
opção de linha de comando. A vantagem é que ele também permite configurar outros aspectos do ambiente, como as configurações do terminal ou do cscope.Por exemplo, digamos que eu tenha um projeto C ++ chamado
foo
, para o qual desejo carregar as configurações do vim do arquivo~/.vim/projects/foo.vim
. Também quero configurar um índice cscope e iniciar uma janela de terminal se o comando for chamado de alguma ferramenta de inicialização rápida ou atalho na área de trabalho. Para abrir meu ambiente, tenho o seguinte script, chamadovim-foo
:fonte