Kiedy zrobić M-x query-replace, aby zastąpić wszystkie wystąpienia vprzez w, to również mecze V(wielkimi literami V). Jak zmusić emacsa do wyszukiwania małych liter v?
Kiedy zrobić M-x query-replace, aby zastąpić wszystkie wystąpienia vprzez w, to również mecze V(wielkimi literami V). Jak zmusić emacsa do wyszukiwania małych liter v?
Odpowiedzi:
(customize-set-variable case-fold-search nil)
Lub powiąż tę zmienną (opcję) w swoim własnym poleceniu, które w przeciwnym razie jest tylko opakowaniem query-replace. Ma to tę zaletę, że nie zmienia wartości zmiennej do ogólnego użytku poza zastępowaniem zapytań.
Zobacz także zmienna case-replace, która kontroluje wielkość liter dla tekstu zastępczego.
Zobacz także C-h f query-replacetam, gdzie jest napisane, na przykład:
Dopasowanie jest niezależne od wielkości liter, jeśli
case-fold-searchjest inne niż zero, a FROM-STRING nie ma wielkich liter. Zastąpienie przenosi wzór wielkości liter starego tekstu na nowy tekst, jeślicase-replaceicase-fold-searchnie są zerowe, a FROM-STRING nie ma wielkich liter
Zobacz także poniższe komentarze i błąd Emacsa # 20687 , w którym pokazano, jak można załatać, perform-replaceaby umożliwić przełączanie składania skrzynek podczas query-replace.
Zauważ też, że istniejący kod dla perform-replacepowiązań case-fold-searchw ten sposób (zwróć uwagę na zmienne, od których zależy):
(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-searchw locie, jak możemy to zrobić podczas isearchkorzystania z M-cwiązania. Ale niestety query-replacema swoją mapę trybów.
query-replace-map: (defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search)))i (define-key query-replace-map "C" 'toggle-case). Ale obsługa kluczy na tej mapie jest na stałe zakodowana perform-replace. Możesz chcieć M-x report-emacs-bug, aby perform-replacekod był bardziej otwarty, aby klucze mogły być dodawane do mapy. Powinien mieć przynajmniej klauzulę rezerwową, która po prostu wywołuje cmd powiązane z kluczem.
query-replace-map.
perform-replaceaby dodać dodatkową condklauzulę, która wywołuje zdefiniowany klucz query-replace-map. Umieść nową klauzulę tuż przed klauzulą catch-all t. Jest to nowa klauzula: (def (call-interactively def)). Nie może być prościej.
(customize-set-variable case-fold-search nil)daje błąd customize-set-variable: Attempt to set a constant symbol: nil. Również próbowałem zarówno (setq case-fold-search nil)i (setq case-replace nil)ale kwerenda jeszcze dopasować wielką V.