Ich bin daran interessiert, mit vim eine "sichere" Datei zu bearbeiten, die an anderer Stelle (z. B. irgendwo in der Cloud) verschlüsselt gespeichert ist und nicht als Klartext auf die lokale Festplatte geschrieben werden sollte. Die Reihenfolge der Ereignisse könnte also sein (mit einem separaten Wrapper-Skript oder etwas für Nicht-Vim-Schritte 1, 2 und 5):
- Rufen Sie eine verschlüsselte Datei aus der Cloud ab
- Entschlüsseln Sie die Datei und starten Sie vim, während Sie den Klartext zur Bearbeitung an vim übergeben (möglicherweise über einen neuen Dateideskriptor?).
- Interaktiv mit vim bearbeiten
- Wenn die Datei mit geschrieben wird
:w
, schreiben Sie das Ergebnis (erneut über einen Dateideskriptor?) - Verschlüsseln Sie den neuen Klartext und speichern Sie ihn wieder in der Cloud
Jetzt verstehe ich, dass der übliche Weg, dies zu tun, darin besteht, die temporäre Datei zu entschlüsseln, eine temporäre Datei zu schreiben, die temporäre Datei in vim zu bearbeiten, die temporäre Datei zu lesen, zu verschlüsseln, die temporäre Datei zu löschen / zu löschen. Was ich suche, ist eine Möglichkeit, die Verwendung einer temporären Datei überhaupt zu vermeiden. (Außerdem wird alles eingestellt , um Vim auf einfachste Weise im privaten Modus zu starten .)
Eine andere Möglichkeit, dies zu erreichen, könnte darin bestehen, etwas zu verwenden netrw
, mit dem ich nicht besonders vertraut bin.
Für die Zwecke dieser Frage bin ich nicht besorgt über die OS-Swap-Daten (aber wenn es eine Möglichkeit gibt, die internen Datenpuffer als nicht austauschbar zu markieren, wäre das interessant).
Gibt es eine Möglichkeit, dies zu tun, oder noch besser, hat jemand anderes dies bereits gelöst?
Antworten:
In den vim-Dokumenten sind einige Dinge versteckt, die Ihnen helfen können.
read ! your shell command
: Lies die Ausgabe von "your shell command" in den aktuellen Puffer (ein tempfile wird zum Lesen der Daten verwendet!)let data = system('your shell command')
: Daten in eine vim-Variable einlesen (ich habe in den Dokumenten dazu keinen Verweis auf tempfiles gefunden). Moderne vim und neovim haben auch Asynchronus-Varianten davon.set buftype=acwrite
: Sagen Sie vim, dass der Puffer nur mit einem automatischen Befehl gespeichert werden sollautocmd BufWriteCmd <buffer> your-vim-command
: Schreiben Sie den Inhalt des aktuellen Puffers durch Ausführen:your-vim-command
. Dieser automatische Befehl wird ausgelöst, wenn Sie:write
die betreffende Datei verwenden.Zusätzlich zu den Themen aus der obigen Liste sollten Sie auch die Verwendung von tempfiles (
help tempfile
) durch vim lesen, um zu entscheiden, ob sie für Sie ausreichend gespeichert sind.Es gibt ein Plugin zum Bearbeiten von gpg-verschlüsselten Dateien, das möglicherweise einige der gewünschten Funktionen implementiert (möchten Sie gpg-verschlüsselte Dateien verwenden?). Andernfalls könnte der Code für Sie inspirierend sein, Ihre eigenen Inhalte zu schreiben: https://github.com/jamessan/vim-gnupg (Ich weiß, dass sie keine Readme-Datei und dergleichen haben, aber das Plugin ist gut und wird aktiv gepflegt).
quelle
Angenommen , Sie haben Befehle
decrypt
undencrypt
dass die Verwendung von stdout und stdin:Nachdem Sie die Datei in vim bearbeitet haben:
Dies entspricht dem Senden des VIM-Puffers an die Pipe
| encrypt secret2.msg
Ich denke, das sollte das Erstellen temporärer Dateien vermeiden, vorausgesetzt, Sie haben alle privaten vim-Optionen festgelegt .
quelle