我的.bashrc中有以下内容:
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
但是,当我从Emacs中调用shell
时,我收到以下消息:
bash:bind:警告:未启用行编辑
bash:bind:警告:未启用行编辑
结果我的提示搞砸了。
我如何检测(来自我的.bashrc),我的shell是从emacs调用的,还是不是从标准终端调用?
我的目标是将调用包装到bind
,以便它们只在适当的终端中执行。
答案 0 :(得分:2)
在Emacs 25和bash 4.2下,探测名为EMACS
的变量对我没有用。
但是,在Emacs内外查找shell环境的差异时,我发现了一个名为INSIDE_EMACS
的变量,仅在从Emacs运行时设置。
因此,对我有用的解决方案是:
if [[ ! -v INSIDE_EMACS ]]; then
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
fi
回显INSIDE_EMACS
会返回Emacs版本号。
答案 1 :(得分:1)
bash
禁用行编辑,因为它在其环境中看到名为EMACS
的变量。您可以使用相同的变量来有条件地创建这些绑定:
if [[ ! -v EMACS ]]; then
bind '"\e[A"':history-search-backward
bind '"\e[B"':history-search-forward
fi
答案 2 :(得分:0)
此代码段专门测试是否在bash中启用了行编辑。它在任何地方都可以使用,而不仅仅是在emacs shell中:
if [[ "$(set -o | grep 'emacs\|\bvi\b' | cut -f2 | tr '\n' ':')" != 'off:off:' ]]; then
echo "line editing is on"
fi
可能可以简化...