vim - Arquivo de salvamento automático no disco, eficientemente

1

Eu mantenho um arquivo de log e quero que ele seja gravado em disco sem ter que salvá-lo manualmente após cada edição.

Eu usei o comando :au! CursorHoldI,CursorHold <buffer> silent! :update que encontrei em algum lugar, e que funciona bem, e é eficiente: com 'updatetime' de 4 segundos por padrão, ele gravará o arquivo em disco (somente se for alterado, portanto :update , não :write ) após o cursor estar no mesmo lugar por 4 segundos, nos modos inserir e normal . (Embora o buffer tenha foco dentro do Vim. Se o Vim tem ou não foco, o que é um ponto sutil. Isto é, se o Vim perder o foco, o arquivo ainda será salvo após 4 segundos.)

O único problema é que, se eu tiver outro arquivo aberto com :split e clicar ou Ctrl + W , k , então o arquivo original não é salvo depois de 'updatetime' ms. Como isso pode ser corrigido?

    
por Evgeni Sergeev 03.02.2014 / 02:57

2 respostas

1

O comando :wall (mais comumente usado pela abreviada :wa ), assim como :update , somente gravará um arquivo se for salvo. A diferença é que ele gravará TODOS os arquivos abertos, não apenas o atual.

Você pode usar o mesmo autocmd que você tem e usar apenas :wa no lugar de :update .

    
por 05.02.2014 / 05:11
0

Uma solução é adicionar o evento BufLeave , fazendo um comando como este:

:au! CursorHoldI,CursorHold,BufLeave <buffer> silent! :update

No meu .vimrc (também conhecido como _vimrc ), defini

noremap <C-S-F5> :au! CursorHoldI,CursorHold,BufLeave <buffer> silent! :update<CR>

Para que eu pressione Ctrl + Desloque + F5 nesse buffer para colocá-lo no modo de gravação automática.

Observação: o silent não imprime nenhuma mensagem e silent! também não imprime nenhum erro e os ignora. Isso é para buffers que não possuem arquivos associados e arquivos somente leitura.

    
por 03.02.2014 / 02:57