Ao usar o ReSharper no Visual Studio, os símbolos podem ser preenchidos automaticamente usando a correspondência difusa em vez da correspondência de prefixo. Por exemplo, se eu estou procurando uma função chamada DoSomethingAmazing
Eu poderia escrever DoSoAm
e seria tentar expandir minha consulta para coincidir com todos os símbolos que contêm Do
, So
e Am
em algum lugar em seu nome.
Outro exemplo pode ser encontrado no gif abaixo. Você pode ver várias expansões nas quais cadeias sem prefixo são expandidas para o símbolo correto. (Ignore a expansão do snippet, pois nesta pergunta só estou preocupado com a correspondência difusa).
Outro exemplo pode ser visto no plugin YouCompleteMe for Vim:
O preenchimento automático e o modo empresa parecem ter correspondência de prefixo, mas não consigo encontrar uma maneira de ativar a correspondência difusa.
Idealmente, a solução seria independente de idioma e se aplicaria a qualquer pacote de conclusão de símbolo que eu estou usando, mas também estou interessado em soluções específicas de idioma. Eu olhei para Helm, mas não encontrei uma maneira de aplicá-lo à conclusão de código.
Eu considerei alternativas como ter uma combinação de teclas para ativar a conclusão do símbolo usando um buffer Helm, mas espero que haja uma maneira de fazer isso usando a conclusão no estilo pop-up.
Também estou aberto a fazer a configuração manual por idioma, pois alguns idiomas separam símbolos com hífens, enquanto outros usam sublinhados ou hífens, que eu suponho que afetariam como a correspondência seria feita.
fonte
Respostas:
A funcionalidade de conclusão interna do Emacs oferece correspondência difusa semelhante (embora por padrão seja usada para "faça-o-sou" e não para "DoSoAm") e as versões recentes do IIUC do modo empresa usam isso pelo menos em alguns casos.
Por exemplo, se você abrir um buffer Elisp usando o Emacs-24.4 e o modo mais recente da empresa, se você digitar
(wi-sy
company, será exibido um menu de conclusão mostrandowindow-system
,window-system-for-display
ewith-syntax-table
.fonte
company-mode
suportes Emacs 24.4completion-styles
, este post sugere uma configuração possível para experimentá-lo.company-ycmd
é outro back-end que suporta a conclusão difusa.Com
company-mode
, você pode usarC-s
para pesquisar os candidatos disponíveis que são exibidos. A consulta de pesquisa é exibida na modelagem (não é realmente fácil de identificar, eu sei. Arquivei um problema aqui ).Se você deseja usar o Helm para conclusão, considere usar helm-company ou ac-helm . Ainda não tentei com
ac-helm
, mas comhelm-company
, você pode vinculá-lo diretamente a uma chave para substituir a interface padrão docompany-complete
.fonte
company-mode
interface do usuário, pode pressionarC-s
para procurar um candidato em uma lista de candidatos disponíveiscompany
apresentada a você.C-M-s
é muito melhor do que issoC-s
. Com o meta, ele filtra os candidatos em vez de apenas pesquisar.Como mencionado em um comentário anterior,
ycmd
suporta correspondência difusa. Você pode usá-lo viacompany-ycmd
. Configurado corretamente, você pode obter a conclusão específica do idioma, bem como a conclusão simples baseada em identificador, em uma experiência bastante integrada.fonte
Existem vários pacotes que oferecem conclusão nebulosa de um tipo ou de outro. Eu imagino que Helm sim, por exemplo (desde que você mencionou).
Se você usar os Sincelos da biblioteca , poderá escolher (em tempo real) entre vários métodos de conclusão nebulosa - mais opções do que eu já vi oferecidas em outros lugares. (Eu não sou particularmente fã de conclusão confusa, mas ofereço.)
A conclusão dos sincelos (portanto, a conclusão nebulosa, se você escolher isso) se aplica praticamente a todos os lugares, mas não há muitos recursos de conclusão de códigos específicos de sincelos . Esta página do documento Icicles fala sobre essa conclusão do texto do buffer.
Com Icicles , usando o exemplo de Stefan de conclusão
(wi-sy
no modo Emacs Lisp:Com a conclusão dos Sincelos (o que o Emacs fornece, respeitando ), você obtém os mesmos símbolos que Stefan menciona.
vanilla
completion-styles
Com a conclusão do símbolo difuso Icicles Swank (da biblioteca
el-swank-fuzzy.el
) como o método atual de conclusão da TAB, você obtém os seguintes candidatos:Os três primeiros candidatos são, novamente, aqueles que Stefan menciona.
Com a conclusão simples de correspondência difusa (biblioteca
fuzzy-match.el
), o único candidato éwith-syntax-table
.Com a conclusão difusa do Icicles scatter , você obtém todos os candidatos que a conclusão difusa do Swank oferece, além do seguinte:
Com uma distância de Levenshtein de 2 em vez de 1, existem mais de 300 candidatos concluídos.
Com a estrita conclusão de Levenshtein (1 ou 2), não há candidatos. Da mesma forma, para o Icicles Jaro-Winkler conclusão nebulosa .
fonte
completion.el
? (Da mesma forma,dabbrev
ehippie-expand
- todos os 3 estão incluídos no GNU Emacs.) Essas coisas são bastante úteis na conclusão do código, embora, como você sugere, elas não tenham conhecimento específico do código. Você pode se surpreender com o quão útil eles podem ser (com ou sem correspondência difusa). E assim, qualquer conclusão específica de código que usa o minibuffer para concluir quando há vários candidatos se beneficia automaticamente da conclusão nebulosa do Icicles .se você usar
ivy
, nas atualizações recentes, seráivy
suportada a funcionalidade de conclusão no ponto em uma sobreposição. Ivy suporta correspondência difusa com a ajuda deflx
. Confira este vídeo sobre como funciona :)Tudo o que você precisa fazer é pressionar a ligação de teclas à
complete-symbol
qual está vinculada por padrão C-M-ie uma sobreposição será exibida e você usará a correspondência difusa para obter o candidato à conclusão.fonte