30

在 Notepad++ 中,您可以按 Alt-LeftMouseClick-Drag 来选择一个矩形区域。

如何在 emacs (windows) 中执行此操作?

我尝试了http://www.emacswiki.org/emacs/RectangleCommands中的方法,但我的选择发生在常规区域而不是矩形:

http://i.stack.imgur.com/tBMBN.png

我还尝试启用/禁用 cua 模式。

4

9 回答 9

56

在 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/更详细地描述了这一点。

于 2014-07-31T20:56:16.427 回答
17

在 Emacs 中,一个命令是影响一段连续的文本还是一个矩形取决于命令,而不是选择的样子。

我不知道有什么方法可以使选择在屏幕上显示为矩形(但请参阅此答案),但是如果您使用链接到的页面中列出的任何矩形命令,例如C-x r kor C-x r t,您将看到它们在由选择的开始和结束定义的矩形上操作,尽管选择看起来像一个常规区域。

于 2014-07-31T17:31:41.833 回答
16

一个更有趣的添加到列表中。

如果您正在使用evil-mode(即,Vim 仿真层),您可以使用evil-visual-block(默认绑定C-v)来直观地选择一个矩形。

于 2014-07-31T21:16:01.577 回答
10

您可以通过将标记放在矩形的一个角并指向对角来使用矩形命令。即使该区域将正常显示,矩形命令也会作用于由点和标记分隔的矩形。CUA 模式不影响这一点。

突出显示标记、点和矩形的 emacs 屏幕截图

你只需要发挥你的想象力:)

于 2014-07-31T17:38:05.600 回答
7
  1. 进入矩形标记模式C-x SPC

  2. 缩小或扩大区域(这将选择一个矩形):

    2.1。做C-nC-p将光标分别展开到下一行或上一行。

    2.2. 您现在可以通过执行C-f, C-b, M-f,M-b等来进行文本选择。

  3. 这个选定的矩形区域可用于执行一些操作,例如

    • 杀死:C-x r k
    • 删除:C-x r d
    • yank:(C-x r y在光标位置粘贴最后被杀死的矩形)
于 2019-09-29T21:35:03.960 回答
4

If you want to see the rectangular selection, use CUA rectangles instead. Enable it with

(cua-selection-mode t)

Then use M-RET to start the selection, move the cursor to change it (you can also hit RET to move the cursor to different corners), C-? to get a list of commands to operate on the rectangle. M-RET with the selection active cancels the selection, as does C-g.

CUA selection mode does not enable the rest of CUA, so C-x, C-c, C-v, etc. will not change.

于 2014-07-31T19:40:14.727 回答
1

除了其他人提到的,包括关于高亮显示为矩形的rectangle-mark-modecua-rectangle-mark-mode,库模式线位置( modeline-posn.el) 提供了以下用于矩形命令的功能:它显示模式线中矩形的长度和宽度,如的一部分size-indication-mode

通常,size-indication-mode仅显示缓冲区大小和缓冲区中的当前相对位置。使用 library当区域处于活动状态时,modeline-posn.el您看到的内容会有所不同:

  • 对于读取输入的矩形命令,您会看到矩形行数和列数(例如 21 rows, 16 cols

  • 否则,区域大小

您可以自定义此信息的显示方式(选项modelinepos-style)。默认情况下,活动区域大小显示为区域中的字符数和行数(例如 473 ch, 3 l)。

用于活动区域(包括矩形)的模式线指示的面是 face region,因此它看起来与该区域相同。

当作用于活动区域或在该区域处于活动状态时更改其行为的命令读取输入时,另一个功能会进一步引起您对模式行区域指示的注意。这只是使用不同的面,默认情况下是面region,但带有红色上划线和下划线。

最后,布尔选项modelinepos-empty-region-flag确定是否在模式行中指示活动区域,以吸引您的注意力(否则您可能不会注意到您正在对空区域进行操作)。例如,您会看到(使用 face 突出显示region0 ch, 0 l:。

于 2014-08-01T02:26:35.377 回答
1

大多数矩形命令是通过前缀访问的与“r egister”命令共享。 有关所有特殊的kill、yank、delete、number、replace等命令的描述,请参见 此处的Rectangles手册部分 ,您需要对矩形执行任何有用的操作。C-x r

唯一不带前缀的矩形命令是启动器C-x SPC ( rectangle-mark-mode),但这很容易记住,很像非常常见的C-SPC( set-mark-command)。

看起来在最近的 Emacs 版本中,所选区域运行良好,可以准确显示所选内容。


(我建议使用 helm-descbindsguide-key来完成您的 C-x r命令前缀以及任何其他命令前缀。)

于 2017-08-13T22:09:38.213 回答
1

如果你愿意,你可以用鼠标做同样的事情。虽然不像通过键盘那样具体,您可以选择行尾不存在的字符,例如,它将满足大多数用例。

(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

于 2016-12-12T16:04:19.203 回答