13

我刚刚问了一个相关的问题(setq question),但它明显不同,所以我决定从这个问题开始。

在我的文件中,我定义了与命令.emacs的键绑定:replace-string

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

replace-string进行基本的搜索和替换。假设搜索字符串的第一个字母是小写的,如果case-fold-searchnil则进行replace-string区分大小写的搜索,否则进行不区分大小写的搜索。

问题在于控制“搜索”(如命令)和“搜索和替换”(如命令)case-fold-search的“区分大小写” 。search-forwardreplace-string

问题是我如何让命令replace-string或任何C-r绑定到的)区分search-forward大小写,默认情况下不区分大小写。

也许我需要设置case-fold-searchnil仅用于replace-string命令,但我不知道该怎么做。

4

2 回答 2

11

把它放在你的 .emacs 中:

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

(ad-activate 'replace-string)

这正是你所说的,设置case-fold-searchnil.replace-string

事实上,这几乎就是Emacs Lisp 参考手册中的示例。

在 2021-11-02 上编辑:如上面的链接所示,defadvice不再是推荐的实现方式。新的推荐实施将是

(defun with-case-fold-search (orig-fun &rest args)
  (let ((case-fold-search t))
    (apply orig-fun args)))

(advice-add 'replace-string :around #'with-case-fold-search)
于 2011-03-17T22:46:33.957 回答
7

试试这个不需要建议的方法:

(global-set-key (kbd "C-r") 
    (lambda () 
      (interactive) 
      (let ((case-fold-search nil)) 
        (call-interactively 'replace-string))))
于 2011-03-17T23:13:14.277 回答