如何从 vim 内部使用 ansible-vault edit 打开文件?

如何从 vim 内部使用 ansible-vault edit 打开文件?

通常,当我想打开由 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

然而,我无法设置自动命令来在退出时重新加密缓冲区的内容。

相关内容