Как выделить прямоугольник в Emacs

В Notepad++ вы можете нажать Alt-LeftMouseClick-Drag, чтобы выбрать прямоугольную область.

Как мне сделать это в Emacs (Windows)?

Я попробовал методы в http://www.emacswiki.org/emacs/RectangleCommands но мой выбор происходит как обычная область вместо прямоугольной формы:

Я также попытался включить / отключить режим cua.

8 ответов

Решение

В Emacs то, влияет ли команда на непрерывный фрагмент текста или прямоугольник, зависит от команды, а не от того, как выглядит выделение.

Я не знаю ни одного способа заставить выделение отображаться в виде прямоугольника на экране (но посмотрите этот ответ), но если вы используете любую из команд прямоугольника, перечисленных на странице, на которую вы ссылаетесь, например, C-x r k или же C-x r tвы увидите, что они работают с прямоугольником, определенным началом и концом выделения, несмотря на то, что выделение выглядит как обычная область.

В Emacs 24.4 и выше, C-x SPC связан с rectangle-mark-mode который выбирает прямоугольник визуально.

http://emacsredux.com/blog/2014/01/01/a-peek-at-emacs-24-dot-4-rectangular-selection/ описывает это более подробно.

Еще один забавный добавить в список.

Если вы используете evil-mode (т. е. слой эмуляции Vim), вы можете использовать evil-visual-block (привязка по умолчанию C-v) выбрать прямоугольник визуально.

Вы используете команды прямоугольника, помещая метку в один угол прямоугольника и указывая на противоположный угол. Даже если область будет отображаться как обычно, команды прямоугольника будут действовать на прямоугольник, ограниченный точкой и меткой. Режим CUA не влияет на это.

скриншот emacs с выделенной меткой, точкой и прямоугольником

Вы просто должны использовать свое воображение:)

  1. Войдите в режим прямоугольной метки с помощью C-x SPC

  2. Уменьшить или увеличить область на (это выделит прямоугольник):

    2.1. ДелатьC-n или C-p чтобы переместить курсор на следующую или предыдущую строку соответственно.

    2.2. Теперь вы можете поиграть с выделением текста, выполнивC-f, C-b, M-f, M-b, так далее.

  3. Эта выбранная прямоугольная область может использоваться для выполнения некоторых действий, например

    • убить: C-x r k
    • удалять: C-x r d
    • дергать: C-x r y (вставьте последний убитый прямоугольник в позицию курсора)

Если вы хотите увидеть прямоугольное выделение, используйте вместо этого прямоугольники CUA. Включить с

(cua-selection-mode t)

Тогда используйте M-RET чтобы начать выделение, переместите курсор, чтобы изменить его (вы также можете нажать RET переместить курсор в разные углы), C-? получить список команд для работы с прямоугольником. M-RET с активным выбором отменяет выбор, как и C-g,

Режим выбора CUA не включает остальную часть CUA, поэтому C-x, C-c, C-vи т. д. не изменится.

Вы можете сделать то же самое с помощью мыши, если хотите. Хотя это не так конкретно, как делать это с помощью клавиатуры, где вы можете выбрать символы, которые не существуют после конца строки, например, это будет соответствовать большинству вариантов использования.

(defun mouse-start-rectangle (start-event)
  (interactive "e")
  (deactivate-mark)
  (mouse-set-point start-event)
  (rectangle-mark-mode +1)
  (let ((drag-event))
    (track-mouse
      (while (progn
               (setq drag-event (read-event))
               (mouse-movement-p drag-event))
        (mouse-set-point drag-event)))))

(global-set-key (kbd "M-<down-mouse-1>") #'mouse-start-rectangle)

Нашел это здесь: https://emacs.stackexchange.com/a/7261

Большинство команд прямоугольника доступны через C-x rпрефикс(используется совместно с командами "r egister"). См. Здесь раздел руководства "Прямоугольники " для описания всех специальных командуничтожения, восстановления, удаления, нумерации и т. Д., Которые вам понадобятся для работы с прямоугольниками.

Единственная команда без прямоугольника - инициаторC-x SPC(rectangle-mark-mode), но это достаточно легко запомнить, так как очень часто C-SPC(set-mark-command).

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


(Я рекомендую helm-descbinds или guide-key для завершенияC-x r префиксы команд, как и любые другие.)

В дополнение к тому, что упомянули другие, в том числе о выделении цветом в виде прямоугольника rectangle-mark-mode а также cua-rectangle-mark-mode, библиотека Mode-Line Position (modeline-posn.el) предоставляет следующую функцию для использования с командами прямоугольника: она показывает длину и ширину прямоугольника в строке режима, как часть size-indication-mode,

Обычно, size-indication-mode показывает только размер буфера и текущую относительную позицию в буфере. С библиотекой modeline-posn.el то, что вы видите, отличается, когда регион активен:

  • Для команды прямоугольника, которая читает ввод, вы видите количество строк и столбцов прямоугольника (например, 21 rows, 16 cols)

  • В противном случае размер региона.

Вы можете настроить способ отображения этой информации (опция modelinepos-style). По умолчанию размер активной области отображается в виде количества символов и количества строк в области (например, 473 ch, 3 l).

Лицо, используемое для указания строки режима активной области (включая прямоугольник), является лицом region так выглядит так же, как и регион.

Дополнительная функция дополнительно привлекает ваше внимание к индикации области строки режима, когда команда, которая воздействует на активную область или изменяет свое поведение, когда область активна, считывает ввод. Это просто использует другое лицо, которое по умолчанию является лицом region но с красным подчеркиванием и подчеркиванием.

Наконец, булева опция modelinepos-empty-region-flag определяет, будет ли указана пустая активная область в строке режима, чтобы привлечь ваше внимание (в противном случае вы можете не заметить, что действуете в пустой области). Например, вы видите (выделено с помощью лица region): 0 ch, 0 l,

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