6

我想知道是否有人对在 OS X 上设置 emacs 23 有任何建议。我已经使用 Linux/Windows 有一段时间了,我会打开许多​​ emacs 实例,它们是独立的——例如,我可以在不同的框架中有两个独立的文件,每个文件都有自己的 R、Python 和/或 shell 运行。我认为这是不受欢迎的(?) - 但它使每个脚本文件的工作目录分开,这是我喜欢的。

我知道在我的 .emacs 文件中设置(服务器启动)并调用“emacsclient”而不是“Emacs”现在是首选方式(?)。我发现这个线程通过 Applescript 促进了这一点: Emacs 23、OS X、multi-tty 和 emacsclient

但我想知道这是否是唯一的方法 - 当我在 OS X 上打开两个 emacs 实例时,它给了我错误:

** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x3803, name = 'org.gnu.Emacs.ServiceProvider'

但打开一个新框架允许我编辑文件。我知道对于 OS X 上的 vim,有一个叫做“mvim”的东西,它允许启动多个 vim 实例,但是对于 emacs 有类似的东西吗?很抱歉这个冗长的问题 - 总而言之,我想这些是我想征求您的专业知识的问题:

(1) 'emacsclient' 是专家的方式吗,(2) 如果不是必须的,有没有办法让多个 emacs 23 实例(不仅仅是帧)在 OS X 上运行?

谢谢!

4

6 回答 6

7

让我间接回答你的问题。

如您所知,它提供了一项服务,允许用户在现有emacsclientEmacs中从 Emacs 外部打开文档。这是专家的“方式”吗?取决于专家。我是 Emacs 的重度用户,但从不使用. 为什么?因为我从一开始就没有离开Emacs。我运行的所有 shell 都在 Emacs 中(使用自制的屏幕包),我在 Emacs 中阅读邮件等。我从来没有理由在命令行中键入。emacsclientemacsclient

您的使用模型似乎是您更喜欢运行多个 Emacsen,从而更容易跟踪哪些进程和文件正在一起使用。这是有道理的。如果您愿意,您可以在一个Emacs 中完成所有操作,但可能需要对您的使用模型进行一些更改,或者进行一些自定义以帮助管理多个解释器/shell/您喜欢的任何内容。

因此,如果您喜欢运行多个 Emacs 实例,那么请务必继续这样做。

关于第二个问题,似乎(server-start)在您的 .emacs 中存在问题 - 可能是因为两个 Emacsen 尝试使用同一端口时发生冲突。查看启动服务器的文档,也许从 .emacs 中删除该行,然后使用--daemon命令行选项启动服务器一次。

然后,在命令行,您可以选择是要启动一个新的 emacs(通过键入emacs)还是连接到您启动的服务器(通过键入emacsclient)。

于 2009-08-12T03:55:52.467 回答
7

如果您想要 emacs 的多个实例(而不是框架),请在终端提示符下使用以下命令:

/Applications/Emacs.app/Contents/MacOS/Emacs &

(Generic form for any app) /Path_To_Application.app/Contents/MacOS/Application &
于 2011-03-30T18:14:32.513 回答
4

下面是一个简单的 shell 脚本,它将启动一个单独的实例,打开 Emacs 窗口并赋予它焦点:

#!/bin/bash

/Applications/Emacs.app/Contents/MacOS/Emacs \
    --eval '(select-frame-set-input-focus (nth 0 (frame-list)))' \
    "$@"

笔记:

  • 该脚本使 emacs 的行为类似于我习惯的 Linux 上的 emacs。
  • 可能有比 '(nth 0 (frame-list))' 更好的方法来识别要激活的帧,但上面的脚本对我来说是正确的。
  • 我的 .emacs 文件中没有“(服务器启动)”。
于 2012-11-28T05:07:51.890 回答
1

我在我的.emacs中使用类似的东西来仅在服务器尚未运行时调用 server-start :

(if (file-exists-p
 (concat (getenv "TMPDIR") "emacs"
         (number-to-string
          (user-real-uid)) "/server"))
nil (server-start))

然后对我的.zshrc进行一些更改,以便我可以ec在 shell 中无意识地作为编辑器命令运行:

# I use the Emacs package from emacsformacosx.com
alias emacs='open -a emacs'
alias emacsclient='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'
alias ec='emacsclient -a /Applications/Emacs.app/Contents/MacOS/Emacs'
export EDITOR='ec'
于 2011-03-09T09:53:54.540 回答
1

我创建了这个shell 脚本,它允许你同时打开多个 emacs 实例。

emacs-ide要安装,只需将脚本复制/usr/local/bin/$PATH.

您可以使用多个文件或目录运行多个 Emacs 实例,如下所示:

emacs-ide ~/Projects/project-1
emacs-ide ~/Projects/project-2

该脚本还设置窗口的名称以匹配正在编辑的目录(项目)或文件。

于 2012-11-03T16:14:34.290 回答
0

使用

open -a -n /Applications/Emacs.app

弹出“Emacs 意外退出”对我来说失败了。(OS X Yosemite 10.10.3,Emacs 24.3.1 x86_64-apple-darwin)

作为一种解决方法,我安装了 Aquamacs 和 Emacs,所以至少我可以运行两个副本。

于 2018-03-20T17:37:07.637 回答