最初に戻らずにEmacsでバッファ全体の文字列を検索/置換する方法は?


9

最初にバッファトップに戻ってから検索/クエリを行うのは本当に不便です。まあ、検索の場合、C-sもう一度押すだけで折り返すことができるのは比較的簡単ですが、クエリ/置換の場合は面倒です。

両方の操作でバッファトップに戻らずにそれを行う簡単なハックはありますか?

回答:


6

ええ、あなたはできないように見えます(ここから、私の鉱山を強調):

ポイントの後の「foo」のすべてのインスタンスを「bar」に置き換えるには、コマンドMx replace-stringを2つの引数fooandで使用しbarます。置換はポイントの後でのみ行われるため、バッファ全体をカバーする場合は、最初に最初に移動する必要があります

個人的には、バッファを2つに分割し(C-x 2)、一番上(C-Home)に移動してからreplaceコマンドを実行し、元のペインに切り替えて(C-x o)、2番目のペインを削除しC-x 0ます()。それをより簡単にするトリックがあるかどうかわからない。


4
(defun my-replace-string ()
  (interactive)
  (save-excursion
    (beginning-of-buffer)
    (call-interactively 'replace-string)))

うまく動作しますが、リージョン/選択でクエリ置換を台無しにします(常にバッファ全体で行います)。
Alex


0

Emacs 24+での作業に以下を使用しました:

;; query replace all from buffer start
(fset 'my-query-replace-all 'query-replace)
(advice-add 'my-query-replace-all
            :around
            #'(lambda(oldfun &rest args)
               "Query replace the whole buffer."
               ;; set start pos
               (unless (nth 3 args)
                 (setf (nth 3 args)
                       (if (region-active-p)
                           (region-beginning)
                         (point-min))))
               (unless (nth 4 args)
                 (setf (nth 4 args)
                       (if (region-active-p)
                           (region-end)
                         (point-max))))
               (apply oldfun args)))
(global-set-key "\C-cr" 'my-query-replace-all)

領域置換の大文字と小文字、および渡されたすべてのSTARTおよびEND引数について。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.