Quando lo faccio M-x query-replaceper sostituire tutte le occorrenze di vby w, allora corrisponde anche V(maiuscolo V). Come forzare gli emacs a trovare solo lettere minuscole v?
Quando lo faccio M-x query-replaceper sostituire tutte le occorrenze di vby 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-replaceecase-fold-searchsono 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-replaceper permetterti di attivare o disattivare la piegatura del case durante query-replace.
Si noti inoltre che il codice esistente per si perform-replacelega case-fold-searchin 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-searchal volo come possiamo fare durante l' isearchuso della M-crilegatura. Ma sfortunatamente query-replaceha 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-bugil perform-replacecodice 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-mapprima.
perform-replaceper aggiungere una condclausola aggiuntiva che invoca la chiave definita query-replace-map. Inserire la nuova clausola appena prima della tclausola 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