vim - 你如何在 Vim 中删除除特定模式之外的所有内容?

标签 vim

我有一个 XML 文件,我只关心某个元素的大小属性。 首先我用

global!/<proto name="geninfo"/d

删除所有我不关心的行。这给我留下了一大堆看起来像这样的行:

<proto name="geninfo" pos="0" showname="General information" size="174">

我想删除除“大小”值以外的所有内容。 我的计划是使用替代来摆脱所有不匹配'size="[digit]"'的东西,删除字符串'size'和引号,但我不知道如何替代字符串的否定。

知道如何去做,或者有更好的方法来实现这一目标吗?基本上我想以每行一个数字(大小)结束。

最佳答案

您可以使用匹配组:

:%s/^.*size="\([0-9]*\)".*$/\1/

这将用 N 替换包含 size="N" 的行,而不会触及其他行。

说明:这将查找包含一些随机字符的行,然后是链 size=",然后是数字,然后是 ",然后是更多随机字符, 然后是行尾。现在我所做的是将数字包裹在(转义的)括号中。这创建了一个组。在搜索和替换命令的第二部分,我基本上是说“我想用第一组的内容替换整行”(称为 \1)。

关于vim - 你如何在 Vim 中删除除特定模式之外的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7744715/

相关文章:

vim - 让 w0rp Async Lint Engine "ALE"尽可能快?

git - 签署提交时无法在 Vim 上使用 Gcommit(Fugitive 插件)

vim - 使 gvim 将包裹的行视为新行

regex - 在外部命令中使用匹配模式

python - vim 中用于缩进 python 文件的选项卡

vim - 在 vim 中用换行符打开光标下的文件

vim - 在 Vim 中启用 Markdown 突出显示

vim:获取卸载缓冲区的缓冲区编号

vim - 在插入模式下粘贴时如何避免插入模式映射?

javascript - 在大括号内时 vim 中的自动换行和缩进?