2012-05-06 24 views
20

在Vim中,當我這樣做:Vim的全部更換,而不移動光標

:%s/foo/bar/g 

它將替換整個文檔中的「酒吧」「富」的所有發生。完成後,光標移動到「foo」替換爲「bar」的最後位置。

在發出此命令之前,您如何在沒有光標離開原始位置的情況下運行:%s/foo/bar/g

是否有一些選項可以在.vimrc文件中設置?

+6

不確定如何移動光標而不移動光標,但可以通過單擊兩次將其移回。 –

回答

23

我只是鍵入Ctrl + O取代之後取回以前的位置。

+0

@lucapette感謝格式編輯。 –

+0

@ib。永遠不會厭倦使答案更完美:) – sehe

+1

有沒有這樣的「:」命令? – Bunder

25

當運行:substitute命令時,在實際替換完成之前,光標位置將被存儲在跳轉列表中。爲了在最新跳轉之前返回 的位置,可以使用``''正常模式 命令。當前者跳轉到存儲位置時,後者 將光標移動到該位置所在行上的第一個非空白字符。

所以,能夠快速返回光標回到原來的位置,類型替換命令完成 ``後。

要結合代並且光標移動到一個命令,發出

:%s/pat/str/g|norm!`` 

,或者,如果它是足夠不跳轉到精確的位置,但僅到其線,

:%s/pat/str/g|'' 

作爲如上所示,因爲Ex命令的範圍語法(請參閱:help :range),因此優先於第二個 命令中的norm!''

+0

不錯的嘗試。但不夠優雅。應該用'Ctrl-o'。 – mattn

+0

@mattn:根據什麼標準使用'Ctrl' +'O'是優雅的,而'\''''不是?在擊鍵方面,後者的命令不會長於前者;在這種情況下它們都會導致相同的光標移動。爲什麼你會發現按'''''(而不是'Ctrl' +'O')不雅? –

+0

這很簡單的答案。比c-o長。和你的命令更新跳轉列表。如果我用你的方式,我會用g'。 :) – mattn