3

Можно ли как-то редактировать текст в памяти в emacs? (Т.е. не заходя через файловую систему.)

Я пишу сценарий, в котором мне нужно отредактировать вывод команды, а затем обработать отредактированный текст в другой команде.

Я думаю о чем-то вроде

command1 | emacs --edit-std-in-and-write-to-stdout | command2

Или, альтернативно, что-то вроде

TEXT=$(command1)
emacs --edit-this $TEXT | command2

1 ответ1

1

Emacs не будет читать стандартный ввод, если он не работает в пакетном режиме. Вместо этого вы можете использовать параметр командной строки для передачи формы Lisp, которую Emacs оценит сразу после инициализации:

emacs --eval '(shell-command "command1")'

Это выполнит command1 и захватит ее вывод в буфер с именем *Shell Command Output* , который затем вы можете переименовать, отредактировать и так далее. пробовать.

После этого вы можете передать результат в command2 с помощью C-x h M-| command2 RET ; C-x h вызывает mark-whole-buffer, чтобы область охватывала весь отредактированный текст, а M-| вызывает shell-command-on-region для выполнения command2 и выдачи содержимого региона на стандартный ввод. (Если вы восстановили любой из этих аккордов, просто вызовите соответствующую функцию напрямую через M-x function-name RET ; как и во всех интерактивных функциях Emacs Lisp, они будут использовать минибуфер для запроса необходимых аргументов.)

Как и в случае с shell-command shell , команда shell-command-on-region будет захватывать стандартный вывод в буфер *Shell Command Output* , заменяя все, что там будет; если вы хотите сохранить отредактированный вывод command1 , переименуйте буфер перед вызовом command2 .)

Еще одно замечание: вам может быть полезно знать, что и shell-command shell-command-on-region принимают необязательный аргумент выходного буфера в качестве буфера или имени буфера; если буфер с указанным именем не существует, будет создан новый буфер с этим именем. См. Внутреннюю документацию (C-h f function-name RET или M-x describe-function RET function-name RET) для получения более подробной информации.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .