9

形式t [A-Z]uの正規表現に一致するファイル内のテキスト(つまり、一致tの後に大文字が続き、別の一致u ) を検索し、一致したテキストを大文字が小文字になるように変換したいと考えています。たとえば、正規表現のためにx[A-Z]y

xAy

になる

xay

xZy

になる

xzy

Emacsのquery-replace機能は後方参照を許可しますが、AFAIKでは一致したテキストの変換は許可しません。これを行う組み込み関数はありますか?私が使用できる短い Elisp 関数を持っている人はいますか?

アップデート

@Marcel Levyはそれを持っています:\,置換式で(任意の?)Elisp式を導入します。たとえば、上記の解決策は

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
4

3 に答える 3

14

実際、 Steve Yeggeは数年前にこれに対する回答を既に投稿しているようです。 「Shiny and New: Emacs 22」。「置換文字列の大文字と小文字の変更」まで下にスクロールすると、replace-regexp関数を使用した彼のサンプル コードが表示されます。

一般的な答えは、"\," を使用して、置換文字列の一部として任意の Lisp 式を呼び出すこと\,(capitalize \1)です。ヘルプ テキストを読むと、対話モードのみのように見えますが、これが最も必要な場所のようです。

于 2008-09-11T22:19:19.673 に答える
1

この場合のqrrの代わりに、マクロを記録して再生することもできます。(isearch-forward-regexp、文字、小文字の領域を選択します。)正規表現が間違っているとすぐにフィードバックが得られるので、その場でマクロを簡単に見つけることができます。

于 2008-09-15T22:54:06.560 に答える
0

これはマクロでも行いますが、正規表現の置換文字列内からコードを実行するのは非常に直感的ではないためです。バッチスクリプトなど、非常に高速にする必要があるものを作成している場合は、\が確実に実行できます。

于 2008-09-16T06:16:49.600 に答える