vimscript expand函式詳解

2021-08-15 17:24:55 字數 2002 閱讀 5705

vim提供很多內建函式,expand就是其中之一

不多說,先上文件介紹

expand( [, [, ]])   expand()

擴充套件裡的萬用字元和下列關鍵字。

'wildgnorecase' 此處適用。

如果給出且為true,返回列表。否則返回的是字串,且如果返回多個匹配,以字元分隔[備註:5.0版本適用空格。但是檔名如果也包含空格就會有問題]。

如果擴充套件失敗,返回空字串。如果以'%','#'或'<'開始,不返回不存在的檔名。詳見下。

%                   當前檔名

#                    交換檔名

#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'。除非給出可選的引數而且為true.

可以有不存在的檔案的名字。

例如:echo expand("**/readme")  擴充套件當前目錄及子目錄下所有的「readme」(**用於匹配所有目錄,萬用字元)

expand()還可以用來擴充套件變數和只有shell知道的環境變數。

例如:echo expand('$foobar')  如果foobar這個環境變數存在,則擴充套件為其值;如果不存在就直接擴充套件為foobar。

這裡的#目前還不知道具體能做什麼,應該是用於擴充套件交換檔案用,不常用。

ngx process options函式詳解

ngx process options是初始化init cycle中的一些如 conf file,prefix,conf prefix等字段的功能,其方法的定義在src core nginx.c中,以下為詳細 主要功能是將ngx prefix,配置檔案的位置資訊,以及命令列引數的資訊初始化到cycl...

linux clock gettime函式詳解

注意 1.精確級別,納秒級別 原型long sys clock gettime clockid t which clock,struct timespec tp which clock引數解釋 clock realtime 系統實時時間,隨系統實時時間改變而改變,即從utc1970 1 1 0 0 ...

遞迴函式(詳例)

從函式棧的角度的運用 簡單的列印運用 includevoid function int n int main void function int n return 非空鍊錶的遞迴找最大值 lim findmax lim headptr 為了更好的理解遞迴的執行過程 在呼叫自生到最後時,if head...