¿Cómo abro un archivo con edición de ansible-vault desde dentro de vim?

¿Cómo abro un archivo con edición de ansible-vault desde dentro de vim?

Por lo general, cuando quiero abrir un archivo cifrado por ansible-vault para editarlo, simplemente lo ejecuto ansible-vault edit <filename>; esto descifra el archivo en un archivo temporal y lo abre para editarlo.

Sin embargo, lo que quiero saber es cómo lograr esto desde vim, por ejemplo, ejecutando un comando de shell usando la :! ...command...sintaxis. Por ejemplo, sé que puedo descifrar el archivo abriendo el archivo cifrado en vim y luego ejecutando esto:

:! ansible-vault edit %

Pero eso abre el archivo con ansible-vault en una ventana diferente, y luego debes presionar una tecla para regresar a vim.

Lo que quiero hacer es poder abrir este archivo con vim para poder editarlo junto con otros archivos normales o archivos cifrados con ansible-vault. Actualmente estoy haciendo esto abriendo varios paneles tmux, pero eso es una especie de PITA.

Respuesta1

He estado haciendo esto desde dentro de vim al editar un archivo de bóveda cifrado:

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

Realice un cambio y luego vuelva a cifrar el archivo:

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

La contraseña de la bóveda va en ~/.vault_pass como texto sin formato

Para simplemente ver el contenido y luego volver al archivo cifrado original (usando git como SCM yfugitivo.vimcomplemento), primero descifre y cuando haya terminado:

:Git checkout %

Podría crear una función o alias para esos comandos para hacerlo más rápido en el futuro. Por ahora hago una búsqueda en el historial de comandos para no tener que escribir todo cada vez:

q: /decrypt N enter

Respuesta2

Logré hacer eso usando

%! ansible-vault decrypt --output -

Para cifrar el búfer, utilice

%! ansible-vault encrypt --output -

Sería genial poder automatizar esto. Logré cierto grado de éxito con

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

Sin embargo, no pude configurar un autocmd para volver a cifrar el contenido del búfer al salir.

información relacionada