Emacs编译模式赢得';看不到bash别名
Emacs M-x compile在.bashrc中未看到任何别名集。如果我使用M-x shell,然后键入别名,就可以了。我试着从/etc/profile、从~/.profile、~/bash_env中寻找.bashrc,我能想到的任何东西都没有用Emacs编译模式赢得';看不到bash别名,emacs,emacs23,Emacs,Emacs23,Emacs M-x compile在.bashrc中未看到任何别名集。如果我使用M-x shell,然后键入别名,就可以了。我试着从/etc/profile、从~/.profile、~/bash_env中寻找.bashrc,我能想到的任何东西都没有用 我在Emacs23和Ubuntu11上。我使用/usr/bin/emacs%F从桌面按钮启动emacs。我认为编译命令不是通过shell解释的:它们只是由emacs执行(这意味着别名、shell函数和其他特定于shell的内容不被考虑) 尝试将编译
我在Emacs23和Ubuntu11上。我使用/usr/bin/emacs%F从桌面按钮启动emacs。我认为编译命令不是通过shell解释的:它们只是由emacs执行(这意味着别名、shell函数和其他特定于shell的内容不被考虑) 尝试将编译命令包装到一个shell脚本中,该脚本将为正确的环境提供源代码 您可以使用表单中的完整shell脚本来完成此操作
#/bin/bash
来源“~/.bashrc”
我的命令
或者直接在emacs中使用以下形式的编译命令
bash-c“source~/.bashrc;my_命令”
Emacs从父进程继承其环境。您是如何从命令行或其他方式调用Emacs的
如果您:
M-x编译RET C-a C-k bash-i-C您的别名RET
将bash作为交互式shell(-i选项)调用应该读取.bashrc别名
Edit:我认为M-xshell命令和M-xcompile都是通过调用过程在低级shell中执行命令的。在.emacs中尝试以下操作(或仅评估):
(setq shell文件名“bash”)
(setq外壳命令开关“-ic”)
我注意到,在对上述内容求值之后,.bashrc别名将被M-xshell命令和M-xcompile使用,即
M-x编译RET您的\u别名RET
那就行了
我的环境:Emacs 24.1(预测试rc1),OSX 10.7.3您可能喜欢emac的bash完成: 您将能够在编译微缓冲区和shell模式中使用别名的制表符补全 享受吧
(他们在这里谈论这个问题)基思·弗劳尔的答案是有效的,但可能会因为.bashrc在其他地方被不必要地加载而导致一些速度减慢(可能有很多次,我的计算机并没有完全断电,但emacs在尝试使用autocomplete.el时几乎无法使用) 另一种方法是仅针对需要的功能本地修改
shell命令开关
。这可以通过使用emacs的“advice”特性来创建这些函数的包装器来实现。下面是一个修改编译的示例:
;; 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(例如,我还需要为重新编译
定义相同的建议),只需复制上面的内容,并用另一个函数名替换上面的compile
。有关不运行所有.bashrc且不创建以下错误消息的修复程序,请参阅:
bash:无法设置终端进程组(-1):设备的ioctl不正确
bash:此shell中没有作业控制
Francesco,我在compile命令上尝试了bash-c,结果是一样的:bash:[我的别名]:命令没有发现bash-c部分的必要;只需在compile命令变量中的任何其他命令之前添加“source/home/$USERNAME/.bashrc&&”。我自己也在使用它,它工作得很好。我有一个别名叫run\u csv。我按照你的要求做了,source/home/[ME]/.bashrc&&run\u csv。结果是/bin/bash:run\u csv:command未找到您是否尝试过编写shell脚本?在我的例子中(比你的稍微复杂一点),它工作得很好。当我将这些shell脚本放在一个已知的目录中,并将它们的路径添加到$path时,我将遇到类似的问题,\C-x\C将看不到它们。但修复路径问题可能比修复别名问题更容易。所以,如果我看不到其他可行的答案,我可能会尝试一下。这是相当恼人的Emacs仍然有这个问题。警告:对我来说,这有使autocomplete.el运行极其缓慢的副作用。大概它是在某处重复创建bash shell并每次运行我的整个.bashrc。我可能会尝试编写一个围绕编译的包装器,临时将shell命令开关更改为“-ic”。(关于shell命令开关“-ic”
)不,它不适用于shell命令。Ubuntu 16.04,emacs 24.5。打印出错误:“bash:无法设置终端进程组(-1):设备的ioctl不正确。bash:此shell中没有作业控制”。如果我从shell命令开关
中删除-I
选项,则不会加载定义了别名的.bashrc
。看见建议“Emacs从父进程继承其环境”看起来不错,可以使用export
s,但子shell中的别名不起作用!看见