Eu gostaria de continuar usando correspondência difusa com Ivy exceto em swiper
.
A variável que determina qual "regexp builder", como Ivy se refere a essas funções, é usada para qual função de coleção é ivy-re-builders-alist
:
ivy-re-builders-alist is a variable defined in ‘ivy.el’.
Its value is ((t . ivy--regex-plus))
Documentation:
An alist of regex building functions for each collection function.
Each key is (in order of priority):
1. The actual collection function, e.g. ‘read-file-name-internal’.
2. The symbol passed by :caller into ‘ivy-read’.
3. ‘this-command’.
4. t.
Each value is a function that should take a string and return a
valid regex or a regex sequence (see below).
Possible choices: ‘ivy--regex’, ‘regexp-quote’,
‘ivy--regex-plus’, ‘ivy--regex-fuzzy’.
If a function returns a list, it should format like this:
’(("matching-regexp" . t) ("non-matching-regexp") ...).
The matches will be filtered in a sequence, you can mix the
regexps that should match and that should not match as you
like.
Portanto, para alterar o construtor de regexp padrão de ivy--regex-plus
para ivy--regex-fuzzy
, mas mantenha o antigo por swiper
, você pode
(setq ivy-re-builders-alist
'((swiper . ivy--regex-plus)
(t . ivy--regex-fuzzy)))
ou, mais programaticamente,
(with-eval-after-load 'ivy
(push (cons #'swiper (cdr (assq t ivy-re-builders-alist)))
ivy-re-builders-alist)
(push (cons t #'ivy--regex-fuzzy) ivy-re-builders-alist))
Isso é descrito em mais detalhes em (ivy) Completion Styles
.
Eu realmente não gosto de [correspondência difusa] (pelo menos não como padrão, o tempo todo)
Ivy permite que você gire o construtor regexp em tempo real através de sua interface hydra. A última frase bastante escondida (ivy) ivy--regex-fuzzy
faz alusão a isso, e uma descrição mais completa pode ser encontrada em (ivy) Hydra in the minibuffer
, mas parece que o manual está um pouco desatualizado, pois já faz um tempo desde o último lançamento.
O resultado é que, desde 04/07/2017 , o Ivy permite percorrer os construtores regexp durante a conclusão via C-om( ivy-rotate-preferred-builders
). Editar : como apontado Asme Just
em um comentário , a ligação de tecla padrão foi alterada para C-oMem 2019-02-06 .
ivy-hydra
pacote opcional primeiro. A questão moral sobre se uma combinação de teclas padrão deve existir para um recurso opcional (ou seja, nem sempre instalado) já foi levantada e o status quo parece improvável que mude em breve. Se você tiver outras perguntas sobre asivy-hydra
quais o manual não aborda, considere criar novas perguntas para o Emacs SE.ivy-rotate-preferred-builders
) éC-o M
para mim atualmente por padrão.Se você deseja desativar a correspondência de expressões regulares no swiper, mas mantenha-o ativo em outro lugar, adicione-o ao seu
user-init-file
:Se você quiser desativá-lo apenas uma vez, pressione o
M-r
swiper.fonte
M-r
ligação prática . Observe, no entanto, que o OP especificou apenas que eles desejam desabilitar a correspondência difusa; qual construtor de regexp deve substituí-lo não ficou claro.