18

Emacs Mx コンパイルは、.bashrc に設定されたエイリアスを認識しません。Mx シェルを使用してからエイリアスを入力すると、問題ありません。/etc/profile、~/.profile、~/bash_env から .bashrc を調達しようとしましたが、考えられるものは何でも役に立ちませんでした。

私は Emacs 23 と Ubuntu 11 を使用しています。デスクトップ ボタンから /usr/bin/emacs %F を使用して emacs を起動します。

4

5 に答える 5

19

Emacs は親プロセスから環境を継承します。どのように Emacs を起動していますか? コマンドラインから、またはその他の方法で?

次の場合:

M-xbashをコンパイルRET C-a C-k-i -c your_alias RET

bash をインタラクティブ シェル (-i オプション) として呼び出すと、.bashrc エイリアスが読み取られるはずです。

M-x編集:シェルコマンドとM-xコンパイルの両方が、call-processを介して劣ったシェルでコマンドを実行すると思います。.emacs で次のことを試してください (または単に評価してください):

(setq shell-file-name "bash")
(setq shell-command-switch "-ic")

M-x上記の評価の後、シェルコマンドとM-xコンパイルの両方で使用するために .bashrc エイリアスが取得されることに気付きました。

M-xyour_aliasをコンパイルしますRET RET

その後、動作するはずです。

私の環境: Emacs 24.1 (pretest rc1)、OSX 10.7.3

于 2012-06-09T03:28:36.577 に答える
9

Keith Flower の答えは機能しますが、.bashrc が他の場所に不必要にロードされているため、速度が低下する可能性があります (おそらく、私のコンピューターの電力が十分に不足しているわけではありませんが、autocomplete.el を使用しようとすると、emacs はほとんど使用できませんでした)。

別の方法は、shell-command-switch必要な機能だけをローカルで変更することです。これは、emacs の「アドバイス」機能を使用して、これらの関数のラッパーを作成することで実行できます。を変更する例を次に示しますcompile

;; Define + active modification to compile that locally sets
;; shell-command-switch to "-ic".
(defadvice compile (around use-bashrc activate)
  "Load .bashrc in any calls to bash (e.g. so we can use aliases)"
  (let ((shell-command-switch "-ic"))
    ad-do-it))

.bashrc を使用する関数ごとに同様の「アドバイス」を記述する必要があります (たとえば、 に対しても同じアドバイスを定義する必要がありました)。上記をコピーして、上記を別の関数名にrecompile置き換えるだけです。compile

于 2013-07-11T13:44:23.933 に答える
2

あなたは emac の bash-completion が好きかもしれません:

https://github.com/szermatt/emacs-bash-completion

コンパイルのミニバッファーとシェルモードで、エイリアスのタブ補完を使用できるようになります。

楽しみ !

(彼らはここでそれについて話しますEmacsシェルモードでのBashオートコンプリート

于 2012-07-06T10:03:37.453 に答える
1

コンパイルコマンドはシェルを介して解釈されないと思います.emacsによって実行されるだけです(つまり、エイリアス、シェル関数、およびその他のシェル固有のものは考慮されません)。

正しい環境を提供するシェルスクリプトにコンパイルコマンドをラップしてみてください。

これは、次の形式の本格的なシェルスクリプトを使用して行うことができます

#!/bin/bash
source "~/.bashrc"
my_command

または、次の形式のコンパイル コマンドを使用して、emacs で直接実行します。

bash -c "source ~/.bashrc; my_command"

于 2012-06-08T10:39:36.523 に答える
0

シェル コマンドを実行するときに emacs に bash エイリアスとカスタム関数を認識させる方法はありますか? を参照してください。すべての .bashrc を実行せず、これらのエラー メッセージを作成しない修正の場合:

bash: 端末プロセス グループを設定できません (-1): デバイスの ioctl が不適切です bash: このシェルにはジョブ制御がありません

于 2019-05-28T22:04:36.177 に答える