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段移动
- 外部命令
- 自动加载
- 文档
- 发布
- 还剩下什么?