2016-09-26 12 views
1

時々、コード内の変数名をfooからbarに変更する必要があります。私はquery-replace-regexpを使ってやっています。それから私は他の何かをするだろうし、私は自分の決定を後悔し、barからfooに戻したいと思うかもしれない。 query-replace-regexpを実行すると、デフォルトでは最後に行われた置換が(default foo -> bar)と表示されます。私の質問は、Emacsにデフォルトの逆順を伝える簡単な方法がありますか?それ以外の場合は、もう一度入力する必要があります。Emacs query-replace-regexpデフォルトの逆順

編集:デフォルトの置換えは、最後の置換えである(default foo -> bar)です。私が今欲しいのは、逆です:barfooです。基本的に、私は交換を取り消したい。他の多くの編集の後で非常に長い歴史があるかもしれないので、いつもアンドゥ機能を使うことはできません。

+0

これを行うには、言語モードで「リファクタ変数名」機能を使用する必要があります。 –

+2

「全体をもう一度入力する」必要はありません。コマンド履歴を使用して、前の2つのオプションを逆の順序で1つずつ選択します。 – phils

+1

また、 'query-replace-regexp'の方がクエリと置き換えの文字列として以前の' query-replace'よりも意味をなさないでしょう。 。 –

答えて

1

これはおそらく恐ろしい方法ですが、次のような関数を作成して別のキーにバインドすることができます。この特定のケースではうまくいくようですが、これが扱うことのできない他のもの(プレフィックス引数など)がたくさんあります。

(defun so-undo-last-query-replace() 
    (interactive) 
    (let ((query-replace-defaults (list (cons (cdar query-replace-defaults) 
              (caar query-replace-defaults))))) 
    (call-interactively 'query-replace))) 
1

あなたがquery-replaceを使用し、M-pfoo -> barでデフォルトを取得します。つまり、ミニバッファにはfoo -> barが置かれます。

ミニバッファでそのテキストを編集できます。特に、M-b(またはC-M-b)を使用して単語(またはsexp)を後ろに移動し、bar -> fooを与えて、M-t(またはC-M-t)を使用して2つの単語(セックス)を転置することができます。

これまでに使用した入力やデフォルトの入力を取得したら、ミニキーボードので編集できます。

が通常、Emacsで、それはデフォルト値を取得することM-nである。この場合、それはM-pである(収差である(私見))。)


Wrtの以前に入力された入力にアクセス:M-pを繰り返すことでサイクルを繰り返すことができますが、M-rを使用して直接検索することもできます。取得したい入力が最近のものではない場合、M-rはサイクリングより速くなります。