Поиск и замена в Emacs с помощью сосульков

Я использую Emacs какое-то время, и я пытаюсь использовать сосульки. Когда я запускаю последовательность команд

C-c' \([az]*\)

S-TAB

C-| x\1y

он преобразует буфер нуля из

;; This buffer is for notes you don't want to save, and for Lisp evaluation.
;; If you want to create a file, visit that file with C-x C-f,
;; then enter the text in that file own buffer.

в

;; Xy xy xy xy xy xy xy'xy xy xy xy, xy xy Xy xy.
;; Xy xy xy xy xy xy xy, xy xy xy xy XY-xy XY-xy,
;; xy xy xy xy xy xy xy'xy xy xy.

Мое понимание заключается в том, что вместо этого он должен привязать "x" к началу каждого слова, а "y" - к концу каждого слова. Что я здесь делаю неправильно? Я пробовал это с помощью emacs -Q и получил те же результаты. Кроме того, icicle-search-replace-literally-flag не изменяется от значения по умолчанию nil. Что я делаю не так? Благодарю!

Изменение: Извините, я опустил группу в regexp в исходном сообщении; однако, я использовал его в тесте и все равно получаю тот же результат.

2 ответа

Убедитесь, что ваша версия файла icicles-cmd2.el датируется после 2013-12-10. В эту дату я исправил ошибку wrt \N

Другие предложения:

  • Действуйте медленно, а не сразу прыгать в сложные замены и т.д. Сосульки поиск и замена отличаются от того, что вы могли бы быть использованы или ожидать.

  • Проверьте текущие значения всех параметров пользователя, которые влияют на поиск и заменуIcicles.


Я не использую сосульки, но эффект воспроизводится с помощью обычного query-replace-regexp.

Проблема в том, что вы просто не определяете какую-либо группу в своем регулярном выражении, о которой вы говорите в замещении. Поэтому групповая ссылка \1 в заменяющей строке пуста.

Кроме того, вы должны использовать [az]+ вместо [az]* поскольку [az]* также соответствует пустой строке, что вы, вероятно, не хотите.

Чтобы помещать материал, который вы хотите связать, в группу оберните его paranthesis \(\). В вашем примере регулярное выражение будет выглядеть как \([az]+\). С помощью этого регулярного выражения вы можете напрямую использовать свою заменяющую строку.

Альтернативой является оставить регулярное выражение так, как оно есть, и ссылаться на весь матч с \& вместо \1 в вашей заменяющей строке.

licensed under cc by-sa 3.0 with attribution.