Mit Vim kann ich das leicht machen
$ echo 123 | vim -
Kann man das mit Emacs machen?
$ echo 123 | emacs23
... Emacs starts with a Welcome message
$ echo 123 | emacs23 -
... Emacs starts with an empty *scratch* buffer and “Unknown option”
$ echo 123 | emacs23 --insert -
... “No such file or directory”, empty *scratch* buffer
Ist es wirklich unmöglich, einen Puffer aus einer Unix-Pipe zu lesen?
Bearbeiten : Als Lösung schrieb ich einen Shell-Wrapper mit dem Namen emacspipe
:
#!/bin/sh
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
Sie können die Prozessersetzung verwenden :
quelle
emacs: standard input is not a tty
Sie können zu einer Datei umleiten und diese dann öffnen. z.B
jweede stellt fest, dass Sie, wenn die temporäre Datei automatisch entfernt werden soll, Folgendes tun können:
Die Emacsy-Methode hierfür besteht darin, den Shell-Befehl in Emacs auszuführen .
Das gibt Ihnen einen Puffer mit dem Namen * Shell Command Output * mit den Ergebnissen des Befehls.
quelle
echo 123 > temp; emacs temp; rm temp
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
. Danke an alle!Es ist möglich, siehe https://stackoverflow.com/questions/2879746/idomatic-batch-processing-of-text-in-emacs
Hier ist Echo in einem Emacs-Skript (kopiert vom obigen Link):
oder um es in einen Puffer einzulesen und dann alles auf einmal auszudrucken
quelle
Es ist möglich, eine einfache Shell-Funktion zu erstellen, die so funktioniert, wie sie von stdin liest (obwohl sie tatsächlich in eine temporäre Datei schreibt und diese dann liest). Hier ist der Code, den ich benutze:
Sie verwenden die Funktion nur als Alias für Emacs, z
oder wie gewohnt aus Dateien
Das Ersetzen
emacs
durchemacsclient
in der Funktion funktioniert ebenfalls.quelle
emacsclient -c -t $@
oder zumindest die Option -n streichen . Manpages mitemacsclient -t --eval "(man \"$1\")" --eval "(delete-window)"
(und jetzt können Siehelm-swoop
Ihren Weg zu Man Glory!)Das funktioniert:
aber aus irgendeinem Grund nur mit Grafikmodus-Emacs (Gnome, Konsole, GNU Emacs 23.4.1). Der Befehl:
erzeugt einen Fehler 'emacs: Standardeingabe ist kein tty'. Der gleiche Fehler tritt auf, wenn in der Rohtextkonsole versucht wird.
quelle
echo 123 | exec emacs -nw --insert <(cat) </dev/tty
sollte arbeiten.Eine weitere Möglichkeit nicht in einem der vorhergehenden Antworten erwähnt ist zu verwenden ,
/dev/stdin
wenn Ihre gewählte Unix - Variante hat.Der einfache Versuch,
/dev/stdin
direkt zu öffnen, funktioniert nicht, da Emacs einige Überprüfungen vornimmt und dann Berichte erstelltSymbolic link that points to nonexistent file
. (Und wenn Emacs Ihnen erlaubt hätte, die Datei zu laden, dann würden Sie versuchen, sie erneut zu speichern, wie/dev/stdin
es der Benutzer selten erwartet hätte.)Das Kombinieren
/dev/stdin
mit dem--insert
Argument funktioniert jedoch:Es sollte beachtet werden, dass diese Version nur unter Verwendung von X funktioniert. Wenn Sie eine Lösung benötigen, die in einem Terminal funktioniert, empfehle ich Ihnen, eine andere Antwort zu suchen .
quelle
emacs: standard input is not a tty
Nachricht testen es unter Linux und BSDunset DISPLAY
, erhalte ich dieselbe Fehlermeldung wie Sie.so etwas wie:
oder
ist eine Option. Emacs lässt sich nicht wie Vim in UNIX integrieren.
quelle
M-!
, der die resultierende Ausgabe automatisch in einem temporären Puffer festhält.) Holy Abgesehen von Kriegen ist keiner der Herausgeber "besser" als der andere. Sie haben einfach sehr unterschiedliche Perspektiven auf so ziemlich alles.curl foo.bar | vim -
.. Es tut mir leid. Ich meinte,curl foo.bar | emacs
außer du kannst das nicht