Quero relatar minha opinião sobre esse problema.
Eu tenho o vimrc.vim
em um repositório git ( $VIMCONF
, com um bootstrap .vimrc) e mapeou <Leader>ve
("vim edit") para abrir o vimrc em uma nova aba. Isso não afeta o diretório de trabalho atual.
Então, se eu editar vimrc.vim
de um vim iniciado em um diretório diferente fora do meu repositório vim git, a abordagem discutida por Nick Edwards falhará. Meu hack é o seguinte (para windows e linux)
if has('win32')
" The git command has to be passed to git. So we need to call bash.exe.
autocmd BufEnter *vimrc.vim silent! lcd %:p:h
autocmd BufWritePost *vimrc.vim if expand('<amatch>') =~ substitute(expand('$VIMCONF\vimrc.vim'), '\', '/', "g") | execute '! git add % & git commit -m %' | endif
else " Linux
autocmd BufWritePost *vimrc.vim
\ if expand('<amatch>') =~ expand($VIMCONF)."/vimrc.vim" |
\ let tempdir = getcwd() | execute 'cd' fnameescape(expand('<amatch>:h')) |
\ execute '! if git rev-parse --git-dir > /dev/null 2>&1 ; then git add % ; git commit -m % ; fi' |
\ execute 'cd' fnameescape(tempdir) |
\ endif
endif
Explicação:
- Para windows, altero o diretório para o local do arquivo vimrc. Este não é o melhor, e eu poderia mudar mais tarde para ser semelhante ao linux. Não leve isso muito a sério, mas você pode querer usá-lo como um guia.
git
precisa estar no caminho (ou seja, você deve digitar git <ENTER>
em cmd.exe
)
- Para o Linux, eu primeiro verifico se estou editando o vimrc.vim correto
- Salve o diretório de trabalho atual em
tempdir
- Altere o diretório para o arquivo vimrc.vim
- Faça o commit do git
- Retornar ao diretório de trabalho anterior
- eu empurro manualmente as alterações do git
Notas:
- Os comandos podem ser "encadeados" no vim com
|
. A cadeia será abortada se algum dos comandos falhar. Para quebrar várias linhas, inicie a próxima linha com \
.
- Isso pode ser estendido para arquivos ftplugin. Seus filtros serão
*.vim
e expand($VIMCONF)."/ftplugin/"