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