如何在emacs shell模式下修复提示?


13

我正在同事的机器上做一些编程。他使用的emacs版本(23.1.1)我以前从未使用过。我的问题是,当我进入shell模式时,我的bash提示符如下所示:

^[]0;jay@socrates:~^G[jay@socrates]$ 

我已经PS1准备好'[\u@\h]\$ '.bashrc。应该看起来像这样:

[jay@socrates]$

这就是常规外壳中的外观。我还检查了emacs shell中PS1是否设置为正确的值,所以现在我没有主意了。如何获得我的提示以符合我的期望?

我看到了一些使用termeshell代替的建议shellterm具有与上述相同的提示问题,并且eshell完全忽略了我,PS1因此并没有真正的帮助。

Answers:


13

您的外壳程序正在尝试设置XTerm(或其他控制台)的标题/标题。可以通过多种方式完成此操作。

首先确保PS1确实是您所想的

echo $PS1 | less -E

这将告诉您提示中是否包含控制字符,少了将使它们看起来很有趣。假设您的提示与您所说的完全相同,则可能是PROMPT_COMMAND环境变量。您可以用相同的方式看...

echo $PROMPT_COMMAND | less -E

如果提示命令有问题,则可以将其取消设置。无论哪种情况,这些变量都将在某个地方设置,并且如果您不在XTerm中,则不应将其设置为更新XTerm标头!

您可以查看“标准” bashrc(/ etc / bashrc)。您应该看到检查迭代shell(已设置PS1),然后检查xterm(查看$ TERM变量)的代码,该代码与其他终端类型的操作有所不同。

我怀疑bash初始化中的某个地方是硬编码的设置,只能在与xterm兼容的控制台程序上进行。阅读man bash以查找您可以查找和浏览的文件的总列表。

如果以上所有方法均失败,请尝试

printenv | less

并查看您是否可以在其中找到可疑的东西,然后追踪其设置位置。如果无法解决,请在此处发布。


1
PROMPT_COMMAND是问题所在。我不确定在哪里设置,但是我在〜/ .bashrc中添加了一行以取消设置,并且可以正常工作。谢谢!
杰·康罗德

PROMPT_COMMAND也杀死了我。我正在使用MobaXTerm,它有一个特别复杂的bash提示,它是PS1和PROMPT_COMMAND的组合。
史蒂夫·布罗伯格

5

我遇到了完全相同的问题,这是由于PROMPT_COMMAND。我喜欢xterm标题。所以我在〜/ .emacs_bash中添加了以下行

export PROMPT_COMMAND=""

2

这可能与emacs shell与常规shell的终端类型有关。检查TERM两个外壳程序中将环境变量设置为什么。如果它们不同,那么您应该能够更改emacs shell终端类型或在中为emacs终端类型使用不同的PS1定义.bashrc

您也可以尝试M-x ansi-termansi-color-for-comint-mode-on如果有颜色提示)。


1
ansi彩色转换模式帮助了我!
User1

1

这在stackoverflow站点上得到了很好的回答。Daniel Poe着。

这是他的答案。

您可以使用支持颜色的AnsiTerm,也可以为普通外壳启用AnsiColor:

(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.