Cuando se usa ReSharper en Visual Studio, los símbolos se pueden completar automáticamente usando la coincidencia difusa en lugar de la coincidencia de prefijos. Por ejemplo, si estoy buscando una función llamada DoSomethingAmazingpodría escribir DoSoAmy sería tratar de ampliar mi consulta para que coincida con todos los símbolos que contienen Do, Soy Amen algún lugar de su nombre.
Otro ejemplo se puede encontrar en el siguiente gif. Puede ver varias expansiones donde las cadenas sin prefijo se expanden al símbolo correcto. (Ignore la expansión del fragmento, ya que en esta pregunta solo me preocupa la coincidencia difusa).
Otro ejemplo se puede ver en el complemento YouCompleteMe para Vim: 
Los modos Autocompletar y Empresa parecen tener una coincidencia de prefijos, pero no puedo encontrar una manera de habilitar la coincidencia difusa.
Idealmente, la solución sería independiente del lenguaje y se aplicaría a cualquier paquete de finalización de símbolos que esté usando, pero también estoy interesado en soluciones específicas del idioma. He examinado Helm pero no he encontrado una manera de aplicarlo para completar el código.
He considerado alternativas como tener una combinación de teclas para activar la finalización del símbolo utilizando un búfer Helm, pero espero que haya una manera de hacerlo utilizando la finalización de estilo emergente.
También estoy dispuesto a hacer la configuración manual por idioma, ya que algunos idiomas separan los símbolos con guiones, mientras que otros usan guiones bajos o guiones, lo que supongo que afectaría la forma en que se haría la coincidencia.
fuente

Respuestas:
La funcionalidad de finalización incorporada de Emacs ofrece una coincidencia difusa similar (aunque por defecto se usa para "do-so-am" en lugar de "DoSoAm") y las versiones recientes de IIUC del modo de empresa utilizan esto al menos en algunos casos.
Por ejemplo, si abre un búfer de Elisp usando Emacs-24.4 y el último modo de compañía, si escribe
(wi-sycompañía, aparecerá un menú de finalización que muestrawindow-system,window-system-for-displayywith-syntax-table.fuente
company-modesoporte para Emacs 24.4completion-styles, esta publicación sugiere una posible configuración para probarlo.company-ycmdes otro backend que admite la finalización difusa.Con
company-mode, puede usarC-spara buscar entre los candidatos disponibles que muestra. La consulta de búsqueda se muestra en la línea de modelo (no es realmente fácil de detectar, lo sé. He presentado un problema aquí ).Si desea usar Helm para completar, considere usar helm-company o ac-helm . No he probado con
ac-helm, pero conhelm-company, puedes vincularlo directamente a una tecla para reemplazar la interfaz estándar decompany-complete.fuente
company-modeinterfaz de usuario, puede presionarC-spara buscar un candidato de una lista de candidatos disponibles que se lecompanypresentan.C-M-ses mucho mejor queC-s. Con meta, filtrará candidatos en lugar de solo buscar.Como se mencionó en un comentario anterior,
ycmdadmite la coincidencia difusa. Puedes usarlo a través decompany-ycmd. Configurado correctamente, puede obtener la finalización específica del idioma, así como la finalización basada en un identificador simple en una experiencia bastante fluida.fuente
Hay varios paquetes que ofrecen finalización difusa de un tipo u otro. Me imagino que Helm sí, por ejemplo (ya que lo mencionas).
Si usa la biblioteca Icicles , puede elegir (sobre la marcha) entre varios métodos de finalización difusa , más opciones de las que he visto en otros lugares. (No soy particularmente un fanático de la finalización difusa, pero lo ofrezco).
La finalización de Icicles (por lo tanto, la finalización difusa, si elige eso) se aplica prácticamente en todas partes, pero no hay muchas características de finalización de código específicas de Icicles . Esta página del documento de Icicles habla sobre dicha finalización del texto del búfer.
Con Icicles , usando el ejemplo de Stefan de completar
(wi-syen modo Emacs Lisp:Con la finalización de Icicles (lo que proporciona Emacs, respetando ), obtienes los mismos símbolos que Stefan menciona.
vanillacompletion-stylesCon la finalización del símbolo difuso Icicles Swank (de la biblioteca
el-swank-fuzzy.el) como el método actual de finalización de TAB, obtiene estos candidatos de finalización:sistema de ventanas con-sintaxis-tabla sistema de ventana para mostrar widget-coding-system-action widget-symbol-prompt-internal widget-coding-system-prompt-value with-swfy-struct widget-especificar-doc con-swfy-timedout widget-especificar-campo widget-especificar-activo widget-especificar-botón widget-especificar-insertar widget-especificar-muestra widget-especificar-secreto widget-especificar-inactivo ventana-con-seguridad-encogible-p widget-types-copy aplicar tamaño a la ventana ventana - redimensionar-ventana-raíz-verticalmente mesa-escaparate ventana - display-buffer ventana - redimensionar-aplicar-p ventana-redimensionar-aplicar-total widgetp-display-Completions ventana-redisplay-end-trigger con-muestra-ventana-buffer widget-visibilidad-valor-crear widget-emacs-library-link-action widget-editable-list-entry-create widget-emacs-commentary-link-actionLos primeros 3 candidatos son, nuevamente, los que Stefan menciona.
Con la finalización simple de coincidencia difusa (biblioteca
fuzzy-match.el), el único candidato eswith-syntax-table.Con Icicles dispersa la finalización difusa , obtienes todos los candidatos que ofrece la finalización difusa de Swank, además de lo siguiente:
ange-ftp-wait-not-busy dired-into-dir-with-symlinks ediff-choose-window-setup-function-automatic ediff-make-wide-display ediff-toggle-wide-display ediff-ventana-display-p ediff-window-ok-for-display ediff-with-syntax-table sistema-codificación-archivo-búfer-nuevo-encontrar gnus-frame-or-window-display-name mensaje-ayuda-ventana-pantalla icicle-choose-window-for-buffer-display revert-buffer-with-coding-system set-w32-system-coding-system set-window-display-table set-window-redisplay-end-trigger shell-write-history-on-exit ventana dividida con sensatez tree-widget - localizar-sub-directorio w32-find-file-not-found-set-buffer-file-coding-system w32-initialize-window-systemayuda-seguir-símbolo mensaje-verificar-noticias-sintaxis w32-initialize-window-system sistema-ventana sistema de ventana para mostrarCon una distancia de Levenshtein de 2 en lugar de 1, hay más de 300 candidatos de finalización.
Con la terminación estricta de Levenshtein (1 o 2) no hay candidatos. Del mismo modo, para Icicles Jaro-Winkler finalización difusa .
fuente
completion.el? (Del mismo modo,dabbrevyhippie-expand- los 3 están incluidos en GNU Emacs.) Estas cosas son muy útiles con la finalización de código, a pesar de que, como usted sugiere, tienen ningún conocimiento de código específico. Puede que se sorprenda de lo útiles que pueden ser (con o sin coincidencia difusa). Y como estos, cualquier finalización específica de código que use el minibúfer para completar cuando hay múltiples candidatos se beneficia automáticamente de la finalización difusa de Icicles .si lo usa
ivy, en las actualizaciones recientesivyadmite la finalización en la funcionalidad del punto en una superposición. Ivy admite la coincidencia difusa con la ayuda deflx. Mira este video sobre cómo funciona :)Todo lo que tiene que hacer es presionar la combinación de teclas para la
complete-symbolcual está vinculada de forma predeterminada C-M-iy aparecerá una superposición y usará coincidencia difusa para obtener el candidato de finalización.fuente