vimscript-expand函数详解

vim提供很多内置函数,expand就是其中之一

不多说,先上文档介绍

expand({expr} [,{nosuf} [, {list}]])   expand()

    扩展{expr}里的通配符和下列关键字。

    'wildgnorecase' 此处适用。

    如果给出{list}且为TRUE,返回列表。否则返回的是字符串,且如果返回多个匹配,以字符分隔[备注:5.0版本适用空格。但是文件名如果也包含空格就会有问题]。

    如果扩展失败,返回空字符串。如果{expr}以'%','#'或'<'开始,不返回不存在的文件名。详见下。

    如果{expr}以'%'、‘#’、或‘<’开始,类似于cmdline-special变量的方式扩展,扩宝相关的修饰符。这里是一个简短的小结:

    %                   当前文件名

    #                    交换文件名

    #n                  交换文件名n

               光标所在的文件名(其实就是光标所在的一个字符串的名)

               自动命令文件名(当expand在自动命令中执行的时候,扩展为自动命令所在的文件的文件名)

              自动命令的缓冲区号(当expand在指定命令中执行的时候,扩展为自动命令的缓冲区号)

         自动命令匹配的名字(绝对路径下的文件名)

               脚本文件名或者函数名(在脚本中扩展为脚本文件名,在函数中,扩展为函数名)

           脚本文件的行号(当expand(‘’)在某一行,就扩展为那一行的行号)

           扩展为光标所在的单词

        扩展为光标所在的字符串(比cword扩展的更多)

            最近收到的消息的值

修饰符:

    :p                扩展为完整的路径

    :h                去掉最后一个部分

    :t                 只保留最后一个部分

    :r                 根部(去掉扩展名)

    :e                只有扩展名

如下例子:

 72 let s:filename=expand('')
 73 let s:afile=expand('')
 74 let s:abuf=expand('')
 75 let s:amatch=expand('')
 76 function! youcompleteme#test()
 77     echo s:script_folder_path
 78     echo s:filename
 79     echo s:afile
 80     echo s:abuf
 81     echo s:amatch
 82     echo expand(':p')
 83     echo expand('%')
 84 endfunction 

输出:

/root/.vim/bundle/YouCompleteMe/autoload
echo
youcompleteme.vim
1
/root/.vim/bundle/YouCompleteMe/autoload/youcompleteme.vim
/root/.vim/bundle/YouCompleteMe/autoload/function youcompleteme#test
youcompleteme.vim

我们看到对于<>这种扩展,通常只会返回被引用的文件名,而不会进一步扩展。

对于%和#,如果文件名不存在,则返回空字符串。

对于不以%、#和<开头,则以命令行文件名那样扩展。使用'suffixes'和'wildignore'。除非给出可选的{nosuf}参数而且为TRUE.

可以有不存在的文件的名字。

例如:echo expand("**/README")  扩展当前目录及子目录下所有的“README”(**用于匹配所有目录,通配符)

expand()还可以用来扩展变量和只有shell知道的环境变量。

例如:echo expand('$FOOBAR')  如果FOOBAR这个环境变量存在,则扩展为其值;如果不存在就直接扩展为FOOBAR。


这里的#目前还不知道具体能做什么,应该是用于扩展交换文件用,不常用。

你可能感兴趣的:(vimscript,vim)