18

Emacs Mx 编译没有看到 .bashrc 中设置的任何别名。如果我使用 Mx shell 然后输入别名,就可以了。我尝试从 /etc/profile、~/.profile、~/bash_env 采购 .bashrc,任何我能想到的都无济于事。

我在 Emacs 23 和 Ubuntu 11 上。我使用 /usr/bin/emacs %F 从桌面按钮启动 emacs。

4

5 回答 5

19

Emacs 从父进程继承其环境。您如何调用 Emacs - 从命令行或其他方式?

如果您:

M-x编译RET C-a C-kbash -i -c your_alias RET

调用 bash 作为交互式 shell(-i 选项)应该读取您的 .bashrc 别名。

编辑:我认为M-xshell-command 和M-xcompile 都通过调用进程在劣质 shell 中执行命令。在您的 .emacs 中尝试以下操作(或仅评估):

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

我注意到,在对上述内容进行评估之后,会选择 .bashrc 别名供M-xshell-command 和M-xcompile 使用,即

M-x编译RET your_alias RET

然后应该工作。

我的环境:Emacs 24.1(预测试 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 的函数编写类似的“建议”(例如,我还需要为 .bashrc 定义相同的建议recompile),只需复制上面的内容并compile用另一个函数名称替换上面的内容。

于 2013-07-11T13:44:23.933 回答
2

你可能喜欢 emac 的 bash-completion :

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

您将能够在编译 minibuffer 和 shell 模式中使用别名的制表符完成。

享受 !

(他们在这里谈论它Bash autocompletion in Emacs shell-mode

于 2012-07-06T10:03:37.453 回答
1

我认为编译命令不是通过 shell 解释的:它们是由 emacs 执行的(这意味着不考虑别名、shell 函数和其他特定于 shell 的东西)。

尝试将您的编译命令包装到一个 shell 脚本中,该脚本将获取正确的环境。

您可以使用以下形式的完整 shell 脚本来执行此操作

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

或直接在 emacs 中使用以下形式的编译命令

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

于 2012-06-08T10:39:36.523 回答
0

请参阅当我运行 shell 命令时,是否有办法让我的 emacs 识别我的 bash 别名和自定义函数?对于不运行所有 .bashrc 并且不创建这些错误消息的修复程序:

bash:无法设置终端进程组(-1):设备 bash 的 ioctl 不合适:此 shell 中没有作业控制

于 2019-05-28T22:04:36.177 回答