通常,当我想打开由 ansible-vault 加密的文件进行编辑时,我只需运行ansible-vault edit <filename>
- 这会将文件解密为临时文件并打开它进行编辑。
然而,我想知道的是如何从 vim 中实现这一点,例如通过使用语法运行 shell 命令:! ...command...
。例如,我知道我可以通过在 vim 中打开加密文件来解密文件,然后运行以下命令:
:! ansible-vault edit %
但这会在另一个窗口中使用 ansible-vault 打开文件,然后您必须按某个键才能返回 vim。
我想要做的是能够使用 vim 打开此文件,以便我可以将其与其他常规文件或使用 ansible-vault 加密的文件一起编辑。目前,我通过打开几个 tmux 窗格来完成此操作,但这有点像 PITA。
答案1
在编辑加密的保管库文件时,我一直在 vim 内部执行此操作:
:!ansible-vault --vault-password-file=~/.vault_pass decrypt %
进行更改,然后重新加密文件:
:!ansible-vault --vault-password-file=~/.vault_pass encrypt %
保管库密码以明文形式保存在 ~/.vault_pass 中
仅查看内容,然后返回原始加密文件(使用 git 作为 SCM 和逃亡者.vim插件),首先解密,完成后:
:Git checkout %
我可能会为这些命令创建一个函数或别名,以使其将来更快。现在我进行命令历史搜索,这样我就不必每次都输入整个内容:
q: /decrypt N enter
答案2
我设法使用
%! ansible-vault decrypt --output -
要加密缓冲区,请使用
%! ansible-vault encrypt --output -
如果能够实现自动化,那就太好了。我取得了一定程度的成功
autocmd BufNewFile,BufRead *
\ if getline(1) =~ '$ANSIBLE_VAULT;.*;AES256' |
\ execute '%! ansible-vault decrypt --output -' |
\ endif
然而,我无法设置自动命令来在退出时重新加密缓冲区的内容。