Con Vim puedo hacer fácilmente
$ echo 123 | vim -
¿Es posible hacer con Emacs?
$ 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
¿Es realmente imposible leer un búfer de una tubería Unix?
Editar : Como solución, escribí un contenedor de shell llamado emacspipe
:
#!/bin/sh
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
Puede usar la sustitución de procesos :
fuente
emacs: standard input is not a tty
Puede redirigir a un archivo y luego abrir el archivo. p.ej
jweede señala que si desea que el archivo temporal se elimine automáticamente, puede:
La forma en que Emacsy hace esto es ejecutar el comando de shell en Emacs .
Eso le da un búfer llamado * Salida del comando Shell * con los resultados del comando.
fuente
echo 123 > temp; emacs temp; rm temp
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
. ¡Gracias a todos!Es posible, ver https://stackoverflow.com/questions/2879746/idomatic-batch-processing-of-text-in-emacs
Aquí hay eco en un script de emacs (copiado del enlace anterior):
o para leerlo en un búfer y luego imprimirlo todo de una vez
fuente
Es posible crear una función de shell simple que funciona mientras lee desde stdin (aunque de hecho está escribiendo en un archivo temporal y luego leyendo eso). Aquí está el código que estoy usando:
Simplemente usa la función como un alias para emacs, por ejemplo
o como normal de los archivos
Reemplazar
emacs
poremacsclient
en la función también funciona.fuente
emacsclient -c -t $@
, o al menos, soltar la opción -n. páginas de manual conemacsclient -t --eval "(man \"$1\")" --eval "(delete-window)"
(¡y ahora puedeshelm-swoop
llegar a Man Glory!)Esto funciona:
pero, por alguna razón, solo con emacs en modo gráfico (Gnome, Konsole, GNU Emacs 23.4.1). El comando:
genera un error 'emacs: la entrada estándar no es un tty'. El mismo error aparece cuando se intenta en la consola de texto sin formato.
fuente
echo 123 | exec emacs -nw --insert <(cat) </dev/tty
Deberia trabajar.Otra posibilidad que no se menciona en ninguna de las respuestas anteriores es usar
/dev/stdin
si la variante Unix elegida la tiene.Simplemente intentar abrir
/dev/stdin
directamente no funciona, porque Emacs hace algunas verificaciones y luego informaSymbolic link that points to nonexistent file
. (Y si Emacs le hubiera permitido cargar el archivo, intente guardarlo nuevamente como/dev/stdin
que raramente haría lo que el usuario esperaba).Sin embargo, combinar
/dev/stdin
con el--insert
argumento funciona:Cabe señalar que esta versión solo funciona cuando se usa X. Si necesita una solución que funcione en un terminal, le sugiero que busque otra respuesta .
fuente
emacs: standard input is not a tty
mensaje probándolo en linux y bsdunset DISPLAY
, recibo el mismo mensaje de error que usted.de improviso, algo como:
o
Es una opción. Emacs simplemente no se integra con UNIX como lo hace vim.
fuente
M-!
, que captura automáticamente la salida resultante en un búfer temporal). guerras aparte, ninguno de los editores es "mejor" que el otro; simplemente tienen perspectivas muy diferentes en casi todo.curl foo.bar | vim -
... Lo siento. Quiero decir,curl foo.bar | emacs
excepto que no puedes hacer eso