如何在emacs中选择一个矩形

时间:2014-07-31 17:28:21

标签: emacs text-editor cua-mode

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

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

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

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

我也试过启用/禁用cua模式。

9 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分:11)

在Emacs中,命令是否影响连续的文本或矩形取决于命令,而不是选择的内容。

我不知道有什么方法可以让选择在屏幕上显示为矩形(但请参阅this answer),但如果您使用链接到的页面中列出的任何矩形命令,作为C-x r kC-x r t,您会看到它们在选择的开头和结尾定义的矩形上运行,尽管选择看起来像是一个常规区域。

答案 2 :(得分:10)

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

screenshot of emacs with mark, point, and rectangle highlighted

你只需要运用你的想象力:)

答案 3 :(得分:8)

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

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

答案 4 :(得分:4)

如果要查看矩形选区,请改用CUA矩形。使用

启用它
(cua-selection-mode t)

然后使用M-RET开始选择,移动光标进行更改(您也可以点击RET将光标移动到不同的角落),C-?以获取列表用于操作矩形的命令。选择有效的M-RET取消选择,C-g也是如此。

CUA选择模式无法启用CUA的其余部分,因此C-xC-cC-v等不会更改。

答案 5 :(得分:2)

  1. 使用C-x SPC

  2. 进入矩形标记模式
  3. 按(这将选择一个矩形)缩小或扩大区域:

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

    2.2。现在,您可以通过执行C-fC-bM-fM-b等来进行文本选择。

  4. 此选定的矩形区域可用于执行某些操作,例如

    • kill:C-x r k
    • 删除:C-x r d
    • 拖动:C-x r y(将最后一个终止的矩形粘贴到光标位置)

答案 6 :(得分:0)

除了其他人提到的内容,包括rectangle-mark-modecua-rectangle-mark-mode显示为矩形的突出显示外,库Mode-Line Positionmodeline-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

答案 7 :(得分:0)

如果您愿意,可以使用鼠标执行相同的操作。虽然不像通过键盘那样具体,但您可以选择在行尾之后不存在的字符,例如它将满足大多数用例。

(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

答案 8 :(得分:0)

大多数 r ectangle命令可通过 C-x r前缀(共享)进行访问 使用&#34; r egister&#34;命令)。见 矩形手册部分 here 有关所有特殊 kill,yank,delete,number,replace,的描述 等命令,您需要对矩形执行任何有用的操作。

唯一没有前缀的矩形命令是发起者C-x SPCrectangle-mark-mode),但这很容易记住,成为一个 很像常见的C-SPCset-mark-command)。

在最近的Emacs版本中,所选区域正常运行 很好地显示了所选择的内容。

(我推荐 helm-descbindsguide-key完成你的工作 C-x r命令前缀,以及任何其他命令前缀。)