2010-09-11 14 views
15

La búsqueda difusa de 'ir a archivo' de Textmate es realmente increíble.¿Qué es el algoritmo de búsqueda difusa 'Ir a archivo' de textmate?

El complemento Command-T de Wincent para vim hace algo similar y también se complica.

¿Alguien puede explicar cómo funcionan? ¿Hay un término general para el método que usan?

Editar: que poco más de detalle acerca de lo que estas herramientas hacen

Las herramientas le permiten obtener, de una lista de opciones (en este caso de archivos de caminos) a medida que escribe.

Por ejemplo, si tuviera los siguientes archivos:

/app/models/people.rb 
/app/models/address.rb 
/app/person.rb 
/person.rb 

para llegar a reducir la lista a /app/models/people.rb pude escribir cualquiera de los siguientes:

amp 
peo 
mp 
modelsp 

que es muy flexible y me encuentro con mi Me falta esta "reducción de listas" cuando la aplicación que estoy usando no la tiene. Me gustaría obtener más información al respecto para poder implementar mis propios complementos si alguna vez lo necesitaba. Me gustaría poder explicarlo mejor, pero es por eso que estoy aquí :)

Para verlo en acción echar un vistazo a la Wincent demo of command-t

+2

Cuidado de explicar lo que es exactamente lo que esas herramientas? –

+0

Es como la barra de awesomefire de firefox pero para los archivos en su proyecto actualmente abierto. Se 'reduce' qué archivo desea mientras escribe. Encuentro que esta característica es genial, pero nunca pensé demasiado en eso. –

+1

http: // stackoverflow.com/questions/2891514/algoritms-for-fuzzy-matching-strings – ergosys

Respuesta

3

Parece que está haciendo una búsqueda de comodín entre cada letra.

amp -> *a*m*p* 
peo -> *p*e*o* 
mp -> *m*p* 
modelsp -> ... 

Si coincide con sólo un elemento de la lista de opciones, entonces sería volver que a medida que la opción deseada.

+0

Creo que también pesa más las letras cerca de un dirsep. – kniteli

2

Parece Comando-T hace una especie basado en una puntuación double dada por la función recursive_match en match.c para hacer la búsqueda difusa. La fuente de Command-T es propiedad del autor, pero la fuente se puede encontrar abriendo vimball en un editor de texto (descargar en la parte inferior de this page), y probablemente podría usarse como inspiración para un algoritmo de búsqueda difusa más general (por alguien que lee C mejor que yo al menos).

0

Como nota al margen: Eche un vistazo a (Apache Solr) y la forma en que genera los índices. Me encuentro usándolo bastante cuando intento implementar algo similar al Command-T de Textmate en la web.

Específicamente echa un vistazo al EdgeNGramFilterFactory. Creo que incluso podría haber algún código fuente en alguna parte. (Está en Java ...)

Cuestiones relacionadas