Как автоматически сохранять файл каждую 1 секунду в vim? - PullRequest
28 голосов
/ 09 августа 2011

Я не хочу знать, почему вы не должны автоматически сохранять файл или файл подкачки и т. Д. Или по какой-либо причине не сохранять автоматически.

Я просто хочу автоматически сохранить текущий рабочий файл.сохранять в каждую 1 секунду в VIM.

Как мне этого добиться?

Ответы [ 3 ]

35 голосов
/ 09 декабря 2014

Сохраняет буфер при каждом изменении текста. (Vim 7,4)

autocmd TextChanged,TextChangedI <buffer> silent write

9 голосов
/ 09 августа 2011

Когда вы начинаете читать файл, установите переменную буфера на текущее время:

au BufRead,BufNewFile * let b:save_time = localtime()

Установить событие, чтобы проверить, прошло ли достаточно времени с момента последнего сохранения, и обновить, если нет:

au CursorHold * call UpdateFile()

Установить период автосохранения в секундах:

let g:autosave_time = 1

Определите функцию для сохранения файла при необходимости:

" save if needed / update the save_time after the save
function! UpdateFile()
  if((localtime() - b:save_time) >= g:autosave_time)
      update
      let b:save_time = localtime()
  else
      " just debugging info
      echo "[+] ". (localtime() - b:save_time) ." seconds have elapsed so far."
  endif
endfunction

Затем, чтобы сбросить время сохранения явно:

au BufWritePre * let b:save_time = localtime()

Я не проверял выше на vim 7.0 и позже. Кроме того, событие CursorHold вряд ли будет достаточно для такого небольшого периода автосохранения (оно также не срабатывает при записи) - возможно, вам следует также вызвать UpdateFile() для CursorMoved.

Также рассмотрите возможность использования файлов подкачки. По умолчанию файл подкачки записывается после 200 введенных символов или 4 секунд бездействия. Восстановление из свопа довольно простое и, возможно, более надежное на случай, если что-то пойдет не так.

1 голос
/ 07 февраля 2017

Плагин vim-workspace имеет довольно настраиваемую функцию автосохранения, которая может соответствовать вашим потребностям (с автоматическим чтением, так что вы получаете поведение победителя последней записи). Вы можете установить его на автоматическое сохранение (по умолчанию, оно сохраняется только в сеансе рабочего пространства) и соответственно установить время обновления.

let g:workspace_autosave_always = 1
updatetime=1000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...