Swiper的候选项高亮看不清楚

Swiper的候选项似乎对于org-mode有特殊的处理,在org-mode下的搜索效果如图:

可以看到,在下面的candidate里面,当前的选项完全看不清,不过这个问题只在org-mode下的src-block会有,别的位置的搜索很正常:

image

虽然也不是非常的清晰,但background起码不同,还能比较好区分。

该怎样配置ivy/swiper的候选项字体,使得背景相对明显一些呢?

(custom-theme-set-faces
 'user
 '(ivy-current-match ((t :inherit lazy-highlight))))

感谢,这确实是有效的,但是我觉得主要的原因似乎是在candidate里面会继承原文本周围的样式,比如src block就是带个底色的(在我这里是带点淡淡的白色),能不能把这个继承去掉呢?

(defun swiper-remove-org-hl (fn &rest args)
  "Remove syntax highlighting in `org-mode' for `swiper'."
  (let ((lines (apply fn args)))
    (when (derived-mode-p 'org-mode)
      (dolist (line lines)
        (remove-text-properties 0 (length line) '(face) line)))
    lines))

(advice-add 'swiper--candidates :around #'swiper-remove-org-hl)

不建议这样。 我自己是不用 ivy 和 swiper 的,写别的包测试兼容性才没有删。建议你可以试试 vertico + consult (consult-line 代替 swiper)。 我觉得它的设置比较合理,是一整行高亮的,看起来不会觉得很累。

2 个赞

感谢!确实,整行的高亮看起来舒服得多。主要是关于ivy和swiper已经积攒了不少相关配置,切换起来感觉会比较费劲……

vertico+consult相比ivy+swiper的优势主要在哪里呢?

换个主题也许最简单,只是配色问题,ivy也能做到整行显示

这个问题 selectrum/straight 的作者讲的比较好,你直接看他怎么说的吧。

他也比较了 selectrum 和 vertico, 我用了 selectrum 一段时间,发现我并不需要它里面 的类似 avy 的快速定位和横向布局,所以我就换成了 vertico.

vertico / consult / marginalia / embark 这一套的好处是,这几个包是互相独立的,没有相互依赖的关系,配置起来很轻松。由于本质上他们都是在拓展内置的 minibuffer / completing-read 本身的能力,所以他们之间的配合很融洽。我觉得 doom 的默认补全框架换成了 vertico 也足以说明一些问题吧。

如果没有 vertico 的话,我估计也会用 ivy, 但我是从 27 开始用 Emacs 的,在我的视野里最好的选择一开始就是 vertico。

说回正题,确实如楼上大佬说的,你也可以把 ivy 设置成整行高亮, 你可以抄抄他的配置。