我想在 emacs 中选择或突出显示一个块,而不使用鼠标,而是像 vim 的可视模式一样从键盘上进行操作。从键盘执行此操作的最简单方法是什么?
9 回答
如果我正确理解了这个问题,那么它最初与矩形区域无关。
C-Spc
在当前位置做标记。
之后无论您的光标在哪里,最后一个标记和当前位置之间的文本都被“选中”(您可以通过激活 来突出显示它transient-mark-mode
,但这也意味着当您不想突出显示时必须删除标记)。
您可以使用以下命令对该区域进行操作:
C-w
. . 杀区。这将删除该区域并将其放入杀伤环中。
C-y
. . 扬克。这将插入 kill ring 中的最后一个片段。
M-y
. . 循环杀戒。紧随其后C-y
,这会将被拉出的部分替换为杀伤环中的其他片段。
M-w
. . 将区域保存到杀戮环中。喜欢C-w
,但不删除。
这只是基本用法。标记也有其他用途。我推荐教程(C-h t
)。
看一下emacs中的区域矩形。
简而言之,你像往常一样用Control-开始选择,然后用-Space杀死区域并用Control-x r k粘贴(或yank)被杀死的块。Controlx r y
Emacs 24.4 现在有rectangle-mark-mode。Cx 空间来调用它。
请参阅文章:“使用矩形选择”,尤其是评论部分。另请参阅标题为“CUA 矩形支持”的CUA 模式文档部分。vimeo上还有一个不错的视频。
虽然C-SPC
是从您的点开始标记某物的常用方法,但通常有更快/更简单的方法不涉及明确移动到起点/终点......
内置选择快捷键
M-h
——标记段落的重要手段。“段落”通常意味着一段代码。C-M-h
和C-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
)选择点处的符号。然后你可以用它做其他事情,比如复制、搜索、跳转、替换等。
使用Control-Space设置标记并移动光标。
transient-mark-mode
将为您突出显示选择。M- x transient-mark-mode
。
您可以使用自定义设置 Emacs 以默认启用此模式。M- x customize-option
RET transient-mark-mode
。
...如果您使用的是 Ubuntu 并且C-spc不适合您:您需要清除 IBus“下一个输入法”键绑定,如
运行
ibus-setup
并将“下一个输入法”的键绑定更改为其他内容(或通过单击“...”按钮然后单击“删除”按钮将其完全删除)。
引用自SO question的答案。
要扩展 Edin Salkovic 的答案,如果您使用 CUA 模式,您可以使用开始视觉块选择。在CUA的文档中描述了很多控制块选择的快捷方式。
使用 Emacs 25,只需按C-Space然后将光标移动到您想要突出显示/选择您感兴趣的文本区域的任何位置。之后,您可能需要以下命令:
- C-w用于切割。
- M-w用于复制。
- C-y用于粘贴。