Emacs регистрозависимая строка замены - PullRequest
11 голосов
/ 18 марта 2011

Я только что задал связанный вопрос ( setq question ), но он явно отличается, поэтому я решил уйти с этим вопросом.

В моем файле .emacs я определяю привязку ключа к команде replace-string:

(define-key global-map "\C-r" 'replace-string)

replace-string выполняет основной поиск и замену. Предполагая, что первая буква строки поиска строчная, если case-fold-search равен nil, то replace-string выполняет поиск с учетом регистра, в противном случае поиск выполняется без учета регистра.

Проблема в том, что case-fold-search контролирует "чувствительность к регистру" как "поиска" (как команда search-forward), так и "поиска и замены" (как команда replace-string).

Вопрос в том, как сделать JUST команду replace-string (или что-либо связанное с C-r) чувствительной к регистру, оставляя search-forward без учета регистра, как это по умолчанию.

Возможно, мне нужно было бы установить case-fold-search на nil только для команды replace-string, но я не уверен, как это сделать.

Ответы [ 2 ]

10 голосов
/ 18 марта 2011

Поместите это в ваш .emacs:

(defadvice replace-string (around turn-off-case-fold-search)
  (let ((case-fold-search nil))
    ad-do-it))

(ad-activate 'replace-string)

Это именно то, что вы сказали, установите case-fold-search в nil только для replace-string.

На самом деле этоПример почти такой же, как в справочном руководстве Emacs Lisp .

6 голосов
/ 18 марта 2011

Попробуйте этот метод, который не требует совета:

(global-set-key (kbd "C-r") 
    (lambda () 
      (interactive) 
      (let ((case-fold-search nil)) 
        (call-interactively 'replace-string))))
...