vimscript-expand函数详解

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

不多说,先上文档介绍

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

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

    'wildgnorecase' 此处适用。

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

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

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

    %                   当前文件名

    #                    交换文件名

    #n                  交换文件名n

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

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

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

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

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

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

    <cword>       扩展为光标所在的单词

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

    <client>        最近收到的消息的值

修饰符:

    :p                扩展为完整的路径

    :h                去掉最后一个部分

    :t                 只保留最后一个部分

    :r                 根部(去掉扩展名)

    :e                只有扩展名

如下例子:

 72 let s:filename=expand('<cfile>')
 73 let s:afile=expand('<afile>')
 74 let s:abuf=expand('<abuf>')
 75 let s:amatch=expand('<amatch>')
 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('<sfile>: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。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值