Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.editoren > #388
| From | Friedhelm Waitzmann <usenetf2022.fwnsp@spamgourmet.com> |
|---|---|
| Newsgroups | de.comp.editoren |
| Subject | Re: [vi] externen Editor aufrufen |
| Date | 2022-03-25 23:00 +0000 |
| Organization | Aioe.org NNTP Server |
| Message-ID | <t1lhie$19d4$1@gioia.aioe.org> (permalink) |
| References | <t0g6uf$9td7$1@yggdrasil.dn.cgarbs.de> <j91ne9Fpsj5U1@mid.individual.net> <t0gani$ar37$1@yggdrasil.dn.cgarbs.de> |
[Innerhalb von vim ein Programm (gedit im Beispiel) starten und ihm als Parameter die aktuell in vim editierte Datei übergeben] Christian Garbs: >Mahlzeit! >Frank Beythien <nospam_2022@efbe.prima.de> wrote: >> vim ab.sh >> :w | !gedit % >> also in Vim Datei sichern und externen Editor aufrufen. >> Nach ändern und speichern fragt vim was mit der Datei passieren soll: >Zu meinem eigenen Erschrecken muss ich sagen "das ist ja vollkommen >logisch, das liest sich wie ein Buch": > - ! kenne ich von meinen Vertippern bei :q! > - | ist ne Pipe, ganz klar Was soll hier ein Pipe? Das »|« ist nur dazu da, den zweiten Ex‐Modus‐Befehl »!« vom ersten (»w«) abzutrennen. Du könntest also statt dessen in zwei Zeilen eingeben: :w :! gedit % Dagegen würde :w ! gedit % – also ohne das trennende »|« – bedeuten, den aktuellen Pufferinhalt in eine temporäre Datei zu schreiben und dem externen Programm gedit beim Start als Standardeingabe einen geöffneten Kanal auf diese temporäre Datei mitzugeben. Probiere mal :w ! dir -l /dev/fd/. und :w ! less In einem Linux ist /dev/fd ein Symbolic Link, das auf /proc/self/fd zeigt. Dieses Verzeichnis liegt im Pseudodateisystem /proc und enthält zu jedem offenen Filedescriptor des Prozesses, der dieses Verzeichnis liest, ein symbolic Link, das auf die Datei verweist, auf die das jeweilige Filedescriptor Zugriff bietet. > - % kann dann nur noch der aktuelle Dateiname sein Ja, das soll es, aber es funktioniert nicht wirklich. Versuche mal, eine Datei, deren Namen eine Leerstelle enthält, zu verwenden: Innerhalb von vim: :edit mit\ Leerstelle Innerhalb von vim die Datei abspeichern: :w Aufruf des Programms »dir« zeigt, dass die Datei vorhanden ist: :! dir -Q Aber, den Dateinamen an »dir« zu übergeben, schlägt leider fehl: :! dir -Q -- % Und zwar deshalb, weil der Dateiname an der Leerstelle zerbricht. Um das zu reparieren, müsste vim wissen, wie er die Kommandozeile für das mit »!« gestartete Shell zusammenstellen muss, damit Zeichenketten (hier: der Dateiname) nicht an Leerstellen und anderen, vom Shell speziell interpretierten Zeichen zerbrechen. Das allerdings ist nicht für alle Shells gleich. Neben der Möglichkeit, zu konfigurieren, welches Shell gestartet werden soll (anzeigen mit »:set shell?«) bräuchte vim eine Möglichkeit, eine Funktion quote_a_string_for_the_shell zu konfigurieren, die dann z.B. für das POSIX‐Shell und die Zeichenkette »mit Leerstelle« die Zeichenkette »'mit Leerstelle'« liefert. Was bei einer Datei mit dem ulkigen Namen »;rm -r .« passieren würde (ja, das ist ein möglicher Dateiname!), will ich gar nicht ausprobieren. Friedhelm
Back to de.comp.editoren | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[vi] externen Editor aufrufen Christian Garbs <mitch@cgarbs.de> - 2022-03-11 19:12 +0000
Re: [vi] externen Editor aufrufen Frank Beythien <nospam_2022@efbe.prima.de> - 2022-03-11 20:49 +0100
Re: [vi] externen Editor aufrufen Christian Garbs <mitch@cgarbs.de> - 2022-03-11 20:16 +0000
Re: [vi] externen Editor aufrufen Friedhelm Waitzmann <usenetf2022.fwnsp@spamgourmet.com> - 2022-03-25 23:00 +0000
Re: [vi] externen Editor aufrufen Christian Weisgerber <naddy@mips.inka.de> - 2022-03-11 21:50 +0000
csiph-web