Đường ống vào ít hơn và chỉnh sửa: Có thể chỉnh sửa lỗi đầu vào tiêu chuẩn. Cách giải quyết?


9

Gần đây tôi đã biết rằng nếu tôi trang các tệp của mình với less, tôi có thể nhấn vvà mở bộ đệm trong Emacs. Điều này hoạt động miễn là tôi có biến môi trường $EDITORđược thiết lập chính xác, trong trường hợp của tôi, tôi có nó là:

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

Ở trên cho tôi khả năng tải emacs trong thiết bị đầu cuối chạy less.

Tuy nhiên, mẹo ở trên không hoạt động khi các lệnh đường ống đến less. Khi làm điều này, lessphàn nàn với thông báo sau:

Cannot edit standard input (press RETURN)

Câu hỏi của tôi là, tại sao điều này xảy ra? Nhưng quan trọng nhất là có cách giải quyết nào không?


2
Bạn nên tìm hiểu cách sử dụng emacsclient , điều này sẽ cho phép bạn chỉnh sửa các tệp trong một bản sao Emacs đã chạy. Emacs không phải là trình soạn thảo bắt đầu nhanh nhất.
cjm

Tại sao bạn quay lại chỉnh sửa của tôi? Không phải tiêu đề được cho là một câu hỏi?
Giăng

1
Xin lỗi @John, tôi không thấy chỉnh sửa của bạn. Tôi đã chỉnh sửa tiêu đề để làm rõ rằng tôi chủ yếu quan tâm đến cách giải quyết vấn đề này. Tôi nghĩ rằng tiêu đề như nó là: Piping into less and editing: “cannot edit standard input” error. Workarounds?rõ ràng. Tại sao lại nghĩ khác?
Amelio Vazquez-Reina

Nó có thể hiểu được. Mặc dù tôi sẽ cho rằng nếu bạn hỏi tại sao bạn gặp lỗi, thì rõ ràng là bạn sẽ muốn có một cách giải quyết.
Giăng

Tôi đồng ý, mặc dù câu trả lời được bình chọn nhiều nhất cho đến nay chỉ giải quyết why, và không phải workarounds, vì vậy tôi đã thêm phần nhấn mạnh.
Amelio Vazquez-Reina

Câu trả lời:


5

Như đã nói, bạn không thể chỉnh sửa luồng đầu vào.

Cách giải quyết khá rõ ràng: lưu luồng vào một tệp từ bên trong lessvà mở tệp đã lưu . Để làm điều đó trong khi xem, nhấn svà đặt tên của một tập tin. Sau đó, thoát lessvà mở tệp bằng tay, hoặc, vẫn từ bên trong less, nhập :evà đặt tên của tệp bạn vừa lưu.


15

Một cách giải quyết tốt là chuyển đầu ra từ ít hơn đến trình soạn thảo của bạn, ví dụ: sau "echo foo | less" bạn có thể làm:

g|$vim -

gsẽ nhảy đến dòng đầu tiên của tệp / đầu vào, |sẽ gọi hành động "pipe", $là dấu ("kết thúc"), theo sau là lệnh để chuyển phạm vi vào ( vim -trong trường hợp này, trong đó "-" có nghĩa là để đọc đầu vào từ stdin).


1
Thật sự cảm ơn!
Simon Pickup

5

Nó có nghĩa chính xác như những gì nó nói - bạn chỉ có thể chỉnh sửa một tệp trên đĩa theo cách này (từ less). Nếu bạn cấp nước tập trung đầu ra của một quá trình, nó STDOUTđang đi vào STDINcho less; không có tập tin để chỉnh sửa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.