如何从命令行在现有emacs进程中打开文件?


14

我有几个脚本,将启动与特定项目相关的所有应用程序和文件。但是,它将启动多个emacs实例,而不是简单地使当前emacs打开请求的文件。我宁愿当前的emacs只是在新缓冲区中打开项目文本文件。

有什么想法可以做到吗?


看看我的答案stackoverflow.com/a/38655619/2450748虽然5年后:)
nexayq '16

Answers:


21

M-x server-start在Emacs会话中,然后用于emacsclient -n file1 file2 ...将文件添加到现有Emacs。您可能需要使用其他选项,例如-c,在新窗口(框架)中打开文件。


谢谢dood。这就是我需要知道的。我尚未检查“正确答案”,因为我听说您应该始终保持开放的态度,以便给其他人贡献的机会。但是我已经将您的答案放入了一些脚本中。
2011年

通常,您希望放入(server-start).emacs文件,而不是手动启动服务器。我使用(and window-system (server-start)),以避免启动服务器,如果我在终端运行的emacs。
cjm 2011年

在现代Emacs中,它在终端中同样有用。见-t选项。
geekosaur 2011年

@cjm-实际上,我确实在.emacs文件中启动服务器。我只是不使用它:-)
BEV

5

放入(server-start)您的.emacs文件。

将此添加到 ~/.bashrc

alias myedit='emacsclient --alternate-editor="" --no-wait $*' #quotes intentionaly left blank

然后myedit用作您的编辑器。您将必须使用该-c选项打开一个窗口。

因此,您可以这样做:

myedit -c a-file
run-script #that uses myedit

要么

run-script #that uses myedit
myedit -c

理查德,谢谢您的投入。我仍然对您的脚本感到困惑。首先,由于emacsclient没有-c选项,因此我假设这是一个bash事情,但不知道。第二,为什么不将emacs用作替代编辑器?谢谢
2011年

#$ emacsclient --help...。可接受以下选项:... -c,--create-frame创建新框架,而不是尝试使用当前的Emacs框架... -a编辑器,--alternate -editor = EDITOR如果服务器未运行,则回退到编辑器如果EDITOR是空字符串,请以守护程序模式启动Emacs并尝试再次连接
ctrl-alt-delor

您不需要(实际上也可能不需要)在别名的定义中使用位置参数。考虑如何alias foo='echo bar $*'扩展set quux; foo baz。如果要使用位置参数,请尝试将其用作外壳函数:myedit() { emacsclient … "$@"; }
克里斯·约翰森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.