我可以拥有一个“单例” emacs 实例吗?

我可以拥有一个“单例” emacs 实例吗?

换句话说,我可以启动一次 emacs,然后每当我在终端中输入 emacs 时,它都会作为我现有 emacs 实例中的缓冲区打开吗?

答案1

是的。

如何操作取决于你正在运行的操作系统和 emacs (XEmacs、GNU emacs) 版本。一个好的开始是查看Gnu客户端Emacs客户端

答案2

[rant]这又是一个无需思考的功能,在许多其他编辑器上默认启用,但在 Emacs 中却相当困难。[/rant]

无论如何,以下是我的做法。首先,正如 jwernerny 提到的,Emacs客户端就可以了。编辑 foo.txt 时,你只需要

emacsclient --alternate-editor='' foo.txt

此命令将尝试连接到正在运行的 Emacs 服务器。如果没有服务器,它将启动一个。然后它将连接到服务器并指示它打开指定的文件。

服务器作为守护进程(后台进程)运行。如果运行,ps x | grep emacs您将看到一个带有命令行的进程emacs --daemon。我遇到的问题是,如果您这样做,Emacs 只会在终端中运行,因此如果您想在图形窗口中运行它,请继续阅读...(并首先终止该守护进程)

以下是我添加到 .bashrc 的内容:

alias e='emacsclient --no-wait --alternate-editor ~/.emacs.d/start.sh'

其内容~/.emacs.d/start.sh为:

#!/bin/sh
emacs --eval '(server-start)' $* &

然后可以使用别名e来打开文件,可以通过启动新的 Emacs 实例(使用服务器)或使用现有实例来打开。

对于等待您完成文件操作的编辑器命令(适用于 Git 提交等),请删除该--no-wait选项。我在 .bashrc 中执行此操作:

export EDITOR='emacsclient --alternate-editor ~/.emacs.d/start.sh'

C-x #在编辑完文件后使用。老C-x k问题会问“Buffer foo.txt 仍有客户端;要杀掉它吗?”

相关内容