I like to use OpenSSL to encrypt some files on my hard drive. I cobbled together the following script that allows me to "transparently" view and updated OpenSSL-encrypted docs using vim on Linux:
augroup encrypted au! " First make sure nothing is written to ~/.viminfo while editing " an encrypted file. autocmd BufReadPre,FileReadPre *.des3 set viminfo= " We don't want a swap file, as it write unencrypted data to disk autocmd BufReadPre,FileReadPre *.des3 set noswapfile " Switch to binary mode to read the encrypted file autocmd BufReadPre,FileReadPre *.des3 set bin autocmd BufReadPre,FileReadPre *.des3 let ch_save = &ch|set ch=2 autocmd BufReadPre,FileReadPre *.des3 let shsave=&sh autocmd BufReadPre,FileReadPre *.des3 let &sh='sh' autocmd BufReadPre,FileReadPre *.des3 let ch_save = &ch|set ch=2 autocmd BufReadPost,FileReadPost *.des3 '[,']!openssl enc -d -des3 2> /dev/null autocmd BufReadPost,FileReadPost *.des3 let &sh=shsave " Switch to normal mode for editing autocmd BufReadPost,FileReadPost *.des3 set nobin autocmd BufReadPost,FileReadPost *.des3 let &ch = ch_save|unlet ch_save autocmd BufReadPost,FileReadPost *.des3 execute ":doautocmd BufReadPost " . expand("%:r") " Convert all text to encrypted text before writing autocmd BufWritePre,FileWritePre *.des3 set bin autocmd BufWritePre,FileWritePre *.des3 let shsave=&sh autocmd BufWritePre,FileWritePre *.des3 let &sh='sh' autocmd BufWritePre,FileWritePre *.des3 '[,']!openssl enc -e -des3 -salt 2>/dev/null autocmd BufWritePre,FileWritePre *.des3 let &sh=shsave " Undo the encryption so we are back in the normal text, directly after the " file has been written. autocmd BufWritePost,FileWritePost *.des3 silent u autocmd BufWritePost,FileWritePost *.des3 set nobin augroup END Basically, when I try to open a file with a "des3" file extension, this chunk of code is executed. To get this to work on Windows, I changed the "openssl" lines to the following: autocmd BufReadPost,FileReadPost *.des3 '[,']!C:\OpenSSL\bin\openssl.exe enc -d -des3 2> /dev/null ... autocmd BufWritePre,FileWritePre *.des3 '[,']!C:\OpenSSL\bin\openssl.exe enc -e -des3 -salt 2>/dev/null Also, I commented out the "let &sh='sh'" lines, since I get the following value when I execute the ":echo &sh" command: C:\WINDOWS\system32\cmd.exe However, when I try to open an encrypted file using this function, I get the following error: c:> gvim .\secret.txt.des3 ".\secret.txt.des3" [noeol][unix] 10L, 1304C shell returned 1 10 lines filtered Press ENTER or type command to continue ... 'sh' is not recognized as an internal or external command, operable program or batch file. The weird part is that I commented out all of the lines that explicitly reference 'sh'. What am I doing wrong? Is there anyone else who's usuing gpg or openssl with Vim? Thanks in advance! Tom Purl