質問

WindowsでGNU Emacsを実行しているので、次のように入力します。

M-x shell

WindowsコマンドラインDOSシェルを起動します。ただし、代わりにEmacs内からCygwin Bashシェル(またはその他のWindows以外のシェル)を実行できるようにしたいと思います。どうすれば簡単にできますか?

役に立ちましたか?

解決

shell-file-name は、シェルコマンドを実行するときにEmacsが使用するシェルを制御する変数です。

explicit-shell-file-name は、どのシェル M-x shell を起動するかを制御する変数です。

Kenの回答の変更両方とも必要な場合とそうでない場合があります。

explicit-shell-file-name を一時的に変更することにより、別のシェルを開始する機能を使用することもできます:

(defun cygwin-shell ()
  "Run cygwin bash in shell mode."
  (interactive)
  (let ((explicit-shell-file-name "C:/cygwin/bin/bash"))
    (call-interactively 'shell)))

新しいCygwinセッションを開始しているので、おそらく-login 引数をbashに渡すこともできます。これを行うには、 explicit-bash-args を設定します。 ( Mx shell explicit- PROGRAM -args を使用することに注意してください。PROGRAMはシェルのパス名のファイル名部分です。シェルの設定時に .exe を含めます。

他のヒント

これに対する最善の解決策は次のとおりです。

;; When running in Windows, we want to use an alternate shell so we
;; can be more unixy.
(setq shell-file-name "C:/MinGW/msys/1.0/bin/bash")
(setq explicit-shell-file-name shell-file-name)
(setenv "PATH"
    (concat ".:/usr/local/bin:/mingw/bin:/bin:"
        (replace-regexp-in-string " " "\\\\ "
            (replace-regexp-in-string "\\\\" "/"
                (replace-regexp-in-string "\\([A-Za-z]\\):" "/\\1"
                    (getenv "PATH"))))))

"-login"を渡す際の問題cjm 提案は、シェルが常にホームディレクトリで起動するためです。しかし、ファイルを編集しているときに「M-x shell」を押すと、そのファイルのディレクトリにシェルが必要になります。さらに、「M-x grep」でこのセットアップをテストしました。および「M-x compile」。ここにある他の例は、ディレクトリとPATHの問題が原因で動作しないのではないかと思っています。

このelispスニペットは、〜/ .emacsファイルに属します。 MinGWの代わりにCygwinを使用する場合は、最初の文字列をC:/ cygwin / bin / bashに変更します。 2番目の文字列は、Windows PATHの前に追加されます(そのPATHを適切にunixy形式に変換した後)。 Cygwinでは、おそらく"〜/ bin:/ usr / local / bin:/ usr / bin:"または類似のもの。

CygwinでXEmacsを使用していますが、XEmacsからbashを比較的簡単に実行できます。

init.el

からの関連セクションです
;; Let's use CYGWIN bash...
;;
(setq binary-process-input t) 
(setq w32-quote-process-args ?\") 
(setq shell-file-name "bash") ;; or sh if you rename your bash executable to sh. 
(setenv "SHELL" shell-file-name) 
(setq explicit-shell-file-name shell-file-name) 
(setq explicit-sh-args '("-login" "-i"))

このテーマに関するもう1つの重要なヒント。

Emacsシェルモードを使用していて、bashとcmdの両方が必要な場合は、bashでcmdを入力するとdosシェルが正常に機能するため、デフォルトでbashを使用するように設定します。

cmdをシェルとして使用するようにEmacsをセットアップすると(NT emacsのインストール方法)、dosシェルは正常に機能しますが、bashまたはbash -iと入力してbashシェルを実行すると、結果のシェルは動作しません正しく動作します-回答0を参照してください。

ただし、bashが「最初」の場合は正常に動作します。シェルemacsが呼び出します。

Emacs * shell *バッファー内のデフォルトのWindowsコマンドラインシェルから直接bashを実行できます。

Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\temp>bash
bash     

ただし、コマンドプロンプトが表示されないため、見当識が失われ、コマンドとその出力結果がすべて混ざり合ってしまいます。

また、何らかの不明な理由により、コマンドを入力してreturnキーを押すと、コマンド行の最後に改行文字(\ r)が追加され、bashエラーが発生します:

ls
bash: line 1: 

回避策は、コマンドの最後にコメント文字(#)を手動で追加して、\ rテキストを効果的にコメントアウトすることです:

ls #
myfile,txt
foo.bar
anotherfile.txt

この全体的なアプローチは理想とはほど遠いですが、Windowsのネイティブシェルからbashにドロップして簡単な操作を行い、終了してWindowsでの作業を続ける場合に便利です。

ls\r': command not found

回避策は、コマンドの最後にコメント文字(#)を手動で追加して、\ rテキストを効果的にコメントアウトすることです:

<*>

この全体的なアプローチは理想とはほど遠いですが、Windowsのネイティブシェルからbashにドロップして簡単な操作を行い、終了してWindowsでの作業を続ける場合に便利です。

EmacsW32を使用しています。 C-h a shell $ は、シェル起動コマンドのリストを提供し、cmd-shellコマンドとcygwin-shellコマンドは興味深いように見えます。両方のコマンドにはEmacsW32が必要です。メニューにもあります:ツール&gt; W&amp; 32シェル

cygwin-shellを初めて実行し、Emacsでcygwinパスを設定していない場合は、[検索]ボタンを押してcygwinパスを設定できるカスタマイズページに移動します。

これらのアプローチは私にとってはうまくいかなかったので、次のようにしました:

(デフォルトでdosシェルを開くNTEmacsを使用しているため、おそらくemacsも同じように動作します)

SHELLという名前のWindows環境変数(「$ SHELL」ではなく「SHELL」)を作成し、cygwinインストールのbash.exeへのパスを指定します(c:\ programs \ cygwin \ bin \ bash.exeなど)

M-xシェルを実行すると、bashが開きます。

よろしく、

イノ

bashへの--login引数の回避に関する@Chris Jonesの回答に加えて、次のコマンドライン引数を設定しました。

 (setq explicit-bash-args '("--noediting" "-i"))

-noeditingオプションはGNU readlineライブラリとの干渉を防ぎ、-iオプションはシェルが対話型であることを指定します。また、emacs固有のbashカスタマイズのために、ホームディレクトリの.emacs_bashファイルを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top