Emacs shell 出了问题

31

那些有趣的字符是转义序列('ESC' '[' '0' 'm'),它们可以作为提示给其他人,但我不会回答,因为我不知道具体的修复方法。 - paxdiablo
6个回答

44
您可以使用支持颜色的 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)

1
请注意,为了使其生效,“ansi-color-process-output”必须在“comint-output-filter-functions”中。 - updogliu

5
此外,您可以选择另一个Shell:M-x termM-x eshell。前者提供的界面比shell-mode更接近真正的终端仿真器(一旦启动它,您可以使用C-c C-j退出模式,并使用C-c C-k再次进入)。后者是用Elisp编写的Shell实现(您可以使用常见的Shell命令以及评估Lisp代码)。

我知道eshell,但我不喜欢它,因为它不够强大。 - linjunhalida
1
你是说一般用途的编程语言比shell不够强大吗?我认为你只是不知道如何使用它。 - jrockway
我并不是那个意思。这并不是关于任何语言与shell的比较,而是关于“shell-mode”及其替代方案。如果你想在Emacs中使用一个shell,我发现“term-mode”更为方便,它可以让buffer像真正的终端一样运作,或者你也可以像处理其他普通Emacs buffer一样来操作它。 - viam0Zah

3

扩展vatine的答案,你可以在你的.cshrc (.tcshrc/.bashrc)中添加一个检查环境变量INSIDE_EMACS的代码块。

例如(来自我的.tcshrc):

if ( $?INSIDE_EMACS ) then
   alias l 'ls --color=never'
endif

对于sh及其兼容版本,可以使用test "$INSIDE_EMACS" && alias l='ls --color=never',但您可能希望使用函数而不是别名。 - tripleee

2

M-x ansi-color-for-comint-mode-on


1
我在 ~/.bashrc 中包装了我的 alias ls='ls --color=auto':
case "$TERM" in
xterm*|rxvt*)
    if [ -x /usr/bin/dircolors ]; then
        alias ls='ls --color=auto'
        ...
    fi
    ;;
*)
    ;;
esac

这将禁用在emacs中使用color=auto


1
问题在于“l”试图给输出着色,而emacs并不支持。请尝试以下操作:
$ unalias l
$ alias l ls --color=never

如何在Emacs中仅更改它? - linjunhalida

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