从内部块移动到右括号

Movement to the closing parenthesis from inside block

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

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

理想情况下,它可以与 dy 等编辑操作一起使用

现在我目视数右括号并使用<n>f),但是很烦人

Vim 确实有了解块的工具,即 i(a(,但我想要 'a half' 这样的命令。

我怎样才能做到这一点?

你说得对,文本对象 了解块的两侧。如果您短暂进入视觉模式,当使用 v_o 命令切换到 "other"选择的一侧。

不幸的是,因为这涉及多个步骤,它只适用于导航,而不是作为原子 {motion}dy 等一起使用。你可以写不过,这是针对那些人的自定义动议。例如:

onoremap ,) :normal! va(<C-v><Esc><CR>
onoremap ,( :normal! va(o<C-v><Esc><CR>

然后这些就像动作一样工作,例如gU,) 大写从光标到右括号的文本。

普通模式命令 % 将带您到下一个左括号(并且在那里,在左括号和右括号之间切换)。很遗憾,它会跳到最里面的开头括号而不是 23.

将它与 F( 结合起来,您就得到了一些不涉及计数的远程整洁的东西。因此,1F(% 会将您带到 3,随后的 % 会将您跳转到 2

您可以执行以下操作:

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>

注意对于motion版本(onoremap),它消耗了a标记,这可能是一个问题;所以可以改进。

我通常做的是使用来自 various-motions 的合适命令。

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

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

更多详细信息使用 :help various-motions