vim for code review
從結論上說使用 vim 能有效的在程式內容中移動、選取、編輯,進一步透過建立、執行巨集,搭配 IDE 的快捷鍵進行跨檔案的移動(vim 裡面加上 plugin 也是可以達到),是可以很有效的進行程式碼修改。
基於此將常見的開發情境加入鍵盤快捷鍵,建立基於樣板的新檔案、重構、執行測試、編譯、版本控制等,完全可以更有效地進行開發。
在程式碼中移動
首先是覺得應該要使用英文輸入法(不只是新注音的英文模式)。
常用的移動當然是 j、k 做一般的上下移動,與 w、e、b 的同一行的移動。
再來是 {、} 段落的上下移動(by 空白行),這個時候開始發現程式中間留空行的重要性,第一時間在視覺上的分隔,又可以讓vim的移動更快。
當移動變快的時候 zz 就很重要了,特別是當游標移動到螢幕的最上下邊界時,可以讓目前游標的所在位置,回歸到畫面中間
H、L、M 也有一點效果,只是一行一行的移動有點難改習慣。
接下來… 進階點的移動要等搜尋時說起
一般模式 (Normal mode)
| 鍵盤 | 說明 |
|---|---|
| h、← | 游標向左移動 |
| j、↓、+、<enter> | 游標向下移動 +、<enter> 會到下一行第一個非空白字 |
| k、↑ 、- | 游標向上移動 - 會到上一行第一個非空白字 |
| l、→ | 游標向右移動 |
| 0、^、$、_ | 游標向行首、行末移動 (同正規) 註:0 是行首,^、_ 是非空白字元行首,$ 是對應 0 的行末 |
| <n>$ | 游標向下N行的行末移動 |
| % | 會在對應的括胡來回移動 { }、[ ]、( ) |
| (、) | 向前、後一個句子(sentence)移動 (以英文的句子結尾 .!? 當作結尾),寫程式…或者中文句子基本沒有作用。 |
| {、} | 向前、後一個段落(paragraph)移動,以空行來區分 |
| [[、]] | 向前、後一個節(section)移動 |
| H、M、L | 移動到螢幕第一行、中間行、最末行 |
| <n>G | 移動到第 n 行 |
| G | 移動到檔案的最後一行 |
| gg | 移動到第一行 |
| w、b、e、ge W、B、E、gE |
下一個字首、倒退一個字首、下一個字尾、倒退一個字尾 大寫部分是包括符號 |
| zz、z.、zt、zb | zz、z.: 將目前游標位置移動到畫面中間 zt: 將目前游標位置移動到畫面上方 zb: 將目前游標位置移動到畫面下方 |
| f<c>、t<c> F<c>、T<c> |
向後移動到字元<c>上(find)、前(till) 向前移動到字元<c>上、後 可加上<n> ex. f3c、F3x |
| ;、, | 往後、往前重複上一個 f、t、F、t |
| n、N | 往後、往前重複上一個搜尋 |
| *、# <n>*、<n># |
向後、前移動到當前的字 向後、前移動<n>個當前的字 |
一般模式 (Normal mode) 中編輯
| 鍵盤 | 說明 |
|---|---|
| J | 將下一行連接到目前行末 (Join) |
| ~、<n>~ | 大小寫轉換 轉換<n>個字 |
| <ctrl>a、<ctrl>x | 加、減游標位置的數字 可以處理 8、16 進位 在 Visual Studio 等 IDE 中,需要留意快捷鍵設定 |
| >、< | 縮排、取消縮排 |
| dd | dd: 刪除當前行 |
| d<motion> | d<motion>依照<motion>刪除 * 原本在使用 relation number 等外掛的時候,搞不懂行號為什麼下一行開始計算 1,因為 <n>dd 輸入的 n 會差 1。 後來發現跟<motion>版本指令比較符合,ex. dj、d2j等是往下刪除一行(共刪除2行)、兩行(共刪除3行)。 |
| r<c>、R | r: 替換(replace)字元 -> 字元<c> R: 進入替換模式直到按下<ESC>為止 |
| s<str>、S | s: 替換(Substitute)字元 -> 字<str> S: 替換目前行 |
| c<motion>、C | c: 替換(change)字,都會需要 motion 來協助 ex. cw、cE、ciw等,s = cl C: 等同於c$ |
暫存 Register
| 鍵盤 | 說明 |
|---|---|
| “{a-zA-Z0-9.%#:-“} | 在刪除(D)、複製(Y)、貼上(p)的時候使用暫存的內容 刪除、複製使用大寫暫存時,會附加到現有的暫存後面 |
| :reg | 檢視暫存的內容 |
Visule Model == Select Mode
| 鍵盤 | 說明 |
|---|---|
| v、V、<ctrl>v | 進入字元、行選擇模式、欄選擇模式 |
| o | 切換選擇區域的頭與尾 |