ReSharper有一個很好的功能,稱爲「擴展選擇」:通過反覆按CTRL+W
(我認爲這是默認設置),您可以從當前的脫字符位置選擇越來越多。首先它是一個詞,然後越來越多的單詞,一行,內部然後外部塊的行(例如一個if塊),然後功能等...有沒有辦法在Vim中模擬ReSharper的「擴展選擇」功能?
基本上,通過重複按下組合鍵,你最終可以選擇整個文件。我相信至少你們中的一些人會熟悉它。
我剛剛開始學習vim的所有錯綜複雜,我沒有足夠的經驗來看看如何在Vim中實現這樣的事情(儘管我認爲這是可能的)。所以我的問題是針對Vim的大師:這可以做到,怎麼做?
更新:有點背景故事。我一直在和前任老闆談論Vim的所有好處,他認爲這很好。他唯一的問題是:它有「擴展選擇」嗎?我的問題到目前爲止是沒有。所以,如果有人知道答案,我終於會贏得一場討論:P(也許創建一個新的Vim轉換器
令人驚訝的是,在這裏沒有人回答認識到需要適當的(部分)解析器。 Resharper在代碼的邏輯模型之上實現了這個(很棒的)功能:代碼DOM。這也是使重構能夠處理所做選擇的原因。沒有合適的解析器,你會選擇「事物」,但不是適當的(子)表達式。後者會很有用,但目前Vim不支持_That。除非你指望Lisp支持:`vabababo2k`對lisp_來說是完美的:) – sehe 2011-09-06 13:54:08
@sehe:當然,你是完全正確的。自從我問這個問題以來,我一直在想這個問題(好像很久以前!),並意識到,即使我以某種方式設法創建此功能,它將只適用於特定語言或一族語言。太糟糕了,不是嗎? :) – 2011-09-07 17:52:23
我也一直在琢磨這個。我對90%的解決方案感到滿意(我現在可以手動對Vim進行非常快速的重構)。然而,「可用的」子表達式匹配選擇擴展器真的是我的第一夢想特徵。我確信很有可能提出一個解析器,它將爲C#,Java,C++和C提供DoTheRightThing;我期望的唯一粘性邊緣情況是C#與C++ 0x lambdas。所以我可能會把它們留出一段時間(並確保它是可插拔的)。我仍然在決定使用什麼,因爲我有種惡意的vim腳本。我傾向於python,但厭倦了排除用戶基礎的問題 – sehe 2011-09-07 19:40:12