大文字と小文字を区別するクエリ置換を実行する方法は?


15

私が行うときM-x query-replaceのすべての出現交換するvことによりをw、それも一致するV(大文字V)。emacsに小文字のみを検出させるにはv


「大文字と小文字を区別しない」はデフォルトの動作であり、検索では大文字と小文字は区別されません。1つのケースのみを一致させたい場合は、「大文字と小文字を区別する」必要があります。(私は、必要に応じて編集をロールバックすること自由に感じ、あまりにも何かを逃すかもしれない)
T. Verron

@ T.Verron私は今確信しています、あなたは正しいです。
名前

回答:


13
(customize-set-variable case-fold-search  nil)

または、それ以外の場合は単なるラッパーである独自のコマンドでその変数(オプション)をバインドしますquery-replace。これには、クエリ置換以外の一般的な使用のために変数値を変更しないという利点があります。

case-replace置換テキストの大文字と小文字を制御するvariableも参照してください。

を参照してくださいC-h f query-replace、例:

case-fold-searchnil以外で、FROM-STRINGに大文字がない場合、一致は大文字と小文字を区別しません。case-replaceおよび case-fold-searchが非nilで、FROM-STRINGに大文字がない場合、置換は古いテキストの大文字と小文字のパターンを新しいテキストに転送します

以下のコメントとEmacsのバグ#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中にできるように、オンザフライで変更できたらうれしいです。しかし、残念ながらモードマップがあります。isearchM-cquery-replace
カウシャルモディ

2
@kaushalmodi:通常は、それはにそのためのキーバインディングを追加するような単純なようになり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前に見つけなかったのかわからない。
カウシャルモディ

1
私はそのバグレポートを提出しました(#20687)。解決策はそのバグレポートにあります。変更perform-replaceするだけでcond、で定義したキーを呼び出す追加の句を追加できますquery-replace-map。catch-all 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.一致
名前
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.