Когда я делаю, 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 bug # 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.