3

キーボード マクロの使い方をもっと学ぼうとしていますが、これにアプローチする方法がわかりませんでした。

リージョンを選択してから、そのリージョンで 2 つのクエリ置換を実行する必要があります。リージョンは毎回異なりますが、クエリの置換は同じです。

問題は、最初のクエリ置換 (またはreplace-string) がアクティブな領域を削除するために発生します。を使用C-u C-SPCすると、開始マークは保存されているように見えますが、ポイントは保存されていないため、アクティブな領域は 2 回目の置換操作に使用できません。

副作用としてアクティブな領域を削除する 2 つの操作をキーボード マクロの同じ領域に適用するにはどうすればよいですか?

4

2 に答える 2

8

説明されているようなタスクを実行していないため、最も迅速な解決策をアドバイスできるかどうかわからないことがよくありますが、ここでは少なくとも 2 つの方法でうまくいきます。

オプション1

このオプションには、クエリ置換を実行する前、または領域で実行したいことを実行する前に、ナローイングを使用してバッファをアクティブな領域に縮小することが含まれます。ワークフローは次のようになります。

  • ... リージョンをアクティブにしてキーボード マクロの記録を開始します
  • M-x狭い地域
  • M-<... (beginning-of-buffer)などを介して最初に戻って楽しく実行したい操作を実行します
  • M-x広げる
  • ... キーボード マクロの記録を停止します

ハイライトされた領域に問題なく適用できるはずです。

C-x n nところで:narrow-to-regionとwidenには(narrow-to-region)と(widen)のデフォルトバインディングがある C-x n wため、キーバインディングを変更していない場合はどちらでも使用できます

オプション 2

このオプションには、領域を「破棄」する前にレジスタを使用して領域の位置を格納することが含まれます。実際のワークフローは次のようになります

  • ... リージョンをアクティブにしてキーボード マクロの記録を開始します
  • C-x r SPC1 (ポイントツーレジスター)
  • C-x C-x (交換ポイントとマーク)
  • C-x r SPC2 (ポイントツーレジスター)
  • ... 領域を「破棄」する操作を実行します
  • C-x r j2 (登録にジャンプ)
  • C-SPC
  • C-x r j1 (登録にジャンプ)
  • ...これでリージョンが再び戻ってくるはずなので、リージョンを「破壊」しない他の操作を喜んで適用してください
  • ... キーボード マクロの記録を停止します
于 2013-03-01T20:55:00.147 に答える
0

あなたが見逃しているのはexchange-point-and-mark C-x C-x. これにより、マークが再び有効になります。

于 2013-03-02T01:24:32.547 に答える