Відповіді:
Не існує вбудованого варіанта, хоча :help 'autosave'
(у todo.txt) посилається на опис того, що може зробити така опція.
Одним із можливих способів реалізації цього є використання CursorHold
події автокоманди. Ця подія запускається, коли користувач не натискає клавішу протягом 'updatetime'
мілісекунд.
autocmd CursorHold * update
:update
Команда зберігає тільки буфер , якщо він буде змінений. Якщо ви також хотіли, щоб це сталося під час активного режиму вставки, CursorHoldI
його можна додати до списку подій.
autocmd CursorHold,CursorHoldI * update
Інша альтернатива - це 'autowrite'
варіант, який дозволить зберегти буфер перед виконанням зовнішньої команди (корисно для збереження перед запуском :make
) або переключення на інший буфер.
Vim має функцію автоматичного збереження, але вона зберігає її у файлі "відновлення".
Під час редагування документа, наприклад, MyFile.txt
vim створить файл відновлення .MyFile.txt.swp
. Якщо ваша система повинна вийти з ладу або ваш сеанс повинен загинути, ви можете знову підключитися та відновитись з місця, де ви зупинилися, ввівши:
vim -r MyFile.txt
Це відкриє файл для редагування та відновить останні зміни, які ви внесли до нього.
Потім можна зберегти відновлену версію звичайним способом :w
.
На жаль, коли ви вийдете з vim, він залишить .MyFile.txt.swp
навколо, і вам потрібно його видалити вручну:
rm .MyFile.txt.swp
Див. "Сторінка" Відновлення "Сторінка також Розділ 11
:wq
або :q!
або ZZ
або і т.д.), файли підкачки повинні бути автоматично видалені.
Я зробив плагін vim-autosave, який використовує функцію Vim 8 Таймери, щоб періодично зберігати ваші буфери.
Я змушую свого 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
Як вказували інші, vim має файл swap (.swp), який буде створений там, де колись є ваш вихідний файл, але у вашому .vimrc-файлі ви можете встановити каталог .swp.
Вам потрібно буде створити каталог із, mkdir
а потім встановити .vimrc у цьому місці.
set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
ВІМ-робочий простір плагін має досить настроюється Автосохранение функція , яка може задовольнити ваші потреби. За замовчуванням він дозволяє автоматично зберігати під час сеансу робочої області (його головна особливість), але ви можете встановити його завжди автоматично зберігати, якщо це все, що ви шукаєте ( let g:workspace_autosave_always = 1
).
Спробуйте зберегти буфер при кожному зміні тексту:
autocmd TextChanged,TextChangedI <buffer> silent write
Це працює для мене.