Answers:
扩展区域以语义单位增加所选区域。只需按住键,直到选择所需的内容。
一个例子:
(setq alphabet-start "abc def")
将光标放在c上,首先标记整个单词abc,然后扩展到引号abc def的内容,然后扩展到整个引号“ abc def”,再扩展到sexp setq字母开头的内容“ abc def”,最后进入整个sexp。
您可以这样设置:
(require 'expand-region)
(global-set-key (kbd "C-=") 'er/expand-region)
如果扩展范围过大,则可以使用负前缀再次收缩该区域。
我同意您应该expand-region
按照其他答案(我支持的投票)中的建议进行尝试。
但是以防万一您不熟悉相关的内置命令:
C-M-u, backward-up-list
C-M-SPC, mark-sexp
在第一个示例中,没有区域,您可以使用C-M-u C-M-SPC
它标记附件列表。如果已经存在选定的区域,这些命令将对其进行扩展。因此,如果42
选中并单击C-M-u
它,则将选择范围向后扩展到列表的开头,但不包括结束括号。
因此,如果没有类似的选项,expand-region
我将C-g
取消所有当前选择,然后C-M-u
返回所需的任意数量的parens,然后C-M-SPC
标记
在活动区域的情况下,h在lispy中将执行您想要的操作。请参阅我最近的介绍性帖子。
在第一种情况下,您需要M-m h。
lispy
从...开始:
(defn foo [x] (+ x ~42|))
在此,~
表示标记(区域的起点),并且|
表示点(区域的终点)。
随着h你得到:
(defn foo [x] |(+ x 42)~)
随着l你得到:
(defn foo [x] ~(+ x 42)|)
与k您取得联系(无法使用j):
(defn foo [x] (+ ~x| 42))
随着2k或kk您得到:
(defn foo [x] (~+| x 42))
随着d你得到:
(defn foo [x] (+ x |42~))
与d>您取得联系(无法使用<):
(defn foo [x] (+ |x 42~))
使用d2>或d>>可获得:
(defn foo [x] (|+ x 42~))
随着m你得到:
(defn foo [x] (+ x 42|))
只是总结一下,当区域被激活,h,j,k,l 是移动区域的箭头。>在点的方向上以一个语义单位扩大区域。<在点的方向上按一个语义单位缩小区域。m禁用标记。i选择区域的第一个元素,并d交换点和标记。
expand-region
称为立即标记列表的特定功能称为er/mark-outside-pairs
。