2012-02-27 73 views
4

假设我有一些代码,vim - 如何在视觉块上执行多个搜索和替换操作?

struct NodeVector { 
    vector<bool_node*> *vec; 
}; 

我想更换两件事情,这样,

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

但是,它只能运行在第一次搜索,然后说:“找不到模式:bool_node ”。我怎样才能达到这个结果? (插件的答案没关系)。

struct MyClass { 
    vector<MyEltClass*> *vec; 
}; 

回答

4

的问题,这里是这两个搜索&的替换命令需要一个范围。例如,这些应该很好地工作:

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

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

是啊,我不想在整个文件上这样做...... – gatoatigrado 2012-02-27 01:28:55

+0

它可以工作。请参阅编辑。 – 2012-02-27 01:29:39

+0

是的,非常感谢。 – gatoatigrado 2012-02-27 01:31:30

1

vim对待|(栏)后:global命令不同,所以你可以这样做:

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

没有不同。但是解析完成的顺序导致'|'成为'g'的命令参数的一部分 – sehe 2012-02-27 10:32:31

1

在默认设置你可以缩短它:

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

这是因为,通常,:*:'<,'>


的同义词,除非*是在cpoptionsVI兼容性选项),其它不是默认