如何在 Emacs 中选择或突出显示一个块?
Posted
技术标签:
【中文标题】如何在 Emacs 中选择或突出显示一个块?【英文标题】:How to select or highlight a block in Emacs? 【发布时间】:2010-10-14 01:08:55 【问题描述】:我想在 emacs 中选择或突出显示一个块,而无需使用鼠标,而是像 vim 的可视模式一样通过键盘进行。从键盘执行此操作的最简单方法是什么?
【问题讨论】:
C-M-hmark-defun
您也可以使用 Spacemacs 来获取 emacs 中的 vim 键绑定。
【参考方案1】:
如果我正确理解了这个问题,那么它最初与矩形区域无关。
C-Spc
在当前位置放置一个标记。
无论你的光标在哪里,最后一个标记和当前位置之间的文本都被“选中”(你可以通过激活transient-mark-mode
来突出显示它,但这也意味着当你不这样做时必须删除标记想要突出显示)。
您可以使用以下命令对该区域进行操作:
C-w
。 .杀区。这会删除该区域并将其放入杀戮环。C-y
。 .扬克。这会插入 kill ring 中的最后一个 sn-p。M-y
。 .循环杀戒。在C-y
之后,这会立即用kill ring 中的其他sn-ps 替换被拉出的部分。M-w
。 .将区域保存到杀戮环中。点赞C-w
,但不删除。
这只是基本用法。标记也有其他用途。我推荐教程 (C-h t
)。
【讨论】:
值得注意的是C-s
C-r
在这种情况下通常用于查找区域的结束/开始。 (在宏中特别有用。)
嗯,这是非常好的命令,但是......如何选择标记的区域?毕竟我仍然需要它,即在标记之间缩进代码。
最后一个标记和当前点(即您的光标所在的位置)之间的区域是选定区域。只需运行M-x indent-region
。
@Svante 不,它没有被选中。虽然indent-region
工作得很好,但c-indent-line-or-region
(绑定到 tab 键的那个)不是。最后一个函数不适用于 标记 区域,而是适用于 选定 区域,即突出显示的区域,就像您用鼠标选择它一样。
@YagamyLight 啊,您可以通过在标记处点击两次C-Spc
来做到这一点。这会暂时激活瞬态标记模式(直到您取消(使用C-g
))。然后移动该点以查看所选区域出现。【参考方案2】:
看看emacs中的region-rectangle。
简而言之,您像往常一样使用 Control-Space 开始选择,然后使用 Control-x杀死区域> r k 并粘贴(或 yank)用 Control-x 杀死的块r y.
【讨论】:
根据我的经验,它不会杀死区域,它会杀死矩形,这与 vim 的可视模式有很大不同。【参考方案3】:Emacs 24.4 现在有rectangle-mark-mode。 C-x 空间来调用它。
【讨论】:
如何移动矩形块? 这是正确的,但没有引用来源......【参考方案4】:参见文章:"Working with rectangular selections",尤其是 cmets 部分。另见CUA mode documentation 标题为“CUA 矩形支持”的部分。还有一个nice video on vimeo。
【讨论】:
【参考方案5】:虽然C-SPC
是开始标记某项内容的常用方法
无论您的意思是什么,通常都有更快/更简单的方法
涉及显式移动到起点/终点...
内置选择快捷键
M-h
— 标记段落的重要手段。一个段落”
通常意味着一段代码。
C-M-h
和 C-M-@
— 用于标记性别和定义,
分别。这适用于多种语言,而不仅仅是 lisps。
按住 shift — 另一个巧妙的突出显示方式
移动。例如,M-S-f
选择转发整个单词。这是
shift-select-mode
,
它在 Emacs 24+ 中默认启用。在一些(非chiclet)
键盘,你应该可以按住C-S-
小指。
您可以反复按其中任何一个来扩大选择范围。
还有一些特殊的标记方式:
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
)。然后你可以用它做其他事情,比如复制、搜索、跳转、替换等。
【讨论】:
【参考方案6】:使用 Control-Space 设置标记并移动光标。
transient-mark-mode
将为您突出显示选择。 M-x transient-mark-mode
。
您可以使用自定义设置 Emacs 以默认启用此模式。 M-x customize-option
RET transient-mark-mode
.
【讨论】:
【参考方案7】:...如果您使用的是 Ubuntu 并且 C-spc 不适合您:您需要清除 IBus“下一个输入法”键绑定,如
运行
ibus-setup
并更改键绑定 “下一个输入法”到别的东西(或完全删除它 单击“...”按钮,然后单击“删除”按钮)。
引用自 an answer 到一个 SO 问题。
【讨论】:
【参考方案8】:扩展 Edin Salkovic 的答案,如果您使用 CUA 模式,您可以使用开始视觉块选择。 documentation of CUA 中描述了很多控制块选择的快捷方式。
【讨论】:
【参考方案9】:使用 Emacs 25,只需按 C-Space,然后将光标移动到要突出显示/选择感兴趣的文本区域的任何位置。之后,您可能需要这些命令:
C-w 用于切割。 M-w 用于复制。 C-y 用于粘贴。【讨论】:
以上是关于如何在 Emacs 中选择或突出显示一个块?的主要内容,如果未能解决你的问题,请参考以下文章