Как выбрать или выделить блок в Emacs?

Я хочу выделить или выделить блок в Emacs, не используя мышь, но делая это с клавиатуры, как VIM Visual Mode. Какой самый простой способ сделать это с клавиатуры?

Ответ 1

Взгляните на прямоугольник области в emacs.

Короче говоря, вы начинаете выбор, как обычно, с Control - Space, затем уничтожайте область с помощью Control - x r k и вставляйте (или yank) убитый блок с помощью Control - x r y.

Ответ 2

Если я правильно понял вопрос, это не касается первоначально прямоугольных областей.

C-Spc помещает отметку в текущую позицию.

В любом месте, где находится ваш курсор, текст между последней меткой и текущей позицией "выбран" (вы можете выделить это, активировав transient-mark-mode, но это также означает, что метки должны быть удалены, если вы не хотите выделить).

Вы можете работать в этом регионе с такими командами, как:

C-w., Убить регион. Это удаляет и помещает регион в кольцо уничтожения.
C-y., Вырезание. Это вставляет последний фрагмент из кольца уничтожения.
M-y., Циклическое кольцо. Сразу после C-y это заменяет дергаемую часть другими фрагментами в кольце уничтожения.
M-w., Сохраните область в кольцо убийства. Как C-w, но не удаляет.

Это просто основное использование. Знаки также используются в других целях. Я рекомендую учебник (C-h t).

Ответ 3

Emacs 24.4 теперь имеет режим прямоугольной метки. C-x для его вызова.

Ответ 5

Хотя C-SPC является обычным способом начать что-то отмечать, где бы вы ни находились, часто бывают более быстрые/более простые способы, которые не предполагают явного перехода к начальной/конечной точке...

Встроенные ярлыки выбора

  • Mh - важное средство для выделения абзаца. "Абзац" часто означает блок кода.

  • C-Mh и [email protected] - для обозначения sexps и defuns соответственно. Это работает для нескольких языков, а не только для шуток.

  • Удерживайте нажатой клавишу Shift - еще один приятный способ выделить во время движения. Например, MSf выделяет вперед целое слово. Это shift-select-mode, и он включен по умолчанию в Emacs 24+. На некоторых (не chiclet) клавиатурах вы сможете удерживать C-S- одним мизинцем.

Вы можете нажать любую из них несколько раз, чтобы увеличить выбор.

(ПРИМЕЧАНИЕ: часто используйте C-g для отмены маркировки во время экспериментов.)

Дополнения

Есть несколько дополнительных пакетов, которые улучшают выбор регионов и вещей. Все они прекрасно сочетаются друг с другом и подходят для разных вариантов использования. Используйте их всех!

  • Expand-Region: Expand region увеличивает выделенную область на семантические единицы. Просто продолжайте нажимать клавишу, пока она не выберет то, что вы хотите. C-= рекомендуемое связывание для него. Нажмите несколько раз, чтобы получить то, что вам нужно.

  • Easy-Kill: используйте Mw и мнемонику для выбора различных типов вещей, таких как слова, sexps, списки и т.д.

  • Zop-to-Char: Как и zap-to-char, но предоставляет хороший выбор и другие действия, управляемые меню.

  • diff-hl: выделение незафиксированных измененных регионов. Используйте diff-hl-mark-hunk чтобы выбрать/пометить кусок.

Ответ 6

Используйте Control - Space для установки метки и перемещения курсора.

transient-mark-mode выделит для вас выбор. M - x transient-mark-mode.

Вы можете настроить Emacs для включения этого режима по умолчанию с помощью настройки. M - x customize-option RET transient-mark-mode.

Ответ 7

... и если вы используете Ubuntu и C-spc не работает для вас: вам нужно очистить клавиатуру IBus "следующий входной метод", как в

запустите ibus-setup и измените привязку клавиш для "следующий метод ввода" на что-то другое (или полностью удалить его нажав кнопку "...", а затем кнопку "Удалить" ).

Цитата из ответ на вопрос SO.

Ответ 8

Чтобы расширить ответ Эдина Салковича, если вы используете режим CUA, вы можете использовать, чтобы начать выбор визуального блока. Существует множество ярлыков для управления выбором блока, описанным в документации по CUA.

Ответ 9

В Emacs 25 просто нажмите C - Space, а затем переместите курсор туда, где вы хотите выделить/выбрать область текста, которая вас интересует. После этого вам могут понадобиться следующие команды:

  • C - w для резки.
  • M - w для копирования.
  • C - y для вставки.