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):
- Recuperar arquivo criptografado da nuvem
- 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?)
- Edite com o vim interativamente
- Quando o arquivo for gravado usando
:w
, escreva o resultado (novamente, através de um descritor de arquivo?) - 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?
Respostas:
Existem algumas coisas ocultas nos documentos do vim que podem ajudá-lo.
read ! your shell command
: leia a saída de "seu comando shell" no buffer atual (um arquivo temporário é usado para ler os dados!)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.set buftype=acwrite
: diga ao vim que o buffer deve ser salvo apenas com um comando automáticoautocmd BufWriteCmd <buffer> your-vim-command
: escreva o conteúdo do buffer atual executando:your-vim-command
. Esse comando automático é acionado quando:write
o 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).
fonte
Supondo que você tenha comandos
decrypt
eencrypt
que usem stdout e stdin:Depois de editar o arquivo no vim:
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 .
fonte