Vim是一個文本編輯器,而文本編輯器(經常)處理文本文件。文本文件儲存在文件系統中, 而我們使用路徑來描述文件。Vimscript有一些內置的方法會在你需要處理路徑時幫上大忙。
## 絕對路徑
有時外部腳本也需要獲取特定文件的絕對路徑名。執行下面的命令:
~~~
:echom expand('%')
:echom expand('%:p')
:echom fnamemodify('foo.txt', ':p')
~~~
第一個命令顯示我們正在編輯的文件的相對路徑。`%`表示"當前文件"。 Vim也支持其他一些字符串作為`expand()`的參數。
第二個命令顯示當前文件的完整的絕對路徑名。字符串中的`:p`告訴Vim你需要絕對路徑。 這里也有許多別的修飾符可以用到。
第三個命令顯示了當前文件夾下的文件`foo.txt`的絕對路徑,無論文件是否存在。(譯注:試一下看看文件不存在的情況?)?`fnamemodify()`是一個比`expand()`靈活多了的Vim函數, 你可以指定任意文件名作為`fnamemodify()`的參數,而不僅僅是`expand()`所需要的那種特殊字符串。
## 列出文件
你可能想要得到一個特定文件夾下的文件列表。執行下面的命令:
~~~
:echo globpath('.', '*')
~~~
Vim將輸出當前目錄下所有的文件和文件夾。`globpath()`函數返回一個字符串, 其中每一項都用換行符隔開。為了得到一個列表,你需要自己去`split()`。執行這個命令:
~~~
:echo split(globpath('.', '*'), '\n')
~~~
這次Vim顯示一個包括各個文件路徑的Vimscript列表。 如果你的文件名里包括了換行符,那就只能由你自己想辦法了。
`globpath()`的通配符(wildcards)的工作方式就像你所想的一樣。執行下面的命令:
~~~
:echo split(globpath('.', '*.txt'), '\n')
~~~
Vim顯示一個當前文件夾下的所有`.txt`文件組成的列表。
你可以用`**`遞歸地列出文件。執行這個命令:
~~~
:echo split(globpath('.', '**'), '\n')
~~~
Vim將列出當前文件夾下的所有文件及文件夾。
`globpath()`_非常地_強大。在你完成本章練習后,你將學到更多內容。
## 練習
閱讀`:help expand()`.
閱讀`:help fnamemodify()`.
閱讀`:help filename-modifiers`.
閱讀`:help simplify()`.
閱讀`:help resolve()`.
閱讀`:help globpath()`.
閱讀`:help wildcards`.
- 前言
- 鳴謝
- 預備知識
- 打印信息
- 設置選項
- 基本映射
- 模式映射
- 精確映射
- Leaders
- 編輯你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 鍛煉你的手指
- 本地緩沖區的選項設置和映射
- 自動命令
- 本地緩沖區縮寫
- 自動命令組
- Operator-Pending映射
- 更多Operator-Pending映射
- 狀態條
- 負責任的編碼
- 變量
- 變量作用域
- 條件語句
- 比較
- 函數
- 函數參數
- 數字
- 字符串
- 字符串函數
- Execute命令
- Normal命令
- 執行normal!
- 基本的正則表達式
- 實例研究:Grep 運算符(Operator),第一部分
- 實例研究:Grep運算符(Operator),第二部分
- 實例研究:Grep運算符(Operator),第三部分
- 列表
- 循環
- 字典
- 切換
- 函數式編程
- 路徑
- 創建一個完整的插件
- 舊社會下的插件配置方式
- 新希望:用Pathogen配置插件
- 檢測文件類型
- 基本語法高亮
- 高級語法高亮
- 更高級的語法高亮
- 基本折疊
- 高級折疊
- 段移動原理
- Potion段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?