Kan-Ru Chen's Weblog

Vim - 檔名太長怎麼辦

這是 vim 的一個小技巧,考慮以下情境:

  1. 我現在在 ~/ 目錄
  2. 因為某個原因我打開 vim 編輯 /usr/src/foodir/src/bardoor.c
  3. 看了看,發現需要參考同目錄下的 bardoor.h,於是打入命令 :tabe
  4. 接下來怎麼辦?因為目前工作目錄是 ~/,如果要用 vim 的 tab 補完的話還是需要把路徑再打一次
  5. 想一想再看答案 :)

答案是 :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