2012-02-27 52 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兼容性選項),其它不是默認