Emacs повторно выбирает регион, как это делает ярлык Vim 'gv'

В vim визуальный блок можно вызвать командой 'gv', чтобы можно было легко применить несколько команд. (например, закомментировать, затем отступ, затем do_something_fun).

Как этого добиться в Emacs? [C-xC-x] работает только тогда, когда текущая позиция курсора остается там, где закончился предыдущий блок. Если предыдущий блок был изменен, ближайший должен пройти через «точка-регистр» и «переход к регистру».

Просто мне любопытно, есть ли встроенная команда Emacs, делающая это за один раз.


person Raymond    schedule 24.06.2009    source источник
comment
Ой, зачем переходить с vim на emacs?   -  person Brian    schedule 25.06.2009
comment
Не хочу участвовать в религиозных дебатах по выбору редактора. 2 года назад я перешел на Emacs, и он мне нравится.   -  person Raymond    schedule 25.06.2009
comment
Не могли бы вы подробнее описать, что вы имеете в виду? Я недостаточно знаком с vim, чтобы знать, о чем вы просите.   -  person baudtack    schedule 25.06.2009


Ответы (6)


Если режим Transient Mark выключен, область всегда активна. Если он включен (похоже, это ваша ситуация), вы можете установить mark-even-if-inactive в значение, отличное от nil, чтобы позволить командам региона работать, пока регион не выделен.

Однако обратите внимание, что вы также можете вернуться к предыдущим позициям меток, используя C-u C-SPC - это приведет к появлению кольца меток. Как только вы вернетесь туда, где хотите быть, C-x C-x повторно выделит нужный регион. (Может потребоваться немного поиграть с этой функцией, чтобы почувствовать ее, но именно поэтому я не могу сейчас отказаться от Emacs.)

person Allen    schedule 25.06.2009
comment
Имея это в виду, Emacs кажется более гибким в этом отношении, чем vi. Однако C-x C-x должно хватить в большинстве ситуаций, описанных в OP. - person fotNelton; 10.06.2010

Если я правильно понимаю, о чем вы просите, то вам ничего не нужно делать. Когда вы выбираете регион в emacs, он остается выбранным, пока вы не выберете новый. Таким образом, вы можете выбрать регион, а затем выполнить столько действий, сколько захотите.

person baudtack    schedule 24.06.2009
comment
Использование Emacs 23 (.0.93.1). Спасибо, но это не сработало, как вы упомянули. Я выбираю resion, используя CTRL-SPC для начала, current-posision для конца. Область выделяется после выбора. Применение команды убирает эту подсветку. Я предположил, что это отменяет выбор региона. - person Raymond; 25.06.2009
comment
@Raymond Попробуйте выполнить другое действие. Регион больше не выделяется, но остается выбранным. - person baudtack; 25.06.2009
comment
Больше не работает. Проверьте следующее с последней версией Emacs и с параметром -q --no-splash: выберите несколько строк, M-; чтобы закомментировать строки, затем M-%, чтобы вызвать замену и убедиться, что действие замены не ограничивается ранее выбранными строками. - person Jisang Yoo; 15.03.2013
comment
Таким образом, чтобы повторно выбрать строки, необходимо нажать C-x C-x перед M-%. При включенном режиме CUA это будет C-u C-x C-x вместо C-x C-x. - person Jisang Yoo; 15.03.2013
comment
Джисан Ю: Обратите внимание, что замена в области применяется только к активным областям в переходном режиме отметки (то есть когда область выделена). Итак, этот ответ никогда не применялся к командам с этим ограничением; но это было (и остается) полностью справедливым для остальных. Подсказка в виде обменного пункта и отметки - это, безусловно, лучший способ повторно активировать / выделить регион в большинстве ситуаций. - person phils; 11.09.2013

Похоже, вы ищете вторичный выбор, который остается на месте, даже если регион может измениться. (Он остается на месте, пока вы его не переместите.)

Видеть:

person Drew    schedule 05.09.2011

Также сужение до области (CTRL-x n n) применяет каждую команду с этого момента только к этой области - вы не можете повредить остальную часть буфера, она даже не отображается. После завершения редактирования разверните (CTRL-x n w), чтобы вернуть весь буфер. CMM

person user326116    schedule 26.04.2010

Если вы используете evil-mode, просто нажмите gv, как в vim.

person William    schedule 26.08.2018

Поскольку ответы здесь и на другие подобные вопросы SO мне не помогли (режим CUA, Emacs 24, не только с жестким отступом), я продолжил поиск и, наконец, нашел reselect-last-region, определенный в этом коллекция настраиваемых функций (начальная строка 670). Это подействовало на меня как на чары - и, надеюсь, на других, все еще прибывающих сюда.

person Frank Ruben    schedule 11.09.2013