swiper 怎样 match 空格?

一个比较小白的问题

使用情形:我想用 swiper 找到 org 文件中所有未 check 的 item。输入 [ ],但是这样所有已经 check 的 item 也被 match了。怎样才能只匹配 [ ] 呢?

image

这个我也试过,仍然是 match 所有 items

不加一个也match不到,我的 checklist 都是中间有一个空格的

Still doesn’t work.

嗯,可以了,怪我多此一举输入了大写的 X

那个我注意到了,我输入的是改正了的,但是输入了大写的 X,所以不工作

另外,这个方法有一个缺陷,就是会match [1] [2] 等脚注

只能这么写了吗?直接 match 空格不容易啊

- \[[^x0-9]\]

我试了下,\[ \] 可以(内含两个空格),两个空格可以匹配一个空格,见 http://oremacs.com/swiper/#ivy--regex-plus

Note how Ivy uses the space character to build wild cards. To match a literal white space, use an extra space. So to match one space type two spaces, to match two spaces type three spaces, and so on.

不同的 completion style 可能不同。

Thanks!

你试了吗?我试了一下不工作

奇怪了,两位的方法我这里都不工作

我直接复制粘贴你的,也不行

试过的!

另外,大概跟了下 swiper,它的 re-builder是单独写死的,这样的话按道理大家都是一样的,不受上边那个 alist 定制的影响。

(defun swiper--ivy (candidates &optional initial-input)
  "Select one of CANDIDATES and move there.
When non-nil, INITIAL-INPUT is the initial search pattern."
  (swiper--init)
  (setq swiper-invocation-face
        (plist-get (text-properties-at (point)) 'face))
  (let ((preselect
         (if swiper-use-visual-line
             (count-screen-lines
              (point-min)
              (save-excursion (beginning-of-visual-line) (point)))
           (1- (line-number-at-pos))))
        (minibuffer-allow-text-properties t)
        res)
    (unwind-protect
         (and
          (setq res
                (ivy-read
                 "Swiper: "
                 candidates
                 :initial-input initial-input
                 :keymap swiper-map
                 :preselect preselect
                 :require-match t
                 :update-fn #'swiper--update-input-ivy
                 :unwind #'swiper--cleanup
                 :action #'swiper--action
                 :re-builder #'swiper--re-builder
                 :history 'swiper-history
                 :caller 'swiper))
          (point))
      (unless res
        (goto-char swiper--opoint))
      (when swiper--reveal-mode
        (reveal-mode 1)))))