6

emacs24でキーボードマクロの実行が非常に遅いことに気づきました

たとえば、マクロを実行して、105615行のテキストファイルの各行の末尾に「0」を追加しようとしました。

C-x ( C-e TAB 0 C-n C-a C-x )

それから

C-u 105615 C-x e

完了するまでに約5分かかります

23から24にアップグレードすることと関係があるのだろうかと思ったのですが、以前は実行速度が非常に遅いことに気づきませんでした。

パフォーマンスを向上させるためにできることはありますか?

4

4 に答える 4

10

この答えは確かに常に当てはまるとは限りませんが、メジャーモードが問題のマクロに無関係である場合、キーボードマクロの実行速度を向上させる良い方法は、最初にバッファを基本モードに切り替えることです。メジャーモードとマイナーモードのオーバーヘッドを排除するため、劇的な速度の向上をもたらす可能性のある状況もあります。

メジャーモードを変更できない場合でも、その間、マイナーモードの一部を無効にすることで大きなメリットが得られる場合があります。

ただし、受け入れられた回答とコメントによると、検索と置換で十分な場合は、どのマクロよりもはるかに高速です。

于 2012-10-05T07:10:13.787 に答える
5

キーボードマクロには、2つの潜在的な速度低下の原因があります。

  • TAB:メジャーモードによっては、使用するインデントを把握するなど、多くの作業を実行する場合があります。
  • C-n:Emacs-23以降、これは次の表示行に移動しようとするため、以前よりも多くの作業が必要になる可能性があります(可変幅フォント、画像などの詳細を含む表示レンダリングを考慮する必要があります。 。)。また、ディスプレイよりも長い行ではC-n、次の表示行に移動しますが、同じ論理行にとどまり、後続c-aの行は同じ行の先頭に戻るため、使用には信頼性がありません(C-a表示行ではなく、論理行で機能するため)。もちろん、これはすべてとに依存しline-move-visualますvisual-line-mode

TABについては、それが何を意図しているのかわからないため(メジャーモードによって異なります)、適切な推奨事項はありませんが、より高速で信頼性の高いものにC-n C-a置き換えます。C-f

于 2012-10-04T12:58:16.467 に答える
4

はい、あなたは正しいです、それはとても遅いです。

この特定のタスクには、を使用できますreplace-regexp

M-x buffer-disable-undo
M-x replace-regexp $ <ENTER> C-q TAB 0 <ENTER>
于 2012-10-04T10:52:24.283 に答える
0

私が情報を読んだことは、これが視覚的な改行を無視し(したがってより効率的かもしれない)、行の先頭に移動する(保存する)ので(forward-line)、より良い代替品である可能性があることを示唆しています。C-n C-aC-a

于 2012-10-04T21:34:41.503 に答える