Wenn ich tue M-x query-replace
, um alle Vorkommen von v
durch zu ersetzen w
, dann stimmt es auch überein V
(Großbuchstaben V
). Wie man Emacs zwingt, nur Kleinbuchstaben zu finden v
?
Wenn ich tue M-x query-replace
, um alle Vorkommen von v
durch zu ersetzen w
, dann stimmt es auch überein V
(Großbuchstaben V
). Wie man Emacs zwingt, nur Kleinbuchstaben zu finden v
?
Antworten:
(customize-set-variable case-fold-search nil)
Oder binden Sie diese Variable (Option) in Ihrem eigenen Befehl, der sonst nur ein Wrapper ist query-replace
. Dies hat den Vorteil, dass der Variablenwert für die allgemeine Verwendung außerhalb des Ersetzens von Abfragen nicht geändert wird.
Siehe auch Variable case-replace
, die Groß- und Kleinschreibung für den Ersetzungstext steuert.
Siehe auch C-h f query-replace
, wo es heißt, zum Beispiel:
Die Übereinstimmung ist unabhängig von der Groß- / Kleinschreibung, wenn sie
case-fold-search
nicht null ist und FROM-STRING keine Großbuchstaben enthält. Beim Ersetzen wird das Groß- / Kleinschreibungsmuster des alten Textes in den neuen Text übertragen, wenncase-replace
undcase-fold-search
ohne Null und FROM-STRING kein Großbuchstabe vorhanden ist
Siehe auch die Kommentare unten und den Emacs-Fehler Nr. 20687 , in dem gezeigt wird, wie Sie patchen können perform-replace
, um das Falten von Groß- und Kleinschreibung während des Patchens umzuschaltenquery-replace
.
Beachten Sie auch, dass der vorhandene Code für perform-replace
Bindungen case-fold-search
auf diese Weise (beachten Sie die Variablen, von denen es abhängt):
(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
, wie wir es bei der isearch
Verwendung der M-c
Bindung tun können . Hat aber leider query-replace
seine mode map.
query-replace-map
: (defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search)))
und (define-key query-replace-map "C" 'toggle-case)
. Der Umgang mit Schlüsseln in dieser Karte ist jedoch fest programmiert perform-replace
. Möglicherweise möchten Sie M-x report-emacs-bug
, dass der perform-replace
Code offener wird, damit Schlüssel zur Karte hinzugefügt werden können. Zumindest sollte es eine Fallback-Klausel geben, die nur den an den Schlüssel gebundenen Befehl aufruft.
query-replace-map
.
perform-replace
, um eine zusätzliche cond
Klausel hinzuzufügen , die den von Ihnen definierten Schlüssel aufruft query-replace-map
. Setzen Sie die neue Klausel direkt vor die Catch-All- t
Klausel. Dies ist die neue Klausel: (def (call-interactively def))
. Einfacher geht es nicht.
(customize-set-variable case-fold-search nil)
gibt den Fehler aus customize-set-variable: Attempt to set a constant symbol: nil
. Auch ich habe beide ausprobiert (setq case-fold-search nil)
und (setq case-replace nil)
aber die Abfrage stimmt immer noch mit dem Großbuchstaben V überein.