¿Cómo realizar un reemplazo de consulta sensible a mayúsculas y minúsculas?

15

Cuando hago M-x query-replacepara reemplazar todas las apariciones de vby w, entonces también coincide V(mayúscula V). ¿Cómo forzar a emacs a encontrar solo minúsculas v?

Nombre
fuente
"No distingue entre mayúsculas y minúsculas" es el comportamiento predeterminado, donde el caso no importa en la búsqueda. Si desea hacer coincidir solo un caso, es "sensible a mayúsculas y minúsculas" lo que desea. (También podría perder algo, siéntase libre de revertir la edición si es necesario)
T. Verron
@ T.Verron Estoy convencido ahora, tienes razón.
Nombre

Respuestas:

13
(customize-set-variable case-fold-search  nil)

O vincule esa variable (opción) en su propio comando que, de lo contrario, es solo un contenedor query-replace. Esto tiene la ventaja de que no cambia el valor de la variable para uso general, fuera del reemplazo de consultas.

Vea también variable case-replace, que controla el caso para el texto de reemplazo.

Vea también C-h f query-replace, donde dice, por ejemplo:

La coincidencia es independiente del caso si case-fold-searchno es nula y FROM-STRING no tiene letras mayúsculas. Reemplazar transfiere el patrón de mayúsculas y minúsculas del texto antiguo al texto nuevo, si case-replacey case-fold-searchno son nulos y FROM-STRING no tiene mayúsculas

Vea también los comentarios a continuación, y el error Emacs # 20687 , donde muestra cómo puede parchar perform-replacepara permitirle alternar el plegado de la caja durante query-replace.


Tenga en cuenta también que el código existente para perform-replaceenlaces case-fold-searchde esta manera (tenga en cuenta las variables de las que depende):

(case-fold-search  (if (and case-fold-search search-upper-case)
                       (isearch-no-upper-case-p from-string regexp-flag)
                     case-fold-search))
Dibujó
fuente
Hubiera sido bueno cambiar case-fold-searchsobre la marcha como podemos hacer durante el isearchuso de la M-cunión. Pero desafortunadamente query-replacetiene su mapa de modos.
Kaushal Modi
2
@kaushalmodi: Normalmente, sería tan simple como agregar un enlace clave para eso a query-replace-map: (defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search)))y (define-key query-replace-map "C" 'toggle-case). Pero el manejo de claves en ese mapa está codificado perform-replace. Es posible que desee M-x report-emacs-bug, para que el perform-replacecódigo sea más abierto, de modo que se puedan agregar claves al mapa. Al menos debería tener una cláusula alternativa que solo invoque el cmd vinculado a la clave.
Dibujó
¡Gracias! No estoy seguro de por qué no lo encontré query-replace-mapantes.
Kaushal Modi
1
He presentado ese informe de error ahora (# 20687 ). La solución está en ese informe de error: simplemente modifique perform-replacepara agregar una condcláusula adicional que invoque la clave que ha definido query-replace-map. Ponga la nueva cláusula justo antes de la tcláusula general. Esta es la nueva cláusula: (def (call-interactively def)). No podría ser más simple.
Dibujó
(customize-set-variable case-fold-search nil)da el error customize-set-variable: Attempt to set a constant symbol: nil. También probé tanto (setq case-fold-search nil), y (setq case-replace nil)aunque la consulta aún coincidir con el V. mayúscula
Nombre