本篇文章介紹 vim 的一些使用技巧:
- 在程序代碼中快速跳轉
- 在文件內跳轉到變量定義處
在程序代碼中快速跳轉
在 vim 中查看代碼文件時,可以使用下面命令在程序代碼中快速跳轉,提高效率。
- %
跳轉到光標所在括號的另一個配對括號上,適用於小括號()、大括號{}、方括號[]。
例如當前光標在左大括號 { 上,輸入 % 命令,光標會跳轉到配對的右大括號 } 上。
這個命令也適用於C語言的條件編譯宏,可以在配對的 #if、#ifdef、#else、#elif、 #endif 之間快速跳轉光標。 - [m
跳轉到當前光標往上的最近一個函數開頭,停在左大括號上。
如果光標在函數內,就是跳轉到當前函數的開頭左大括號。
如果光標在函數外,則跳轉到上面最近一個函數的開頭左大括號。 - [M
跳轉到當前光標往上的最近一個函數結尾,停在右大括號上。
無論當前光標在函數內、還是函數外,都是跳轉到上面最近一個函數的末尾右大括號。 - ]m
跳轉到當前光標往下的最近一個函數開頭,停在左大括號上。
無論當前光標在函數內、還是函數外,都是跳轉到下面最近一個函數的開頭左大括號。 - ]M
跳轉到當前光標往下的最近一個函數結尾,停在右大括號上。
如果光標在函數內,就是跳轉到當前函數的末尾右大括號。
如果光標在函數外,則跳轉到下面最近一個函數的末尾右大括號。 - [{
跳轉到當前光標往上最近一個沒有匹配的左大括號,停在左大括號上。
例如光標在 if 語句內,則跳轉到 if 語句開頭左大括號。 - ]}
跳轉到當前光標往下最近一個沒有匹配的右大括號,停在右大括號上。
例如光標在 if 語句內,則跳轉到 if 語句末尾右大括號。 - [(
跳轉到當前光標前面最近一個沒有匹配的左小括號,停在左小括號上。
例如光標在一個小括號 () 內,則跳轉到左邊最近的左小括號。 - ]) 跳轉到當前光標後面最近一個沒有匹配的右小括號,停在右小括號上。
例如光標在一個小括號 () 內,則跳轉到右邊最近的右小括號。
這些命令都可以在前面加上數字,表示跳轉級數. 例如:
- 3[m
將跳轉到當前光標往上的第三個函數開始處,停在左大括號上。
如果光標在函數內,則當前函數是第一個函數,會再往上跳兩個函數。 - 3[{
將跳轉到當前光標往上的第三級大括號開始處,停在左大括號上。
可以使用 :help [( 命令查看 [( 的說明。% 的說明在 [( 的上面。
可以使用 :help [m 命令查看 [m 的說明。
其他命令的說明可以類似查看。
在文件內跳轉到變量定義處
在當前文件內,可以使用下面命令來快速跳轉到變量定義處。
- gd
在當前函數內查找當前光標下的單詞,如果找到,就跳轉到該單詞在函數內第一次出現的地方。
對局部變量來說,也就是跳轉到變量定義處。
如果光標下的單詞對應全局變量,這個命令不會跳轉到全局變量定義處,而是會跳轉到函數內第一次用到該變量的地方。
這個命令本身沒有進行語法解析,只是簡單的執行字符串搜索並跳轉。在實際使用時可用來查找任意單詞,不限於查找變量。 - gD
在當前文件內查找當前光標下的單詞,如果找到,就跳轉到該單詞在文件內第一次出現的地方。
對全局變量來說,也就是跳轉到全局變量定義處。
對局部變量來說,也能跳轉到局部變量定義處。
如果變量是在文件外定義,就只能跳轉到當前文件內第一次用到該變量的地方。
實際測試,gd 命令只能在函數內搜索,不會跳轉到全局變量定義處。
gD 命令是在整個文件內搜索,可以跳轉到全局變量定義處,也能跳轉到函數內的局部變量定義處。如果不確認要搜索的單詞是全局變量,還是局部變量,統一用 gD 命令即可。如果變量是在當前文件內定義,gD 命令一定能跳轉到文件內的變量定義處,比 gd 命令要方便。
可以用 :help gd 和 :help gD 命令來查看幫助說明,這兩個命令的幫助說明是相鄰的。
閱讀更多 霜魚片 的文章