如何在Vim中删除括号?

5

我有以下文本:

Monkeys eat {bananas}.

我的光标在单词banana的中间:

Monkeys eat {bana|nas}.

这里的|符号表示光标的位置。

我该如何删除括号?

我可以通过简单的ci}applesbananas更改为apples,那么也许我可以使用类似的技巧来摆脱{}字符?

而且,即使在这种情况下,我也能做到吗?这实际上是我真正需要做的事情吗?

networks {
    local
    is|p
}

(上面的简化示例只是为了介绍这个概念。)

也许您可以在“我真正需要做的事情”部分解释一下,您希望最终结果是什么。在答案中似乎存在一些混淆,不清楚您真正想要什么。 - Greg Hewgill
4个回答

9
使用 Tim Pope 的出色 surround.vim 插件(我强烈推荐),您可以执行 ds{ 来删除周围的 {

我知道当你可以找到本地键序列时,添加另一个插件并不总是理想的解决方案,但 surround.vim 非常有用,因为它还可以处理 XML/HTML 标记并对复杂文本对象执行封闭操作。我认为它是那些“被困在荒岛上,在任何情况下都必须拥有”的插件之一。

我不喜欢使用插件,抱歉。话虽如此,这确实是一个不错的插件。 - Robottinosino
插件可能不是你的菜,但Tim Pope的插件非常棒。我个人不能没有surround、unimpaired和commentary。如果你决定尝试一下插件的奇妙世界,我强烈建议你看看Tim的一些插件。https://github.com/tpope - Peter Rincker

9

可以通过Vim内置的文本移动方式完成任务。删除花括号内的文本,选择花括号并将之前删除的文本粘贴到其上方:

di{v%p

由于这个,我刚开始认真学习视觉模式!它看起来非常有用。谢谢。 - JonnyRaa
di{ 表示删除大括号内的内容。v%p 是什么意思?谢谢。 - theprogrammer
1
@theprogrammer:v 进入可视模式;% 从光标下的字符选择到(包括)匹配的定界符(如果是 ([{} 等);p 在所选内容上粘贴。(请参见 :help v:help %:help p。) - ib.

5
这个如何:

这是什么意思:

yiBvaBp

无需插件,简单易用。


不错...提取大括号内的文本(我使用}而你使用B,但没关系),可视选择大括号区间,粘贴提取的文本替换可视选择区间。 - Robottinosino
1
对于这个特定的例子,{banana},最快的可能是 BxE. - Conner

1

删除大括号,保留其他内容?

mz[{x]}x`z

扩展

:help m - 设置一个标记。在这种情况下,标记初始光标位置,以便我可以在最后返回那里。:help [{ - 将光标移动到包含光标的最小块的开括号处。:help x - 删除现在位于光标下方的括号。]}x - 对结束括号执行相同的操作。最后

help `

回到标记位置,即在开始时创建的名为z的位置。

“插件”不是我的风格...


如果您能为那些不知道您在做什么的人解密,那将会非常感激。 - Tim
m:设置标记;z:将其称为z;[:移动到{;x:删除字符;]:移动到};x:删除它;':返回标记;z:到标记z处。 - Robottinosino

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接