以下の関数を使う(consult-ripgrep-multi-file
)。通常のconsult-ripgrep
はあるディレクトリ以下の全ファイルが検索対象になるが、今回は「現在開いているバッファ(に対応するファイルたち)」に検索対象を限定したということ(串刺し検索)。
consult-line-multi
やhelm-swoop
の代替に相当する。
検索対象から外したい*scratch*
バッファや*Messages*
バッファ の除外にはido-ignore-buffers
で指定される正規表現を利用した。
;; perspective.el内の関数を参考にした (defun consult--make-ignore-buffer-rx () (defvar ido-ignore-buffers) (if ido-ignore-buffers (rx-to-string (append (list 'or) (mapcar (lambda (rx) `(regexp ,rx)) ido-ignore-buffers))) "$^")) (defun consult--get-curret-buffer-list () (let (buffer-mode-matches) (mapc (lambda (buf) (when (get-buffer buf) (with-current-buffer (get-buffer buf) (if (and (buffer-live-p buf) (not (string-match-p (consult--make-ignore-buffer-rx) (buffer-name buf)))) (add-to-list 'buffer-mode-matches (buffer-file-name buf)))))) (buffer-list)) buffer-mode-matches)) (defun consult-ripgrep-multi-files () "Call `consult-ripgrep' for the current buffers (multiple files)." (interactive) (let* ((consult-project-function (lambda (x) nil)) (files (mapconcat (lambda (x) (concat (shell-quote-argument x))) (consult--get-curret-buffer-list) " ")) (consult-ripgrep-args (concat "rg " "--null " "--line-buffered " "--color=never " "--line-number " "--smart-case " "--no-heading " "--max-columns=1000 " "--max-columns-preview " "--with-filename " files))) (consult-ripgrep)))