-->

Emacs的编译方式将不会看到的bash别名(Emacs compilation mode won&

2019-09-17 21:53发布

Emacs中的Mx编译没有看到.bashrc中设置的任何别名。 如果我使用MX外壳然后键入别名,它是好的。 我试图从/ etc / profile文件采购.bashrc中,从〜/ .profile中,〜/ BASH_ENV,任何我能想到的都无济于事。

我在Emacs的23和Ubuntu 11.我用的/ usr / bin中/ emacs的%F,从桌面按钮启动Emacs。

Answer 1:

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



Answer 2:

基思花的答案的作品,但可能会导致由于.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上面用另一个函数名。



Answer 3:

我觉得编译命令不通过shell来解释:它们是由emacs的中庸之道exec'ed(这意味着别名,shell函数和其他特定于shell的东西都没有考虑)。

尝试包你编译命令到一个shell脚本将源正确的环境。

您可以在表单一个完整的shell脚本做到这一点

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

或直接与形式的汇编指令的emacs

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



Answer 4:

你可能喜欢EMAC的庆典完成:

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

您可以使用您的别名选项卡中完成编制小缓冲区和外壳模式。

请享用 !

(他们谈论在这里的Bash自动完成在Emacs壳模式 )



Answer 5:

见有没有办法让我的emacs认识我的bash别名和自定义功能,当我运行一个shell命令? 对于不运行所有你的.bashrc并且不产生这些错误信息的修复程序:

bash下不能设置终端处理组(-1):用于设备的bash不适当的ioctl:在此壳无作业控制



文章来源: Emacs compilation mode won't see bash alias
标签: emacs emacs23