Como abro um arquivo com edição do ansible-vault de dentro do vim?

Como abro um arquivo com edição do ansible-vault de dentro do vim?

Normalmente, quando quero abrir um arquivo criptografado pelo ansible-vault para edição, eu simplesmente executo ansible-vault edit <filename>- isso descriptografa o arquivo em um arquivo temporário e o abre para edição.

No entanto, o que eu quero saber é como conseguir isso no vim, por exemplo, executando um comando shell usando a :! ...command...sintaxe. Por exemplo, eu sei que posso descriptografar o arquivo abrindo o arquivo criptografado no vim e executando isto:

:! ansible-vault edit %

Mas isso abre o arquivo com o ansible-vault em uma janela diferente, e então você tem que pressionar uma tecla para retornar ao vim.

O que eu quero fazer é poder abrir esse arquivo com o vim para poder editá-lo junto com outros arquivos regulares ou criptografados com o ansible-vault. Atualmente estou fazendo isso abrindo vários painéis do tmux, mas isso é uma espécie de PITA.

Responder1

Tenho feito isso dentro do vim ao editar um arquivo criptografado do vault:

:!ansible-vault --vault-password-file=~/.vault_pass decrypt %

Faça uma alteração e criptografe novamente o arquivo:

:!ansible-vault --vault-password-file=~/.vault_pass encrypt %

A senha do cofre entra em ~/.vault_pass como texto simples

Para apenas visualizar o conteúdo e depois voltar ao arquivo criptografado original (usando git como SCM efugitivo.vimplugin), primeiro descriptografe e quando terminar:

:Git checkout %

Posso criar uma função ou aliases para esses comandos para torná-los mais rápidos no futuro. Por enquanto, faço uma pesquisa no histórico de comandos para não precisar digitar tudo toda vez:

q: /decrypt N enter

Responder2

Eu consegui fazer isso usando

%! ansible-vault decrypt --output -

Para criptografar o buffer, use

%! ansible-vault encrypt --output -

Seria ótimo poder automatizar isso. Consegui algum grau de sucesso com

autocmd BufNewFile,BufRead *
  \ if getline(1) =~ '$ANSIBLE_VAULT;.*;AES256'     |
  \   execute '%! ansible-vault decrypt --output -' |
  \ endif

No entanto, não consegui definir um autocmd para criptografar novamente o conteúdo do buffer na saída.

informação relacionada