如何從 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

然而,我無法設定自動命令來在退出時重新加密緩衝區的內容。

相關內容