Emacsでxとxに挟まれた空白を確認つきで削除したい


Emacsで“ある文字A”と“ある文字B”に挟まれた“ある文字C”を、確認つき（query）で削除するコマンドを教えてください。

具体例として、「2つの“x”に挟まれた空白1つだけを削除する」ことにします。これを実行するコマンドを教えてください。

ここで、バッファが以下の内容となっているとします。

[code]

    x x x x y
    
[/code]

望む結果は以下のとおりです。

[code]

    xxxx y
    
[/code]

たとえば`M-% x x RET xx RET`を実行した場合は、`!`で全部置換しても当然以下のようになり、要件を満たしません。

[code]

    xx xx y
    
[/code]

置換を2回実行するか、replace-search-
functionを再定義するぐらいしか思いつかないのですが、よくあるシチュエーションで解がすでにあるのではないかと思ってお聞きします。




`query-replace-regexp` のドキュメントによると

[code]

    In interactive calls, the replacement text can contain `\,'
    followed by a Lisp expression.  Each
    replacement evaluates that expression to compute the replacement
    string.  Inside of that expression, `\&' is a string denoting the
    whole match as a string, `\N' for a partial match, `\#&' and `\#N'
    for the whole or a partial match converted to a number with
    `string-to-number', and `\#' itself for the number of replacements
    done so far (starting with zero).
    
[/code]

Lisp 式が書けるので、

[code]

    \(x \)+x
    
[/code]

を

[code]

    \,(replace-regexp-in-string " " "" \&)
    
[/code]

もしくは

[code]

    \,(make-string (1+ (/ (length \&) 2)) ?x)
    
[/code]

に置換することでできます。

