Як виконати запит із заміною регістру?


16

Коли я M-x query-replaceзаміню всі події vна w, то він також відповідає V(великі регістри V). Як змусити emacs знаходити лише малі літери v?


"Нечутливий до випадків" - це поведінка за замовчуванням, де справа не має значення в пошуку. Якщо ви хочете відповідати лише одній справі, ви хочете "залежно від регістру". (Я теж можу щось пропустити, сміливо відкатуйте редагування, якщо потрібно)
Т. Веррон,

@ T.Verron Я зараз переконаний, ти маєш рацію.
Ім'я

Відповіді:


13
(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, є своя карта режимів.
Каушал Моді

2
@kaushalmodi: Як правило, це було б просто додати ключ прив'язки для того , щоб 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раніше не знайшов .
Каушал Моді

1
Я подав цей звіт про помилку зараз (# 20687 ). Рішення в цьому звіті про помилку: Просто змініть, 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.
Ім'я
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.