web-dev-qa-db-ja.com

Emacsでテキストファイルの最後までマクロを実行する

ここに示すように、いくつかのサンプルコンテンツを含むテキストファイルがあります。

Sno = 1p
Sno = 2p
Sno = 3p

私が欲しいのは、各列からpを削除することです。この意図で私はマクロを書きます:

M-x //go to buffer
C-x (//start the macro
C-s = // search for equalto sign
RET C-f C-f // reach to te alphabet 'p'
DEL // Delete
C-n  C-x )//go to new line and Close the macro definition 
C-x e

eを2回押すとpが削除されますが、ファイルの最後まで同じことをしたい場合、どうすればeを押し続けることができません。私が20000のそのような行を持っているならば。何をすべきか?

これはサンプルの例であり、実際のケースではないため、正規表現を提案しないでください。 elispを提案しないでください。emacsのshortcutfを覚えていても問題ありません。

37
whatf

M-0 C-x eエラーが発生するまで最後のマクロを繰り返します(最後の行の後、C-s =またはC-nはエラーになります)。

迷惑なビープ音が聞こえる場合があります。

72
Nietzche-jou

「apply-macro-to-region-lines」関数を使用して、最後に定義されたキーボードマクロをリージョン内のすべてのラインに適用できます。したがって、実行する手順は次のとおりです。

  1. キーボードマクロを定義します(これはすでに行っていますが、別のマクロを追加しました C-f 3行目まで):

    C-x (C-s =RET C-f C-f C-fDELC-n C-x )

  2. 「mark-whole-buffer」コマンドでバッファ全体を選択します(デフォルトでは、にバインドされています) C-x h)。または、特定の行数だけを変更する場合は、変更する行を選択するだけです。

  3. 「apply-macro-to-region-lines」関数を実行します(デフォルトでは、 C-x C-k r)。

すべてのpが削除されます。

17
zev

私は通常、マクロをM-x name-last-kbd-macroで定義した後に名前を付けるので、M-xで簡単に呼び出すことができます。そして、それを数字の接頭辞で呼びます。例えば。

M-1000 M-x macroname

私が作業しているファイルには通常、マクロが機能できる1000の場所がないため、1000は十分な大きさであり、ファイルの最後で自動的に停止します。たとえば、ファイルが大きい場合はプレフィックスとして1000000を使用できますが、それでも十分でない場合は、プレフィックスとして1000000を使用して再度呼び出すことができます。

1
Tom