[emacs][ruby] Emacs から rbenv で入れた ruby を呼び出せない
- Terminal で「which ruby」すると「/Users/gan2/.rbenv/shims/ruby」と表示される。
- Emacs で「M-! which ruby」すると「/usr/bin/ruby」と表示される。
前からこの違いを何とかしたいと思っていた。お願いだから Emacs でも rbenv の方を見に行って下さい。
PATH があやしいので確かめてみる。
- Terminal で「echo $PATH」すると「/Users/gan2/.rbenv/shims」が「/usr/bin」よりも先にある。よしよし。
- Emacs で「M-! echo $PATH」すると「/usr/bin」の方が先にある。これだ。これがいけないんだ。
「/Users/gan2/.rbenv/shims」が「/usr/bin」より前にくるようになれば解決するはずだ。
ぐぐってみると、この辺りの問題は exec-path と PATH の設定で対処できるらしいことが分かった。
でも真似して幾つか試してみたのに問題が解決しない。
(setq exec-path (cons (expand-file-name "~/.rbenv/shims") exec-path)) ; => ("/Users/gan2/.rbenv/shims" "/usr/bin" "/bin" "/usr/sbin" "/sbin" "/Applications/Emacs_Carbon.app/Contents/MacOS/libexec" "/Applications/Emacs_Carbon.app/Contents/MacOS/bin" "~/bin" "/usr/local/bin" "/usr/X11R6/bin") (setenv "PATH" (concat (expand-file-name "~/.rbenv/shims:") (getenv "PATH"))) ; => "/Users/gan2/.rbenv/shims:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/usr/local/bin:/usr/X11R6/bin"
上記の設定で、exec-path、PATH ともに "/Users/gan2/.rbenv/shims" が先頭にきている。
でも「M-! echo $PATH」では先頭に来ない。
どうも M-! が参照している PATH は、Terminal の PATH とも getenv で見れる PATH とも違うもののようだ。
ちなみに、以下を C-x C-e すると「/Users/gan2/.rbenv/shims/ruby」が出力される。
(apply 'call-process "which" nil t nil '("ruby"))
うーん。わっかんないなー。