Emacs中的Mx编译没有看到.bashrc中设置的任何别名。 如果我使用MX外壳然后键入别名,它是好的。 我试图从/ etc / profile文件采购.bashrc中,从〜/ .profile中,〜/ BASH_ENV,任何我能想到的都无济于事。
我在Emacs的23和Ubuntu 11.我用的/ usr / bin中/ emacs的%F,从桌面按钮启动Emacs。
Emacs中的Mx编译没有看到.bashrc中设置的任何别名。 如果我使用MX外壳然后键入别名,它是好的。 我试图从/ etc / profile文件采购.bashrc中,从〜/ .profile中,〜/ BASH_ENV,任何我能想到的都无济于事。
我在Emacs的23和Ubuntu 11.我用的/ usr / bin中/ emacs的%F,从桌面按钮启动Emacs。
Emacs的继承父进程的环境。 你是如何调用的Emacs - 通过命令行,或一些其他的方式?
如果你有什么影响:
MX编译RET 钙 CK的bash -i -c your_alias RET
调用bash作为一个交互式shell(-i选项)应改为你的.bashrc别名。
编辑:我认为两者的Mx壳命令和MX编译通过呼叫过程中的下壳执行命令。 试着在你的.emacs以下(或只是评估):
(setq shell-file-name "bash")
(setq shell-command-switch "-ic")
我注意到上面的.bashrc别名评估后回升使用双方的Mx壳命令和MX编译,即
MX编译RET your_alias RET
那么应该工作。
我的环境:Emacs的24.1(前测RC1),OSX 10.7.3
基思花的答案的作品,但可能会导致由于.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
上面用另一个函数名。
我觉得编译命令不通过shell来解释:它们是由emacs的中庸之道exec'ed(这意味着别名,shell函数和其他特定于shell的东西都没有考虑)。
尝试包你编译命令到一个shell脚本将源正确的环境。
您可以在表单一个完整的shell脚本做到这一点
#!/bin/bash
source "~/.bashrc"
my_command
或直接与形式的汇编指令的emacs
bash -c "source ~/.bashrc; my_command"
你可能喜欢EMAC的庆典完成:
https://github.com/szermatt/emacs-bash-completion
您可以使用您的别名选项卡中完成编制小缓冲区和外壳模式。
请享用 !
(他们谈论在这里的Bash自动完成在Emacs壳模式 )
见有没有办法让我的emacs认识我的bash别名和自定义功能,当我运行一个shell命令? 对于不运行所有你的.bashrc并且不产生这些错误信息的修复程序:
bash下不能设置终端处理组(-1):用于设备的bash不适当的ioctl:在此壳无作业控制