我使用-x
vim 中的选项来加密文件。我读取这些文件的次数比写入的次数多得多,所以我总是使用 cat,然后根据它显示的内容记住它是加密的。所以我必须使用 vim,输入密码,然后使用 .. 退出:q
。
有没有办法使用 cat(或其他命令,当然要将我的密码传递到某个地方)并只打印/获取内容?或者也许只有一个 vim 选项,只打印内容而不进入编辑器?
答案1
看看开源vim解密:
用于解密 vim-blowfish 加密文件的命令行工具。
从 7.3 版开始,vim 提供强大的内置 blowfish 加密/解密功能,对于某些目的来说,这比通过 gnupg 进行过滤更方便。遗憾的是,生成的文件只能由 vim 读取,这使得它们很难用于批处理或脚本编写。此外,如果需要具有 vim 依赖性和大小的程序来解锁加密数据,那么加密数据的寿命也是一个问题。
Vimdecrypt 从 vim 源代码中提取了两个相关文件,blowfish.c 和 sha256.c,并将它们连接到一个简单的命令行工具中。从文件中读取数据,解密后的数据写入标准输出。
vimdecrypt path_to_data
密码是通过 GNU getpass 获取的,它不会干扰 stdin/stdout 重定向。
Vim 的配置系统被完全剥离,这可能会破坏对除其开发所基于的 32 位 i386 Linux 之外的其他平台的支持。由于两个相关文件取自未修改的 vim 项目,因此通过修复 vim.h 标头恢复对其他平台的支持应该很简单。
答案2
这不是一个优雅的解决方案 - 它快速而又肮脏 - 但它确实适用于单个文件,您可以将它用作 shell 脚本。
它是由三个命令组成的序列,执行以下操作:
- 在 vim 中打开文件(只读模式):
vim -R
- 以纯文本形式保存文件并退出:
-c ":set key= | sav ${filename}.plain | q
- 对纯文本文件进行 Cat 处理:
cat ${filename}.plain
- (可选)删除纯文本文件:
rm ${filename}.plain
最后,您可以编写一个脚本,将密码传递给 vim 命令。作为一个简单的脚本,它将是:
filename=$1
password=$2
vim -R -c ":set key= | sav ${filename}.plain | q" -- ${filename} <<< $password && cat ${filename}.plain && rm ${filename}.plain
其中第一个参数是文件名,第二个参数是密码。
当然,你还需要记住以下几点:
- 确保您没有覆盖名为 的现有文件
${filename}.plain
。 - 密码会出现在命令行上并保存在历史记录中。如果您希望每次都提示输入密码,请删除该
<<< $password
部分。