···381381 let @/ = l:pattern
382382 let @" = l:saved_reg
383383endfunction
384384+385385+" Transparent editing of age encrypted files.
386386+augroup encrypted
387387+au!
388388+" First make sure nothing is written to ~/.viminfo while editing
389389+" an encrypted file.
390390+autocmd BufReadPre,FileReadPre *.age set viminfo=
391391+" We don't want a swap file, as it writes unencrypted data to disk
392392+autocmd BufReadPre,FileReadPre *.age set noswapfile
393393+" Switch to binary mode to read the encrypted file
394394+autocmd BufReadPre,FileReadPre *.age set bin
395395+autocmd BufReadPre,FileReadPre *.age let ch_save = &ch|set ch=2
396396+autocmd BufReadPre,FileReadPre *.age let shsave=&sh
397397+autocmd BufReadPre,FileReadPre *.age let &sh='sh'
398398+autocmd BufReadPre,FileReadPre *.age let ch_save = &ch|set ch=2
399399+autocmd BufReadPost,FileReadPost *.age '[,']!age -i ~/.age/key.txt --decrypt 2> /dev/null
400400+autocmd BufReadPost,FileReadPost *.age let &sh=shsave
401401+" Switch to normal mode for editing
402402+autocmd BufReadPost,FileReadPost *.age set nobin
403403+autocmd BufReadPost,FileReadPost *.age let &ch = ch_save|unlet ch_save
404404+autocmd BufReadPost,FileReadPost *.age execute ":doautocmd BufReadPost " . expand("%:r")
405405+" Convert all text to encrypted text before writing
406406+autocmd BufWritePre,FileWritePre *.age set bin
407407+autocmd BufWritePre,FileWritePre *.age let shsave=&sh
408408+autocmd BufWritePre,FileWritePre *.age let &sh='sh'
409409+autocmd BufWritePre,FileWritePre *.age '[,']!age -r "$(sed -n 's/.*\(age\)/\1/p' ~/.age/key.txt)" 2>/dev/null
410410+autocmd BufWritePre,FileWritePre *.age let &sh=shsave
411411+" Undo the encryption so we are back in the normal text, directly
412412+" after the file has been written.
413413+autocmd BufWritePost,FileWritePost *.age silent u
414414+autocmd BufWritePost,FileWritePost *.age set nobin
415415+augroup END