filename-modifiers顧名思義,就是獲得檔案名稱後再改一改。在Ex-mode(Ex-mode就是輸入冒號+命令的模式)中,%表示當前正在編輯的檔案的名字(filename)。你可以輸入:!echo %觀察當前編輯的檔案的全路徑名字。
我沒必要在這裡羅列filename-modifiers的細節,因為vi的文檔已經說的很清楚了,你可以在vi中運行:help file-modifiers查看文檔。
我想說明的是,在我寫java程式的時候,vi的file-modifiers功能對我的協助有多大。
一個最簡單的例子是我用vi寫了一個java的helloworld程式,原始碼都在一個檔案裡,檔案名稱為helloworld.java,要編譯這段代碼,我只要輸入:!javac %,要運行javac編譯出來的class,我在vi中輸入命令:!java -cp . %:r。這裡的%:r意識是root of the filename,也就是全路徑的檔案名稱去掉檔案名稱尾碼後剩下的部分。
還有一個更有意思的例子,我現在日常的工作就是改一個龐大的java程式中的幾個模組,我有時候要到這個模組的路徑下改改代碼,編譯一下,看看結果,有時候又要到那個模組的路徑下改代碼編譯看結果。來回的切換路徑很麻煩,特別在幾個模組有關聯的時候。現在有了vi的filename-modifiers功能就方便了。我同時開啟各個模組的原始碼檔案。如果我想進入當前正在編輯的原始碼檔案所在的路徑,我就輸入:cd %:h
現在我的工作流程是這樣的,在vi中切換到某個模組的原始碼檔案,編輯代碼,:cd %:h(進入原始碼檔案所在目錄),:make(運行該目錄下的makefile,編譯模組),切換到另一個模組,重複上述步驟。實際上我連上述步驟中打字的活也懶得做,在vi的Ex-mode中,Ctrl+P(P代表previous)表示重複前一個命令,顯然我現在的工作流程中要輸入的命令都是一樣的。所以我現在的工作就是按一次或者兩次Ctrl+P這麼簡單.