gpt4 book ai didi

vim - vim 映射中的文本对象序列

转载 作者:行者123 更新时间:2023-12-04 14:16:28 25 4
gpt4 key购买 nike

我想提取 <...> 的内部内容 (...)映射中的表达式。

在正常模式下,我可以输入两次 yank 序列 yi<yi( .其中一个 yank 将是空的,另一个将匹配所需的内容。最终效果是匹配内容,无论它们在里面 ()<> .

现在,如果我将相同的序列放在 map 中,它似乎会在第一次 yank 失败时中止,因此它只匹配 <...> 的内部内容。表达式(因为在我的示例中 yi< 是第一个探测到的 yank)。

相反,如果我输入 :normal yi<<CR>:normal yi(<CR> ,映射的工作方式与我手动键入时相同 yi<yi(在正常模式下。此外:normal yi<yi(也失败了。

在我看来,拉出一个不匹配的文本对象总是以错误结束并中止当前映射或 :normal执行。但我找不到 vim 文档中明确记录的行为。 E我的 cpoptions 中不包含标志, 虽然它说它影响 y{motion}不是 y{object} .

谁能澄清这种奇怪的行为?

最佳答案

请注意,:normal 的语义在包含在 try...catch 循环中或通过 :silent! 执行时会发生变化>:没有它,命令序列的执行在遇到错误时中止;序列的其余部分被丢弃(就像在宏中一样)。有了它,所有命令都会执行,即使发生错误也是如此。

当您连续手动键入这两个 yank 时,您实际上忽略了错误。

解决方案

因此,您可以获得所需的行为

:silent! normal! yi<yi(

备选

另一种方法是先清除寄存器,进行第一次抽取,如果寄存器仍然为空,则只执行第二次替代抽取。

关于vim - vim 映射中的文本对象序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21415758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com