При использовании ReSharper в Visual Studio символы могут автоматически заполняться с использованием нечеткого сопоставления вместо сопоставления префикса. Например , если я ищу функцию с именем DoSomethingAmazing
я мог бы написать DoSoAm
и было бы попытаться расширить свой запрос , чтобы соответствовать всем символам , содержащих Do
, So
и Am
где - то в их имени.
Другой пример можно найти в следующем GIF. Вы можете увидеть несколько расширений, где строки без префиксов раскрываются до правильного символа. (Не обращайте внимания на расширение фрагмента, так как в этом вопросе меня интересует только нечеткое сопоставление).
Другой пример можно увидеть в плагине YouCompleteMe для Vim:
Автозаполнение и режим компании, кажется, имеют сопоставление префиксов, но я не могу найти способ включить нечеткое сопоставление.
В идеале решение должно быть независимым от языка и применяться к любому пакету завершения символов, который я использую, но меня также интересуют решения для конкретного языка. Я посмотрел на Хелма, но не нашел способа применить его для завершения кода.
Я рассмотрел альтернативы, такие как связывание клавиш для активации завершения символа с использованием буфера Helm, но я надеюсь, что есть способ сделать это с помощью завершения в стиле всплывающего окна.
Я также готов к ручной настройке для каждого языка, так как некоторые языки разделяют символы с помощью тире, в то время как другие используют подчеркивание или тире, которые, как я полагаю, повлияют на то, как будет выполнено сравнение.
источник
Ответы:
Встроенная функциональность завершения Emacs предлагает аналогичное нечеткое сопоставление (хотя по умолчанию оно используется для «do-so-am», а не для «DoSoAm»), и последние версии IIUC корпоративного режима используют это, по крайней мере, в некоторых случаях.
Например, если вы открываете буфер Elisp, используя Emacs-24.4 и последний режим компании, при вводе
(wi-sy
компании всплывет меню завершенияwindow-system
,window-system-for-display
иwith-syntax-table
.источник
company-mode
опорамиcompletion-styles
, этот пост предполагает возможную установку для попробовать.company-ycmd
еще один бэкэнд, который поддерживает нечеткое завершениеС помощью
company-mode
вы можете использоватьC-s
поиск из доступных кандидатов, которые он отображает. Поисковый запрос отображается в модельном ряду (я знаю, его не так-то просто найти. Я подал здесь проблему ).Если вы хотите использовать Helm для завершения, подумайте об использовании helm-company или ac-helm . Не пробовал с
ac-helm
, но сhelm-company
, вы можете напрямую связать его с ключом, чтобы заменить стандартный интерфейсcompany-complete
.источник
company-mode
пользовательский интерфейс, вы можете нажатьC-s
для поиска кандидата из списка доступных кандидатов,company
представленных вам.C-M-s
это намного лучше, чемC-s
. С мета, он будет фильтровать кандидатов, а не просто поиск.Как уже упоминалось в комментарии ранее,
ycmd
поддерживается нечеткое сопоставление. Вы можете использовать его черезcompany-ycmd
. Правильно настроенный, вы можете получить завершение для конкретного языка, а также простое завершение на основе идентификатора в довольно плавном взаимодействии.источник
Есть несколько пакетов, которые предлагают нечеткое завершение того или иного вида. Я полагаю, что Хелм, например, (поскольку вы упоминаете об этом).
Если вы используете библиотеку Icicles, вы можете выбрать (на лету) один из нескольких методов нечеткого завершения - больший выбор, чем я видел в других местах. (Я сам не особо люблю нечеткие дополнения, но я предлагаю это.)
Завершение Icicles (следовательно, нечеткое завершение, если вы выберете это) применяется практически везде, но не так много специфичных для Icicles возможностей дополнения кода . На этой странице документа « Сосульки» говорится о таком заполнении буферного текста.
С помощью Icicles , используя пример завершения работы Стефана
(wi-sy
в режиме Emacs Lisp:С завершением Сосульки (что обеспечивает Emacs, уважая ), вы получаете те же символы, что упоминает Стефан.
vanilla
completion-styles
С помощью завершения нечеткого символа Сосульки Свонка (из библиотеки
el-swank-fuzzy.el
) в качестве текущего метода завершения TAB вы получаете следующие кандидаты на завершение:Первые 3 кандидата, опять же, те, о которых упоминает Стефан.
С простым нечетким завершением (библиотека
fuzzy-match.el
) единственным кандидатом являетсяwith-syntax-table
.С нечетким завершением « Сосульки» вы получаете всех кандидатов, которые предлагает нечеткое завершение Суонка, а также следующее:
С расстоянием Левенштейна 2 вместо 1, есть больше чем 300 кандидатов завершения.
При строгом завершении Левенштейна (1 или 2) нет кандидатов. Аналогично, для Сосульки у Джаро-Винклера нечеткое завершение .
источник
completion.el
? (Точно так же,dabbrev
иhippie-expand
- все 3 включены в GNU Emacs.) Эти вещи весьма полезны с кодом завершения, несмотря на то , как вы предлагаете, они не имеют не кода конкретных знаний. Вы можете быть удивлены, насколько полезными они могут быть (с нечетким соответствием или без него). И, как это, любое не зависящее от кода завершение, которое использует минибуфер для завершения, когда есть несколько кандидатов, автоматически получает выгоду от нечеткого завершения Icicles .если вы используете
ivy
, в последних обновленияхivy
поддерживает завершение в точке функциональности в оверлее. Айви поддерживает нечеткое сопоставление с помощьюflx
. Оформите это видео о том, как это работает :)Все, что вам нужно сделать, это нажать связывание клавиш, для
complete-symbol
которого по умолчанию привязано значение, C-M-iи появится всплывающее наложение, и вы используете нечеткое сопоставление, чтобы получить кандидата на завершение.источник