如何在Emacs中选择或突出显示一个块?


84

我想在emacs中选择或突出显示一个块而不使用鼠标,而是像vim的可视模式一样从键盘上进行选择。从键盘执行此操作的最简单方法是什么?


2
CMhmark-defun
斜杠

Answers:


66

看看emacs中的region-rectangle。

总之,你开始选择像往常一样Control- Space,然后用杀区域Control-x r k并粘贴(或抽出杀死阻滞)Control- x r y


11
根据我的经验,这不会杀死区域,而是杀死矩形,这与vim的可视模式有很大不同。
艾伦(Allen)

2
有什么不同?
肯·威廉姆斯

73

如果我正确地理解了这个问题,那么最初与矩形区域无关。

C-Spc 在当前位置标记。

无论光标在其后的何处,都将“选择”最后一个标记和当前位置之间的文本(您可以通过激活来突出显示该transient-mark-mode标记,但这也意味着当您不想突出显示时必须删除标记)。

您可以使用以下命令在该区域上进行操作:

C-w。。杀死区域。这将删除该区域并将其放入杀死环。
C-y。。扬克。这将插入kill环中的最后一个片段。
M-y。。循环杀死戒指。之后C-y,立即用终止环中的其他片段替换了被拉扯的部分。
M-w。。将区域保存到杀死环中。类似于C-w,但不会删除。

这只是基本用法。标记还有其他用途。我推荐本教程(C-h t)。


6
值得注意的是,C-s C-r在这种情况下通常用于查找区域的结束/起点。(在宏中特别有用。)
ocodo 2012年

好吧,这是非常好的命令,但是...如何选择标记的区域?毕竟,我仍然需要它,即在标记之间缩进代码。
Hi-Angel

最后一个标记和当前点(即光标所在的位置)之间的区域所选区域。快跑M-x indent-region
Svante 2014年

@Svante否,未选中。虽然indent-region效果很好,但是c-indent-line-or-region(绑定到Tab键的那个)效果不好。最后一个功能不适用于标记的区域,而是作用于选定的区域,即突出显示的区域,就像您用鼠标选择的区域一样。
Hi-Angel

2
@YagamyLight啊,您可以通过C-Spc在标记处打两次来做到这一点。这会临时激活瞬态标记模式(直到您取消(使用C-g))。然后移动该点以查看所选区域的出现。
Svante



10

尽管C-SPC从您的位置开始标记是一种常用的标记方法,但是通常有更快速/更简便的方法不涉及明确地移动到起点/终点...

内置选择快捷方式

  • M-h-标记段落的重要手段。“段落”通常意味着一段代码。

  • C-M-hC-M-@—分别用于标记六边形和defun。这适用于多种语言,而不仅仅是lisps。

  • 按住Shift键-移动时突出显示的另一种巧妙方式。例如,M-S-f选择整个单词。这是 shift-select-mode,并且在Emacs 24+中默认启用。在某些(非Chiclet)键盘上,您应该可以按住C-S-一个小指。

您可以反复按其中任何一个以扩大选择范围。

(注意:C-g在实验过程中经常用于取消标记。)

附加组件

有一些附加软件包可以改善选择区域和事物的能力。这些都可以很好地配合使用,并适合不同的用例。全部使用!

  • Expand-Region:Expand region通过语义单位增加所选区域。只需按住键,直到选择所需的内容。 C-=是推荐的绑定方式。打几次以获得您所需要的。

  • 易杀:使用M-w和助记符来选择不同类型的事物,例如单词,六边形,列表等。

  • Zop-to-Char:类似于zap-to-char,但提供了不错的选择和其他菜单驱动的动作。

  • diff-hl:突出显示未提交的更改区域。使用diff-hl-mark-hunk选择/标记大块。


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问题的答案


0

要扩展Edin Salkovic的答案,如果使用CUA模式,则可以用来开始可视块选择。CUA文档中描述了许多控制块选择的捷径。


-1

使用Emacs 25,只需按C- Space,然后将光标移动到要突出显示/选择您感兴趣的文本区域的任何位置。之后,您可能需要以下命令:

  • C-w用于切割。
  • M-w用于复制。
  • C-y用于粘贴。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.