Por padrão, vim
deixa os arquivos de troca no diretório do meu projeto e, em caso de falha, os arquivos de backup.
Posso impedir isso? Ou preciso atualizar o .VCSignore
arquivo de todos os meus projetos ?
Por padrão, vim
deixa os arquivos de troca no diretório do meu projeto e, em caso de falha, os arquivos de backup.
Posso impedir isso? Ou preciso atualizar o .VCSignore
arquivo de todos os meus projetos ?
Respostas:
Por padrão, o Vim não deixa arquivos de backup para trás. Eles são meramente arquivos transitórios que existem enquanto o Vim está salvando o buffer no disco. Conforme descrito :help backup-table
neste comportamento, pode ser controlado pelas opções 'backup'
e 'writebackup'
:
'backup' 'writebackup' action ~
off off no backup made
off on backup current file, deleted afterwards (default)
on off delete old backup, backup current file
on on delete old backup, backup current file
Quanto aos arquivos de troca, pode ser útil coletá-los em um diretório dedicado. Isso pode ser feito com a 'directory'
opção Por exemplo
:set directory^=$HOME/.vim/tmp//
adicionará $HOME/.vim/tmp
ao cabeçalho da lista de diretórios que o Vim tentará usar ao criar um arquivo de troca. A //
trilha faz com que o Vim codifique o nome completo do caminho para o arquivo, para que não haja colisões com arquivos com nomes semelhantes de diretórios diferentes.
Advertência : Isso desativa efetivamente a capacidade do Vim perceber se vários usuários estão tentando editar o mesmo arquivo, pois os arquivos de troca são armazenados em locais diferentes.
O snippet abaixo (adaptado do vimrc do tpope ) também desabilitará o arquivo de troca para um buffer quando não for modificado, assim, se o Vim / seu computador travar quando você tiver vários arquivos abertos, os arquivos de troca deixados para trás serão apenas para arquivos modificados.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Advertência : Como o arquivo de troca existe apenas quando o buffer é modificado, isso tem um efeito semelhante ao da configuração 'directory'
. Se o buffer não for modificado, outro Vim poderá começar a editá-lo sem aviso prévio. Se o segundo Vim salvar antes que o primeiro faça mais alterações, elas não serão notadas até que o usuário tente salvar ou algo acione o Vim para verificar se o arquivo foi modificado.
Eu uso o meu .vimrc
em várias máquinas, incluindo servidores compartilhados. Não quero necessariamente que as pessoas possam ver os arquivos nos quais estou trabalhando e gosto de manter meu diretório pessoal relativamente limpo. Portanto, esta é a minha solução que funcionará perfeitamente no Linux e Mac OS X.
" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
:silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif
set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
Observe que isso criará um .tmp
diretório ~/.vim
se ele ainda não existir. Essa seria a nova página inicial dos seus arquivos de troca. Para desfazer arquivos, também tenho o seguinte no meu .vimrc
(que é bastante semelhante):
if exists("+undofile")
" undofile -- This allows you to use undos after exiting and
" restarting. NOTE: only present in 7.3+
" :help undo-persistence
if isdirectory( $HOME . '/.vim/.undo' ) == 0
:silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
endif
set undodir=~/.vim/.undo
set undofile
endif
Isto é o que eu faço no meu vimrc:
fun! MkdirIfNeeded(dir, flags, permissions)
if !isdirectory(a:dir)
call mkdir(a:dir, a:flags, a:permissions)
endif
endfun
" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
let tmpdir = 'C:/tmp/vim_' . whoami
else
let whoami = substitute(system("whoami"), '\n', '', '')
let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)
let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir
Ele criará /var/tmp/vim_<username>
e usará isso para armazenar todos os arquivos relacionados ao vim. Mantendo o diretório do projeto limpo.
O uso whoami
garante que você possa usar o vimrc globalmente (ou seja, para o usuário e raiz) enquanto ainda estiver usando diretórios separados; se você não precisar disso, poderá substituí-lo por um diretório codificado para uma inicialização mais rápida. Você também pode usar o ~/.vim/
diretório, mas eu gosto de usá- /var/tmp
lo porque geralmente é um sistema de arquivos separado.
Eu uso /var/tmp
porque /tmp
é frequentemente limpo na reinicialização. Você provavelmente não deseja que este diretório seja gravável em todo o mundo, pois as pessoas podem colocar arquivos lá para fazer coisas potencialmente perigosas quando você abre um arquivo.
adduser
ou o que quer que esteja usando para criar usuários. De qualquer forma, a maioria das pessoas usa o Vim em máquinas confiáveis (mas seu comentário é bom, como tal).
$HOME
algum lugar.
/var/
é um sistema de arquivos diferente. A teoria é que ele vai evitar uma série de gravações em /
, /usr
ou /home
, levando a uma menor fragmentação e risco de corrupção de arquivo em caso de um acidente ... É também por isso caixas de correio e outras coisas estão em /var
por padrão, e não no homedir ...
/var/tmp
é sempre gravável no mundo - é um diretório temporário do sistema. (Bem, você pode mudar para não ser, mas é uma daquelas coisas em que sistemas semelhantes ao Unix ficam felizes em deixar você manter as peças depois de quebrá-lo). Se você tiver outro usuário no sistema, ele poderá criar/var/tmp/vim_«your_username»
com permissões de sua escolha. E, em seguida, preencha-o com links simbólicos para seus arquivos importantes, que provavelmente serão destruídos pelos arquivos temporários do vim.