vertico继续补全

请问使用vertico进行补全时,如何使用SPC来跳过中间的字符继续补全

一般只需要把orderless设置为completion-styles的第一个element就行了,例如

(setq completion-styles '(orderless basic))
1 个赞

如果你使用 Corfu 进行补全的话, 你可能需要关注 corfu-quit-at-boundary corfu-quit-no-match 这两个变量.

Corfu 默认在读到 corfu-separator 时退出, 而 corfu-separator 的默认值就是字符空格.

因此你可以试试下面的代码:

(setq-default corfu-quit-at-boundary t)
(setq-default corfu-separator nil)
(setq-default corfu-quit-no-match 'separator)

同时, 你依然需要按照 @SPQR 所说的把 orderless 引入 completion-styles.

感谢!我自己搭建的emacs是用的corfu,最近想把配置都移植到doom上,它只用了Vertico,暂时不想再加corfu…

orderless 包可以与 vertico 一起使用。vertico 负责提供交互式的补全 UI,orderless 是管 completion style。 更丰富的样式,可以参考如下定义 (from doomemacs):

(defun +vertico-orderless-dispatch (pattern _index _total)
    (cond
     ;; Ensure $ works with Consult commands, which add disambiguation suffixes
     ((string-suffix-p "$" pattern)
      `(orderless-regexp . ,(concat (substring pattern 0 -1) "[\x200000-\x300000]*$")))
     ;; Ignore single !
     ((string= "!" pattern) `(orderless-literal . ""))
     ;; Without literal
     ((string-prefix-p "!" pattern) `(orderless-without-literal . ,(substring pattern 1)))
     ;; Character folding
     ((string-prefix-p "%" pattern) `(char-fold-to-regexp . ,(substring pattern 1)))
     ((string-suffix-p "%" pattern) `(char-fold-to-regexp . ,(substring pattern 0 -1)))
     ;; Initialism matching
     ((string-prefix-p "`" pattern) `(orderless-initialism . ,(substring pattern 1)))
     ((string-suffix-p "`" pattern) `(orderless-initialism . ,(substring pattern 0 -1)))
     ;; Literal matching
     ((string-prefix-p "=" pattern) `(orderless-literal . ,(substring pattern 1)))
     ((string-suffix-p "=" pattern) `(orderless-literal . ,(substring pattern 0 -1)))
     ;; Flex matching
     ((string-prefix-p "~" pattern) `(orderless-flex . ,(substring pattern 1)))
     ((string-suffix-p "~" pattern) `(orderless-flex . ,(substring pattern 0 -1)))))

然后调用:

(setq orderless-style-dispatchers '(+vertico-orderless-dispatch))

还可以对其输入在补全中高亮显示:

  (set-face-attribute 'completions-first-difference nil :inherit nil)

Doom 默认使用 Company 代替 Corfu 进行不全. 但 Doom 似乎正在考虑加入 Corfu 补全模块, 见: New :completion corfu module - modules - Doom Emacs Discourse.

至于如何配置 Company, 我没有本地实践过, 但我猜测你需要关注下 company-completion-cancelled-hookcompany-completion-finished-hook 这两个变量.

我刚刚从doom配置迁出来开始使用自己的配置。

如果已经有自己的配置了,我觉得完全没必要迁到doom里去,doom的基础框架加了太多层封装,想自己改东西很麻烦。如果有doom觉得配的比较好的地方,完全可以直接抄。doom的插件配置都是模块化的,抄起来并不麻烦。

我现在自己现写的配置除了快捷键做了部分调整之外基本照抄doom(还在WIP中),只不过把它封装的框架代码改成了直接调用;并且把它写的看不懂的/觉得没必要的advice都删掉了。

https://git.sr.ht/~northyear/dotemacs

如果安装了corfu的话,我的做法是:

    :bind
      (:map corfu-map
       ("SPC" . corfu-insert-separator)

谢谢,最近在用doom,确实比自己的全,也更合理些。但是这个lazy load很坑,从一个机器copy到另一个,还需要调试…,找问题确实麻烦,纯干活,没有自己的顺手,加个插件就有问题,一顿调试,当个爱好吧…

mark一下,正在用helm,慢慢想转vertico。。。

目前这些自定义补全orderless包已经默认提供了,不需要自己写了

1 个赞

借地儿问以下,vertico 打开文件时能不能像 swiper 那样输入 ~ 来快速回到 HOME 目录下面。

可以的,我刚刚试了。

似乎是可以的,但像上面图片那样,光标所在 buffer 的路径还在。你是有什么特别的配置么?

(when (maybe-require-package 'vertico)
  (when (vertico-mode)
    (define-key vertico-map "?" #'minibuffer-completion-help)))

上面是我对这个包的配置,就一条绑定快捷键的配置。

不清楚,你可以参考一下我的配置:GitHub - zilongshanren/emacs.d: 目前主要使用的Emacs配置

1 个赞

进一步去除所要屏蔽的路径,要用到 vertico-directory 这个extension, 然后加入如下配置就可以了:

 (add-hook 'rfn-eshadow-update-overlay-hook 'vertico-directory-tidy)
2 个赞

感谢关注,目前已经将corfu移植到doom上了(参考gabgo的代码,还是比较好配置的)