假设我在同一个文件夹中有三个文件,a.txt
和b.txt
,c.txt
它们都使用相同的密码(例如“asdf”)加密(使用 Vim)。有没有办法只输入一次密码就可以打开这三个文件?
谢谢。
答案1
Vim 用于加密和解密文件的加密密码存储在key
变量中,请参阅:help encryption
。此变量通常位于 Vim 缓冲区中,因此 Vim 为每个打开或保存的加密文件使用唯一的密码。首次打开不同的加密文件时,Vim 将提示输入新密码。
要使密码全局化,请输入
:set key=asdf
在 Vim 中,asdf
密码为。在明确地赋予变量一个这样的值后,Vim 将对使用或在同一 Vim 实例中key
打开的后续加密文件使用相同的密码。:e
:n
key
可以在用于打开文件的 Vim 命令行上设置该变量
vim --cmd "set key=asdf" a.txt b.txt c.txt
谨防:这会将密码以明文形式记录到您的 shell 历史记录文件 (例如~/.bash_history
) 中,并且只需使用 查看正在运行的进程列表,即可将密码记录到系统上的所有其他用户手中ps
。
使用 Vim 透明地加密文件的其他解决方案也是可行的,Vim wiki 提供了本页有关加密的提示,包括在打开和保存文件时根据文件扩展名自动执行 PGP 或 GnuPG。
答案2
在使用此 cmd 打开第一个文件之前输入密钥:
vim -c ":let &key=inputsecret('key=')|:bdel dummy" dummy a.txt b.txt c.txt
编辑 1. 回答下面评论中的问题。如果您希望文件在选项卡中一起打开,例如 vim -p a.txt b.txt c.txt
vim -c ":let &key=inputsecret('key=')|:tab all|:bdel dummy" dummy a.txt b.txt c.txt
更多的选择:set viminfo= noswapfile bin cm=blowfish
需要一个虚拟文件dummy
,因为输入对话框仅在第一个文件加载后出现,即使使用 --cmd 也是如此。在这种情况下,您必须输入一次键。
不要使用*--cmd="set key=asfd"*
;因为其他用户可以通过 ps 命令看到进程参数,可能会记录在 syslog 中,也会保存在你的 bash_history 中。