Existe uma maneira de editar dados seguros no vim sem acessar o sistema de arquivos?

9

Estou interessado em usar o vim para editar um arquivo "seguro", que é armazenado criptografado em outro local (digamos, em algum lugar da nuvem) e não deve ser gravado como texto sem formatação no disco local. Portanto, a sequência de eventos pode ser (com um script de wrapper separado ou algo para as etapas 1, 2 e 5 que não sejam do vim):

  1. Recuperar arquivo criptografado da nuvem
  2. Descriptografe o arquivo e inicie o vim enquanto passa o texto sem formatação para o vim para edição (talvez em um novo descritor de arquivo?)
  3. Edite com o vim interativamente
  4. Quando o arquivo for gravado usando :w, escreva o resultado (novamente, através de um descritor de arquivo?)
  5. Criptografar o novo texto sem formatação e armazenar de volta na nuvem

Agora, entendo que a maneira usual de fazer esse tipo de coisa é descriptografar, escrever um arquivo temporário, editar o arquivo temporário no vim, ler o arquivo temporário, criptografar, limpar / excluir o arquivo temporário. O que estou procurando é uma maneira de evitar o uso de um arquivo temporário. (Além disso, tudo na maneira mais simples de iniciar o Vim no modo privado seria definido.)

Outra maneira de abordar isso pode ser usar algo como netrw, com o qual não estou muito familiarizado.

Para os fins desta pergunta, não estou preocupado com os dados de troca do SO (mas se houver uma maneira vim de marcar seus buffers de dados internos como não trocáveis, isso seria interessante).

Existe uma maneira de fazer o acima, ou melhor ainda, alguém já resolveu isso?

Greg Hewgill
fonte
Eu acho que uma solução seria montar seu sistema de arquivos remoto em sua máquina (algo como sshfs por exemplo) desta maneira, você pode navegar para o seu arquivo, descriptografá-lo, editá-lo e salvá-lo diretamente no fs remoto. O Vim também permite edição remota, talvez você encontre algo interessante nesta dica da wikia.
Statox
O passo 2 implica um processo interativo? Você precisa escrever uma senha?
Ярослав Рахматуллин
@ ЯрославРахматуллин: De qualquer maneira, algumas idéias que tenho para isso exigem uma senha e outras não.
precisa saber é o seguinte

Respostas:

1

Existem algumas coisas ocultas nos documentos do vim que podem ajudá-lo.

  1. read ! your shell command: leia a saída de "seu comando shell" no buffer atual (um arquivo temporário é usado para ler os dados!)
  2. let data = system('your shell command'): leia dados em uma variável vim (não encontrei nenhuma referência a tempfiles nos documentos sobre isso). O vim e o neovim modernos também têm variantes assíncronas disso.
  3. set buftype=acwrite: diga ao vim que o buffer deve ser salvo apenas com um comando automático
  4. autocmd BufWriteCmd <buffer> your-vim-command: escreva o conteúdo do buffer atual executando :your-vim-command. Esse comando automático é acionado quando :writeo arquivo em questão.

Além dos tópicos da lista acima, sou também deve ler sobre o uso do tempfiles ( help tempfile) pelo vim para decidir se eles são suficientes para você.

Existe um plug-in para editar arquivos criptografados com gpg que podem implementar alguns dos recursos que você deseja (você deseja usar arquivos criptografados com gpg?). Caso contrário, o código pode ser inspirador para você escrever suas próprias coisas: https://github.com/jamessan/vim-gnupg (eu sei que eles não têm um leia-me e tal, mas o plug-in é bom e é mantido ativamente).

Lucas
fonte
0

Supondo que você tenha comandos decrypte encryptque usem stdout e stdin:

# open vim using stdin
decrypt secret.msg | vim -

Depois de editar o arquivo no vim:

:w !encrypt secret2.msg

Isso é equivalente a enviar o buffer vim para o canal | encrypt secret2.msg

Eu acho que isso deve evitar a criação de arquivos temporários, supondo que você tenha definido todas as opções privadas do vim .

wisbucky
fonte