Трубить меньше и редактировать: ошибка «невозможно редактировать стандартный ввод». Обходные?

9

Недавно я узнал, что если я буду публиковать свои файлы less, я могу нажать vи открыть буфер в Emacs. Это работает до тех пор, пока у меня $EDITORправильно установлена переменная окружения , которая в моем случае выглядит так:

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

Вышеуказанное дает мне возможность загружать emacs в работающий терминал less.

Однако вышеприведенный прием не работает при передаче команд в less. При этом lessжалуется со следующим сообщением:

Cannot edit standard input (press RETURN)

Мой вопрос: почему это происходит? Но самое главное, есть ли обходной путь к этому ?

Амелио Васкес-Рейна
источник
2
Вы должны научиться использовать emacsclient , который позволит вам редактировать файлы в уже запущенной копии Emacs. Emacs - не самый быстро запускаемый редактор.
CJM
Почему вы откатили мою правку? Разве название не должно быть вопросом?
Джон
1
Извините @Джон, я не видел ваше редактирование. Я отредактировал заголовок, чтобы уточнить, что меня больше всего интересуют способы решения этой проблемы. Я думаю, что название, как оно есть: Piping into less and editing: “cannot edit standard input” error. Workarounds?понятно. Почему думаешь иначе?
Амелио Васкес-Рейна
Это понятно. Хотя я полагаю, что если вы спрашиваете, почему вы получили ошибку, должно быть очевидно, что вы захотите обходной путь.
Джон
Я согласен, хотя самый голосующий ответ до сих пор касается whyтолько одного, а не самого workarounds, поэтому я добавил акцент.
Амелио Васкес-Рейна

Ответы:

5

Как уже было сказано, вы не можете редактировать поток ввода.

Обходной путь вполне очевиден: сохраните поток в файл изнутри lessи откройте сохраненный файл . Для этого во время просмотра нажмите sи введите имя файла. Затем либо выйдите lessи откройте файл вручную, либо, по-прежнему изнутри less, введите :eи введите имя файла, который вы только что сохранили.

rozcietrzewiacz
источник
15

Хороший обходной путь - направить вывод from less в ваш редактор, например, после «echo foo | less» вы можете сделать:

g|$vim -

gперейдет к первой строке файла / ввода, |вызовет действие "pipe", $это метка ("конец"), за которой следует команда для направления диапазона ( vim -в данном случае, где "-" означает читать входные данные из стандартного ввода).

blueyed
источник
1
Круто, спасибо!
Саймон Пикап
5

Это означает именно то, что сказано - таким образом вы можете редактировать только файл, находящийся на диске (из less). Если вы перенаправили вывод процесса, STDOUTон будет использоваться STDINдля less; нет файла для редактирования.

Аарон Д. Мараско
источник