上篇文章 我們提到了兩點使用Vim的重點原則:
這篇文章我們繼續詳述下面兩點:
在使用Vim時,我們的動作組合是可以不斷琢磨而進步的。透過練習用更少的動作完成任務,我們會越來越有感覺。
並不是所有的組合命令都是最佳解。在前面的組合例子中,我們用最小的動作完成目標。對於剛接觸的朋友來說,未必可以一下找到某個情境的最佳解法。
以上篇文章中刪除a
到g
字元的示範為例,您可能想先直接進入可視模式(Visual Mode),從a
手動選取到g
,再用d
命令刪除。此時太在意最佳解的話可能因為多按了好幾個鍵,感到煩躁,轉而尋找其它組合完成目標。
進一步優化的話,您也許會選擇組合v
跟fg
,使用vfg
選取後,再用d 刪除。最後發現其實自己只要用dfg
就可以完成任務了。
但是,不用想要什麼問題都找到最佳解才開始,這樣反而會過度專注在工具上,拖慢思考的速度。先用自己最自然的命令組合開始,之後慢慢改進即可。
日常開發速度的瓶頸不見得在打字跟命令的順序上,因此使用不會打斷思考的方式開發,讓自己寫得順,比寫得快重要。若在日常開發時因為思考命令怎麼有效而讓工作停擺,反而是矯枉過正了。
和程式開發一樣,在了解「過早優化為萬惡之源」原則的同時,我們不應該完全放棄那3%可以讓我們提升開發速度的機會。
在前面的範例中,我們使用了組合的命令,有時候會有多個類似的情境,可以用同樣的命令處理。以一個JavaScript 或TypeScript 開發者熟悉的情境為例,在檔案上面import語法的地方我們有幾個沒有用到或是不存在的類別或物件。
在Vim裡面我們可以先將游標移至該物件上的文字上,如下圖所示:
接著,使用daW
組合命令,刪除游標底下的文字與逗號後面的空白。
對於下面第二個有問題的物件,我們繼續將游標移動到該字上,並使用.
命令即可重複刪除的動作,不用重新打重複的指令。
如果有多個物件是同名的,在Vim裡面我們可以先使用*
命令搜尋同名物件,先按daW
命令完成任務,再按n
移至下一個同名的物件,後面按.
刪除即可。
但現實情境往往不會那麼簡單,通常沒用到的import物件都是不同名的。
在VS Code裡,有一個內建的命令「 Go to Next Problem in Files (Error, Warning, Info) 」
(Command ID:editor.action.marker.nextInFiles
),可以將游標移動至出現警告或錯誤的文字上。筆者將其綁在MacOS「 Cmd + e 」的快捷鍵上。在移除相同位置的import物件時,先用daW
刪除,後面繼續用「 Cmd/Ctrl
+ e
」與 .
命令,即可完成上面任務。
在最後例子裡,我們不僅使用了Vim的.
命令解決問題,也合併使用了VS Code的快捷鍵,讓我們在相同情境下處理跟解決問題的方式變得快速。
這正是一個善用Vim的思維與VS Code命令以提高編輯器效率的例子。
在我們使用工具的同時,我們並不侷限什麼功能是Vim的命令,哪些是VS Code或相關的語言服務提供的,然後僅使用Vim組合命令的模式。而是將Vim的思維內化,在現有的環境下(此處我們是使用VS Code與VSCodeVim),選用適當的方式處理當前的問題,也因此節省了相關的時間成本。
解決問題的方法有許多種,在對同名文字操作的情況,VSCodeVim提供
gb
命令讓我們可以連續選取同名的文字,再統一對文字操作。沒有最好的解法,只有更適合當下情境的做法,請視情況採用方法。除此之外,目前版本VS Code 已經內建了Remove unused Import
的相關Code Action,游標移至為使用到的import物件處,點擊Cmd
+.
,可於跳出的選單下方選取並執行相關操作。在VS Code裡,如果要移除多個unused import
,使用此處語言服務提供的功能,這其實是相同情境下更好的做法。