Wenn ich tue M-x query-replace, um alle Vorkommen von vdurch 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 vdurch 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-searchnicht 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-replaceundcase-fold-searchohne 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-replaceBindungen case-fold-searchauf 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 isearchVerwendung der M-cBindung tun können . Hat aber leider query-replaceseine 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-replaceCode 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 condKlausel hinzuzufügen , die den von Ihnen definierten Schlüssel aufruft query-replace-map. Setzen Sie die neue Klausel direkt vor die Catch-All- tKlausel. 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.