Коли я M-x query-replace
заміню всі події v
на w
, то він також відповідає V
(великі регістри V
). Як змусити emacs знаходити лише малі літери v
?
Коли я M-x query-replace
заміню всі події v
на w
, то він також відповідає V
(великі регістри V
). Як змусити emacs знаходити лише малі літери v
?
Відповіді:
(customize-set-variable case-fold-search nil)
Або зв’яжіть ту змінну (опцію) у власній команді, яка інакше є лише обгорткою навколо query-replace
. Це має перевагу в тому, що воно не змінює значення змінної для загального використання, поза заміною запитів.
Дивіться також змінну case-replace
, яка керує регістром для тексту заміни.
Дивіться також C-h f query-replace
, де це написано, наприклад:
Збіг не залежить від випадків, якщо
case-fold-search
він не відповідає нулю, а FROM-STRING не має великих літер. Заміна переносить випадок регістру старого тексту до нового тексту, якщоcase-replace
іcase-fold-search
не є нульовим, і FROM-STRING не має верхнього регістру
Дивіться також коментарі нижче та помилку Emacs №20687 , де показано, як можна perform-replace
виконати виправлення, щоб перемикати складання корпусу під час query-replace
.
Зауважте також, що існуючий код для perform-replace
прив'язки case-fold-search
таким чином (зверніть увагу на змінні, від яких це залежить):
(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
на льоту, як ми можемо це зробити під час isearch
використання M-c
палітурки. Але, на жаль query-replace
, є своя карта режимів.
query-replace-map
: (defun toggle-case () (interactive) (setq case-fold-search (not case-fold-search)))
а (define-key query-replace-map "C" 'toggle-case)
. Але обробка ключів на цій карті важко кодована perform-replace
. Можливо, ви хочете M-x report-emacs-bug
, щоб perform-replace
код був більш відкритим, тому ключі можна додавати на карту. У ньому має бути принаймні резервне застереження, яке просто викликає cmd, прив'язаний до ключа.
query-replace-map
раніше не знайшов .
perform-replace
щоб додати додатковий cond
пункт, який викликає ключ, визначений у query-replace-map
. Поставте нове застереження безпосередньо перед загальним t
положенням. Це новий розділ: (def (call-interactively def))
. Не може бути простішим.
(customize-set-variable case-fold-search nil)
дає помилку customize-set-variable: Attempt to set a constant symbol: nil
. Також я спробував і те, (setq case-fold-search nil)
і інше, (setq case-replace nil)
але запит все ще відповідає великому регістру V.