Emacs冻结外壳程序/ REPL输出的长行换行


3

我对Emacs一直存在一个问题,即它不能在RELP或Shell模式下处理长行包装的打印输出。Emacs进程开始在完整的CPU上运行,并且几乎完全没有响应(有时它会开始处理用户命令,然后再次冻结)。这意味着我必须终止该进程并重新启动Emacs。显然,这是一个主要的稳定性和可用性问题,是普通终端可以轻松处理的问题

我没有使用任何深奥的换行扩展名,仅toggle-truncate-lines启用了默认设置(shell或REPL中需要换行)。Emacs版本是24.3.1 (x86_64-pc-linux-gnu, GTK+ Version 3.4.2)

关于此问题的Google搜索不会返回任何有用或类似的内容。没有其他人遇到过这些问题吗?任何解决方案或解决方法将不胜感激。


这些“长线”多长时间?Emacs不擅长处理长行。
Stefan 2014年

1
@Stefan的“长行”表示类似以惰性顺序打印几十万个大小合适的JSON对象,或者第20万个斐波那契数的东西。一个好的老者^C在裸露的终端上不会有任何问题。
Daniel Dinnyes 2014年

2
这是一个已知的问题:这些行对于Emacs来说太长了。有多种方法可以使它们可用,但也有多种方法使Emacs代码不能长时间运行,因此使它们可接受地工作通常涉及一些调整。
Stefan 2014年

1
@Stefan Emacs经常用作shell或REPL环境,因此我将此问题归类为严重问题。我找到了这个错误报告,还有一个。后来声称该问题仅在22至24版本中才存在于21版本中,这可能表明它不是基本缺陷。知道绕行和缓冲区的内部细节,找到根本原因,并希望能解决此问题将是很棒的。
Daniel Dinnyes 2014年

@Stefan您是否希望同时发布一些解决方法作为答案?
Daniel Dinnyes 2014年

Answers:


1

Emacs的各个部分在“每次行都不太长”的假设下“一次一行”工作。如此长的线条(如您所描述的)往往会使Emacs屈膝。

经常有办法洛根。减少痛苦,但是这一切都取决于你的案件的具体情况,所以没有更多的细节到大你使用(例如)模式,做最明显的第一件事就是关掉font-lock-mode,因为它逐行重新突出显示文本(因此,在行末添加4KB的输出之后,它会重新处理整行以突出显示它,这又意味着重新显示代码然后必须将整行重新处理为查看突出显示的哪一部分可能已更改)。


0

尝试在旧版本中使用Visual Line模式或过时的Long Lines模式,应该会大大减少CPU负载。

https://www.emacswiki.org/emacs/VisualLineMode


2
欢迎来到超级用户!在此问答网站上,我们试图为人们发布的问题提供良好的答案。其中一部分是将答案包含在您的帖子中,而不是简单地提供指向可能回答该问题的另一页的链接。请编辑您的答案,以包含所发布问题的实际解决方案。
cascer1'6
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.