0%

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的功能非常强大,在你完成本章的练习之后,你会学到更多东西。

fnamemodify

:help filename-modifiers

可用选项如下:

:echo fnamemodify("main.c", ":p:h")

:_%: ::8 ::p ::. ::~ ::h ::t ::r ::e ::s ::gs ::S 
    %:8 %:p %:. %:~ %:h %:t %:r %:e %:s %:gs %:S 

各种效果如下:

Examples, when the file name is "src/version.c", current dir
"/home/mool/vim": >
  :p            /home/mool/vim/src/version.c
  :p:.                       src/version.c
  :p:~                 ~/vim/src/version.c
  :h                       src
  :p:h            /home/mool/vim/src
  :p:h:h        /home/mool/vim
  :t                       version.c
  :p:t                       version.c
  :r                       src/version
  :p:r            /home/mool/vim/src/version
  :t:r                       version
  :e                           c
  :s?version?main?               src/main.c
  :s?version?main?:p    /home/mool/vim/src/main.c
  :p:gs?/?\\?        \home\mool\vim\src\version.c

Examples, when the file name is "src/version.c.gz": >
  :p            /home/mool/vim/src/version.c.gz
  :e                             gz
  :e:e                           c.gz
  :e:e:e                       c.gz
  :e:e:r                       c
  :r                       src/version.c
  :r:e                           c
  :r:r                       src/version
  :r:r:r                   src/version

练习

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

  1. 路径
  2. Vimscript编程指南