我是一名新的iMac用户,对于PC上的Linux有着丰富的经验。我将最新版本的emacs下载到了Applications文件夹中,现在想要通过命令行调用emacs。然而,emacs的默认路径是/usr/bin/emacs。那么如何最佳实践地将新的emacs添加到路径中呢?我想创建一个~/bin目录和一个指向新emacs的链接,并将~/bin添加到我的路径开头。这就是我们在Linux PC的软件开发环境中的做法。
我是一名新的iMac用户,对于PC上的Linux有着丰富的经验。我将最新版本的emacs下载到了Applications文件夹中,现在想要通过命令行调用emacs。然而,emacs的默认路径是/usr/bin/emacs。那么如何最佳实践地将新的emacs添加到路径中呢?我想创建一个~/bin目录和一个指向新emacs的链接,并将~/bin添加到我的路径开头。这就是我们在Linux PC的软件开发环境中的做法。
最好的方法是使用Homebrew并使用它。
brew install emacs --cocoa
那么您现在拥有一个易于更新的Emacs安装程序。Cocoa将确保在启动Emacs之前,您的Mac快捷键可以正常工作。将二进制文件设置为守护进程在启动时运行(因为它启动得不太快),例如:
/usr/local/Cellar/emacs/23.2/Emacs.app/Contents/MacOS/Emacs --daemon
创建一个脚本,使用emacsclient命令并将其保存到/bin/emacs文件中(不要忘记将其设置为可执行):
#!/bin/bash
exec /Applications/Emacs.app/Contents/MacOS/bin/emacsclient -n -c "$@"
当你在Bash终端上输入"emacs something.txt"时,已经在运行的Emacs守护进程会立即打开该文件。如果守护进程未在运行,则可以扩展此功能以打开Emacs!
我在最新的Emacs 23.2版本上进行了测试,一些功能可能不适用于早期版本。
/bin
目录 -- 正确的做法是要么将其放在路径较早的位置,要么为这些东西创建别名。我使用从地窖中取出的 Emacs.app 作为一个普通的可双击应用程序。 - Dustin/usr/local/bin
是最常见的做法(并将其添加到您的路径中)。如果您决定采用这种方式,我建议您坚持这样做。但这是我的Emacs设置方法:
emacs
别名,用于启动基于终端的Emacs版本,例如:
alias emacs='/Applications/Emacs.app/Contents/MacOS/Emacs -nw'
$ open -a Emacs
有关OS X上的emacs的大量信息可在emacs wiki中找到。
~/bin
或/usr/local/bin
都可以正常工作,操作PATH
也可以。
假设您正在使用Emacs.app,则最简单的方法是使用open -a /Applications/Emacs.app“$@”
。 open
是在Finder中双击某个东西的命令行等效项。 将其放入shell脚本中,将其放入PATH中即可。
通过MacPorts安装emacs-app
可能是获取和维护Cocoa emacs的最简单方法。
open -a Emacs "$@"
显然,~/bin需要在我设置的~/.profile中的PATH中位于/usr/bin之前,以便它可以遮盖预安装的emacs二进制文件。
我还通过ln -s /Applications/Emacs.app/Contents/MacOS/bin/emacsclient ~/bin/emacsclient
创建了一个符号链接,以便这也可以遮盖预安装的emacsclient二进制文件。
为了方便起见,我创建了一个别名ec='emacsclient -a emacs -n'并在我的emacs初始化脚本中包含(server-start)。这使我能够使用ec filename从命令行打开文件,无论emacs是否已经运行。
另一个提示:当您通过应用程序或打开启动emacs时,emacs不会继承与终端环境中相同的路径,因此我发现非常有用的一件事是在设置路径后在我的.profile中运行以下命令来更改继承cocoa应用程序的PATH:
defaults write ${HOME}/.MacOSX/environment PATH "$PATH"
可以这样做。如果这是一个本地的 Mac 应用程序,那么二进制文件实际上位于应用程序目录下(而不是二进制文件的大写形式):.../Emacs.app/Contents/MacOS/Emacs
由于您来自 Linux,您可能会对MacPorts感兴趣。这是一个从 Linux 移植过来的大型软件包集合。它允许从命令行安装和升级软件包,进行依赖关系管理等等。它包括一个本地版本的 Emacs,可以从命令行调用。