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

85

Я хочу выбрать или выделить блок в emacs без использования мыши, но делаю это с клавиатуры, как в визуальном режиме vim. Как проще всего это сделать с клавиатуры?

неисправность системы
источник
2
CMhmark-defun
завершающая косая черта

Ответы:

66

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

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

Марко
источник
12
Это не убивает регионы, это убивает прямоугольники, что, по моему опыту, сильно отличается от того, что делает визуальный режим vim.
Аллен
74

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

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

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

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

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

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

Сванте
источник
6
Стоит отметить, что C-s C-rв данном контексте обычно используются для поиска конца / начала региона. (Особенно полезно в макросах.)
ocodo
Что ж, это очень хорошие команды, но ... Как выбрать отмеченный регион? Ведь он мне еще нужен, то есть для отступа кода между метками.
Hi-Angel
Область между последней меткой и текущей точкой (где находится курсор) - это выбранная область. Просто беги M-x indent-region.
Svante
@Svante Нет, не выбрано. Хотя он indent-regionработает нормально, но c-indent-line-or-region(тот, что привязан к клавише табуляции ) нет. Последняя функция работает не с отмеченными областями, а с выделенными , т.е. с выделенной областью, как если бы вы выбрали ее мышью.
Hi-Angel
2
@YagamyLight А, это можно сделать, C-Spcдважды ударив по месту, на которое поставили метку. Это временно активирует переходный режим отметки (пока вы не отмените (с C-g)). Затем переместите точку, чтобы увидеть, как появится выбранная область.
Svante
32

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

Кристофер М. Хоббс
источник
1
Как переместить прямоугольный блок?
Stryker
12

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

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

  • M-h- важное средство отметить абзац . «Абзац» часто означает блок кода.

  • C-M-hи C-M-@- для обозначения sexps и defuns соответственно. Это работает для нескольких языков, а не только для шепелявых.

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

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

Есть также несколько специальных способов пометить вещи:

  • C-x h- отметить весь буфер

  • C-x SPC- войти в режим прямоугольной метки

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

Дополнения

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

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

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

  • zop-to-char : аналогично zap-to-char , но обеспечивает удобный выбор и другие действия, управляемые меню.

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

  • наложение символа : выберите символ в точке нажатием клавиши (M-i). Затем вы можете делать с ним другие вещи, например копировать, искать, переходить, заменять и т. Д.

Мика Эллиотт
источник
7

Используйте Control-, Spaceчтобы установить отметку и переместить курсор.

transient-mark-modeПодчеркнет выбор для вас. M- x transient-mark-mode.

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

Ремви
источник
1

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

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

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

serv-inc
источник
0

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

Жером Пуйлер
источник
-1

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

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