换句话说,我可以启动一次 emacs,然后每当我在终端中输入 emacs 时,它都会作为我现有 emacs 实例中的缓冲区打开吗?
答案1
答案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 仍有客户端;要杀掉它吗?”