Vimscript编程指南

路径

Vim是一个文本编辑器,并且文本编辑器经常是对文本文件进行操作。文本文件是在文件系统里进行管理的,我们需要通过文件路径来指定文件。当你需要对路径进行操作的时候,vim提供了一些很有用的内置函数。

绝对路径

有些时候外部脚本取得某些文件的路径是很简单的。运行下面的命令:


     :echom expand('%')
     :echom expand('%:p')
     :echom fnamemodify('foo.txt',':p')

第一条命令用来显示你当前在编辑的文件的相对路径。%代表“当前文件”。vim里还有很多可以用expand()来进行替换的字符串。

第二条命令会输出当前文件的全路径。字符串里的:p用来告诉vim取文件的全路径。vim里也有很多这样的修饰符可以使用。

第三条命令根据当前路径显示foo.txt文件的绝对路径,而不用考虑这个文件是否存在。fnamemodify()是一个vim函数,它比expand()函数更加灵活,因为它可以指定任何文件,不仅仅只是expand()的特殊字符。

列出文件

有时候你会需要取得某个目录下的文件列表。运行下面的命令:


     :echo globpath('.','*')

Vim会列出当前目录下的所有文件。globpath()函数返回一个字符串,包含所有的文件名,文件名之间用回车分割。如果想要拿到第一个列表的话,你可以自己用split来切分。运行下面的命令:


     :echo split(globpath('.','*'),'\n')

这次vim会输出一个包含所有文件的列表。

golbpath函数的通配符基本上也是按照你所认为的方式去工作的。运行下面的命令:


     :echo split(globpath('.','*.txt'),'\n')

Vim输出当前目录的下所有的以.txt结尾的文件的列表。

你可以通过**来递归地列举当前文件夹下的所有文件。运行下面的命令:


     :echo split(globpath('.','**'))

Vim会输出当前文件夹下的所有文件和文件夹。

globpath的功能非常强大,在你完成本章的练习之后,你会学到更多东西。

练习

  • 阅读 :help expand().
  • 阅读 :help fnamemodify().
  • 阅读 :help filename-modifiers.
  • 阅读 :help simplify().
  • 阅读 :help resolve().
  • Read :help globpath().
  • Read :help wildcards.