我想要一个从第1点到第2点和第3点的动作:
FunctionCall(a, b, c, AnotherFunc(a, b))
^ <--- ^ ------------> ^
3 1 2
理想情况下,它适用于d
,y
等
现在我直观地计算结束括号并使用<n>f)
,但这非常烦人。
Vim确实有了解块的设施,即i(
,a(
,但我想要这个命令的“一半”。
我怎样才能做到这一点?
答案 0 :(得分:2)
你是对的,文本对象知道块的两面。如果您短暂进入可视模式,当使用va(<Esc>
命令切换到&时,光标将结束于范围的末尾(va(o<Esc>
)或开头(v_o
) #34;其他&#34;选择的一面。
不幸的是,因为这涉及多个步骤,它只适用于导航,但不适用于与{motion}
,d
等一起使用的原子y
。您可以编写自定义但是,这些动议。例如:
onoremap ,) :normal! va(<C-v><Esc><CR>
onoremap ,( :normal! va(o<C-v><Esc><CR>
这些就像运动一样工作,例如gU,)
将文本从光标大写到右括号。
答案 1 :(得分:2)
我通常使用来自various-motions
的合适命令。
例如,对于您的特定情况,])
后跟%
会有所帮助。
它们可以与d
,y
和c
等操作结合使用。
使用:help various-motions
答案 2 :(得分:0)
正常模式命令%
将带您到下一个打开的paren(在那里,在开始和结束括号之间切换)。很遗憾,它会跳到最里面的开口,而不是2
或3
。
与F(
结合,你有一些远程整洁,不涉及计数。因此,1
,F(%
会将您带到3
,后续%
会将您跳到2
。
答案 3 :(得分:0)
您可以执行以下操作:
nnoremap <silent> ,) :normal! va(<c-v><esc><cr>
nnoremap <silent> ,( :normal! va(o<c-v><esc><cr>
onoremap ,) :<c-u>normal! mava(o`a<cr>
onoremap ,( :<c-u>normal! mava(`a<cr>
请注意,对于动态版本(onoremap
),它会消耗a
标记,这可能是个问题;所以它可以改进。