Vim - 檔名太長怎麼辦
這是 vim 的一個小技巧,考慮以下情境:
- 我現在在
~/目錄 - 因為某個原因我打開 vim 編輯
/usr/src/foodir/src/bardoor.c - 看了看,發現需要參考同目錄下的
bardoor.h,於是打入命令:tabe - 接下來怎麼辦?因為目前工作目錄是
~/,如果要用 vim 的 tab 補完的話還是需要把路徑再打一次 - 想一想再看答案 :)
答案是 :tabe %:r.h
利用 vim 的 filename-modifiers 可以輕鬆作到,vim 有 10 個這樣的 modifier 可以作用於 “%”,“#”,“#n”,“<cfile>”,“<sfile>”,“<afile>” 或 “<abuf>” 出現的地方:
| :p | 完整路徑 |
| :8 | 變成 8.3 格式 (win32 用) |
| :~ | 轉換為相對於 ~/ 目錄的路徑 |
| :. | 轉換成相對於 ./ 目錄 |
| :h | 保留路徑頭部,相當於 dirname 指令 |
| :t | 保留檔案名,相當於 basename 指令 |
| :r | 保留檔案名並去除延伸檔案名 |
| :e | 只留下延伸檔案名 |
| :s?pat?sub? | 用 sub 取代第一個出現的 pat |
| :g?pat?sub? | 同上,全部取代 |
例如,如果文件名是 “src/version.c”,當前目錄是 “/home/mool/vim”:
| :p | /home/mool/vim/src/version.c |
| :p:. | src/version.c |
| :p:~ | ~/vim/src/version.c |
| :h | src |
| :p:h | /home/mool/vim/src |
| :p:h:h | /home/mool/vim |
| :t | version.c |
| :p:t | version.c |
| :r | src/version |
| :p:r | /home/mool/vim/src/version |
| :t:r | version |
| :e | c |
| :s?version?main? | src/main.c |
| :s?version?main?:p | /home/mool/vim/src/main.c |
| :p:gs?/?\\? | \home\mool\vim\src\version.c |