使用 emacs 编辑内存中的文本

使用 emacs 编辑内存中的文本

是否有可能以某种方式在 emacs 中编辑内存中的文本?(即不通过文件系统。)

我正在编写一个脚本,其中我需要编辑一个命令的输出,然后在另一个命令中处理编辑后的文本。

我在想类似的事情

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

或者,类似

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

答案1

除非以批处理模式运行,否则 Emacs 不会读取标准输入。相反,您可以使用命令行选项传递 Lisp 格式,Emacs 将在初始化后立即对其进行评估:

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

这将执行command1并将其输出捕获到名为的缓冲区中*Shell Command Output*,然后您可以根据喜好重命名、编辑等。

command2完成后,您可以通过以下方式将结果传递给C-x h M-| command2 RETC-x h调用 mark-whole-buffer,以便区域包含您编辑的整个文本,以及M-|调用shell-command-on-region执行command2并在标准输入上提供区域的内容。(如果您重新绑定了其中任何一个和弦,则只需直接通过调用相关函数即可M-x function-name RET;与所有交互式 Emacs Lisp 函数一样,它们将使用迷你缓冲区来提示所需的参数。)

与 一样shell-commandshell-command-on-region将捕获标准输出到*Shell Command Output*缓冲区,替换那里的任何内容;如果您想保留 的编辑输出command1,请在调用 之前重命名缓冲区command2。)

进一步说明:您可能会发现了解shell-command和都shell-command-on-region采用可选的输出缓冲区参数很有用,作为缓冲区或缓冲区名称;如果不存在给定名称的缓冲区,则将创建一个具有该名称的新缓冲区。有关更多信息,请参阅内部文档(C-h f function-name RETM-x describe-function RET function-name RET)。

相关内容