如何让Emacs的Shell模式显示我的颜色(或忽略ASCII码)而不是打印出来?

20
该问题的症状看起来像“[0m [27m [24m [J [34;1]”,在终端上会被翻译成蓝色。

关于我的配置,再提供一些信息:zsh + GNU Emacs。 - Setjmp
4个回答

31

我在我的.emacs文件中有以下内容:

(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

在最近的Emacs版本中,autoload不再是必需的(它已经默认自动加载了)。 - cjm
1
这确实有所帮助(蓝色出现了),但是缓冲区中仍然出现了一些ASCII控制码。毫无疑问,还有一个或多个细节需要与此解决方案结合起来。 - Setjmp
我认为这个回答得到了赞同,反映它在stackoverflow用户中工作在一些常见平台上。但是也请注意接受的答案。 - Setjmp
目前在bash中对我有效。 - nroose

2
当前给我带来一些成功的解决方案是将shell函数重新定义为ansi终端:
;; shell-mode
(defun sh ()
  (interactive)
  (ansi-term "/bin/zsh"))

1
这是一个好主意。它还解决了shell-mode与more/less和man等命令的不兼容问题。 - Chris Conway
3
使用阴影命令 "real" shell command。 直接使用 term 或 ansi-term,而不是隐藏纯 shell 模式。 - remvee

1
对于“忽略”选项,可以在您的~/.emacs_{bash,tsch,whatever-your-shell-is-called}文件中放置类似于“alias ls=ls”或“unset LS_COLORS”的内容。该文件将在由Emacs创建的所有下属shell中执行。

Emacs将文件~/.emacs_shellname的内容作为输入发送给新的shell(如果存在),其中shellname是加载shell的文件名。例如,如果您使用bash,则发送到它的文件是~/.emacs_bash。如果找不到此文件,则Emacs尝试回退到~/.emacs.d/init_shellname.sh


0
以下内容可在您的 .bash_profile 或 .bashrc 中使用。
case $TERM in
xterm-color)
export PS1='\[\e]0;\W\007\]\[\e[34;1m\]\W\[\e[0m\]\$ '
;;
*)
export PS1='\W\$ '
;;
esac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接