Abilita la corrispondenza fuzzy edera ovunque, tranne che in swiper


10

Sto usando flx-ido-modeda un po 'e mi piace. Ivy può comportarsi allo stesso modo usando ivy--regex-fuzzy.

Il problema è che swiperora userò anche la corrispondenza fuzzy e in questo caso non mi piace molto (almeno non come impostazione predefinita, sempre).

Quindi mi piacerebbe continuare a usare la corrispondenza fuzzy con Ivy tranne in swiper. C'è un modo per configurarlo? O posso in qualche modo dire swiperche sto davvero cercando "questa" sottostringa in questo momento prefissando qualcosa?

Risposte:


16

Vorrei continuare a utilizzare la corrispondenza fuzzy con Ivy tranne in swiper.

La variabile che determina quale "generatore di regexp", come Ivy fa riferimento a queste funzioni, viene utilizzato per quale funzione di raccolta è 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.

Quindi, al fine di modificare il builder regexp predefinito da ivy--regex-plusa ivy--regex-fuzzy, ma mantenere il precedente per swiper, è possibile

(setq ivy-re-builders-alist
      '((swiper . ivy--regex-plus)
        (t      . ivy--regex-fuzzy)))

o, più programmaticamente,

(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))

Questo è descritto in maggior dettaglio in (ivy) Completion Styles.

Non mi piace molto [corrispondenza fuzzy] (almeno non di default, sempre)

Ivy ti consente di ruotare al volo il generatore di regexp tramite la sua interfaccia hydra. L'ultima frase abbastanza nascosta (ivy) ivy--regex-fuzzyallude a questo, e una descrizione più completa può essere trovata sotto (ivy) Hydra in the minibuffer, ma sembra che il manuale sia un po 'obsoleto dato che è passato un po' di tempo dall'ultima versione.

Il risultato è che, dal 04/07/2017 , Ivy ti consente di scorrere i costruttori regexp durante il completamento tramite C-om( ivy-rotate-preferred-builders). Modifica : come sottolineato Asme Justin un commento , l'associazione chiave predefinita è stata modificata C-oMil 06-02-2019 .


Potresti per favore approfondire un po 'il completamento in bicicletta? Ad esempio, se ho avviato una ricerca swiper, Co mi darà immediatamente un messaggio "Esegui comando: Impossibile aprire il file di caricamento: Nessun file o directory, ivy-hydra".
Vecchio

@B_old Prova prima a installare il ivy-hydrapacchetto opzionale . La questione morale se debba esistere un keybinding predefinito per una funzione opzionale (cioè non sempre installata) è già stata sollevata e lo status quo sembra improbabile che cambi presto. Se hai altre domande sulle ivy-hydraquali il manuale non tratta, ti preghiamo di prendere in considerazione la possibilità di creare nuove domande Emacs SE.
Basilio

( ivy-rotate-preferred-builders) è C-o M attualmente per me predefinito.
Asme Solo il

@AsmeJust Grazie, è stata una modifica incompatibile con le versioni precedenti fatta poco più di 2 settimane fa: github.com/abo-abo/swiper/commit/…
Basil

2

Se vuoi disattivare la corrispondenza regex in swiper, ma tenerlo attivo altrove, aggiungi questo al tuo user-init-file:

(setq ivy-re-builders-alist
      '((swiper . regexp-quote)
        (t      . ivy--regex-fuzzy)))

Se vuoi disattivarlo solo una volta, premi M-rin swiper.


+1 per menzionare la pratica M-rrilegatura. Si noti, tuttavia, che OP ha specificato solo che si desidera disabilitare la corrispondenza fuzzy; quale costruttore regexp dovrebbe sostituire è stato lasciato poco chiaro.
Basilio
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.