如何增强swiper,能够自动搜索光标所处下的字符串,而不用手动输入?

各位大佬,小弟初入spacemacs, 请问如何增强swiper,能够自动搜索光标所处下的字符串,而不用手动输入?因为这个功能我十分需要, 小弟不熟elisp语言,不知道该如何写一个函数,请各位大佬赐教,谢谢

(defun nasy/swiper-at-point (sym)
  "Use `swiper' to search for the `sym' at point."
  (interactive (list (thing-at-point 'symbol)))
  (swiper sym))

然后重新 bind 一下 key 就好(当然最后的 swiper 乃也可以用 swiper-isearch

1 个赞

谢谢大佬,我周一试试,非常感谢

感谢,这个功能用起来太爽了!

swiper有点慢

C-s 然后 M-n,并不是太麻烦

1 个赞

首先要谢谢大佬,这个代码我使用了一下,确实能实现我描述的功能,我这里绑定了C+s, 目前使用这段代码的效果是:按住绑定键,自动抓取了光标下的symbol,并显示了结果。但是这样的话,我想要搜索其他非光标下的symbol,就需要删除swiper后的参数,或者将光标移动到空格的地方才行。

首先我再次抱歉,我标题描述的不够准确,我是想要这样的效果: 按住绑定键,自动抓取光标下的symbol作为swiper的默认的symbol,只有当我再次按下RET,才会执行搜索,如果我不进行默认symbol的搜索的话,我可以继续输入其他的symbol。

谢谢大佬了,看看有无相关的elisp代码。或者说这种功能其实并不需要,可能是我使用spacemacs时间太短了。

是有一点,但是我只是用它来搜索本文件的相关内容

乃这个需要的是

你需要的这个功能其实很简单:

(defun f ()
  (interactive)
  (let* ((symbol-at-points (thing-at-point 'symbol))
         (read-symbol (read-from-minibuffer (concat "Swiper [" symbol-at-points
                                                    "] : "))))
    (if (equal read-symbol "")
        (swiper symbol-at-points)
      (swiper read-symbol))))

这里挂了一个virtual placeholder的issue,但是后来没管。

我曾经想过用yas来模拟,但不知从哪个commit起yas-minor-mode就不能在minibuffer里面启动了

另外,ivy现在钦定用M-n来抓取当前位置的symbol了

1 个赞

是的哦,十分感谢大佬

谢谢大佬,我现在才反应过来,十分感谢

恩恩,谢谢您,我知道该如何操作了

:+1::+1: 十分感谢大佬