Dengan Vim saya bisa dengan mudah melakukannya
$ echo 123 | vim -
Apakah mungkin dilakukan dengan 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
Apakah benar-benar mustahil untuk membaca buffer dari pipa unix?
Sunting : Sebagai solusi, saya menulis pembungkus shell bernama emacspipe
:
#!/bin/sh
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
Anda dapat menggunakan substitusi proses :
sumber
emacs: standard input is not a tty
Anda dapat mengalihkan ke file, lalu buka file. misalnya
jweede mencatat bahwa jika Anda ingin file temp dihapus secara otomatis, Anda dapat:
Cara Emacsy untuk melakukan ini adalah dengan menjalankan perintah shell di Emacs .
Itu memberi Anda buffer bernama * Shell Command Output * dengan hasil dari perintah.
sumber
echo 123 > temp; emacs temp; rm temp
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
. Terimakasih semuanya!Mungkin saja, lihat https://stackoverflow.com/questions/2879746/idomatic-batch-processing-of-text-in-emacs
Berikut ini gema dalam skrip emacs (disalin dari tautan di atas):
atau membacanya ke dalam buffer dan kemudian mencetak semuanya sekaligus
sumber
Ini mungkin untuk membuat fungsi shell sederhana yang bekerja seperti yang membaca dari stdin (meskipun sebenarnya itu adalah menulis ke file sementara kemudian membaca itu). Berikut kode yang saya gunakan:
Anda cukup menggunakan fungsi sebagai alias untuk emacs, mis
atau seperti biasa dari file
Mengganti
emacs
olehemacsclient
dalam fungsi juga berfungsi.sumber
emacsclient -c -t $@
, atau paling tidak jatuhkan opsi -n. halaman manual denganemacsclient -t --eval "(man \"$1\")" --eval "(delete-window)"
(dan sekarang Anda dapathelm-swoop
menuju Man Glory!)Ini bekerja:
tetapi, untuk beberapa alasan, hanya dengan emacs mode grafis (Gnome, Konsole, GNU Emacs 23.4.1). Perintah:
menghasilkan kesalahan 'emacs: input standar bukan tty'. Kesalahan yang sama muncul ketika dicoba di konsol teks mentah.
sumber
echo 123 | exec emacs -nw --insert <(cat) </dev/tty
harus bekerja.Kemungkinan lain yang tidak disebutkan dalam jawaban sebelumnya adalah menggunakan
/dev/stdin
jika varian Unix yang Anda pilih memilikinya.Hanya mencoba membuka
/dev/stdin
secara langsung tidak berhasil, karena Emacs melakukan beberapa pemeriksaan dan kemudian melaporkanSymbolic link that points to nonexistent file
. (Dan jika Emacs akan memungkinkan Anda untuk memuat file, maka cobalah untuk menyimpannya lagi karena/dev/stdin
jarang melakukan apa yang diharapkan pengguna.)Namun menggabungkan
/dev/stdin
dengan--insert
argumen itu berhasil:Perlu dicatat bahwa versi ini hanya berfungsi ketika menggunakan X. Jika Anda memerlukan solusi yang bekerja di terminal saya sarankan Anda melihat jawaban lain .
sumber
emacs: standard input is not a tty
pesan mengujinya di linux dan bsdunset DISPLAY
, saya mendapatkan pesan kesalahan yang sama seperti Anda.begitu saja, sesuatu seperti:
atau
adalah sebuah pilihan. Emacs tidak berintegrasi dengan UNIX seperti yang dilakukan vim.
sumber
M-!
, yang secara otomatis menangkap output yang dihasilkan ke dalam buffer sementara.) Holy selain perang, tidak ada editor yang "lebih baik" dari yang lain; mereka hanya memiliki perspektif yang sangat berbeda dalam banyak hal.curl foo.bar | vim -
.. Saya minta maaf. Maksud sayacurl foo.bar | emacs
kecuali Anda tidak bisa melakukan itu