Коли я 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.