Emacs Mx 编译没有看到 .bashrc 中设置的任何别名。如果我使用 Mx shell 然后输入别名,就可以了。我尝试从 /etc/profile、~/.profile、~/bash_env 采购 .bashrc,任何我能想到的都无济于事。
我在 Emacs 23 和 Ubuntu 11 上。我使用 /usr/bin/emacs %F 从桌面按钮启动 emacs。
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
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
用另一个函数名称替换上面的内容。
你可能喜欢 emac 的 bash-completion :
https://github.com/szermatt/emacs-bash-completion
您将能够在编译 minibuffer 和 shell 模式中使用别名的制表符完成。
享受 !
(他们在这里谈论它Bash autocompletion in Emacs shell-mode)
我认为编译命令不是通过 shell 解释的:它们是由 emacs 执行的(这意味着不考虑别名、shell 函数和其他特定于 shell 的东西)。
尝试将您的编译命令包装到一个 shell 脚本中,该脚本将获取正确的环境。
您可以使用以下形式的完整 shell 脚本来执行此操作
#!/bin/bash
source "~/.bashrc"
my_command
或直接在 emacs 中使用以下形式的编译命令
bash -c "source ~/.bashrc; my_command"
请参阅当我运行 shell 命令时,是否有办法让我的 emacs 识别我的 bash 别名和自定义函数?对于不运行所有 .bashrc 并且不创建这些错误消息的修复程序:
bash:无法设置终端进程组(-1):设备 bash 的 ioctl 不合适:此 shell 中没有作业控制