【发布时间】:2012-01-25 07:50:55
【问题描述】:
例如,我希望能够输入如下内容:
$ git diff | tempbuffer
并在未保存的新缓冲区中打开差异。
【问题讨论】:
-
如果我可以建议,请尝试 magit。它可能不完全符合您的要求。但我认为它符合您的需求github.com/magit/magit
例如,我希望能够输入如下内容:
$ git diff | tempbuffer
并在未保存的新缓冲区中打开差异。
【问题讨论】:
我个人的偏好是无需管理任何文件即可在 Bash 中键入内容:
git diff | (f=$(mktemp); cat > $f; emacsclient $f; rm -v $f)
emacsclient 在 Bash 删除临时文件之前等待您完成缓冲区。
我会用 M-! (phils 的回答)如果我从头开始启动 shell 命令和上面的命令(类似于 Sean 的回答),如果我在 shell 中“处于某些东西的中间”,然后决定“我想将它通过管道传输到 Emacs”。
【讨论】:
我使用来自 emacs wiki 的信息作为起点制作了一个包 (e-sink)。它按照您的描述工作,并且“尾”是输出,而不是等到进程完成显示所有内容。
【讨论】:
不幸的是emacsclient 不读取它的标准输入,所以你需要某种包装器。这是一个适合我的 Bash shell 函数:
tempbuffer() {
perl -MFile::Temp -MFile::Copy -e \
'copy *STDIN, $file = File::Temp->new; system "emacsclient", $file';
}
【讨论】:
git diff)。
git diff | tempbuffer.
您可以只使用 M-! -- 它会在与您的 shell 缓冲区相同的 cwd 中运行命令,并将结果输出到 *Shell Command Output* 缓冲区。
请注意,如果结果是简短的,则该缓冲区将不会被提升,并且输出将被复制到回显区域;但是缓冲区 仍然使用且可用。 C-hf shell-command RET 详细说明了什么是“简短”输出:
如果输出足够短,可以在回显区域显示 (由变量
max-mini-window-height确定,如果resize-mini-windows是非零),它显示在那里。 否则,将显示包含输出的缓冲区。
【讨论】:
git diff 的结果发送到新缓冲区,我希望缓冲区处于差异模式。
M-!然后git diff,我可以用M-x diff-mode设置缓冲区的diff模式。
如果您使用eshell,您可以将输出重定向到缓冲区,例如
print foo > #<buffer bar>
创建一个新的缓冲区bar,内容为'foo'。有关详细信息,请参阅 Emacswiki http://www.emacswiki.org/emacs/EshellRedirection。
【讨论】:
print foo > #bar。