Vim - 如何在可视块上进行多个搜索和替换操作?

4
假设我有一些代码,
struct NodeVector {
    vector<bool_node*> *vec;
};

我想要替换两个东西,就像这样:

:'<,'>s/NodeVector/MyClass/g | s/bool_node/MyEltClass/g

但是,它只运行了第一个搜索,然后显示“未找到模式:bool_node”。我该如何达成这个结果?(插件答案可以)
struct MyClass {
    vector<MyEltClass*> *vec;
};
3个回答

4
问题在于搜索和替换命令都需要一个范围。例如,这些应该可以正常工作:
:'<,'>s/NodeVector/MyClass/g | '<,'>s/bool_node/MyEltClass/g

或者

:%s/NodeVector/MyClass/g | %s/bool_node/MyEltClass/g

1

vim在执行:global命令后,对|(竖杠)的处理方式有所不同,因此您可以这样操作:

:'<,'>g/^/s/NodeVector/MyClass/g | s/bool_node/MyEltClass/g

但是,解析的顺序导致 | 成为 g 命令参数的一部分。 - sehe

1

在默认设置中,您可以将其缩短:

:*s/NodeVector/MyClass/g | *s/bool_node/MyEltClass/g

这是因为通常情况下,1 :*:'<,'> 的同义词。

1 除非*cpoptionsvi兼容选项)中,否则默认情况下不会出现


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