从内部块移动到右括号

时间:2016-01-20 15:15:03

标签: vim parentheses motion cursor-position

我想要一个从第1点到第2点和第3点的动作:

FunctionCall(a, b, c, AnotherFunc(a, b))
            ^ <---  ^   ------------>  ^
            3       1                  2

理想情况下,它适用于dy

等编辑操作

现在我直观地计算结束括号并使用<n>f),但这非常烦人。

Vim确实有了解块的设施,即i(a(,但我想要这个命令的“一半”。

我怎样才能做到这一点?

4 个答案:

答案 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的合适命令。

例如,对于您的特定情况,])后跟%会有所帮助。

它们可以与dyc等操作结合使用。

使用:help various-motions

的更多详细信息

答案 2 :(得分:0)

正常模式命令%将带您到下一个打开的paren(在那里,在开始和结束括号之间切换)。很遗憾,它会跳到最里面的开口,而不是23

F(结合,你有一些远程整洁,不涉及计数。因此,1F(%会将您带到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标记,这可能是个问题;所以它可以改进。