emacs shell缓冲区中的奇怪字符

emacs shell缓冲区中的奇怪字符

我的 emacs 在 shell 缓冲区中列出了奇怪的转义字符:

me@ubuntu:~//configuration.template/hooks$ 
me@ubuntu:~//configuration.template/hooks$ ls
[0m[01;32mpost-commit[0m  [01;32mpost-commit~[0m  [01;32mpost-update[0m  
[01;32mpost-update~[0m  [01;32mpre-commit[0m  [01;32mpre-commit~[0m  [01;32mupdate[0m      update~

有人知道我该如何解决这个问题吗?

答案1

这些字符是颜色变化的控制序列。这些序列在 emacs 缓冲区中不起作用*shell*:相反,它们几乎直接显示。

您应该更改 shell 启动文件(可能是~/.bashrc),以便ls仅在支持颜色的终端上使用颜色。实际上,这可能意味着除了dumb(这是缓冲区中提供的终端类型*shell*)之外的每种终端类型。终端类型在环境变量中指示TERM,因此您可以执行以下操作:

if [ "$TERM" != "dumb" ]; then
  alias ls='ls --color=auto'
fi

答案2

“ansi-color-for-comint-mode” 处理 shell 中的某些颜色。它并不完美,但很有用。要打开它,请转到 shell 并执行[M-x]ansi-color-for-comint-mode-on[RET]

-约翰

答案3

相关提示:如果您在使用 emacs grep 命令时遇到此问题,请在命令提示符下输入以下命令:

grep --color=NEVER -nH -e "searchstring" *

相关内容