1

現在の位置ではなく、バッファー全体で query-replace-regexp を使用する傾向があるため、定期的にシーケンス C-< (バッファーの開始)、次に Cr (query-replace-repexp) を使用します。

これを行う CSr (CR) にバインドされた別の関数を作成したいと思います。次のように単純にすべてをラップすると、次のようになると思いました。

(defun query-replace-regexp-whole-buffer ()
  "query-replace-regexp from the beginning of the buffer."
  (interactive)
  (beginning-of-buffer)
  (query-replace-regexp))

残念ながら、いくつかのエラーが発生していますが、これで十分です。

query-replace-regexp-whole-buffer: Wrong number of arguments: #[(regexp to-string &optional delimited start end) "Å Æ
Ç&  " [regexp to-string delimited start end perform-replace t nil] 10 1940879 (let ((common (query-replace-read-args (concat "Query replace" (if current-prefix-arg " word" "") " regexp" (if (and transient-mark-mode mark-active) " in region" "")) t))) (list (nth 0 common) (nth 1 common) (nth 2 common) (if (and transient-mark-mode mark-active) (region-beginning)) (if (and transient-mark-mode mark-active) (region-end))))], 0

私は自分が間違っていることを本当に見ることができません。誰かが助けてくれることを願っています。

4

2 に答える 2

3

Lisp から呼び出された場合、query-replace-regexp正規表現と意図した置換が引数として渡されることを期待します。インタラクティブに呼び出されたときに尋ねられる質問をエミュレートしたい場合は、次を使用する必要がありますcall-interactively

(defun query-replace-regexp-whole-buffer ()
  "query-replace-regexp from the beginning of the buffer."
  (interactive)
  (goto-char (point-min))
  (call-interactively 'query-replace-regexp))

beginning-of-bufferまた、Lisp コードから呼び出してはならないことに注意してください。マークを押したり、メッセージを出力したりするなど、不要な作業を行います。

于 2013-08-10T12:28:39.647 に答える
2

引数を自分で読み取って ... に渡す必要がありますquery-replace-regexp。これはインタラクティブを拡張することで実行できるため、関数は次のようになります。

(defun query-replace-regexp-whole-buffer (regex to-string)
  "query-replace-regexp from the beginning of the buffer."
  (interactive "sRegex to search: \nsString to replace: ")
  (save-excursion
     (goto-char (point-min))
     (query-replace-regexp regex to-string)))
于 2013-08-10T12:31:35.567 に答える