13

関連する質問 ( setq question ) をしたところですが、明らかに違うので、この質問で分岐することにしました。

私のファイルでは、コマンド.emacsへのキー バインディングを定義します。replace-string

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

replace-string基本的な検索と置換を行います。検索文字列の最初の文字が小文字であると仮定すると、大文字と小文字を区別する検索が行われ、それ以外の場合case-fold-searchは大文字と小文字を区別しない検索が行われます。nilreplace-string

問題は、 「検索」(コマンドなど)と「検索と置換」(コマンドなど)case-fold-searchの両方の「大文字と小文字の区別」を制御することです。search-forwardreplace-string

問題は、デフォルトで大文字と小文字を区別しないままにして、JUSTreplace-stringコマンド(または何かC-rにバインドされているもの)を大文字と小文字を区別する方法です。search-forward

おそらく、コマンドのためだけに設定case-fold-searchする必要がありますが、その方法がわかりません。nilreplace-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-search行いnilますreplace-string

実際、これはEmacs Lisp リファレンス マニュアルの例とほとんど同じです。

2021 年 11 月 2 日に編集:上記のリンクが示す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 に答える