クエリ置換の代わりに行をコメント化するクエリ検索を実行する方法を見つけたいと思っています。つまり、インタラクティブなクエリ検索を実行し、もし私が「はい」と答えた場合は、一致している行をコメント化します。
このコマンドは存在しますか?そうでない場合、どのように書けばよいですか?私はelispを使い始めたばかりで、自分の関数をプログラムする方法がわかりません。
クエリ置換の代わりに行をコメント化するクエリ検索を実行する方法を見つけたいと思っています。つまり、インタラクティブなクエリ検索を実行し、もし私が「はい」と答えた場合は、一致している行をコメント化します。
このコマンドは存在しますか?そうでない場合、どのように書けばよいですか?私はelispを使い始めたばかりで、自分の関数をプログラムする方法がわかりません。
回答:
(defun my-comment-matching-line ()
(interactive "*")
(call-interactively 'search-forward)
(beginning-of-line)
;; don't comment the region maybe
(push-mark)
(comment-line 1))
コメント行が利用できない場合、ここに最近のnewcomment.elから:
(defun comment-line (n)
"Comment or uncomment current line and leave point after it.
With positive prefix, apply to N lines including current one.
With negative prefix, apply to -N lines above. Also, further
consecutive invocations of this command will inherit the negative
argument.
If region is active, comment lines in active region instead.
Unlike `comment-dwim', this always comments whole lines."
(interactive "p")
(if (use-region-p)
(comment-or-uncomment-region
(save-excursion
(goto-char (region-beginning))
(line-beginning-position))
(save-excursion
(goto-char (region-end))
(line-end-position)))
(when (and (eq last-command 'comment-line-backward)
(natnump n))
(setq n (- n)))
(let ((range
(list (line-beginning-position)
(goto-char (line-end-position n)))))
(comment-or-uncomment-region
(apply #'min range)
(apply #'max range)))
(forward-line 1)
(back-to-indentation)
(unless (natnump n) (setq this-command 'comment-line-backward))))
query-replace-regexp
ます。この行を、コメント開始のプレフィックスが付いた行に置き換えます。