我的 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" *