Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.editoren > #384 > unrolled thread

[vi] externen Editor aufrufen

Started byChristian Garbs <mitch@cgarbs.de>
First post2022-03-11 19:12 +0000
Last post2022-03-11 21:50 +0000
Articles 5 — 4 participants

Back to article view | Back to de.comp.editoren


Contents

  [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

#384 — [vi] externen Editor aufrufen

FromChristian Garbs <mitch@cgarbs.de>
Date2022-03-11 19:12 +0000
Subject[vi] externen Editor aufrufen
Message-ID<t0g6uf$9td7$1@yggdrasil.dn.cgarbs.de>
Mahlzeit!

Ich bin normalerweise Emacs-Nutzer, mache aber aus verschiedenen
Gründen immer mehr "kleinere Sachen" im vi.  Das ist vom Niveau her
noch so "suchen, Zeile löschen, Wörter ändern".

Ich überlege jetzt, EDITOR=vi zu setzen, um mal mehr zu üben.

Wenn ich dann aber beim Bearbeiten einer Datei bemerke, dass die
Änderungen doch umfangreicher werden und ich jetzt gerne den Emacs
hätte, kann ich dann on-the-fly Emacs aus dem vi aufrufen?

Also konkret:

Ich bearbeite ein Datei im vi und möchte per Kommando/Makro/Tastendruck
die Datei, die ich gerade offen habe, im Emacs weiterbearbeiten.  Nach
dem Beenden von Emacs möchte ich dann wieder im vi sein und dort die
Änderungen, die ich im Emacs gemacht habe, vorfinden.

Dass die aktuelle Datei zwischendurch 2x gespeichert werden muss, ist
mir bewusst und das soll auch gerne so sein.

Kann man eine vi-Session an Emacs eskalieren? ;-)

Ich vermute ganz stark, dass das möglich ist, allein fehlt mir das "wie?".
Googeln nach "vi edit file in external editor" und ähnlichem war
bisher nicht erfolgreich.

Danke und Gruß
Christian
-- 
....Christian.Garbs....................................https://www.cgarbs.de
Biochemists wear designer genes

[toc] | [next] | [standalone]


#385

FromFrank Beythien <nospam_2022@efbe.prima.de>
Date2022-03-11 20:49 +0100
Message-ID<j91ne9Fpsj5U1@mid.individual.net>
In reply to#384
Am 11.03.22 um 20:12 schrieb Christian Garbs:
> Mahlzeit!
> 
> Ich bin normalerweise Emacs-Nutzer, mache aber aus verschiedenen
> Gründen immer mehr "kleinere Sachen" im vi.  Das ist vom Niveau her
> noch so "suchen, Zeile löschen, Wörter ändern".
> 
> Ich überlege jetzt, EDITOR=vi zu setzen, um mal mehr zu üben.
> 
> Wenn ich dann aber beim Bearbeiten einer Datei bemerke, dass die
> Änderungen doch umfangreicher werden und ich jetzt gerne den Emacs
> hätte, kann ich dann on-the-fly Emacs aus dem vi aufrufen?
> 
> Also konkret:
> 
> Ich bearbeite ein Datei im vi und möchte per Kommando/Makro/Tastendruck
> die Datei, die ich gerade offen habe, im Emacs weiterbearbeiten.  Nach
> dem Beenden von Emacs möchte ich dann wieder im vi sein und dort die
> Änderungen, die ich im Emacs gemacht habe, vorfinden.
> 
> Dass die aktuelle Datei zwischendurch 2x gespeichert werden muss, ist
> mir bewusst und das soll auch gerne so sein.
> 
> Kann man eine vi-Session an Emacs eskalieren? ;-)
> 
> Ich vermute ganz stark, dass das möglich ist, allein fehlt mir das "wie?".
> Googeln nach "vi edit file in external editor" und ähnlichem war
> bisher nicht erfolgreich.
> 
> Danke und Gruß
> Christian

ich nehme mal gedit, emacs verwende ich nicht.

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:

W11: Achtung: Datei "ab.sh" wurde verändert, seit mit dem Editieren 
angefangen wurde
Siehe ":help W11" für mehr Information.
[O]K, (L)oad File, Load File (a)nd Options:
Betätigen Sie die EINGABETASTE oder geben Sie einen Befehl ein

MfG
Frank

[toc] | [prev] | [next] | [standalone]


#386

FromChristian Garbs <mitch@cgarbs.de>
Date2022-03-11 20:16 +0000
Message-ID<t0gani$ar37$1@yggdrasil.dn.cgarbs.de>
In reply to#385
Mahlzeit!

Frank Beythien <nospam_2022@efbe.prima.de> wrote:
> Am 11.03.22 um 20:12 schrieb Christian Garbs:

>> Ich bearbeite ein Datei im vi und möchte per Kommando/Makro/Tastendruck
>> die Datei, die ich gerade offen habe, im Emacs weiterbearbeiten.  Nach
>> dem Beenden von Emacs möchte ich dann wieder im vi sein und dort die
>> Änderungen, die ich im Emacs gemacht habe, vorfinden.
>> 
>> Dass die aktuelle Datei zwischendurch 2x gespeichert werden muss, ist
>> mir bewusst und das soll auch gerne so sein.
>> 
>> Kann man eine vi-Session an Emacs eskalieren? ;-)

> ich nehme mal gedit, emacs verwende ich nicht.
> 
> 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
 - % kann dann nur noch der aktuelle Dateiname sein

Das kann ich mir dann hoffentlich sogar merken :)

Großartig, danke!
Christian
-- 
....Christian.Garbs....................................https://www.cgarbs.de
Auch ein blinder Trinker findet mal 'n Korn.

[toc] | [prev] | [next] | [standalone]


#388

FromFriedhelm Waitzmann <usenetf2022.fwnsp@spamgourmet.com>
Date2022-03-25 23:00 +0000
Message-ID<t1lhie$19d4$1@gioia.aioe.org>
In reply to#386
[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

[toc] | [prev] | [next] | [standalone]


#387

FromChristian Weisgerber <naddy@mips.inka.de>
Date2022-03-11 21:50 +0000
Message-ID<slrnt2nh20.1ngf.naddy@lorvorc.mips.inka.de>
In reply to#384
On 2022-03-11, Christian Garbs <mitch@cgarbs.de> wrote:

> Ich bearbeite ein Datei im vi und möchte per Kommando/Makro/Tastendruck
> die Datei, die ich gerade offen habe, im Emacs weiterbearbeiten.  Nach
> dem Beenden von Emacs möchte ich dann wieder im vi sein und dort die
> Änderungen, die ich im Emacs gemacht habe, vorfinden.

Grundsätzlich kann man in vi(1) Textabschnitte mit '!' durch einen
externen Filter drehen. Da Emacs wahrscheinlich aber nicht die zu
editierende Datei von stdin lesen und nach stdout schreiben mag,
passt das nicht.

Man kann mit ':' in den ex(1)-Modus gehen und dort einfach mit
!<cmd> einen beliebigen Befehl über eine Shell absetzen, z.B. auch
"emacs datei". Nach Beenden kann man dann mit 'e' die geänderte
Datei wieder einlesen und weiterbearbeiten. Nachteil ist, dann man
den Dateinamen explizit angeben muss.

-- 
Christian "naddy" Weisgerber                          naddy@mips.inka.de

[toc] | [prev] | [standalone]


Back to top | Article view | de.comp.editoren


csiph-web