以下是我每天都会遇到的情况:
0 .outer_selector {
1
2 .inner_selector {
3 margin: 0;
4 padding: 0;
5
6 input { display: none; }
7 }
8
9 }
现在我想将 剪切并粘贴到.inner_selector
其他地方。我该怎么做?我找不到任何方法可以快速删除逻辑.inner_selector
块和它围绕着空格;即,相当于dap
这个括号分隔块的 but。这里有各种想法,按复杂程度递增的顺序排列。(ai
和ii
映射是通过vim 缩进对象插入。)
3Gdai
。这几乎可以正常工作,但块的右括号仍保留在.inner_selector
原处。2Gdai
。不好;这会删除整个.outer_selector
块。2Gdii
。这将删除正确的块,但不会删除周围的空格(即,相当于dip
而不是dap
)。2Gf{d%
. 使用 转到{
,f{
删除匹配的括号 (d%
)。这将删除第 2 行括号到其匹配括号之间的文本,但保留文本“.inner_selector
”。2Gf{v%okd
. 开始方式与 (4) 相同,然后跳转到所选文本的顶部 (o
),向上扩展一行 (k
),然后删除 (d
)。与上面的 (3) 相同。3Gvaikojjd
。选择文本,向上选择一行(k
),跳转到所选区域的底部(o
),向下选择两行(jj
),删除(d
)。这样可行。
我可以为最后一个定义一个键盘映射并完成它,但在我这样做之前,我想确保我没有遗漏任何东西。由于它是许多语言中如此常见的代码构造,我很惊讶它很难text { /* multiple lines /* }
作为文本对象处理,或者没有插件。
答案1
如果您转到空白处.outer-selector
但又超出了它,.inner-selector
您会看到它选择了括号Vi{
内的所有内容.outer-selector
。
我也可以.inner-selector
通过运行Vi{
内部代码来只选中部分代码.inner-selector
,然后V
再次选中,以强制它选中所有完整的行。这不会让你得到周围的空白.inner-selector
,但我认为这也可能很有趣。