2011-03-17 11 views
11

Acabo de hacer una pregunta relacionada (setq question) pero es muy diferente, así que decidí seguir con esta pregunta.Emacs Case Sensitive Replace String

En mi archivo .emacs, que definen una clave de unión al comando replace-string:

(define-key global-map "\C-r" 'replace-string) 

replace-string qué la búsqueda básica y reemplazar. Suponiendo que la primera letra de la cadena de búsqueda está en minúscula, si case-fold-search es nil, entonces replace-string realiza la búsqueda con distinción de mayúsculas y minúsculas; de lo contrario, realiza búsquedas insensibles a mayúsculas y minúsculas.

El problema es que case-fold-search controla la "sensibilidad a las mayúsculas y minúsculas" de "búsqueda" (como el comando search-forward) y "buscar y reemplazar" (como el comando replace-string).

La pregunta es ¿cómo puedo hacer SOLO la replace-string de comandos (o nada C-r está obligado a) entre mayúsculas y minúsculas, dejando el search-forward entre mayúsculas y minúsculas, ya que es por defecto.

Quizás necesite establecer case-fold-search en nil solo para el comando replace-string, pero no estoy seguro de cómo hacerlo.

Respuesta

10

poner esto en su .emacs:

(defadvice replace-string (around turn-off-case-fold-search) 
    (let ((case-fold-search nil)) 
    ad-do-it)) 

(ad-activate 'replace-string) 

Esto es exactamente lo que ha dicho, establece case-fold-search-nil sólo para replace-string.

De hecho, este es casi exactamente el ejemplo en el Emacs Lisp reference manual.

6

Prueba este método, que no requiere consejos:

(global-set-key (kbd "C-r") 
    (lambda() 
     (interactive) 
     (let ((case-fold-search nil)) 
     (call-interactively 'replace-string)))) 
Cuestiones relacionadas