2016-12-27 62 views
0

我是Emacs的新手,并试图使用eshell。不幸的是,当我在C文件中有错误,例如,我收到一些奇怪的错误输出(这仅仅是一个例子;特定的错误并不重要):emacs eshell的奇怪的错误输出(可能与zsh有关?)

^[[1m2-2.c:18:18: ^[[0m^[[0;1;31merror: ^[[0m^[[1mexpected ';' after expression^[[0m 
    c = getchar() 
^[[0;1;32m    ^
^[[0m^[[0;32m     ; 
^[[0m^[[1m2-2.c:21:5: ^[[0m^[[0;1;31merror: ^[[0m^[[1muse of undeclared identifier 's'^[[0m 
    s[i] = c; 
^[[0;1;32m ^
^[[0m2 errors generated. 

我不知道什么都这意味着。我使用的是zsh,而不是普通的bash,所以也许这跟它有关系?

如果我在普通终端中运行相同的文件,当然我仍然收到错误,但它是可读的。

回答

0

这是你的编译器试图很好,并使用颜色和粗体字体等格式化输出。奇怪的是,它应该可以很好地工作。尝试检查eshell-output-filter-functions变量:

C-h v eshell-output-filter-functions 

对我来说,变量的值是

(eshell-postoutput-scroll-to-bottom eshell-handle-control-codes eshell-handle-ansi-color eshell-watch-for-password-prompt) 

如果你错过一些从列表中的那些元素,尝试手动添加:

(add-to-list 'eshell-output-filter-functions 'eshell-handle-ansi-color) 
(add-to-list 'eshell-output-filter-functions 'eshell-handle-control-codes) 

如果您使用的是旧版本的Emacs,将不会有像eshell-handle-control-codes这样的功能,您将不得不自己定义它们。有关示例,请参见this wiki页面。

PS。这可能是无关的,但你应该尝试编译模式。 M-x compile

0

你看到的是ansi转义序列。大多数终端仿真器会将它们解释为不同的文本属性,如粗体,各种颜色等。

Emacs通常在处理这个问题时非常好,并且默认情况下应该有一个输出过滤器能够处理这些控制代码。无论是运行旧版本的emacs还是出于某种原因,eshell中的输出筛选器都已更改。

尝试使用-q开关运行emacs并打开eshell并运行编译。如果仍然看到控制字符,则需要尝试设置eshell输出过滤器函数以添加ansi色彩支持。如果您没有看到控制代码,那么init文件中的某些内容会删除或中断输出过滤器。

这是不太可能与zsh有关。实际上,您可能会发现emacs无论如何都在使用sh或bash。还要注意的是,emacs对构建程序有更复杂的支持。查看Emacs信息手册中的编译和测试程序。根据您的语言,您可以简化编译过程,使编译程序更具交互性,使用简单的方法触发重新编译并在编译器错误和代码之间跳转等。最初可能需要一点工作,特别是如果您的编译器或语言是如此的东西emacs不理解'开箱即用',但它非常值得。你甚至可以做一些非常时髦的事情,比如在本地编辑代码,并编译远程服务器上的更改等。

最后,如果你只是想开始,而不是花更多时间调整emacs,你可以看看编译器选项。大多数编译器将有一种方法来禁用控制代码。寻找诸如“关闭颜色”或错误消息格式等内容。