Quando lo faccio M-x query-replace
per sostituire tutte le occorrenze di v
by w
, allora corrisponde anche V
(maiuscolo V
). Come forzare gli emacs a trovare solo lettere minuscole v
?
Quando lo faccio M-x query-replace
per sostituire tutte le occorrenze di v
by w
, allora corrisponde anche V
(maiuscolo V
). Come forzare gli emacs a trovare solo lettere minuscole v
?
Risposte:
(customize-set-variable case-fold-search nil)
O associa quella variabile (opzione) al tuo comando che altrimenti è solo un wrapper query-replace
. Ciò ha il vantaggio di non modificare il valore della variabile per uso generale, al di fuori della sostituzione della query.
Vedi anche variabile case-replace
, che controlla il caso per il testo sostitutivo.
Vedi anche C-h f query-replace
, dove dice, ad esempio:
La corrispondenza è indipendente dal caso se
case-fold-search
è diversa da zero e FROM-STRING non ha lettere maiuscole. La sostituzione trasferisce il modello maiuscolo del vecchio testo nel nuovo testo, secase-replace
ecase-fold-search
sono diversi da zero e FROM-STRING non ha maiuscole
Vedi anche i commenti qui sotto e il bug # 20687 di Emacs , in cui mostra come applicare le patch perform-replace
per permetterti di attivare o disattivare la piegatura del case durante query-replace
.
Si noti inoltre che il codice esistente per si perform-replace
lega case-fold-search
in questo modo (notare le variabili da cui dipende):
(case-fold-search (if (and case-fold-search search-upper-case)
(isearch-no-upper-case-p from-string regexp-flag)
case-fold-search))
case-fold-search
al volo come possiamo fare durante l' isearch
uso della M-c
rilegatura. Ma sfortunatamente query-replace
ha la sua mappa delle modalità.
query-replace-map
: (defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search)))
e (define-key query-replace-map "C" 'toggle-case)
. Ma la gestione delle chiavi in quella mappa è codificata perform-replace
. È possibile che si desideri che M-x report-emacs-bug
il perform-replace
codice sia più aperto, in modo da poter aggiungere le chiavi alla mappa. Dovrebbe almeno avere una clausola di fallback che invoca semplicemente il cmd associato alla chiave.
query-replace-map
prima.
perform-replace
per aggiungere una cond
clausola aggiuntiva che invoca la chiave definita query-replace-map
. Inserire la nuova clausola appena prima della t
clausola generale. Questa è la nuova clausola: (def (call-interactively def))
. Non potrebbe essere più semplice.
(customize-set-variable case-fold-search nil)
dà l'errore customize-set-variable: Attempt to set a constant symbol: nil
. Inoltre ho provato entrambi (setq case-fold-search nil)
e (setq case-replace nil)
ma la query corrisponde ancora alla V maiuscola