¿Cómo puedo hacer coincidir "snake_case" automáticamente cuando busco "snake-case" por error?

8

Frecuentemente escribo mal "_" como "-" cuando hago un rápido isearch-forward.

Por ejemplo, estoy buscando snake_casey escribo accidentalmente C-s snake-casey no obtengo resultados. En el mejor de los casos, lo noto con la suficiente rapidez y no tengo que eliminar demasiado el término de búsqueda; en el peor de los casos, básicamente tengo que volver a escribirlo.

¿Hay alguna forma de conectarme isearch-forwardpara cambiar mi consulta en un me isearch-forward-regexpgusta snake[-_]case?

Realmente necesito buscar con la lisp-casefrecuencia suficiente para que simplemente cambiar "-" a "_" cause más problemas de los que resuelve.

Tom
fuente
66
Puede evitar escribir todo de nuevo. Haga M-epara saltar al mini-buffer para editar la cadena de búsqueda mientras isearch está activo. Luego C-e M-b BKSPC _y C-spara continuar la búsqueda.
Kaushal Modi
Al usar un 'motor' de búsqueda de coincidencia difusa más moderno, simplemente escriba 'sc' y snake-case, SnakeCase y snake_case all match (use ido junto con flx o somesuch, por ejemplo)
Tom Regner
@TomRegner ¿Cómo se hace la búsqueda 'flex' isearch?
Kaushal Modi
@kaushalmodi bitbucket.org/jpkotta/flex-isearch podría hacer
Tom Regner

Respuestas:

8

No puedo imaginar que tal comportamiento automatizado no te cause dolor cuando eso no es lo que querías que hiciera.

En mi opinión, la recomendación de kaushalmodi M-ees la mejor respuesta: hacer que sea fácil corregir el problema parece preferible a intentar que isearch lea su mente.

Tenga en cuenta que isearch es lo suficientemente inteligente como para tomar nota del primer carácter donde falló la búsqueda, y M-ecoloca el cursor en esa posición automáticamente, por lo que, incluso cuando ha seguido escribiendo caracteres posteriores, la secuencia de teclas típica para corregir el patrón y reanudar la búsqueda solo sería:

M-eC-d_C-s

phils
fuente
¡Eso es genial! TIL: isearch es lo suficientemente inteligente como para tomar nota del primer carácter donde falló la búsqueda, y M-ecoloca el cursor en esa posición automáticamente
Kaushal Modi
No lo sabía M-e, eso ciertamente facilita las cosas, especialmente porque salta de nuevo al error tipográfico.
Tom
5

Si usa swiper y busca snake case, coincidirá con ambos snake_casey snake-case.

swiperes una nueva isearchalternativa que le brinda una visión general en el minibúfer mientras busca.

swiper.png

En la imagen de arriba, la entrada se ivy mtraduce en la expresión regular ivy.*m. Hay 36 coincidencias para esta expresión regular. Puede navegar entre ellos con C-s/ C-r o C-n/ C-p.

Se puede instalar swipercon M-x package-install. Está disponible en MELPA y GNU ELPA.

abo-abo
fuente
swiper (y swiper-helm) están limpios. Los agregué a mi configuración y los estoy probando durante unos días. Sin embargo, no es exactamente lo que buscaba, ya que tendré que escribir algo diferente de lo que estoy buscando, veré si me acostumbro a eso. Además, ¿alguna idea de cómo hacer que Cw y Me funcionen mientras está en modo swiper?
Tom
¿Qué se supone C-wy qué se M-edebe hacer? Puedes publicar en github.com/abo-abo/swiper/issues si quieres que agregue algo.
abo-abo
Me se describe en los comentarios y otras respuestas: edita la búsqueda en el minibúfer. Cw expande el término de búsqueda con el símbolo debajo del cursor.
Tom
OK, no necesitas M-eSwiper, ya está adentro M-e. Y para llegar al punto, presione M-n. Todavía no hay forma de expandirlo, pero puede continuar escribiendo.
abo-abo
Mn es lo que buscaba, es bueno saberlo. La característica útil Me es que mueve el punto al primer personaje que no coincide, aunque no sé si eso es práctico con la coincidencia difusa.
Tom