É possível criar arquivos de salvamento automático do Vim?


32

Alguns processadores de texto e editores de texto salvam automaticamente os arquivos que estamos editando de tempos em tempos, o que é muito conveniente para sobreviver a falhas graves etc.

Existe uma maneira de fazer o Vim salvar automaticamente nossos arquivos após um intervalo específico?

Respostas:


30

Não há uma opção :help 'autosave'interna , embora (em todo.txt) se refira a uma descrição do que essa opção poderia fazer.

Uma maneira possível de implementar isso é usar o CursorHoldevento de comando automático. Este evento é acionado quando o usuário não pressiona uma tecla por 'updatetime'milissegundos.

autocmd CursorHold * update

O :updatecomando salva o buffer apenas se ele for modificado. Se você também quiser que isso aconteça enquanto o modo de inserção estiver ativo, CursorHoldIpoderá ser adicionado à lista de eventos.

autocmd CursorHold,CursorHoldI * update

Outra alternativa é a 'autowrite'opção, que salvará o buffer antes de executar um comando externo (útil para salvar antes de executar :make) ou alternar para um buffer diferente.


Como você pode perceber se está funcionando?
Nilon 8/06

@ nilon Ele deve imprimir na barra de status que está salva, como se você tivesse pressionado: w você mesmo.
MaudPieTheRocktorate 16/08/19

12

O Vim possui um recurso de salvamento automático, mas o salva no arquivo "recuperação".

Quando você edita um documento, por exemplo, o MyFile.txtvim cria o arquivo de recuperação .MyFile.txt.swp. Se seu sistema travar ou sua sessão morrer, você poderá reconectar-se e recuperar-se essencialmente de onde parou, digitando:

vim -r MyFile.txt

Isso abrirá o arquivo para edição e recuperará as últimas alterações feitas nele.

Você pode salvar a versão recuperada da maneira normal :w.

Infelizmente, quando você sai do vim, ele deixa o ambiente .MyFile.txt.swp, e você precisa removê-lo manualmente:

rm .MyFile.txt.swp

Consulte a página do manual "Recuperação" também Capítulo 11


1
Quando você sai do Vim corretamente (ou seja, com :wqou :q!ou ZZou etc.), os arquivos de troca devem ser removidos automaticamente.
Doorknob

4
Não @Doorknob quando sair depois de uma recuperação ... ;-)
rolfl

8

Eu criei um plugin vim-autosave que usa o recurso Vim 8 do Timers para salvar periodicamente seus buffers.


Woah, Vim 8 plugins já saindo. Parece ótimo, cristão!
thameera 13/09/16

Obrigado Christian. Isso parece promissor. Gostaria de saber se o plugin suporta arquivos novos / não salvos. Não consigo encontrar a resposta na documentação do plug-in. Meu computador decidiu reiniciar a noite passada e eu tive várias anotações rápidas sobre novos buffers. O Vim não criou ou conservou arquivos swp.
JAponte

Não, atualmente, ele não suporta arquivos novos / não salvos. Se você quiser isso, vá em frente e crie um problema esquisito.
Christian Brabandt

2

Faço meu Vim salvar tudo toda vez que o foco é perdido.

autocmd FocusLost <your-patterns-here> silent! wall

Meus padrões são bem longos e eu os uso em vários autocmds, mas, para completar, é assim:

if exists(':keeppatterns')
    let s:keeppatterns = 'keeppatterns '
else
    let s:keeppatterns = ''
endif

augroup AutoSaveGroup
    " :help file-pattern has some info,
    " but some of it is is buried in the PATTERNS section of usr_40.txt
    let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"

    autocmd!
    execute "autocmd FocusLost"     s:autoPattern   "silent! wall"
    execute "autocmd BufWritePre"   s:autoPattern   s:keeppatterns . 'call FixFormatting(expand("<afile>"))'

    execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
    execute "autocmd FileChangedRO" s:autoPattern "write!"

    autocmd FocusLost   *.txt   silent! wall
augroup END

1

Como outros indicaram, o vim possui um arquivo de troca (.swp) que será criado onde quer que esteja o arquivo original, mas no seu arquivo .vimrc, você pode definir o diretório .swp.

Você precisará criar o diretório mkdire, em seguida, definir seu .vimrc nesse local.

set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp

1

O plug - in vim-workspace possui um recurso de salvamento automático bastante personalizável que pode atender às suas necessidades. Por padrão, ele permite o salvamento automático em uma sessão da área de trabalho (seu principal recurso), mas você pode configurá-lo para sempre salvar automaticamente, se isso é tudo o que você procura ( let g:workspace_autosave_always = 1).


1

Tente salvar o buffer sempre que o texto for alterado:

autocmd TextChanged,TextChangedI <buffer> silent write

Isso funciona para mim.

Fonte

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.