Ist es möglich, in Vim problemlos mit .odt-, .doc-, .docx-, .rtf- und anderen Nicht-Nur-Text-Formaten zu arbeiten?

14

Gelegentlich jemand schickt mir ein .odt, .docund .docxDatei; Sie in OpenOffice zu öffnen, ist immer ein Schmerz, weil OpenOffice.

Im Moment verwende ich eine Vielzahl von Befehlszeilentools (z. B. odt2txt), um diese Dateien in einfachen Text zu konvertieren, den einfachen Text in einer temporären Datei zu speichern und ihn dann in Vim anzuzeigen (und möglicherweise zu bearbeiten).

Kann das einfacher gemacht werden? Vielleicht etwas mit Autogruppen? Oder gibt es vielleicht bessere Möglichkeiten? Ich würde gerne einfach machen:

$ vim file.odt

Und hat sich Vim für mich um die Konvertierung gekümmert?

Noch besser (Bonuspunkte) wäre es, wenn ich die Datei (bis file.txt) auch speichern könnte , aber dass diese erst erstellt würde, wenn ich einen Schreibvorgang durchführe ...

Martin Tournoij
quelle

Antworten:

13

Sie sollten in der Lage sein, Ihrem vimrc so etwas hinzuzufügen:

autocmd BufReadPost *.odt :%!odt2txt %

Dadurch wird der gesamte Puffer odt2txtnach dem Einlesen durch vim durch das Programm gesendet, jedoch nur, wenn der Dateiname mit endet .odt.

Es gibt auch das textutil.vim- Plugin, das besagt, dass es für einige dieser Dateitypen genau das kann, wovon Sie sprechen (aber ich habe es nicht persönlich verwendet).

Wenn Sie bereit sind, in etwas etwas strukturierterem als einfachem Text wie Markdown zu arbeiten, können Sie auch pandoc verwenden , um die Konvertierung durchzuführen :

autocmd BufReadPost *.docx :%!pandoc -f docx -t markdown
autocmd BufWritePost *.docx :!pandoc -f markdown -t docx % > tmp.docx

Ich habe diese Konvertierungen noch nicht getestet, aber sie sollten funktionieren. Je nach Dateiformat müssen Sie möglicherweise verschiedene Tools verwenden.

xthrd
quelle
Bedeutet dies im autocmd BufReadPost *.docx :%!pandoc -f docx -t markdownGrunde, dass beim Öffnen einer DOCX-Datei in :%!pandoc -f docx -t markdownVIM diese Datei weitergeleitet wird , bevor sie im VIM-Fenster angezeigt wird?
Alpha_989
1
@ alpha_989 ja.
20.