2012-08-23 6 views
7

No es tan conveniente cuando se realiza un error tipográfico durante una búsqueda incremental y la cadena de búsqueda recibe el carácter erróneamente tipeado. ¿Hay alguna manera de prevenir esto? Como si el control-g se presionara automáticamente en caso de error.Búsqueda incremental de Emacs - eliminar automáticamente de la cadena de búsqueda los caracteres que no se pudieron encontrar

Por ejemplo tenemos el siguiente texto: Emacs

keywords 
keys 

comportamiento predeterminado:

  • Nos iniciar la búsqueda incremental y la búsqueda de
  • El "keyz" se muestra "keyz" en el área de búsqueda de eco y la parte de "clave" en "palabras clave" está resaltada
  • Oprimimos s
  • No se encontraron
  • "claves", el cursor se mantiene en la línea de "palabras clave", buscar muestra un área de eco "keyzs", que no es conveniente

comportamiento necesario:

  • empezamos la búsqueda incremental y busque "keyz"
  • la "clave" se muestra en el área de eco búsqueda y la parte "clave" en "palabras clave" es higlighted
  • pulsamos s
  • "claves" se encuentra y se resalta
+0

Dos soluciones de trabajo hasta el momento: – dmgus

+0

la primera por Stefan (ver abajo) y la segunda es por Drew Adams http://article.gmane.org/gmane.emacs.help/88152 La agregó también a ISearch + http : //www.emacswiki.org/emacs/IsearchPlus – dmgus

Respuesta

3

Usted podría intentar algo así como

(defadvice isearch-printing-char (before drop-mismatches-on-next-char activate) 
    (while (or (not isearch-success) isearch-error) 
    (isearch-pop-state))) 
+0

Gracias por su ayuda Stefan! Sí, funciona perfectamente No se muestra ningún carácter parpadeante y no coincidente. – dmgus

0

Si comete un error tipográfico durante la búsqueda incremental, todo lo que necesita hacer, presione la tecla de retroceso para corregir el error tipográfico.

  • Comenzamos la búsqueda incremental y busque "keyz"
  • El "keyz" se visualiza en el área de eco búsqueda y la parte "clave" en "palabras clave" es higlighted
  • Nos pulse la tecla de retroceso
  • apretamos s
  • "claves" y se encuentra highlited
+0

Desafortunadamente, no me ayuda. La pregunta era diferente.Pregunté acerca del ** modo ** automático. No quiero presionar retroceso o ctrl-g. Me gustaría tenerlo hecho automáticamente. Y es posible en algunos otros editores, también me gustaría tenerlo en emacs. (Mejorado la pregunta también) – dmgus

2

Emacs conserva la parte incorrecta, porque sucede muy a menudo que busca una cadena y no se encuentra, pero no porque sea incorrecta, solo la cadena de búsqueda se encuentra antes del cursor. En este caso, es muy conveniente que pueda presionar C-s y la búsqueda comienza desde el principio del archivo.

Es un comportamiento muy útil y me ocurre con más frecuencia que escribir mal la cadena de búsqueda. Si hay un error en la cadena de búsqueda, simplemente puede presionar C-g para volver a la última cadena de búsqueda.

+0

No, no funcionará para mí. Durante años utilizo la macro especial que me lleva a la parte superior del archivo. Estar absolutamente seguro de que no me perderé nada. Me acostumbré a este enfoque y me gustaría dejar automáticamente una parte incorrecta. Y en otros editores es posible. – dmgus

+0

Luego pregunte a los muchachos [en la ayuda de emacs] (http://news.gmane.org/gmane.emacs.help) cómo se puede hacer. – Tom

+0

Muchas gracias por este consejo Tom. He preguntado allí y encontré la solución. ¡Muchas gracias a Drew Adams! Aquí están los detalles: http://article.gmane.org/gmane.emacs.help/88152 – dmgus

1

Creo que el problema es que no está pensando en buscar de una manera que sea congruente con la forma en que se ha diseñado la búsqueda, por lo que su pregunta realmente no tiene sentido en el contexto de la búsqueda como actualmente existe

Isearch ya le da exactamente la función que desea, pero tiene que decirle que quiere que suceda escribiendo esa C-g que parece tan vehementemente opuesta a la mecanografía. Si no le dices a isearch qué es lo que quieres hacer, y cuándo quieres que lo haga, ¿cómo se supone que debe saber qué hacer?

Como @Tom intentó explicar, la forma predeterminada es iniciar la búsqueda desde la posición actual en el búfer, y puede reiniciar al principio del búfer si ha escrito algunos caracteres fallidos y luego presione Cs, es un valor muy valioso característica. Estoy seguro de que muchas personas confían en este comportamiento. Su método de utilizar una macro para iniciar siempre una búsqueda al principio del búfer confundiría y confundiría a muchos de nosotros, aunque, por supuesto, no es algo malo para alguien como usted, que está acostumbrado. Sin embargo, significa que el resto de nosotros estamos bastante confundidos por tu disgusto por tener que presionar C-g para eliminar el texto que no coincide.

Piense también por un momento en lo que hace un segundo C-s si lo presiona inmediatamente después de iniciar isearch (en cualquier momento, pero la primera vez en una sesión) (es decir, antes de escribir cualquier otro carácter). Observe en particular qué sucede si su cadena de búsqueda anterior solo coincidiría parcialmente con algo en el búfer actual, y luego presiona Cg (y también observe cómo se presenta la cadena de búsqueda fallida, independientemente de si en parte coincidiría algo en el búfer actual o no).

Considere también cómo su función podría afectar negativamente el uso de multi-isearch-next-buffer-function.

Afirmar que otros editores pueden hacer lo que usted quiere que investigue en emacs realmente no ayuda mucho en su caso.

Creo que lo que realmente desea es un tipo de función de búsqueda ligeramente diferente que solo le permita buscar texto que se encuentre en el búfer en uso, en lugar de la capacidad de search de buscar cualquier cosa que le pase a ese texto existir en el buffer actual o no.

Tal vez isearch-mode podría adaptarse para hacer lo que quieres que haga, pero de una forma u otra, creo que tendrás que escribir algún código elisp. Tal vez podría implementar su nuevo modo de búsqueda como una opción dentro de isearch-mode que puede activarse y desactivarse de la misma manera que se puede activar y desactivar la sensibilidad de mayúsculas y minúsculas; y eso se puede configurar por defecto, de nuevo de la misma manera que la sensibilidad de mayúsculas y minúsculas se puede activar o desactivar de forma predeterminada.

+0

Ya encontré dos soluciones. Greg, pensé en lo que dijiste, pero tengo una referencia especial, como un sistema sobre Emacs, y para este modo en particular necesito ese comportamiento exacto. Para la codificación de acuerdo, podría no ser tan conveniente. – dmgus

0

Como con la mayoría de las otras respuestas, sólo estoy señalando otra característica que ayuda a mitigar el problema descrito. Este es particularmente útil si continúa escribiendo varios caracteres que podrían haber sido buenos después del malo.

M-e es la encuadernación para editar la cadena isearch, y en el caso donde no hay coincidencias para la cadena actual, bastante útilmente coloca el punto en el primer carácter no coincidente.

Así que si usted ha hecho un pequeño error tipográfico, se puede escribir con rapidez M-e, corregir el error y escriba RET para volver a Isearch usando la cadena de búsqueda corregido.

+0

gracias, aunque para mi situación solo es una solución – dmgus

Cuestiones relacionadas