読者です 読者をやめる 読者になる 読者になる

MacPortsでインストールしたソフトがvimの外部プログラムで実行できない

魚が表紙になっているGauche本が気になり、Schemeを使ってみたくてMacPortsでインストールしてみた。

id:ns9tks】さんの

http://d.hatena.ne.jp/ns9tks/20080115/1200416097

を使って実行してみたところ、*1

zsh: command not found: gosh

と言われてしまった。

あれれっ?と思って、今度はコマンドモードで試すがダメ。他のMacPorts経由でインストールしたMySQLコマンドなどはどうか?と思って実行してみたところ同じ現象。
もちろんタブで補完も効かない。

:!mysql5
zsh: command not found: mysql5

きっとvimが実行するzshにパスがうまく通ってないんだろう・・・


.profileや.zshrcにパスは通してあるのでターミナルからは実行できることは確認できている。

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

うーん、なぜだろう。
もうちょっと調べてみよう。

メモ

:h !

から辿っていった。

:h shell

Shellオプションは色々あるみたい。

:!ls

の!は『オプション'shell' に設定されているシェルコマンドを使います。』とのこと。
この辺をもうちょっと探る。

:shell

で起動した時はgoshコマンドとか使えるから、また別かも。
うーん。

【3/18追記】対応方法

コメントで教えて頂き、試した見たところ外部コマンドでMacPortsでインストールしたコマンドが使えるようになりました。

結果から言いますと、.zshenvにExportのパスを記述するということでした。

どうして.zshenvに記述するとうまくいったかを調べました。

zshの設定ファイルは5つ使用できるようです。

  • .zshenv
  • .zprofile
  • .zshrc
  • .zlogin
  • .zlogout

各ファイルには優先度や使用される条件などがあって

  • ターミナルなどからログインする時に読み込まれる
    1. .zshenv
    2. .zprofile
    3. .zshrc
    4. .zlogin
  • zsh起動時に読み込まれる(zshコマンドを入力する等)
    1. .zshenv
    2. .zshrc
  • zsh scriptを実行する(zsh hogehoge.zsh等)
    1. .zshenv
  • ログインシェルに設定されていて、ログアウトする時
    1. .zshlogout

の順で読み込まれるようです。
zsh scriptを実行する時は、.zshenvしか読み込まれないのですね。

なるほど。
きちんと、適した箇所に設定を書くようにしよう。

メモ2

この現象はgvimを使った場合のみ発生。
ターミナルからvimを外部コマンドを使った場合には.zshenvにパスを通さなくても実行できました。(タブ補完もできた)*2

【3/20追記】MacOSX用の環境設定ファイル

LDCで『.MacOSX/environment.plistでもいける』とコメントを頂きました。

.MacOSX/environment.plistってなんだろう??と思って調べてみたらこんな事ができるらしい。

  • 全てのMacアプリに環境変数を通知する為の設定(ユーザー・Shellの他に全てのCarbonとCocoaプログラム

読み込まれるタイミングとしてはログインした時みたい。
ただし、対象が全てのアプリに対してなので影響度が高い分設定には注意を払う必要があるとのこと。

*1:これお気楽で便利すぎ。

*2:.zshenvに書かなくても別によいという意味でなく、挙動についての記録。