请问使用vertico进行补全时,如何使用SPC来跳过中间的字符继续补全
一般只需要把orderless设置为completion-styles的第一个element就行了,例如
(setq completion-styles '(orderless basic))
如果你使用 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-hook
和 company-completion-finished-hook
这两个变量.
我刚刚从doom配置迁出来开始使用自己的配置。
如果已经有自己的配置了,我觉得完全没必要迁到doom里去,doom的基础框架加了太多层封装,想自己改东西很麻烦。如果有doom觉得配的比较好的地方,完全可以直接抄。doom的插件配置都是模块化的,抄起来并不麻烦。
我现在自己现写的配置除了快捷键做了部分调整之外基本照抄doom(还在WIP中),只不过把它封装的框架代码改成了直接调用;并且把它写的看不懂的/觉得没必要的advice都删掉了。
如果安装了corfu的话,我的做法是:
:bind
(:map corfu-map
("SPC" . corfu-insert-separator)
谢谢,最近在用doom,确实比自己的全,也更合理些。但是这个lazy load很坑,从一个机器copy到另一个,还需要调试…,找问题确实麻烦,纯干活,没有自己的顺手,加个插件就有问题,一顿调试,当个爱好吧…
mark一下,正在用helm,慢慢想转vertico。。。
目前这些自定义补全orderless包已经默认提供了,不需要自己写了
借地儿问以下,vertico 打开文件时能不能像 swiper 那样输入 ~
来快速回到 HOME
目录下面。
可以的,我刚刚试了。
似乎是可以的,但像上面图片那样,光标所在 buffer 的路径还在。你是有什么特别的配置么?
(when (maybe-require-package 'vertico)
(when (vertico-mode)
(define-key vertico-map "?" #'minibuffer-completion-help)))
上面是我对这个包的配置,就一条绑定快捷键的配置。
进一步去除所要屏蔽的路径,要用到 vertico-directory 这个extension, 然后加入如下配置就可以了:
(add-hook 'rfn-eshadow-update-overlay-hook 'vertico-directory-tidy)
感谢关注,目前已经将corfu移植到doom上了(参考gabgo的代码,还是比较好配置的)