91

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

4

9 回答 9

82

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

C-Spc在当前位置做标记。

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

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

C-w. . 杀区。这将删除该区域并将其放入杀伤环中。
C-y. . 扬克。这将插入 kill ring 中的最后一个片段。
M-y. . 循环杀戒。紧随其后C-y,这会将被拉出的部分替换为杀伤环中的其他片段。
M-w. . 将区域保存到杀戮环中。喜欢C-w,但不删除。

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

于 2009-03-18T12:20:11.550 回答
67

看一下emacs中的区域矩形。

简而言之,你像往常一样用Control-开始选择,然后用-Space杀死区域并用Control-x r k粘贴(或yank)被杀死的块。Controlx r y

于 2009-03-18T10:36:14.047 回答
38

Emacs 24.4 现在有rectangle-mark-mode。Cx 空间来调用它。

于 2014-10-29T15:35:00.597 回答
16

请参阅文章:“使用矩形选择”,尤其是评论部分。另请参阅标题为“CUA 矩形支持”的CUA 模式文档部分。vimeo上还有一个不错的视频

于 2009-03-18T10:55:16.200 回答
15

虽然C-SPC是从您的点开始标记某物的常用方法,但通常有更快/更简单的方法不涉及明确移动到起点/终点......

内置选择快捷键

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

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

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

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

还有一些特殊的方法来标记事物:

  • C-x h标记整个缓冲区

  • C-x SPC— 进入矩形标记模式

(注意:C-g在实验时经常使用取消标记。)

附加组件

有一些附加包可以改进选择区域和事物。这些都很好地结合在一起,适合不同的用例。全部使用!

  • expand-region:扩展区域按语义单元增加选定区域。只需按住该键,直到它选择您想要的。 C-=是推荐的绑定。多打几次就能得到你需要的东西。

  • easy-kill:使用M-w和 助记符来选择不同类型的事物,例如单词、sexp、列表等。

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

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

  • symbol-overlay:通过击键(M-i)选择点处的符号。然后你可以用它做其他事情,比如复制、搜索、跳转、替换等。

于 2016-04-14T19:07:53.997 回答
7

使用Control-Space设置标记并移动光标。

transient-mark-mode将为您突出显示选择。M- x transient-mark-mode

您可以使用自定义设置 Emacs 以默认启用此模式。M- x customize-option RET transient-mark-mode

于 2009-03-18T10:38:04.447 回答
1

...如果您使用的是 Ubuntu 并且C-spc不适合您:您需要清除 IBus“下一个输入法”键绑定,如

运行ibus-setup并将“下一个输入法”的键绑定更改为其他内容(或通过单击“...”按钮然后单击“删除”按钮将其完全删除)。

引用自SO question的答案。

于 2015-04-10T09:40:52.140 回答
0

要扩展 Edin Salkovic 的答案,如果您使用 CUA 模式,您可以使用开始视觉块选择。在CUA的文档中描述了很多控制块选择的快捷方式。

于 2012-06-11T16:34:44.320 回答
0

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

  • C-w用于切割。
  • M-w用于复制。
  • C-y用于粘贴。
于 2018-08-10T13:54:50.397 回答