Можно ли сделать Vim автосохранением файлов?

32

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

Есть ли способ заставить Vim автоматически сохранять наши файлы через определенный промежуток времени?

thameera
источник

Ответы:

30

:help 'autosave'Встроенной опции нет, хотя (в todo.txt) содержится описание того, что может сделать такая опция.

Один из возможных способов реализовать это - использовать CursorHoldсобытие autocommand. Это событие вызывается, когда пользователь не нажимал клавишу в течение 'updatetime'миллисекунд.

autocmd CursorHold * update

Команда :updateсохраняет буфер, только если он изменен. Если вы также хотели, чтобы это происходило при активном режиме вставки, CursorHoldIего можно добавить в список событий.

autocmd CursorHold,CursorHoldI * update

Другой альтернативой является 'autowrite'опция, которая сохраняет буфер перед выполнением внешней команды (полезно для сохранения перед запуском :make) или переключением на другой буфер.

jamessan
источник
Как вы можете заметить, если он работает?
Нилон
@nilon Он должен напечатать в строке состояния, что он сохранен, как если бы вы нажали: w самостоятельно.
MaudPieTheRocktorate
12

Vim имеет функцию автосохранения, но сохраняет ее в файле «восстановления».

Когда вы редактируете документ, например, MyFile.txtvim создаст файл revovery .MyFile.txt.swp. Если ваша система потерпит крах или сеанс прекратится, вы можете восстановить соединение и восстановить его с того места, где вы остановились, набрав:

vim -r MyFile.txt

Это откроет файл для редактирования и восстановит последние сделанные вами изменения.

Затем вы можете сохранить восстановленную версию обычным способом :w.

К сожалению, когда вы выйдете из vim, он уйдет .MyFile.txt.swp, и вам нужно удалить его вручную:

rm .MyFile.txt.swp

См. Справочную страницу «Восстановление», также Глава 11

rolfl
источник
1
При правильном выходе из Vim (т. Е. С помощью :wqили, :q!или, ZZи т. Д.) Файлы подкачки должны автоматически удаляться.
дверная ручка
4
@ Doorknob нет, когда вы выходите после восстановления ... ;-)
rolfl
8

Я сделал плагин vim-autosave, который использует функцию таймеров Vim 8 для периодического сохранения ваших буферов.

Кристиан Брабандт
источник
Вау, Vim 8 плагинов уже выходит. Выглядит отлично, Кристиан!
thameera 13.09.16
Спасибо, Кристиан. Это выглядит многообещающе. Интересно, поддерживает ли плагин новые / несохраненные файлы. Я не могу найти ответ в документации к плагину. Мой компьютер решил перезагрузить прошлой ночью, и у меня было несколько быстрых заметок о новых буферах. Vim не создавал и не сохранял файлы swp.
JAponte
Нет, в настоящее время он не поддерживает новые / несохраненные файлы. Если вы хотите этого, создайте причудливую проблему.
Кристиан Брабандт,
2

Я заставляю свой Vim сохранять все каждый раз, когда теряется фокус.

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

Мои шаблоны довольно длинные, и я использую их в нескольких autocmds, но для полноты это выглядит так:

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

Как указали другие, у vim есть файл подкачки (.swp), который будет создан там, где находится ваш оригинальный файл, но в вашем файле .vimrc вы можете установить каталог .swp.

Вам нужно будет создать каталог с, mkdirа затем установить ваш .vimrc в этом месте.

set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
зарегистрированный пользователь
источник
1

ВИМ-рабочее пространство плагин имеет достаточно настраиваемый Автосохранение функция , которая может удовлетворить ваши потребности. По умолчанию он включает автосохранение во время сеанса рабочего пространства (его основная функция), но вы можете установить его на автоматическое сохранение, если это все, что вы ищете ( let g:workspace_autosave_always = 1).

jaybay
источник
1

Попробуйте сохранить буфер при каждом изменении текста:

autocmd TextChanged,TextChangedI <buffer> silent write

Это работает для меня.

Источник

simhumileco
источник