Emacs запрос-замена перейти к началу буфера

Я использую Emacs 23.4.1. В большинстве случаев замена запросов работает нормально, как и ожидалось. Однако иногда, когда я пытаюсь заменить что-то в середине буфера и типа y для первого появления после точки, точка сразу перейдет к первому появлению всего буфера. Например:

foo ------- // начало

bar ------- // использовать замену foo с bar Вот

foo ------- // type y здесь, затем перейти к началу

Это очень раздражает, и я не могу воспроизвести эту проблему, используя некоторые точные данные. Но каждый раз, когда это происходит, закройте emacs и снова откройте его. Кто-нибудь может мне помочь?

5 ответов

Еще одно наблюдение: я замечаю ту же проблему, точка даже несколько раз прыгает туда-сюда. Я мог бы заставить его исчезнуть, отключив перехватчики семантических изменений с помощью (setq semantic-change-hooks nil). semantic-change-hooks был установлен для запуска semantic-edits-change-function-handle-changes. Все это происходит в semantic-edit.el, который добавляет функцию semantic-change к функциям after-change. Короче говоря, я не могу указать пальцем на фактического виновника, но это связано с семантикой, что также было моим первоначальным подозрением (и я думаю, что jhh's упомянул CEDET).

Примечание: отключение перехватчиков семантических изменений не является решением, если вы не хотите отказаться от какой-либо семантической функциональности.

Функция query-replace снова показала раздражающее поведение поиска слова для замены с начала после замены слова где-то в середине текста нажатием клавиши "y".

Что я узнал сейчас:

Нажатие CTRL-пробела один раз ничего не меняет, но нажатие CTRL-пробела CTRL-пробел (поэтому вызовите эту команду дважды -> активация метки и ее деактивация) заставляет запрос-замену снова работать.

Обновление: когда проблема снова возникла, двойное нажатие клавиши C-space НЕ помогло. Таким образом, это не обходной путь.

Просто замечание, которое я сделал сегодня: я использую Emacs 23.2.1 и у меня та же проблема, что и описанная выше. Итак, я протестировал query-replace при запуске emacs с опцией -q. Тогда это сработало, поэтому думал, что причиной проблемы является мой ".emacs". Позже я обнаружил, что второй экземпляр emacs, начинающийся с того же самого.emacs, не имеет проблемы, в то время как первый экземпляр все еще имеет проблему. К сожалению, проблема возвращается через некоторое время кодирования, компиляции с использованием CEDET. В конце концов, я также не могу воспроизвести проблему в настоящее время и не знаю, что ее вызывает.

query-replace делает предположение, с чего начать:

... (if (и transient-mark-mode mark-active) (регион-начало))

Чтобы убедиться, что отметка не выше, введите \C-<SPACE> в начале, т.е. установить отметку в текущей позиции.

Если я установлю метку (используя C-пробел непосредственно перед регионом, где слова для замены находятся внутри), а затем вызову команду query-replace, то она немедленно остановится, ничего не заменив.

Другие вопросы по тегам