swiper 搜索结果不完整(相比 consult-line)

如题, 我同时用 swiper 和 consult-line 搜索, 结果 swiper 只有 7 个结果, consult-line 有 58 个结果. 可能的原因是什么? 我需要用 swiper 是因为想用 wgrep 进行批量编辑.

更新: 我发现问题在于 swiper 只搜索可见部分,隐藏部分(比如 org-mode 被折叠的内容)是不搜索的,这是哪个选项控制的行为?

swiper 行为受到 search-invisible 影响,如果设置为 t, 就能搜索到不可见内容,否则只会搜索可见内容。

说到 visibility 恰好这几天 我也遇到个类似的问题, 在vc-annotate 的buffer中 可以通过 v 来toggle 是否显示红框中的内容

但令我意外的是, 当我隐藏了这部分内容后,我尝试copy 正文的内容 却把这部分隐藏掉的内容也一起copy 出来了,

于是研究了下 怎么copy 时忽略隐藏的内容, 找到了 filter-buffer-substring-function 这个变量

  (defun vc-annotate-filter-visibile ()
    (require 'backtrace)
    (if (memq 'vc-annotate-annotation buffer-invisibility-spec)
        (setq-local filter-buffer-substring-function #'backtrace--filter-visible)
      (setq-local filter-buffer-substring-function #'buffer-substring--filter)))
  (advice-add 'vc-annotate-toggle-annotation-visibility :after #'vc-annotate-filter-visibile)

(define-advice meow-save (:around (orig-fun &rest args) copy-ignore-invisible)
  "copy ignore invisible"
  (let ((filter-buffer-substring-function filter-buffer-substring-function))
    (when current-prefix-arg
      (require 'backtrace)
      (message "copy ingore invible")
      (setq filter-buffer-substring-function #'backtrace--filter-visible))
    (apply orig-fun args)
    ))

1 个赞

wgrep 编辑的话,配合 embark 也是可以的。

1 个赞