progden.github.io

View on GitHub

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 切換選擇區域的頭與尾