Kiedy zrobić M-x query-replace
, aby zastąpić wszystkie wystąpienia v
przez 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 v
przez 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-replace
tam, gdzie jest napisane, na przykład:
Dopasowanie jest niezależne od wielkości liter, jeśli
case-fold-search
jest 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-replace
icase-fold-search
nie 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-replace
aby umożliwić przełączanie składania skrzynek podczas query-replace
.
Zauważ też, że istniejący kod dla perform-replace
powiązań case-fold-search
w 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-search
w locie, jak możemy to zrobić podczas isearch
korzystania z M-c
wiązania. Ale niestety query-replace
ma 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-replace
kod 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-replace
aby dodać dodatkową cond
klauzulę, 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.