我在同事的机器上进行编程。他有一个我以前没用过的 emacs 版本 (23.1.1)。我的问题是,当我进入 shell 模式时,我的 bash 提示符如下所示:
^[]0;jay@socrates:~^G[jay@socrates]$
我已在我的 中PS1
设置为。它应该看起来像这样:'[\u@\h]\$ '
.bashrc
[jay@socrates]$
这是它在常规 shell 中的样子。我还检查了 PS1 在 emacs shell 中是否设置为正确的值,所以现在我没有主意了。我怎样才能让我的提示符看起来像我想要的那样?
我看到过一些建议使用term
或eshell
代替shell
。term
有与上述相同的提示问题,并且eshell
完全忽略了我的,PS1
所以这并没有真正的帮助。
答案1
您的 shell 正在尝试设置 XTerm(或其他控制台)的标题/标头。有多种方法可以完成此操作。
首先确保 PS1 确实是你认为的那样
echo $PS1 | less -E
这将告诉您提示符中是否有控制字符,less 会使它们看起来很奇怪。假设您的提示符与您所说的完全一样,那么它可能是 PROMPT_COMMAND 环境变量。您可以以同样的方式查看它...
echo $PROMPT_COMMAND | less -E
如果问题出在提示命令上,那么您可以取消设置它。无论哪种情况,这些变量都在某处设置,如果您不在 XTerm 中,则不应将其设置为更新 XTerm 标头!
您可以查看“标准”bashrc(/etc/bashrc)。您应该看到代码检查迭代 shell(是否设置了 PS1),然后检查 xterm(查看 $TERM 变量),并在那里执行与其他终端类型不同的操作。
我怀疑 bash 初始化中的某个地方有一个硬编码设置,这应该只在与 xterm 兼容的控制台程序上完成。阅读man bash
以找到您可以查找和浏览的文件的完整列表。
如果以上方法均失败,请尝试
printenv | less
看看你是否能在其中找到可疑的东西,然后追踪它被设置在哪里。如果你不能解决,请在这里发布。
答案2
我遇到了完全相同的问题,这是由于 PROMPT_COMMAND 造成的。我喜欢 xterm 标题。所以我在 ~/.emacs_bash 中添加了以下行
export PROMPT_COMMAND=""
答案3
这可能与 emacs shell 和常规 shell 的终端类型有关。检查TERM
两个 shell 中的环境变量设置为何。如果它们不同,那么您应该能够更改 emacs shell 终端类型或在 中使用不同的 PS1 定义来定义 emacs 终端类型.bashrc
。
您也可以尝试M-x ansi-term
(ansi-color-for-comint-mode-on
如果您有颜色提示)。
答案4
Daniel Poe 在 stackoverflow 网站上对此进行了很好的回答。
您可以使用支持颜色的 AnsiTerm,或者可以为普通 shell 启用 AnsiColor:
(autoload 'ansi-color-for-comint-mode-on "ansi-color" nil t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)