Perpipaan menjadi lebih sedikit dan mengedit: kesalahan "tidak dapat mengedit input standar". Penanganan masalah?

9

Baru-baru ini saya mengetahui bahwa jika saya memberi halaman file saya less, saya dapat menekan vdan membuka buffer di Emacs. Ini berfungsi selama saya memiliki variabel lingkungan yang $EDITORdiatur dengan benar, yang dalam kasus saya, saya memilikinya sebagai:

export EDITOR='env TERM=xterm-256color emacs -nw'

Di atas memberi saya kemampuan untuk memuat emacs di dalam terminal yang berjalan less.

Namun, trik di atas tidak berfungsi saat memipip perintah ke less. Saat melakukan ini, lesskomplain dengan pesan berikut:

Cannot edit standard input (press RETURN)

Pertanyaan saya adalah, mengapa ini terjadi? Tetapi yang paling penting, apakah ada solusi untuk itu ?

Amelio Vazquez-Reina
sumber
2
Anda harus belajar cara menggunakan emacsclient , yang memungkinkan Anda mengedit file dalam salinan Emacs yang sudah berjalan. Emacs bukan editor yang memulai paling cepat.
cjm
Mengapa Anda mengembalikan suntingan saya? Bukankah judulnya seharusnya pertanyaan?
Yohanes
1
Maaf @ John, saya tidak melihat hasil edit Anda. Saya mengedit judul untuk mengklarifikasi bahwa saya sebagian besar tertarik pada penyelesaian masalah ini. Saya pikir judulnya: Piping into less and editing: “cannot edit standard input” error. Workarounds?jelas. Mengapa berpikir sebaliknya?
Amelio Vazquez-Reina
Itu bisa dimengerti. Meskipun saya akan berasumsi bahwa jika Anda bertanya mengapa Anda mendapatkan kesalahan, seharusnya jelas bahwa Anda ingin solusinya.
John
Saya setuju, meskipun jawaban yang paling banyak dipilih sejauh ini membahas whysatu - satunya, dan bukan jawaban workarounds, jadi saya menambahkan penekanannya.
Amelio Vazquez-Reina

Jawaban:

5

Seperti yang sudah dikatakan, Anda tidak dapat mengedit aliran input.

Solusinya cukup jelas: simpan aliran ke file dari dalam lessdan buka file yang disimpan . Untuk melakukannya saat melihat, tekan sdan beri nama file. Kemudian keluar lessdan buka file dengan tangan, atau, masih dari dalam less, ketik :edan berikan nama file yang baru saja Anda simpan.

rozcietrzewiacz
sumber
15

Solusi yang baik adalah menyalurkan output dari kurang ke editor Anda, mis. Setelah "echo foo | less" yang dapat Anda lakukan:

g|$vim -

gakan melompat ke baris pertama dari file / input, |akan memanggil tindakan "pipa", $adalah tanda ("akhir"), diikuti oleh perintah untuk memiparkan rentang ke ( vim -dalam hal ini, di mana "-" berarti untuk membaca input dari stdin).

kebiru-biruan
sumber
1
Keren terima kasih!
Simon Pickup
5

Artinya persis seperti yang dikatakan - Anda hanya dapat mengedit file yang ada di disk dengan cara ini (dari less). Jika Anda menyalurkan output dari suatu proses, STDOUTitu masuk ke STDINuntuk less; tidak ada file untuk diedit.

Aaron D. Marasco
sumber