我在vimrc中使用一小段vimscript代码,以便在执行:write
时自动将文本加密到磁盘。不幸的是,每次保存文件时,我的光标都会重置为第一行的开头,迫使我向下滚动到我所在的位置。相当讨厌。
在将文件写入磁盘后,有没有办法恢复光标位置?完整代码可以在下面找到。
# code from http://vim.wikia.com/wiki/Encryption#ccrypt
augroup CPT
au!
au BufReadPre *.cpt set bin
au BufReadPre *.cpt set viminfo=
au BufReadPre *.cpt set noswapfile
au BufReadPost *.cpt let $vimpass = inputsecret("Password: ")
au BufReadPost *.cpt silent '[,']!ccrypt -cb -E vimpass
au BufReadPost *.cpt set nobin
au BufWritePre *.cpt set bin
au BufWritePre *.cpt '[,']!ccrypt -e -E vimpass
au BufWritePost *.cpt u
au BufWritePost *.cpt set nobin
augroup END
答案 0 :(得分:1)
我的建议是使用Vim内置的加密功能。使用:X
设置密钥。您可以在此时使用与通常相同的读写文件。有关详细信息,请参阅:h encryption
。
回答有关如何保存和恢复光标位置的问题:
winsaveview()
保存视图信息。例如let view = winsaveview()
call winrestview(view)
正如您所说,您发现someone who bundled up autocmd已成为某些功能。您可以通过将视图状态保存到缓冲区变量中来修改它以使用winsaveview()
/ winrestview()
函数。例如let b:view = winsaveview()
和call winrestview(b:view)
。
答案 1 :(得分:0)
atweiden 提供的另一个版本包括在写入之前和之后存储和恢复光标。
来自Github的代码:
func! s:ccrypt_bufwritepre()
let b:save_cursor = getpos(".")
setl bin
%!ccrypt -e -E crypticnonsense
endfunc
func! s:ccrypt_bufwritepost()
u
setl nobin
call setpos('.', b:save_cursor)
endfunc