我有一堆文件,每个文件看起来像这样:
...
apiVersion: v1
kind: List
...
apiVersion: v1
kind: ConfigMap
...
apiVersion: v1
kind: DeploymentConfig
...
apiVersion: "v1"
kind: "PersistentVolumeClaim"
...
apiVersion: v1
kind: Service
...
apiVersion: v1
kind: DeploymentConfig
...
我想用apiVersion: apps.openshift.io/v1
替换apiVersion: v1
,但前提是下面的行与kind: DeploymentConfig
匹配。
有没有办法用vim的原生功能来实现呢?
出于安全原因,我不能安装任何vim插件上的特定服务器。
3条答案
按热度按时间vxbzzdmp1#
一个解决方案是使用宏。
然后,您可以运行
n@a
和数字n来替换n次。gopyfrb32#
对于
:help :global
来说,"在每一行匹配XXX的地方做一些事情"是一个理想的用例:其中:
:g/<pattern>/<command>
在匹配<pattern>
的每一行上执行<command>
,kind: DeploymentConfig
是我们的<pattern>
并且其余的是我们的<command>
,-
是:help :s
的地址,意思是"上面的行",s/v1/apps.openshift.io/&
用apps.openshift.io\/v1
代替v1
(参见:h :s/\&
),/c
是一个标志,告诉Vim提示确认每个取代,它是兼性的。krcsximq3#
已经有两个很好的建议,但这里还有第三种方法:您可以匹配
:substitute
模式中的下一行。基本的搜索和替换可能如下所示:如果你想说“并且下一行匹配某些特定的东西”,你可以用
\ze
结束目标模式,然后添加\_s\+
来表示“任何空格,包括一个换行符”:\zs
和\ze
模式非常适合于这样的特殊匹配,您也可以通过将开头锚定为\zs
,在此上下文中仅将v1
替换为v2
: