Emacs 24键盘宏运行缓慢

bph*_*bph 5 emacs emacs23 emacs24

我注意到在emacs 24中键盘宏运行得非常慢

例如 - 我只是尝试运行一个宏来在105615行文本文件中的每行末尾附加一个'0'

C-x ( C-e TAB 0 C-n C-a C-x )
Run Code Online (Sandbox Code Playgroud)

然后

C-u 105615 C-x e
Run Code Online (Sandbox Code Playgroud)

大约需要5分钟才能完成

我从来没有注意到它们之前的运行速度如此之慢,想知道它是否与23升级到24级有什么关系?

我能做些什么来提高性能吗?

phi*_*ils 9

这个答案肯定不会总是适用,但如果主要模式碰巧与所讨论的宏无关,那么提高键盘宏执行速度的一个好方法是首先将缓冲区切换到基本模式.在某些情况下,可以提供显着的速度提升,因为您消除了主要和次要模式的开销.

如果无法更改主要模式,则在持续时间内禁用某些次要模式仍然可以获得显着的好处.

但是,根据接受的答案和评论,如果搜索和替换就足够了,那将永远比任何宏快得多.


Ste*_*fan 5

在键盘宏中,我看到两个潜在的缓慢来源:

  • TAB:根据主要模式,这可能会执行大量工作,例如找出要使用的缩进.
  • C-n:自Emacs-23以来,它试图移动到下一个显示行,因此它需要比以前更多的工作(它必须考虑显示器渲染,具有诸如可变宽度字体,图像等的细节. ).此外,它对您的使用来说也不可靠,因为在比显示器长的行上,它将C-n移动到下一个显示行但保持在同一逻辑行上,这样后续c-a将只会移回到同一行的开头(因为C-a在逻辑线上工作,而不是显示线).当然,所有这一切都取决于line-move-visualvisual-line-mode.

对于TAB,我没有一个很好的建议,因为我不知道它是打算做(取决于主要模式),但我会代替C-n C-aC-f这将是更快,更可靠.


Ole*_*liv 4

是的,你没有看错,就是速度太慢了。

对于此特定任务,您可以使用replace-regexp.

M-x buffer-disable-undo
M-x replace-regexp $ <ENTER> C-q TAB 0 <ENTER>
Run Code Online (Sandbox Code Playgroud)

  • 我会这么说。我使用宏来执行它们打瞌睡或数百次。数十万次你应该寻找另一种解决方案。 (3认同)