Я хочу выбрать или выделить блок в emacs без использования мыши, но делаю это с клавиатуры, как в визуальном режиме vim. Как проще всего это сделать с клавиатуры?
Короче говоря, вы начинаете выделение, как обычно, с помощью Control- Space, затем убиваете область с помощью Control- xrkи вставляете (или восстанавливаете ) убитый блок с помощью Control- xry.
Это не убивает регионы, это убивает прямоугольники, что, по моему опыту, сильно отличается от того, что делает визуальный режим vim.
Аллен
74
Если я правильно понял вопрос, то изначально речь идет не о прямоугольных областях.
C-Spc ставит отметку в текущей позиции.
Где бы ни был ваш курсор после этого, текст между последней меткой и текущей позицией будет «выбран» (вы можете выделить это, активировав transient-mark-mode, но это также будет означать, что метки должны быть удалены, когда вы не хотите выделять).
Вы можете работать с этим регионом с помощью таких команд, как:
C-w. . Убить регион. Это удаляет и помещает регион в список уничтожения. C-y. . Янк. Это вставляет последний фрагмент из списка уничтожений. M-y. . Циклическое кольцо убийства. Сразу после C-yэтого извлеченная часть заменяется другими фрагментами в круге уничтожения. M-w. . Сохраните регион в кольцо убийств. подобноC-w , но не удаляет.
Это просто базовое использование. У знаков есть и другое применение. Я рекомендую учебник ( C-h t).
Стоит отметить, что C-sC-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 пробел для его вызова.
Хотя 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 , но обеспечивает удобный выбор и другие действия, управляемые меню.
наложение символа : выберите символ в точке нажатием клавиши (M-i). Затем вы можете делать с ним другие вещи, например копировать, искать, переходить, заменять и т. Д.
... и в случае, если вы используете Ubuntu и C-spcне работает для вас: вам нужно очистить привязку клавиш IBus «следующий метод ввода», как в
запустите ibus-setupи измените привязку клавиш для «следующего метода ввода» на что-то другое (или полностью удалите его, нажав кнопку «...», а затем кнопку «Удалить»).
Чтобы расширить ответ Эдина Сальковича, если вы используете режим CUA, вы можете использовать, чтобы начать выбор визуального блока. Существует множество ярлыков для управления выбором блока, описанных в документации CUA .
В Emacs 25 просто нажмите C- Spaceи затем переместите курсор туда, куда вы хотите выделить / выбрать интересующую вас область текста. После этого вам могут понадобиться следующие команды:
mark-defun
Ответы:
Взгляните на прямоугольник региона в emacs.
Короче говоря, вы начинаете выделение, как обычно, с помощью Control- Space, затем убиваете область с помощью Control- x r kи вставляете (или восстанавливаете ) убитый блок с помощью Control- x r y.
источник
Если я правильно понял вопрос, то изначально речь идет не о прямоугольных областях.
C-Spc
ставит отметку в текущей позиции.Где бы ни был ваш курсор после этого, текст между последней меткой и текущей позицией будет «выбран» (вы можете выделить это, активировав
transient-mark-mode
, но это также будет означать, что метки должны быть удалены, когда вы не хотите выделять).Вы можете работать с этим регионом с помощью таких команд, как:
C-w
. . Убить регион. Это удаляет и помещает регион в список уничтожения.C-y
. . Янк. Это вставляет последний фрагмент из списка уничтожений.M-y
. . Циклическое кольцо убийства. Сразу послеC-y
этого извлеченная часть заменяется другими фрагментами в круге уничтожения.M-w
. . Сохраните регион в кольцо убийств. подобноC-w
, но не удаляет.Это просто базовое использование. У знаков есть и другое применение. Я рекомендую учебник (
C-h t
).источник
C-s
C-r
в данном контексте обычно используются для поиска конца / начала региона. (Особенно полезно в макросах.)M-x indent-region
.indent-region
работает нормально, ноc-indent-line-or-region
(тот, что привязан к клавише табуляции ) нет. Последняя функция работает не с отмеченными областями, а с выделенными , т.е. с выделенной областью, как если бы вы выбрали ее мышью.C-Spc
дважды ударив по месту, на которое поставили метку. Это временно активирует переходный режим отметки (пока вы не отмените (сC-g
)). Затем переместите точку, чтобы увидеть, как появится выбранная область.Emacs 24.4 теперь имеет режим прямоугольной метки. Cx пробел для его вызова.
источник
См. Статью «Работа с прямоугольными выделениями» , особенно раздел комментариев. См. Также раздел документации режима CUA, озаглавленный «Поддержка прямоугольника CUA». Еще есть хорошее видео на vimeo .
источник
Хотя
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
). Затем вы можете делать с ним другие вещи, например копировать, искать, переходить, заменять и т. Д.источник
Используйте Control-, Spaceчтобы установить отметку и переместить курсор.
transient-mark-mode
Подчеркнет выбор для вас. M- xtransient-mark-mode
.Вы можете настроить Emacs для включения этого режима по умолчанию, используя настройку. M- x
customize-option
RETtransient-mark-mode
.источник
... и в случае, если вы используете Ubuntu и C-spcне работает для вас: вам нужно очистить привязку клавиш IBus «следующий метод ввода», как в
Цитата взята из ответа на вопрос SO.
источник
Чтобы расширить ответ Эдина Сальковича, если вы используете режим CUA, вы можете использовать, чтобы начать выбор визуального блока. Существует множество ярлыков для управления выбором блока, описанных в документации CUA .
источник
В Emacs 25 просто нажмите C- Spaceи затем переместите курсор туда, куда вы хотите выделить / выбрать интересующую вас область текста. После этого вам могут понадобиться следующие команды:
источник