Emacs M-x compile没有看到.bashrc中设置的任何别名。如果我使用M-x shell然后输入别名,那很好。我尝试从/ etc / profile,从〜/ .profile,〜/ bash_env采购.bashrc,我能想到的任何东西都无济于事。
我在Emacs 23和Ubuntu 11上。我使用/ usr / bin / emacs%F从桌面按钮启动emacs。
答案 0 :(得分:17)
Emacs从父进程继承其环境。你是如何从命令行或其他方式调用Emacs的?
如果您:
会发生什么Mx 编译 RET Ca Ck bash -i -c your_alias < KBD> RET
将bash作为交互式shell(-i选项)调用应该读取.bashrc别名。
编辑:我认为 M-x shell-command和 M-x 通过call-process在劣质shell中编译执行命令。在.emacs中尝试以下内容(或仅评估):
(setq shell-file-name "bash")
(setq shell-command-switch "-ic")
我注意到在评估了上述内容后,.bashrc别名被 M-x shell-command和 M-x 编译使用,即
M-x 编译 RET your_alias RET
然后应该工作。
我的环境:Emacs 24.1(预测试rc1),OSX 10.7.3
答案 1 :(得分:7)
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
在上面用另一个函数名。
答案 2 :(得分:1)
我认为编译命令不是通过shell解释的:它们是由emacs执行的(这意味着别名,shell函数和其他特定于shell的东西不被考虑)。
尝试将编译命令包装到shell脚本中,该脚本将提供正确的环境。
您可以使用表格
中的完整shell脚本来执行此操作#!/bin/bash
source "~/.bashrc"
my_command
或直接在emacs中使用
形式的编译命令 bash -c "source ~/.bashrc; my_command"
答案 3 :(得分:1)
你可能喜欢emac的bash-completion:
https://github.com/szermatt/emacs-bash-completion
您将能够在编译迷你缓冲区和shell模式下使用别名的制表符完成。
享受!
答案 4 :(得分:0)
请参见Is there a way to get my emacs to recognize my bash aliases and custom functions when I run a shell command?,了解无法运行所有.bashrc且不会创建以下错误消息的修补程序:
bash:无法设置终端进程组(-1):设备的ioctl不适当 bash:此shell中无作业控制