Emacs を Windows&MSYS2 で使うときのPATH設定|M-x grep-find などが動作しない時

この記事は約3分で読めます。

今回は Windows 環境で Emacs を使っている人向けの記事です。

2017-02-01
exec-path の設定を追加しました!
スポンサーリンク

Windows で Linuxコマンド を使える! msys2!

Windows で Emacs といえば、 Cygwin がセットになっている Emacs gnupack というものがあります。これは最初から Cygwin が使えるように設定されているので、Linux を使える人には便利です。

ただ、Cygwin は POSIX 互換を目指しているため機能盛りだくさんで、「Cygwin はちょっと重い、でかすぎる・・・」という方もいるかと思います。そういう場合は msys2 を使うのが良いでしょう。MSYS2 は、プログラム開発に必要なだけの機能を取り入れた、いわば Cygwin のコンパクト版です。と言っても、普通にWindows 上で使う分には充分な機能を持っています

スポンサーリンク

msys2 のコマンドを使うための Emacs 初期化ファイル設定

Windows で msys2 を使っている人は、Emacs をインストールするときは gnupack でなく 単体の Windows 向け Emacs(通称 NTEmacs) をインストールしているかと思います。その場合、gnupack と違い、MSYS2 と Emacs は連動していません。ですので、Emacsから grepやfindなどの POSIX コマンドを使いたい時はEmacs に MSYS2 コマンドのありかを伝えなければいけません

と言っても、設定自体は簡単です。初期化ファイル(.emacs や .emacs.d/init.el)に、下記の設定を追加するだけです。下記の例は C:\Programs\ の下に MSYS2 をインストールした場合です。このパスは、ご自身のインストールパスに合わせて変更してください


;; MSYS2 のコマンドを使えるようにする. 
(setenv "PATH"
  (concat
   ;; 下記の行に MSYS2 のコマンドの実行可能ファイルがある場所を設定してください. スラッシュが2つ連続することに注意!
   ;; 区切り文字はセミコロン
   "C:\\Programs\\msys64\\usr\\bin;"
   (getenv "PATH")))

;; 区切り文字はなし
(setq exec-path (append exec-path '("C:\\Programs\\msys64\\usr\\bin")))

やっていることは2つです。

1つ目は単に環境変数 PATH に MSYS2 のコマンドパスを追加しているだけです。これで Emacs からシェルを動かしたりする場合に MSYS2 のコマンドが使えるようになります。
2つ目は、exec-path 変数にMSYS2 のコマンドパスを追加しています。これはEmacs自体が外部コマンドを使うときに参照されます。
これで、Windows & msys2 でも M-x grep-find などが動くようになります。普通に使うぶんにはかなりLinuxライクな環境になりますよ!

ちなみに、上記の2つの変数についてさらに詳しく知りたい方は、下記の Emacs wik ページを参照してみてください。
Emacs wiki – ExecPath

スポンサーリンク

まとめ

今回はWindows で msys2 を使う時のパス設定方法について説明しました。これで Windows上でもLinuxっぽくEmacsを扱えるようになります!

  • 環境変数 PATH に msys2 のパスを追加
  • exec-path 変数に msys2 のパスを追加
  • ぜひご活用ください!

    コメント欄にて阿部さまより閉じ括弧の不足をご指摘いただきました。2017-03-29に修正いたしました。ありがとうございました!

    コメント

    1. 阿部 より:

      こんにちは。
      阿部と申します。
      いつもためになる情報を参考にさせていただいています。

      昨日、本ページを参考にPATH設定をおこなったところ、Emacs起動時にエラーとなりました。
      重箱の隅をつつく細かい指摘ですが、exec-pathの閉じ括弧が1つたりないように思います。

      オリジナル)
      (setq exec-path (append exec-path ‘(“C:\\Programs\\msys64\\usr\\bin”))

      修正)
      (setq exec-path (append exec-path ‘(“C:\\Programs\\msys64\\usr\\bin”)))

      以上、よろしくお願い致します。

      • nagayasu-shinya より:

        阿部さま
        ながやすです。ブログご覧いただきありがとうございます。

        申し訳ありません!ご指摘の通り閉じかっこが足りませんね。。。
        すぐに修正いたします。ご指摘まことにありがとうございます、助かります。

        返信が遅れすみません。
        今後ともよろしくお願いいたします!