Увімкніть плющевий нечіткий збіг скрізь, крім swiper


10

Я flx-ido-modeдеякий час користуюся і мені це подобається. Плющ може поводитись так само, використовуючи ivy--regex-fuzzy.

Проблема полягає в тому, що swiperзараз також буде використовувати нечітке узгодження, і в цьому випадку мені це не дуже подобається (принаймні, не як за замовчуванням, весь час).

Тож я хотів би продовжувати використовувати нечітке узгодження з Ivy, за винятком swiper. Чи є спосіб це налаштувати? Або я можу якось сказати, swiperщо я справді шукаю "цю" підрядку зараз, префіксуючи щось?

Відповіді:


16

Я хотів би продовжувати використовувати нечітке узгодження з Ivy, крім в swiper.

Змінна, яка визначає, який "конструктор regexp", як Ivy посилається на ці функції, використовується для функції збору 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.

Отже, для того, щоб змінити програму конструктора regexp за замовчуванням з ivy--regex-plusна ivy--regex-fuzzy, але зберегти перше swiper, ви могли

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

або, більш програмно,

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

Про це більш докладно описано в (ivy) Completion Styles.

Мені не дуже подобається [нечітке узгодження] (принаймні, не за замовчуванням, весь час)

Ivy дозволяє обертати конструктор регулярних викидів на льоту через його гідравлічний інтерфейс. Досить приховане останнє речення на це (ivy) ivy--regex-fuzzyнатякає, і більш повний опис можна знайти під (ivy) Hydra in the minibuffer, але, схоже, керівництво трохи застаріло, враховуючи, що минуло трохи часу з моменту останнього випуску.

Підсумок полягає в тому, що, починаючи з 2017-07-04 , Ivy дозволяє переходити через конструктори regexp під час завершення через C-om( ivy-rotate-preferred-builders). Редагувати : як зазначено Asme Justв коментарі , прив’язка клавіш за замовчуванням була змінена C-oMна 2019-02-06 .


Чи можете ви трохи детальніше зупинитися на циклі завершення? Наприклад, якщо я розпочав швидкий пошук, Co негайно дасть мені "виконати команду: Не вдається відкрити файл завантаження: Немає такого файлу чи каталогу, повідомлення плюща-гідри".
B_old

@B_old Спробуйте спочатку встановити додатковий ivy-hydraпакет. Моральний питання про те, чи має існувати прив'язка клавіш за замовчуванням для необов'язкової (тобто не завжди встановленої) функції , вже піднята, і статус-кво, здається, навряд чи зміниться незабаром. Якщо у вас є інші запитання, щодо ivy-hydraяких посібник не стосується, будь ласка, подумайте про створення нових питань для Emacs SE для них.
Василь

( ivy-rotate-preferred-builders) C-o M для мене наразі за замовчуванням.
Асме Просто

@AsmeJust Дякую, це була невідповідна зміна, зроблена трохи більше 2 тижнів тому: github.com/abo-abo/swiper/commit/…
Василь

2

Якщо ви хочете вимкнути відповідність регулярних виразів у swiper, але зберегти його активно в іншому місці, додайте це до свого user-init-file:

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

Якщо ви хочете деактивувати його лише один раз, натисніть M-rна swiper.


+1 для згадування зручної M-rпалітурки. Однак зауважте, що ОП лише вказали, що вони хочуть нечітке узгодження відключено; який конструктор regexp повинен замінити, залишилося незрозумілим.
Василь
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.