2013-04-06 50 views
3

这里是我的当前设置:如何在Emacs的shell命令中使用正确的rbenv Ruby版本?

我〜 /.zprofile(我确信文件得到执行):

# Customize to your needs... 
export PATH=/Users/username/.rbenv/shims:/Users/username/.nvm/v0.9.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin 

eval "$(rbenv init -)" 

我想使用我的全局定义的红宝石版本M-x shell-command(或M-!)。我期望M-! ruby -v返回ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.3.0]但我得到ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

如果我在M-x shell中运行ruby -v,则会加载正确的版本。我怀疑M-!不能按预期工作,因为它作为非交互式shell运行。

有没有办法解决这个问题,除了像这样运行:M-! eval "$(rbenv init -)" && ruby -v?这是有效的,但我不想插入eval "$(rbenv init -)" &&面前我执行的一切。

回答

2

您的shell的路径需要被Emacs看到,为了使它更容易,请使用以下elisp软件包。

https://github.com/purcell/exec-path-from-shell

您可以通过安装此EL-获得通过在~/.emacs.d/lisp的目录下,并添加以下内容到~/.emacs~/.emacs.d/init.el文件或手动。

(add-to-list 'load-path "~/.emacs.d/lisp") 
(unless (require 'exec-path-from-shell nil 'noerror) 
    (exec-path-from-shell-initialize)) 

lisp文件将负责其余部分。