題 你如何重用視覺模式選擇?


通常在編輯代碼時,我會在可視模式下選擇一個塊並進行搜索並替換塊。然而,在我進行更改後,它會離開可視模式。你如何通過相同的選擇進行新的查找和替換?


151
2017-12-10 16:58


起源


好吧,我找到了一種方法,但它有點麻煩:'','> s / old / new / g任何方法都可以這樣做而無需輸入'<,'>? - labyrinth


答案:


您可以使用重新選擇上次選擇的可視區域 gv


217
2017-12-10 23:59



真棒! @Heptite如何自己找到這個命令w \ o Stackoverflow? - skywinder
@skywinder:幫助gv - Heptite
@Heptite:我不確定你是不是在這裡說話,但是這個命令會告訴你什麼:一旦你知道了gv就做了。但是,如果我 沒有?教一個(男)釣魚和所有這些。 - Ben Thul
@BenThul:我想我誤解了這個問題。我只是通過閱讀大量文檔來了解Vim的許多功能,從“:help“。 - Heptite
:help select-visual 應該引導你到vim @skywinder裡面的正確手冊。 - nwildner


gv 絕對是最快的方法(使用最後一個選擇),但如果你想要一個穩定的保存選擇區域(或幾個),你總是可以創建宏。

假設我想存儲我當前方法的選擇,該方法來自第25-35行。我可以創建一個宏,通過鍵入選擇整個方法

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

然後我可以通過輸入來獲得選擇 @a (在寄存器a中運行宏)。重複您希望的任何寄存器,行或行的部分。顯然,如果您對文件進行更改,選擇也可能會更改,因此您可能需要考慮使用標記而不是“硬編碼”行號。


13
2018-03-14 13:26



zmto輸入你需要知道的行號。我認為最好定義兩個標記,然後使用:'a,'b來操作它們之間的範圍(或者如果想要一行中的粒度,則用'反引號'替換) - sillyMunky
是的,行號是愚蠢的 - 我只是用它作為如何創建選擇宏的例子。使用一系列標記是一個有趣的想法,但...... - AlexMA


gv 非常適合恢復最後的選擇。但有時需要更多一點。

如果您需要更持久的記錄,請看看 這個插件 我們目前正在研究GitHub。

VisualMarks 允許您保存和恢復可視選擇的區域,就像保存和標記文件中的特定位置一樣 m。安裝後,使用默認選項,使用:

ma

在可視模式下保存當前選擇以進行標記 a, 然後

<a

在正常模式下返回此選擇。


6
2017-10-18 17:39



哇,聽起來很酷。我將不得不試試這個插件!順便說一句,這些VisualMarks可以像mkview一樣堅持使用標記嗎? - labyrinth
@labyrinth我不知道 mkview 但是......我想 是 因為標記保存在一個單獨的文件中..我建議你再嘗試:)如果它們沒有像你希望的那樣堅持,我們很樂意收到你的功能請求 GitHub上 並嘗試處理它。 - iago-lito


假設我想用Hello替換Goodbye並選擇以下代碼:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

我會輸入 :s/Goodbye/Hello/ 和vim將替換所有的實例 Goodbye 同 Hello

它只是vim正則表達式和視覺模式選擇的組合。選擇時,應該自動填充 '<,'>


0
2017-12-10 17:20



對不起,那不是我的要求。我要問的是你如何重複使用選擇來進行另一次查找並替換之前選擇的相同範圍? - labyrinth
更換後,您將退出視覺模式。輸入 gv 並且您的可視模式將恢復到之前的選擇狀態。 - Scott Nguyen