Włącz wszędzie rozmycie bluszczu, z wyjątkiem swipera

10

Używam od dłuższego flx-ido-modeczasu i lubię to. Ivy może zachowywać się w ten sam sposób, używając ivy--regex-fuzzy.

Problem polega na tym swiper, że teraz użyje również rozmytego dopasowania, aw tym przypadku nie podoba mi się to (przynajmniej domyślnie przez cały czas).

Więc chciałbym nadal używać rozmytego dopasowania z Ivy, z wyjątkiem swiper. Czy istnieje sposób, aby to skonfigurować? Czy też mogę w jakiś sposób powiedzieć swiper, że naprawdę szukam teraz „tego” podłańcucha, poprzedzając coś?

Pogrubienie
źródło

Odpowiedzi:

16

Chciałbym nadal używać rozmytego dopasowania z Ivy z wyjątkiem swiper.

Zmienna, która określa, który „konstruktor wyrażeń regularnych”, jak Ivy odnosi się do tych funkcji, jest używana dla której funkcji kolekcji jest 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.

Tak więc, aby zmienić domyślny konstruktor wyrażeń regularnych z ivy--regex-plusna ivy--regex-fuzzy, ale zachowaj pierwszy swiper, możesz

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

lub bardziej programowo

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

Jest to opisane bardziej szczegółowo w (ivy) Completion Styles.

Naprawdę nie lubię [rozmytego dopasowania] (przynajmniej nie domyślnie przez cały czas)

Ivy pozwala na obracanie konstruktora wyrażeń regularnych w locie za pośrednictwem interfejsu hydry. Dość ukryte ostatnie zdanie (ivy) ivy--regex-fuzzynawiązuje do tego i pełniejszy opis można znaleźć pod (ivy) Hydra in the minibuffer, ale wygląda na to, że instrukcja jest nieco nieaktualna, biorąc pod uwagę, że minęło trochę czasu od ostatniego wydania.

Rezultatem jest to, że od 2017-07-04 Ivy pozwala na cykliczne przechodzenie między konstruktorami wyrażeń regularnych podczas ukończenia przez C-om( ivy-rotate-preferred-builders). Edycja : jak wskazano Asme Justw komentarzu , domyślne wiązanie klawiszy zostało zmienione C-oMna 06.02.2019 .

Bazylia
źródło
Czy mógłbyś prosić o trochę dokładniejsze omówienie zakończenia jazdy na rowerze? Na przykład, jeśli rozpocząłem wyszukiwanie suwakiem, Co natychmiast wyświetli komunikat „polecenie-wykonanie: Nie można otworzyć pliku ładowania: Brak takiego pliku lub katalogu, bluszcz-hydra”.
B_old
@B_old Spróbuj najpierw zainstalować opcjonalny ivy-hydrapakiet. Pytanie moralne, czy powinno istnieć domyślne przypisanie klawiszy dla opcjonalnej (tzn. Nie zawsze instalowanej) funkcji, zostało już podniesione i wydaje się, że status quo prawdopodobnie nie zmieni się wkrótce. Jeśli masz inne pytania, na ivy-hydraktóre nie ma odpowiedzi w instrukcji, rozważ utworzenie dla nich nowych pytań Emacs SE.
Basil
( ivy-rotate-preferred-builders) jest C-o M dla mnie obecnie domyślnie.
Asme Tylko
@AsmeJust Dzięki, to była niezgodna z poprzednimi wersjami zmiana wprowadzona nieco ponad 2 tygodnie temu: github.com/abo-abo/swiper/commit/…
Basil
2

Jeśli chcesz wyłączyć dopasowanie wyrażenia regularnego w swiperze, ale pozostać aktywnym w innym miejscu, dodaj to do user-init-file:

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

Jeśli chcesz go dezaktywować tylko raz, wciśnij M-rswiper.

cayhorstmann
źródło
+1 za wzmiankę o przydatnym M-rwiązaniu. Zauważ jednak, że OP określił tylko, że chce wyłączyć dopasowanie rozmyte; który konstruktor wyrażeń regularnych powinien go zastąpić, nie został wyjaśniony.
Basil