С Vim я могу легко сделать
$ echo 123 | vim -
Можно ли это сделать с 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
Действительно ли невозможно прочитать буфер из канала Unix?
Изменить : В качестве решения я написал оболочку оболочки с именем emacspipe
:
#!/bin/sh
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
Вы можете использовать процесс подстановки :
источник
emacs: standard input is not a tty
Вы можете перенаправить в файл, а затем открыть файл. например
jweede отмечает, что если вы хотите, чтобы временный файл автоматически удалялся, вы можете:
Способ Emacsy сделать это - запустить команду оболочки в Emacs .
Это дает вам буфер с именем * Shell Command Output * с результатами команды.
источник
echo 123 > temp; emacs temp; rm temp
TMP=$(mktemp) && cat > $TMP && emacs23 $TMP ; rm $TMP
. Спасибо всем!Это возможно, см. Https://stackoverflow.com/questions/2879746/idomatic-batch-processing-of-text-in-emacs
Вот эхо в скрипте emacs (скопировано из ссылки выше):
или прочитать его в буфер, а затем распечатать все сразу
источник
Это можно создать простую функцию оболочки , которая работает , как он читает из стандартного ввода (хотя на самом деле он пишет во временный файл , то чтение этого). Вот код, который я использую:
Вы просто используете функцию в качестве псевдонима для Emacs, например
или как обычно из файлов
Замена
emacs
наemacsclient
в функции работает также.источник
emacsclient -c -t $@
, или, по крайней мере, отказаться от опции -n. Страницы man сemacsclient -t --eval "(man \"$1\")" --eval "(delete-window)"
(и теперь вы можетеhelm-swoop
перейти к Man Glory!)Это работает:
но, по некоторым причинам, только с emacs в графическом режиме (Gnome, Konsole, GNU Emacs 23.4.1). Команда:
генерирует ошибку 'emacs: стандартный ввод не является tty'. Та же ошибка появляется при попытке в текстовой консоли.
источник
echo 123 | exec emacs -nw --insert <(cat) </dev/tty
должно сработать.Другая возможность, не упомянутая ни в одном из предыдущих ответов, заключается в использовании,
/dev/stdin
если она есть в выбранном вами варианте Unix.Простая попытка открыть
/dev/stdin
напрямую не работает, потому что Emacs делает несколько проверок, а затем выдает отчетыSymbolic link that points to nonexistent file
. (И если Emacs позволил бы вам загрузить файл, то попытайтесь сохранить его снова,/dev/stdin
что редко будет делать то, что ожидал пользователь.)Однако объединение
/dev/stdin
с--insert
аргументом работает:Следует отметить, что эта версия работает только при использовании X. Если вам нужно решение, которое работает в терминале, я предлагаю вам взглянуть на другой ответ .
источник
emacs: standard input is not a tty
сообщение, тестирующее его на Linux иunset DISPLAY
, я получу то же сообщение об ошибке, что и вы.случайно, что-то вроде:
или
это вариант. Emacs просто не интегрируется с UNIX, как это делает vim.
источник
M-!
, которая автоматически захватывает полученный вывод во временный буфер.) кроме войны, ни один редактор не «лучше» другого; у них просто очень разные взгляды на практически все.curl foo.bar | vim -
.. извините. Я имел в виду,curl foo.bar | emacs
кроме как вы не можете сделать это