2011-03-30 40 views
4

內替換文本我有一些非常有用的插件找到,並通過文件替換文本(見EasyGrep Vim腳本 - 這是非常有幫助的程序員)。我甚至可以只在當前緩衝區中替換文本 - 通過使用插件或:%s ...。但是如果我只想替換當前函數體內的文本呢?Vim的:函數體

請看下面的例子:

void f0() 
{ 
    int foo = 0; 
    // ... 
} 

// 99 other functions that uses foo as local variable. 

void f100() 
{ 
    int foo = 0; // I want to replace foo with bar only in this function 
    // 1000 lines of code that uses foo goes below 
    // ... 
} 

當然,我可以使用:%s ...c標誌進行確認,但我相信有一個更快的方法來做到這一點。

謝謝。 ,它會自動爲前綴,只有在標記區域中執行:

回答

4

當你鍵入命令你可以標記與五功能即可。

有可能是跳躍的功能和函數結束開始的命令,所以你能做的開始功能,V,最終的功能,很快替代。儘管不知道這些命令。

+0

這是做的伎倆。謝謝。我標記你的答案是正確的。 – maverik 2011-03-30 09:33:28

13

您可以將替代使用%整個文件或選擇。

要創建一個選擇

圍棋在可視模式下面向行例如,與Shift+v,選擇幾行,然後鍵入:

你的提示看起來像: :'<,'>它意味着:當前選擇

類型,然後s/foo/bar/g,它會通過欄中的當前選擇的行foo換成。

更好的方式來選擇功能內容是去與你的光標和類型的函數中: vi}{}之間進行選擇的一切。

對選擇的更多技巧,參閱:help text-objects

+2

感謝'vi}'。這真的很有用。但是,當有塊'{...}'功能,'六}'裏面得到confugsed :( – maverik 2011-03-30 09:35:36

+0

@maverick:還有其他的技巧,例如如何使用'['跳到''{第一列中的一次。你在那裏,進入可視化模式'v',然後按''%,這將跳轉到收盤'}',並選擇在這個過程中你的功能,如果它很適合你,你可以再重新映射'[[v %'在給定的鍵快速選擇功能。 – 2011-03-30 09:43:29

+0

你也可以使用'[M'跳轉到一個函數/方法開始不管的'{''}'是在路上,我有多少創建的映射在我的.vimrc文件中使用函數/方法的身體作爲文本的對象'vnoremap 上午:正常[MV]中號'和' onoremap 上午:!正常[MV]中號 '現在選擇一個函數體就像'vam'一樣簡單 – 2011-03-30 14:22:33

1

我一直使用[跳轉到函數的開頭,然後用%來跳轉到函數的末尾。我用mb分別標記函數的頂部和底部。然後在標記的頂部和底部搜索並替換,:'t,'bs/pattern/newpattern/g。這一直對我有效。我相信你可以爲此創建一個宏。

視覺選擇(vi)更容易和更快。它知道光標的位置。因此,如果光標位於fucntion子塊內,則選擇該塊中的所有行。如果要選擇整個功能,則需要將光標放在子塊之外,然後執行vi}。這對於適合當前窗口的功能塊非常有用。對於跨越當前窗口的功能,一旦向上滾動,選擇將丟失。

我真的很喜歡vi}的視覺選擇,因爲它更容易和更快,但我必須偶爾使用舊派的方法。