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
:hsrc
:p:h/home/mool/vim/src
:p:h:h/home/mool/vim
:tversion.c
:p:tversion.c
:rsrc/version
:p:r/home/mool/vim/src/version
:t:rversion
:ec
:s?version?main?src/main.c
:s?version?main?:p/home/mool/vim/src/main.c
:p:gs?/?\\?\home\mool\vim\src\version.c