Nvim 的 :help
頁面,從 原始碼 使用 tree-sitter-vimdoc 解析器產生。
{expr}
) abs(){expr}
的絕對值。當 {expr}
的計算結果為 浮點數 時,abs() 回傳一個 浮點數。當 {expr}
可以轉換為 數字 時,abs() 回傳一個 數字。否則,abs() 會給出錯誤訊息並回傳 -1。範例echo abs(1.456)
echo abs(-5.456)
echo abs(-4)
{expr}
(數字
)數字
){expr}
) acos(){expr}
的反餘弦值,以弧度為單位,以 浮點數 形式回傳,範圍在 [0, pi] 之間。{expr}
的計算結果必須為 浮點數 或範圍在 [-1, 1] 之間的 數字。如果 {expr}
超出範圍 [-1, 1],則回傳 NaN。如果 {expr}
不是 浮點數 或 數字,則回傳 0.0。範例echo acos(0)
echo acos(-0.5)
{expr}
(數字
)數字
){object}
, {expr}
) add(){expr}
附加到 列表 或 Blob {object}
。回傳結果的 列表 或 Blob。範例let alist = add([1, 2, 3], item)
call add(mylist, "woodstock")
{expr}
為 列表 時,它會作為單一項目附加。使用 extend() 來串連 列表。當 {object}
為 Blob 時,則 {expr}
必須為數字。使用 insert() 在另一個位置新增項目。如果 {object}
不是 列表 或 Blob,則回傳 1。{object}
(任意
){expr}
(任意
){expr}
, {expr}
) and()or()
和 xor()
。範例let flag = and(bits, 0x80)
{expr}
(數字
){expr1}
(數字
)整數
)lua vim.print(vim.fn.api_info())
表格
){lnum}
, {text}
) append(){text}
為 列表 時:將 列表 中的每個項目作為文字行附加到目前緩衝區中第 {lnum}
行的下方。否則,將 {text}
作為一行文字附加到目前緩衝區中第 {lnum}
行的下方。接受任何類型的項目並將其轉換為字串。{lnum}
可以為零,以在第一行之前插入一行。{lnum}
的使用方式與 getline() 相同。失敗時回傳 1 ({lnum}
超出範圍或記憶體不足),成功時回傳 0。當 {text}
為空列表時,無論 {lnum}
的值為何,都會回傳零。範例let failed = append(line('$'), "# THE END")
let failed = append(0, ["Chapter 1", "the beginning"])
{lnum}
(整數
){text}
(字串|字串[]
)0|1
){buf}
的用法,請參閱 bufname()。{lnum}
是要附加在其下方的行號。請注意,使用 line() 會使用目前的緩衝區,而不是要附加文字的緩衝區。使用 "$" 在緩衝區末尾附加。不支援其他字串值。{buf}
不是有效的緩衝區或 {lnum}
無效,則會顯示錯誤訊息。範例let failed = appendbufline(13, 0, "# THE START")
{text}
為空列表時,不會針對無效的 {lnum}
給出錯誤,因為實際上不會使用 {lnum}
。{buf}
(整數|字串
){lnum}
(整數
){text}
(字串
)0|1
){winid}
]) argc(){winid}
,則會使用目前視窗的引數清單。如果 {winid}
為 -1,則會使用全域引數清單。否則,{winid}
會指定要使用其引數清單的視窗:視窗編號或視窗 ID。如果 {winid}
引數無效,則回傳 -1。{winid}
(整數?
)整數
)整數
){winnr}
[, {tabnr}
]]) arglistid(){winnr}
時,會使用目前索引標籤頁面中的此視窗。使用 {winnr}
和 {tabnr}
時,會使用指定索引標籤頁面中的視窗。{winnr}
可以是視窗編號或 視窗 ID。{winnr}
(整數?
){tabnr}
(整數?
)整數
){nr}
[, {winid}
]]) argv(){nr}
個檔案。請參閱 arglist。「argv(0)」是第一個檔案。範例let i = 0
while i < argc()
let f = escape(fnameescape(argv(i)), '.')
exe 'amenu Arg.' .. f .. ' :e ' .. f .. '<CR>'
let i = i + 1
endwhile
{nr}
個引數,則回傳空字串。如果 {winid}
引數無效,則回傳空列表。{nr}
(整數?
){winid}
(整數?
)字串|字串[]
){expr}
) asin(){expr}
的反正弦值,以弧度為單位,以 浮點數 形式回傳,範圍在 [-pi/2, pi/2] 之間。{expr}
的計算結果必須為 浮點數 或範圍在 [-1, 1] 之間的 數字。如果 {expr}
超出範圍 [-1, 1],則回傳 NaN。如果 {expr}
不是 浮點數 或 數字,則回傳 0.0。範例echo asin(0.8)
echo asin(-0.5)
{expr}
(任意
)數字
){cmd}
) assert_beeps(){cmd}
,如果它未產生嗶聲或視覺響鈴,則將錯誤訊息新增至 v:errors。另請參閱 assert_fails()、assert_nobeep() 和 assert-return。{cmd}
(字串
)0|1
){expected}
, {actual}
[, {msg}
]) assert_equal(){expected}
和 {actual}
不相等時,會將錯誤訊息新增至 v:errors 並回傳 1。否則回傳零。assert-return 錯誤的格式為「Expected {expected}
but got {actual}
」。當 {msg}
存在時,會將其作為前綴,並包含從指令碼執行時的斷言位置。call assert_equal('foo', 'bar', 'baz')
{expected}
(任意
){actual}
(任意
){msg}
(任意?
)0|1
){fname_one}
, {fname_two}
) assert_equalfile(){fname_one}
和 {fname_two}
未包含完全相同的文字時,會將錯誤訊息新增至 v:errors。另請參閱 assert-return。當 {fname_one}
或 {fname_two}
不存在時,錯誤訊息會提及這一點。{fname_one}
(字串
){fname_two}
(字串
)0|1
){error}
[, {msg}
]) assert_exception(){error}
時,會將錯誤訊息新增至 v:errors。另請參閱 assert-return。這可以用於斷言命令擲回例外。使用錯誤編號,後接冒號,可以避免翻譯問題try
commandthatfails
call assert_false(1, 'command should have failed')
catch
call assert_exception('E492:')
endtry
{error}
(任意
){msg}
(任意?
)0|1
){cmd}
[, {error}
[, {msg}
[, {lnum}
[, {context}
]]]]) 執行 {cmd}
,如果它未產生錯誤,或在錯誤訊息中找不到 {error}
時,會將錯誤訊息新增至 v:errors。另請參閱 assert-return。{error}
為字串時,必須在第一個回報的錯誤中逐字找到。大多數情況下,這會是包含冒號的錯誤代碼,例如「E123:」。call assert_fails('bad cmd', 'E987:')
{error}
為包含一或兩個字串的 列表 時,這些字串會用作模式。第一個模式會與第一個回報的錯誤比對call assert_fails('cmd', ['E987:.*expected bool'])
call assert_fails('cmd', ['', 'E987:'])
{msg}
為空,則不會使用。在傳遞 {lnum}
引數時,執行此操作以取得預設訊息。E1115{lnum}
存在且不為負數,且 {error}
引數存在並符合時,會將其與回報錯誤的行號進行比較。這可能是函式或指令碼中的行號。E1116{context}
存在時,會將其用作模式,並與 {lnum}
所在的內容 (指令碼名稱或函式名稱) 比對。{cmd}
(字串
){error}
(任意?
){msg}
(任意?
){lnum}
(整數?
){context}
(任意?
)0|1
){actual}
[, {msg}
]) assert_false(){actual}
不是 false 時,會像 assert_equal() 一樣,將錯誤訊息加入到 v:errors 中。錯誤訊息的格式為「Expected False but got {actual}
」。如果存在 {msg}
,則會在錯誤訊息前加上此訊息,並且在從腳本執行時,會加上 assert 所在的位置。另請參閱 assert-return。{actual}
不是數字時,assert 會失敗。{actual}
(任意
){msg}
(任意?
)0|1
){lower}
, {upper}
, {actual}
[, {msg}
]) assert_inrange(){actual}
小於 {lower}
或大於 {upper}
時,會將錯誤訊息加入到 v:errors 中。另請參閱 assert-return。錯誤訊息的格式為「Expected range {lower}
- {upper}
, but got {actual}
」。如果存在 {msg}
,則會在錯誤訊息前加上此訊息。{lower}
(number
){upper}
(number
){actual}
(number
){msg}
(string?
)0|1
){pattern}
, {actual}
[, {msg}
]) assert_match(){pattern}
與 {actual}
不匹配時,會將錯誤訊息加入到 v:errors 中。另請參閱 assert-return。錯誤訊息的格式為「Pattern {pattern}
does not match {actual}
」。如果存在 {msg}
,則會在錯誤訊息前加上此訊息,並且在從腳本執行時,會加上 assert 所在的位置。{actual}
會被當作字串使用,會自動進行轉換。使用 "^" 和 "$" 來匹配文字的開頭和結尾。同時使用兩者來匹配整個文字。call assert_match('^f.*o$', 'foobar')
{pattern}
(string
){actual}
(string
){msg}
(string?
)0|1
){cmd}
(字串
)0|1
){expected}
, {actual}
[, {msg}
]) assert_notequal()assert_equal()
相反:當 {expected}
和 {actual}
相等時,將錯誤訊息加入到 v:errors 中。另請參閱 assert-return。{expected}
(任意
){actual}
(任意
){msg}
(任意?
)0|1
){pattern}
, {actual}
[, {msg}
]) assert_notmatch()assert_match()
相反:當 {pattern}
與 {actual}
匹配時,將錯誤訊息加入到 v:errors 中。另請參閱 assert-return。{pattern}
(string
){actual}
(string
){msg}
(string?
)0|1
){msg}
(string
)0|1
){actual}
[, {msg}
]) assert_true(){actual}
不是 true 時,會像 assert_equal() 一樣,將錯誤訊息加入到 v:errors 中。另請參閱 assert-return。當值為非零數字或 v:true 時,即為 TRUE。當 {actual}
不是數字或 v:true 時,assert 會失敗。如果提供 {msg}
,則會在預設訊息前加上此訊息,並且在從腳本執行時,會加上 assert 所在的位置。{actual}
(任意
){msg}
(string?
)0|1
){expr}
) atan(){expr}
的反正切主值,以弧度為單位,範圍在 [-pi/2, +pi/2] 之間,型別為 Float。{expr}
的計算結果必須為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則回傳 0.0。範例echo atan(100)
echo atan(-4.01)
{expr}
(數字
)數字
){expr1}
, {expr2}
) atan2(){expr1}
/ {expr2}
的反正切值,以弧度為單位,範圍在 [-pi, pi] 之間,型別為 Float。{expr1}
和 {expr2}
的計算結果必須為 Float 或 Number。如果 {expr1}
或 {expr2}
不是 Float 或 Number,則回傳 0.0。範例echo atan2(-1, 1)
echo atan2(1, -1)
{expr1}
(數字
){expr2}
(number
)數字
){blob}
) blob2list(){blob}
中每個位元組的數值。範例blob2list(0z0102.0304) " returns [1, 2, 3, 4]
blob2list(0z) " returns []
{blob}
(any
)any[]
){save}
, {title}
, {initdir}
, {default}
) browse(){save}
選擇要寫入的檔案,{title}
為請求器的標題,{initdir}
為開始瀏覽的目錄,{default}
為預設檔案名稱。當按下「取消」按鈕、發生錯誤或無法瀏覽時,會回傳空字串。{save}
(any
){title}
(string
){initdir}
(string
){default}
(string
)0|1
){title}
, {initdir}
) browsedir(){title}
為請求器的標題,{initdir}
為開始瀏覽的目錄。當按下「取消」按鈕、發生錯誤或無法瀏覽時,會回傳空字串。{title}
(string
){initdir}
(string
)0|1
){name}
) bufadd(){name}
(必須是字串)將緩衝區加入到緩衝區清單中。如果檔案 {name}
的緩衝區已存在,則回傳該緩衝區編號。否則回傳新建立的緩衝區編號。當 {name}
為空字串時,總是會建立新的緩衝區。緩衝區不會設定 'buflisted',而且尚未載入。若要將一些文字加入到緩衝區,請使用以下方式let bufnr = bufadd('someName')
call bufload(bufnr)
call setbufline(bufnr, 1, ['some', 'text'])
{name}
(string
)整數
){buf}
) bufexists(){buf}
的緩衝區,則為 TRUE。如果 {buf}
參數是數字,則使用緩衝區編號。數字零為目前視窗的替代緩衝區。{buf}
(any
)0|1
){buf}
) buflisted(){buf}
的緩衝區,且該緩衝區已列出(已設定 'buflisted' 選項),則為 TRUE。{buf}
參數的使用方式與 bufexists() 相同。{buf}
(any
)0|1
){buf}
) bufload(){buf}
。當緩衝區名稱參考現有檔案時,則會讀取該檔案。否則緩衝區將會是空的。如果緩衝區已載入,則不會有任何變更。如果緩衝區與檔案沒有關聯,則不會讀取任何檔案(例如,當 'buftype' 為 "nofile" 時)。如果緩衝區檔案存在現有的交換檔案,則不會有任何對話方塊,仍然會載入緩衝區。{buf}
參數的使用方式與 bufexists() 相同。{buf}
(any
){buf}
) bufloaded(){buf}
的緩衝區,且該緩衝區已載入(顯示在視窗中或隱藏),則為 TRUE。{buf}
參數的使用方式與 bufexists() 相同。{buf}
(any
)0|1
){buf}
]) bufname():ls
命令顯示的相同,但不使用特殊名稱,例如 "[No Name]"。如果省略 {buf}
,則使用目前緩衝區。如果 {buf}
為 Number,則會給定該緩衝區編號的名稱。數字零為目前視窗的替代緩衝區。如果 {buf}
為 String,則會將其用作 file-pattern 來與緩衝區名稱匹配。這始終像設定了 'magic' 且 'cpoptions' 為空一樣進行。當有多個匹配項時,會回傳空字串。"" 或 "%" 可用於目前緩衝區,"#" 可用於替代緩衝區。優先使用完全匹配,否則接受在緩衝區名稱的開頭、結尾或中間的匹配。如果您只想要完全匹配,請將 "^" 放在模式的開頭,將 "$" 放在模式的結尾。首先找到已列出的緩衝區。如果已列出的緩衝區有單一匹配項,則會回傳該項。接下來會搜尋未列出的緩衝區。如果 {buf}
為 String,但您想將其用作緩衝區編號,請將其強制轉換為 Number,方法是將零加到該項echo bufname("3" + 0)
echo bufname("#") " alternate buffer name
echo bufname(3) " name of buffer 3
echo bufname("%") " name of current buffer
echo bufname("file2") " name of buffer where "file2" matches.
{buf}
(integer|string?
)string
){buf}
[, {create}
]]) bufnr():ls
命令所顯示的。關於 {buf}
的使用,請參閱上方的 bufname()。如果緩衝區不存在,則會回傳 -1。或者,如果存在 {create}
參數且為 TRUE,則會建立一個新的、未列出的緩衝區,並回傳其編號。bufnr("$") 是最後一個緩衝區。let last_buffer = bufnr("$")
{buf}
(integer|string?
){create}
(any?
)整數
){buf}
) bufwinid(){buf}
關聯的第一個視窗的 視窗 ID。關於 {buf}
的使用,請參閱上方的 bufname()。如果緩衝區 {buf}
不存在或沒有這樣的視窗,則會回傳 -1。範例echo "A window containing buffer 1 is " .. (bufwinid(1))
{buf}
(any
)整數
){buf}
) bufwinnr(){buf}
不存在或沒有這樣的視窗,則會回傳 -1。範例echo "A window containing buffer 1 is " .. (bufwinnr(1))
{buf}
(any
)整數
){byte}
) byte2line(){byte}
的字元所在的行號。這包含行尾字元,取決於目前緩衝區的 'fileformat' 選項。第一個字元的位元組計數為一。另請參閱 line2byte()、go 和 :goto。{byte}
值無效,則回傳 -1。{byte}
(any
)整數
){expr}
, {nr}
[, {utf16}
]) byteidx(){expr}
中第 {nr}
個字元的位元組索引。第一個字元使用零,則會回傳零。如果沒有多位元組字元,則回傳值等於 {nr}
。組合字元不會單獨計算,它們的位元組長度會加到前面的基本字元中。請參閱下方的 byteidxcomp() 以單獨計算組合字元。當 {utf16}
存在且為 TRUE 時,{nr}
會用作字串 {expr}
中的 UTF-16 索引,而不是字元索引。UTF-16 索引是當字串以 16 位元字組編碼時的索引。如果指定的 UTF-16 索引位於字元的中間 (例如在 4 位元組字元中),則會回傳該字元中第一個位元組的位元組索引。有關更多資訊,請參閱 字串偏移編碼。範例echo matchstr(str, ".", byteidx(str, 3))
let s = strpart(str, byteidx(str, 3))
echo strpart(s, 0, byteidx(s, 1))
{nr}
個,則回傳 -1。如果恰好有 {nr}
個字元,則會回傳字串的位元組長度。請參閱 charidx() 和 utf16idx() 以分別從位元組索引取得字元和 UTF-16 索引。範例echo byteidx('a😊😊', 2) " returns 5
echo byteidx('a😊😊', 2, 1) " returns 1
echo byteidx('a😊😊', 3, 1) " returns 5
{expr}
(任意
){nr}
(integer
){utf16}
(any?
)整數
){expr}
, {nr}
[, {utf16}
]) byteidxcomp()let s = 'e' .. nr2char(0x301)
echo byteidx(s, 1)
echo byteidxcomp(s, 1)
echo byteidxcomp(s, 2)
{expr}
(任意
){nr}
(integer
){utf16}
(any?
)整數
){func}
, {arglist}
[, {dict}
]) call() E699 使用 列表 {arglist}
中的項目作為引數呼叫函數 {func}
。{func}
可以是 函式參考 或函數的名稱。a:firstline 和 a:lastline 會設定為游標所在的行。回傳所呼叫函數的回傳值。{dict}
用於具有 "dict" 屬性的函數。它會用來設定區域變數 "self"。 字典函數{func}
(any
){arglist}
(any
){dict}
(any?
)any
)echo ceil(-5.456)
echo ceil(4.0)
{expr}
(數字
)數字
){id}
[, {stream}
]) chanclose(){stream}
可以是 "stdin"、"stdout"、"stderr" 或 "rpc" 其中之一 (關閉以 "rpc":v:true
啟動的作業的 stdin/stdout)。如果省略 {stream}
,則會關閉所有串流。如果通道是 pty,則這將關閉 pty 主端,並向作業程序傳送 SIGHUP。對於 socket,只有一個串流,應該省略 {stream}
。{id}
(integer
){stream}
(string?
)0|1
)整數
){id}
, {data}
) chansend(){id}
。對於作業,它會將資料寫入程序的 stdin。對於 stdio 通道 channel-stdio,它會寫入 Nvim 的 stdout。如果寫入成功,則回傳寫入的位元組數,否則回傳 0。有關更多資訊,請參閱 通道位元組。{data}
可以是字串、可轉換為字串的物件、Blob 或列表。如果 {data}
是列表,則項目將以換行符號連接;項目中的任何換行符號都將以 NUL 傳送。若要傳送最後一個換行符號,請包含一個最後的空字串。範例call chansend(id, ["abc", "123\n456", ""])
{id}
(number
){data}
(string|string[]
)0|1
){string}
[, {utf8}
]) char2nr(){string}
中第一個字元的數字值。範例echo char2nr(" ") " returns 32
echo char2nr("ABC") " returns 65
echo char2nr("á") " returns 225
echo char2nr("á"[0]) " returns 195
echo char2nr("\<M-x>") " returns 128
{utf8}
會被忽略,它僅為了向後相容而存在。組合字元是單獨的字元。nr2char() 執行相反的操作。{string}
不是 字串,則回傳 0。{string}
(string
){utf8}
(any?
)0|1
){string}
) charclass(){string}
中第一個字元的字元類別。字元類別為以下其中之一:0 空白 1 標點符號 2 單字字元 (取決於 'iskeyword') 3 表情符號 其他特定的 Unicode 類別。類別用於模式和單字移動中。如果 {string}
不是 字串,則回傳 0。{string}
(string
)0|1|2|3|'other'
)echo charcol('.') " returns 3
echo col('.') " returns 7
{expr}
(string|integer[]
){winid}
(整數?
)整數
){string}
, {idx}
[, {countcc}
[, {utf16}
]]) charidx(){string}
中位於 {idx}
的位元組的字元索引。第一個字元的索引為零。如果沒有多位元組字元,則回傳值等於 {idx}
。{utf16}
存在且為 TRUE 時,{idx}
會用作字串 {expr}
中的 UTF-16 索引,而不是位元組索引。{idx}
個位元組,則回傳 -1。如果恰好有 {idx}
個位元組,則會回傳字串的字元長度。echo charidx('áb́ć', 3) " returns 1
echo charidx('áb́ć', 6, 1) " returns 4
echo charidx('áb́ć', 16) " returns -1
echo charidx('a😊😊', 4, 0, 1) " returns 2
{string}
(string
){idx}
(integer
){countcc}
(boolean?
){utf16}
(boolean?
)整數
){dir}
) chdir(){dir}
。目錄變更的範圍取決於目前視窗的目錄{dir}
必須是字串。如果成功,則會回傳先前的運作目錄。將此傳遞至另一個 chdir() 以還原目錄。如果失敗,則會回傳空字串。let save_dir = chdir(newdir)
if save_dir != ""
" ... do some work
call chdir(save_dir)
endif
{dir}
(string
)string
){lnum}
) cindent(){lnum}
行的縮排量,如同 'cindent'。縮排以空格計算,'tabstop' 的值相關。{lnum}
的使用方式與 getline() 中相同。當 {lnum}
無效時,會回傳 -1。請參閱 C 縮排。{lnum}
(整數
)整數
){win}
]) clearmatches(){win}
,則會使用具有此數字或視窗 ID 的視窗,而非目前視窗。{win}
(integer?
){expr}
[, {winid}
]) col(){expr}
給定的欄位位置的位元組索引。如需接受的位置,請參閱 getpos()。當 {expr}
為 "$" 時,表示游標行的末尾,因此結果是游標行中的位元組數加一。此外,{expr}
可以是 [lnum, col]:一個具有行號和欄號的 List。當欄號為 "$" 時,這在取得特定行的最後一欄時最有用。當 "lnum" 或 "col" 超出範圍時,col() 會傳回零。{winid}
參數,會取得該視窗的值,而不是目前視窗的值。echo col(".") " column of cursor
echo col("$") " length of cursor line plus one
echo col("'t") " column of mark t
echo col("'" .. markname) " column of mark markname
{expr}
無效或找不到 ID 為 {winid}
的視窗,則會傳回 0。對於大寫標記,該欄實際上可能在另一個緩衝區中。對於游標位置,當 'virtualedit' 處於啟用狀態時,如果游標位於行尾之後,則欄位會高一位。此外,當使用 <Cmd>
對應時,游標不會移動,這可以用來取得插入模式中的欄位。imap <F2> <Cmd>echo col(".").."\n"<CR>
{expr}
(string|integer[]
){winid}
(整數?
)整數
){startcol}
, {matches}
) complete() E785 設定插入模式完成的匹配項。只能在插入模式中使用。您需要使用帶有 CTRL-R
= 的對應 (請參閱 i_CTRL-R)。它在 CTRL-O
之後或使用表達式對應時不起作用。{startcol}
是完成文字開始所在的行中的位元組偏移量。游標之前的文字是要被匹配項取代的原始文字。使用 col('.') 表示空字串。"col('.') - 1" 將會用匹配項取代一個字元。{matches}
必須是一個 List。每個 List 項目都是一個匹配項。如需可能的項目種類,請參閱 complete-items。'completeopt' 中的 "longest" 會被忽略。請注意,在呼叫此函式後,您需要避免插入任何會導致完成停止的內容。可以使用 CTRL-N
和 CTRL-P
選擇匹配項,與插入模式完成的通常情況相同。如果已指定,則會顯示快顯功能表,請參閱 ins-completion-menu。範例inoremap <F5> <C-R>=ListMonths()<CR>
func ListMonths()
call complete(col('.'), ['January', 'February', 'March',
\ 'April', 'May', 'June', 'July', 'August', 'September',
\ 'October', 'November', 'December'])
return ''
endfunc
{startcol}
(integer
){matches}
(any[]
){expr}
) complete_add(){expr}
新增至匹配項清單。只能由使用 'completefunc' 選項指定的函式使用。如果失敗(空字串或記憶體不足),則傳回 0,如果新增了匹配項,則傳回 1,如果匹配項已在清單中,則傳回 2。如需 {expr}
的說明,請參閱 complete-functions。它與 'omnifunc' 會傳回的清單中的一個項目相同。{expr}
(任意
)0|1|2
)0|1
){what}
]) complete_info()<Up>
或 <Down>
按鍵且未選取任何項目後的最後一個完成項目)inserted 已插入的字串。[尚未實作] preview_winid 資訊浮動預覽視窗 ID。preview_bufnr 資訊浮動預覽緩衝區 ID。CTRL-X
i_CTRL-X "scroll" 使用 i_CTRL-X_CTRL-E 或 i_CTRL-X_CTRL-Y 滾動 "whole_line" 整行 i_CTRL-X_CTRL-L "files" 檔案名稱 i_CTRL-X_CTRL-F "tags" 標籤 i_CTRL-X_CTRL-] "path_defines" 定義完成 i_CTRL-X_CTRL-D "path_patterns" 包含完成 i_CTRL-X_CTRL-I "dictionary" 字典 i_CTRL-X_CTRL-K "thesaurus" 同義詞庫 i_CTRL-X_CTRL-T "cmdline" Vim 命令列 i_CTRL-X_CTRL-V "function" 使用者定義的完成 i_CTRL-X_CTRL-U "omni" Omni 完成 i_CTRL-X_CTRL-O "spell" 拼字建議 i_CTRL-X_s "eval" complete() 完成 "unknown" 其他內部模式{what}
清單參數,則只會傳回 {what}
中列出的項目。{what}
中不支援的項目會被靜默忽略。" Get all items
call complete_info()
" Get only 'mode'
call complete_info(['mode'])
" Get only 'mode' and 'pum_visible'
call complete_info(['mode', 'pum_visible'])
{what}
(any[]?
)表格
){msg}
[, {choices}
[, {default}
[, {type}
]]]) confirm(){msg}
會在一個對話方塊中顯示,並以 {choices}
作為替代選項。當 {choices}
遺失或為空時,會使用 "&OK" (且會翻譯)。{msg}
是一個字串,請使用 '\n' 加入換行符號。只有在某些系統上,當字串不符合時,才會換行。{choices}
是一個字串,其中個別選項以 '\n' 分隔,例如:confirm("Save changes?", "&Yes\n&No\n&Cancel")
confirm("file has been modified", "&Save\nSave &All")
{type}
字串參數會提供對話方塊的類型。它可以是下列值之一:"Error"、"Question"、"Info"、"Warning" 或 "Generic"。只有第一個字元是相關的。如果省略了 {type}
,則會使用 "Generic"。{type}
參數會提供對話方塊的類型。這僅用於 Win32 GUI 的圖示。它可以是下列值之一:"Error"、"Question"、"Info"、"Warning" 或 "Generic"。只有第一個字元是相關的。如果省略了 {type}
,則會使用 "Generic"。<Esc>
、CTRL-C
或另一個有效的中斷按鍵來中止對話方塊,則 confirm() 會傳回 0。let choice = confirm("What do you want?",
\ "&Apples\n&Oranges\n&Bananas", 2)
if choice == 0
echo "make up your mind!"
elseif choice == 3
echo "tasteful"
else
echo "I prefer bananas myself."
endif
{msg}
(string
){choices}
(string?
){default}
(integer?
){type}
(string?
)整數
){expr}
) copy(){expr}
的複本。對於數字和字串,這與直接使用 {expr}
沒有區別。當 {expr}
為 List 時,會建立淺層複本。這表示可以在不變更複本的情況下變更原始的 List,反之亦然。但是這些項目是相同的,因此變更項目會變更兩個 Lists 的內容。會以與 List 類似的方式複製 Dictionary。另請參閱 deepcopy()。{expr}
(任意
)any
){expr}
) cos(){expr}
的餘弦。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo cos(100)
echo cos(-4.01)
{expr}
(數字
)數字
){expr}
) cosh(){expr}
的雙曲餘弦,範圍為 [1, inf]。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo cosh(0.5)
echo cosh(-0.5)
{expr}
(數字
)數字
){ic}
且為 TRUE 時,會忽略大小寫。{comp}
是字串時,會傳回 {expr}
不重疊出現的次數。當 {expr}
是空字串時,傳回零。{comp}
(字串|表格|any[]
){expr}
(任意
){ic}
(布林值?
){start}
(整數?
)整數
){index}
]) ctxget(){index}
位置 (參見 context-dict)。如果未給定 {index}
,則假設為 0 (即:頂部)。{index}
(整數?
)表格
)any
){types}
]) ctxpush(){types}
且為 字串 的 列表,則指定要包含在推送的 context 中的 context-types。否則,會包含所有 context types。{types}
(字串[]?
)any
){context}
[, {index}
]) ctxset(){index}
位置的 context 設定為 {context}
所代表的 context。{context}
是一個包含 context 資料的字典 (context-dict)。如果未給定 {index}
,則假設為 0 (即:頂部)。{context}
(表格
){index}
(整數?
)any
)any
){list}
時,會將其用作包含兩個、三個或四個項目的 列表:[{lnum}
, {col}
] [{lnum}
, {col}
, {off}
] [{lnum}
, {col}
, {off}
, {curswant}
] 這就像 getpos() 或 getcurpos() 的傳回值,但不包含第一個項目。{col}
作為字元計數來定位游標,請使用 setcursorcharpos()。{lnum}
的使用方式與 getline() 相同,但如果 {lnum}
為零,游標將停留在目前行。如果 {lnum}
大於緩衝區中的行數,游標將會定位在緩衝區中的最後一行。如果 {col}
大於該行中的位元組數,游標將會定位在該行中的最後一個字元。如果 {col}
為零,游標將會停留在目前欄。如果給定 {curswant}
,則會用它來設定垂直移動時的首選欄。否則會使用 {col}
。{list}
(整數[]
)any
){pid}
) debugbreak(){pid}
收到 SIGTRAP。其他程序的行為未定義。參見 terminal-debug。(傳送 SIGINT 到非 MS-Windows 的程序 {pid}
){pid}
(整數
)any
){expr}
[, {noref}
]) deepcopy() E698 建立 {expr}
的複本。對於數字和字串,這與直接使用 {expr}
沒有區別。當 {expr}
是 列表 時,會建立完整複本。這表示可以變更原始 列表,而不會變更複本,反之亦然。當項目是 列表 時,會以遞迴方式建立其複本。因此,變更複本中的項目不會變更原始 列表 的內容。{noref}
或為零時,只會複製一次包含的 列表 或 字典。所有參考都會指向此單一複本。如果將 {noref}
設定為 1,則每次出現 列表 或 字典 都會產生一個新的複本。這也表示循環參考會導致 deepcopy() 失敗。E724{noref}
設定為 1,則進行深度複製將會失敗。另請參見 copy()。{expr}
(任意
){noref}
(布林值?
)any
){fname}
是符號連結時,這也適用。會刪除符號連結本身,而不是它指向的內容。{flags}
是 "d" 時:刪除名稱為 {fname}
的目錄。如果目錄 {fname}
不為空,則此操作會失敗。{flags}
是 "rf" 時:遞迴刪除名稱為 {fname}
的目錄及其中的所有內容。小心! 注意:在 MS-Windows 上,無法刪除正在使用的目錄。{fname}
(字串
){flags}
(字串?
)整數
){buf}
, {first}
[, {last}
]) deletebufline(){buf}
刪除從 {first}
到 {last}
(包含) 的行。如果省略 {last}
,則僅刪除行 {first}
。成功時傳回 0,失敗時傳回 1。{buf}
的使用,請參見上方的 bufname()。{buf}
(整數|字串
){first}
(整數|字串
){last}
(整數|字串?
)any
){dict}
);{pattern}
)。{callback}
)。{dict}
以及與 {pattern}
匹配的金鑰所做的任何變更都會導致叫用 {callback}
。silent! call dictwatcherdel(g:, '*', 'OnDictChanged')
function! OnDictChanged(d,k,z)
echomsg string(a:k) string(a:z)
endfunction
call dictwatcheradd(g:, '*', 'OnDictChanged')
{pattern}
只接受非常簡單的模式,該模式可以在字串結尾包含 "*",在這種情況下,它會比對每個以 "*" 之前的子字串開頭的金鑰。這表示如果 "*" 不是 {pattern}
的最後一個字元,則只會比對與 {pattern}
完全相同的金鑰。{callback}
接收三個引數old
和 new
,則表示已更新金鑰。new
,則表示已新增金鑰。old
,則表示已刪除金鑰。{dict}
(表格
){pattern}
(string
){callback}
(函式
)any
){dict}
, {pattern}
, {callback}
) dictwatcherdel(){dict}
(any
){pattern}
(string
){callback}
(函式
)any
):setf FALLBACK
,則傳回 FALSE。編輯另一個檔案時,計數器會重設,因此這實際上會檢查目前緩衝區是否已觸發 FileType 事件。這允許開始編輯另一個緩衝區的自動指令設定 'filetype' 並載入語法檔案。any
){lnum}
) diff_filler(){lnum}
上方的填補行數。這些是在另一個差異視窗中於此點插入的行。這些填補行會顯示在顯示器中,但不存在於緩衝區中。{lnum}
的使用方式與 getline() 相同。因此,"." 是目前行,"'m" 是標記 m 等。如果目前的視窗不在差異模式中,則傳回 0。{lnum}
(整數
)any
){lnum}
, {col}
) diff_hlID(){lnum}
、欄 {col}
(位元組索引) 的醒目提示 ID。如果目前行沒有差異變更,則傳回零。{lnum}
的使用方式與 getline() 相同。因此,"." 是目前行,"'m" 是標記 m 等。{col}
對於最左欄為 1,{lnum}
對於第一行為 1。醒目提示 ID 可與 synIDattr() 搭配使用,以取得有關醒目提示的語法資訊。{lnum}
(整數
){col}
(整數
)any
){chars}
) digraph_get() E1214 返回 {chars}
的雙字母組合。這應該是一個正好包含兩個字元的字串。如果 {chars}
不僅僅是兩個字元,或者 {chars}
的雙字母組合不存在,則會產生錯誤並返回一個空字串。" Get a built-in digraph
echo digraph_get('00') " Returns '∞'
" Get a user-defined digraph
call digraph_set('aa', 'あ')
echo digraph_get('aa') " Returns 'あ'
{chars}
(string
)any
){listall}
]) digraph_getlist(){listall}
參數且為 TRUE,則返回所有雙字母組合,包括預設的雙字母組合。否則,僅返回使用者定義的雙字母組合。" Get user-defined digraphs
echo digraph_getlist()
" Get all the digraphs, including default digraphs
echo digraph_getlist(1)
{listall}
(boolean?
)any
){chars}
, {digraph}
) digraph_set(){chars}
加入列表。{chars}
必須是包含兩個字元的字串。{digraph}
是一個包含一個 UTF-8 編碼字元的字串。 E1215 請注意,組合字元不會被忽略。此函數與 :digraphs 命令相似,但可用於加入以空白字元開頭的雙字母組合。call digraph_set(' ', 'あ')
{chars}
(string
){digraph}
(string
)any
){digraphlist}
) digraph_setlist(){digraphlist}
是一個由列表組成的列表,其中每個列表包含兩個字串,分別為 {chars}
和 {digraph}
,如 digraph_set() 中所示。 E1216 範例call digraph_setlist([['aa', 'あ'], ['ii', 'い']])
for [chars, digraph] in [['aa', 'あ'], ['ii', 'い']]
call digraph_set(chars, digraph)
endfor
{digraphlist}
(table<integer,string[]>
)any
){expr}
) empty(){expr}
為空,則返回數值 1,否則返回零。{expr}
(任意
)any
)echo index(keys(environ()), 'HOME', 0, 1) != -1
any
){string}
, {chars}
) escape(){string}
中出現的 {chars}
字元。範例echo escape('c:\program files\vim', ' \')
c:\\program\ files\\vim
{string}
(string
){chars}
(string
)any
){string}
) eval(){string}
並返回結果。特別適用於將 string() 的結果轉回原始值。這適用於數值、浮點數、字串、Blob 和它們的組合。也適用於指向現有函數的 Funcref。{string}
(string
)any
)any
){expr}
(string
)0|1
){command}
[, {silent}
]) execute(){command}
並捕獲其輸出。如果 {command}
是 String,則返回 {command}
的輸出。如果 {command}
是 List,則返回串連的輸出。{command}
中的換行符號不被識別。範例echo execute('echon "foo"')
echo execute(['echon "foo"', 'echon "bar"'])
{silent}
引數可以具有以下值:"" 不使用 :silent
、"silent" 使用 :silent
、"silent!" 使用 :silent!
。預設值為 "silent"。請注意,與 :redir
不同,使用 "silent!" 會丟棄錯誤訊息。split()
execute('args')->split("\n")
win_execute()
。{command}
(string|string[]
){silent}
(''|'silent'|'silent!'?
)string
){expr}
) exepath(){expr}
是可執行檔且以(部分或完整)路徑給定,或在 $PATH 中找到,則返回 {expr}
的完整路徑。否則返回空字串。如果 {expr}
以 "./" 開頭,則會使用目前目錄。{expr}
(string
)string
){expr}
引數是一個字串,其中包含以下其中之一:varname 內部變數(請參閱 dict.key internal-variables)。也適用於 curly-braces-names 的 list[i]、Dictionary 條目、List 項目等。請注意,評估索引可能會導致無效運算式的錯誤訊息。例如:let l = [1, 2, 3]
echo exists("l[5]")
echo exists("l[xx]")
*funcname
內建函數(請參閱 functions)或使用者定義函數(請參閱 user-function)。也適用於作為 Funcref 的變數。:cmdname Ex 命令:內建命令、使用者命令或命令修飾符 :command。返回:1 表示與命令的開頭匹配、2 表示與命令的完整匹配、3 表示與多個使用者命令匹配。若要檢查是否支援某個命令,請務必檢查傳回值是否為 2。:2match :2match 命令。:3match :3match 命令(但您可能不應該使用它,它保留供內部使用)#event 為此事件定義的自動命令 #event#pattern 為此事件和模式定義的自動命令(模式按字元逐字擷取並與自動命令模式進行比較)#group 自動命令群組存在 #group#event 為此群組和事件定義的自動命令。#group#event#pattern 為此群組、事件和模式定義的自動命令。##event 支援此事件的自動命令。echo exists("&mouse")
echo exists("$HOSTNAME")
echo exists("*strftime")
echo exists("*s:MyFunc")
echo exists("*MyFunc")
echo exists("*v:lua.Func")
echo exists("bufcount")
echo exists(":Make")
echo exists("#CursorHold")
echo exists("#BufReadPre#*.gz")
echo exists("#filetypeindent")
echo exists("#filetypeindent#FileType")
echo exists("#filetypeindent#FileType#*")
echo exists("##ColorScheme")
echo exists(":make")
echo exists(":make install")
echo exists(bufcount)
{expr}
(string
)0|1
){expr}
) exp(){expr}
的指數,範圍為 [0, inf]。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則返回 0.0。範例echo exp(2)
echo exp(-1)
{expr}
(數字
)any
){string}
不是以 '%'、'#' 或 '<' 開頭,請參閱下文。{string}
以 '%'、'#' 或 '<' 開頭時,展開會像對待具有相關修飾符的 cmdline-special 變數一樣進行。以下是簡短的概述<cfile>
滑鼠游標下的檔案名稱 <afile>
自動指令檔案名稱 <abuf>
自動指令緩衝區編號(作為字串!)<amatch>
自動指令匹配的名稱 <cexpr>
滑鼠游標下的 C 運算式 <sfile>
來源指令碼檔案或函數名稱 <slnum>
來源指令碼行號或函數行號 <sflnum>
指令碼檔案行號,即使在函數中也是如此 <SID>
"<SNR>123_",其中 "123" 是目前的指令碼 ID <SID> <script>
來源指令碼檔案,或定義目前函數的指令碼檔案 <stack>
呼叫堆疊 <cword>
滑鼠游標下的單字 <cWORD>
滑鼠游標下的 WORD <client>
上次收到的訊息的 {clientid}
修飾符::p 展開為完整路徑 :h 開頭(已移除最後一個路徑元件) :t 結尾(僅限最後一個路徑元件) :r 根(已移除一個擴展名) :e 僅限擴展名let &tags = expand("%:p:h") .. "/tags"
let doesntwork = expand("%:h.bak")
let doeswork = expand("%:h") .. ".bak"
echo expand(expand("<cfile>"))
{string}
不是以 '%'、'#' 或 '<' 開頭時,它會像在命令列中展開檔案名稱一樣展開。'suffixes' 和 'wildignore' 會被使用,除非給定了可選的 {nosuf}
參數且為 TRUE。會包含不存在檔案的名稱。"**" 項目可用於在目錄樹中搜尋。例如,要在目前目錄及以下找到所有 "README" 檔案:echo expand("**/README")
{string}
(string
){nosuf}
(boolean?
){list}
(nil|false?
)string
){string}
[, {options}
]) expandcmd(){string}
中的特殊項目,就像對 Ex 命令(例如 :edit
)所做的一樣。這會展開特殊關鍵字,就像 expand() 一樣,以及 {string}
中任何位置的環境變數。"~user" 和 "~/path" 只會在開頭展開。{options}
Dict 參數中支援以下項目: errmsg 如果設定為 TRUE,則在展開期間遇到錯誤時會顯示錯誤訊息。預設情況下,不會顯示錯誤訊息。{string}
。echo expandcmd('make %<.o')
make /path/runtime/doc/builtin.o
echo expandcmd('make %<.o', {'errmsg': v:true})
{string}
(string
){options}
(table?
)any
){expr2}
附加到 {expr1}
。如果給定 {expr3}
,則將 {expr2}
的項目插入到 {expr1}
中索引為 {expr3}
的項目之前。當 {expr3}
為零時,插入到第一個項目之前。當 {expr3}
等於 len({expr1}
) 時,則附加 {expr2}
。範例echo sort(extend(mylist, [7, 5]))
call extend(mylist, [2, 3], 1)
{expr1}
與 {expr2}
是相同的列表時,複製的項目數等於列表的原始長度。例如,當 {expr3}
為 1 時,您會得到 N 個第一個項目的新副本(其中 N 是列表的原始長度)。使用 add() 將一個項目串連到列表。要將兩個列表串連成一個新列表,請使用 + 運算子let newlist = [1, 2, 3] + [4, 5]
{expr2}
中的所有條目新增到 {expr1}
。如果 {expr1}
和 {expr2}
中都存在鍵,則使用 {expr3}
來決定要執行什麼操作:{expr3}
= "keep":保留 {expr1}
的值 {expr3}
= "force":使用 {expr2}
的值 {expr3}
= "error":給出錯誤訊息 E737{expr3}
時,則假設為 "force"。{expr2}
不為空時,{expr1}
會被變更。如有必要,請先複製 {expr1}
。{expr2}
保持不變。當 {expr1}
被鎖定且 {expr2}
不為空時,操作會失敗。傳回 {expr1}
。發生錯誤時傳回 0。{expr1}
(table
){expr2}
(table
){expr3}
(table?
)any
){expr1}
, {expr2}
[, {expr3}
]) extendnew(){expr1}
,而是建立並傳回一個新的列表或字典。{expr1}
保持不變。{expr1}
(table
){expr2}
(table
){expr3}
(table?
)any
){string}
中包含的按鍵被處理。{string}
中,請使用雙引號和 "\..." 表示法 expr-quote。例如,feedkeys("\<CR>") 會模擬按下 <Enter>
鍵。但 feedkeys('\<CR>
') 會推送 5 個字元。<Ignore> 鍵碼可用於在不執行任何操作的情況下退出等待字元的狀態。{mode}
是一個字串,可以包含以下字元標誌: 'm' 重新對應按鍵。這是預設值。如果沒有 {mode}
,則按鍵會被重新對應。 'n' 不要重新對應按鍵。 't' 將按鍵視為輸入處理;否則它們會被視為來自對應。這對於復原、開啟摺疊等至關重要。 'L' 低階輸入。不使用其他標誌。 'i' 插入字串而不是附加(請參閱上文)。 'x' 執行命令,直到預輸入為空。這與使用 ":normal!" 類似。您可以多次呼叫 feedkeys() 而不使用 'x',然後使用 'x' 呼叫一次(可能使用空的 {string}
)來執行所有預輸入。請注意,當 Vim 在插入模式中結束時,它的行為將如同輸入了 <Esc>
,以避免陷入等待在腳本繼續執行之前輸入字元的困境。請注意,如果您設法在執行命令時呼叫 feedkeys(),從而遞迴呼叫它,則所有預輸入都將被最後一次呼叫使用。 '!' 與 'x' 一起使用時,不會結束插入模式。可以在設定計時器稍後退出插入模式時在測試中使用。對測試 CursorHoldI 很有用。{string}
(string
){mode}
(string?
)any
){from}
, {to}
) filecopy(){from}
指向的檔案複製到 {to}
。結果是一個數字,如果檔案複製成功,則為 TRUE,如果失敗則為 FALSE。如果已存在名稱為 {to}
的檔案,則會失敗。請注意,它尚未處理目錄。{from}
(string
){to}
(string
)0|1
){file}
) filereadable(){file}
的檔案並且可以讀取時,該數字為 TRUE。如果 {file}
不存在,或是一個目錄,則結果為 FALSE。{file}
是任何表達式,它被用作字串。如果您不關心檔案是否可讀,您可以使用 glob()。{file}
會按原樣使用,您可能需要先展開萬用字元。echo filereadable('~/.vimrc')
0
echo filereadable(expand('~/.vimrc'))
1
{file}
(string
)0|1
){file}
) filewritable(){file}
的檔案並且可以寫入時,該數字為 1。如果 {file}
不存在,或不可寫入,則結果為 0。如果 {file}
是一個目錄,並且我們可以寫入它,則結果為 2。{file}
(string
)0|1
){expr1}
, {expr2}
) filter(){expr1}
必須是 列表、字串、Blob 或 字典。對於 {expr1}
中的每個項目,計算 {expr2}
,當結果為零或 false 時,從 列表或 字典中移除該項目。對於 Blob 中的每個位元組和 字串中的每個字元也是如此。{expr2}
是 字串,在 {expr2}
內,v:val 具有目前項目的值。對於 字典,v:key 具有目前項目的鍵,對於 列表,v:key 具有目前項目的索引。對於 Blob,v:key 具有目前位元組的索引。對於 字串,v:key 具有目前字元的索引。範例call filter(mylist, 'v:val !~ "OLD"')
call filter(mydict, 'v:key >= 8')
call filter(var, 0)
{expr2}
是表達式的結果,然後再次用作表達式。通常最好使用 字面字串來避免必須使用雙反斜線。{expr2}
是 Funcref,則它必須接受兩個參數:1. 目前項目的鍵或索引。2. 目前項目的值。如果應保留該項目,該函數必須傳回 TRUE。範例,保留列表的奇數項目func Odd(idx, val)
return a:idx % 2 == 1
endfunc
call filter(mylist, function('Odd'))
call filter(myList, {idx, val -> idx * val <= 42})
call filter(myList, {idx -> idx % 2 == 1})
{expr1}
,即被篩選過的 List 或 Dictionary,或是一個新的 Blob 或 String。當評估 {expr2}
時遇到錯誤,{expr1}
中剩餘的項目將不會被處理。當 {expr2}
是一個 Funcref 時,函數內部的錯誤會被忽略,除非該函數定義時使用了 "abort" 標誌。{expr1}
(string|table
){expr2}
(string|function
)any
){name}
[, {path}
[, {count}
]]) finddir(){path}
中尋找目錄 {name}
。支援向下和向上遞迴目錄搜尋。關於 {path}
的語法,請參閱 檔案搜尋。{path}
被省略或為空,則會使用 'path' 選項。:find
非常相似。{name}
(string
){path}
(string?
){count}
(integer?
)any
){name}
[, {path}
[, {count}
]]) findfile()echo findfile("tags.vim", ".;")
{name}
(string
){path}
(string?
){count}
(any?
)any
){list}
[, {maxdepth}
]) flatten(){list}
平坦化到 {maxdepth}
層級。如果沒有 {maxdepth}
,則結果是一個沒有巢狀結構的 List,就像 {maxdepth}
是一個非常大的數字一樣。{list}
會就地修改,如果您不希望這樣,請使用 flattennew()。E900{maxdepth}
表示在巢狀列表中的變更深度。當 {maxdepth}
為 0 時,{list}
不會被修改。{maxdepth}
必須是正數。echo flatten([1, [2, [3, 4]], 5])
echo flatten([1, [2, [3, 4]], 5], 1)
{list}
(any[]
){maxdepth}
(integer?
)any[]|0
){list}
(any[]
){maxdepth}
(integer?
)any[]|0
){expr}
) float2nr(){expr}
轉換為 Number。{expr}
的評估結果必須是 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0。當 {expr}
的值超出 Number 的範圍時,結果會截斷為 0x7fffffff 或 -0x7fffffff (或者當啟用 64 位元 Number 支援時,則截斷為 0x7fffffffffffffff 或 -0x7fffffffffffffff)。NaN 的結果為 -0x80000000 (或者當啟用 64 位元 Number 支援時,則為 -0x8000000000000000)。範例echo float2nr(3.95)
echo float2nr(-23.45)
echo float2nr(1.0e100)
echo float2nr(-1.0e150)
echo float2nr(1.0e-100)
{expr}
(數字
)any
){expr}
) floor(){expr}
的最大整數值,以 Float 形式表示(向下捨入)。{expr}
的評估結果必須是 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo floor(1.856)
echo floor(-5.456)
echo floor(4.0)
{expr}
(數字
)any
){expr1}
, {expr2}
) fmod(){expr1}
/ {expr2}
的餘數,即使除法無法表示。對於某個整數 i,傳回 {expr1}
- i * {expr2}
,使得如果 {expr2}
非零,則結果與 {expr1}
的符號相同,且量值小於 {expr2}
的量值。如果 {expr2}
為零,則傳回值為零。傳回的值為 Float。{expr1}
和 {expr2}
的評估結果必須是 Float 或 Number。如果 {expr1}
或 {expr2}
不是 Float 或 Number,則傳回 0.0。範例echo fmod(12.33, 1.22)
echo fmod(-12.33, 1.22)
{expr1}
(數字
){expr2}
(number
)any
){string}
) fnameescape(){string}
逸出,以便用作檔案名稱命令引數。所有具有特殊含義的字元(例如 '%'
和 '|'
)都會使用反斜線逸出。對於大多數系統,逸出的字元為 " \t\n*?[{`$\\%#'\"|!<".}
。對於檔案名稱中出現反斜線的系統,則取決於 'isfname' 的值。開頭的 '+' 和 '>' 也會被逸出(在 :edit 和 :write 之後是特殊的)。單獨的 "-" 也會被逸出(在 :cd 之後是特殊的)。如果發生錯誤,則傳回空字串。範例let fname = '+some str%nge|name'
exe "edit " .. fnameescape(fname)
edit \+some\ str\%nge\|name
{string}
(string
)string
){fname}
, {mods}
) fnamemodify(){mods}
修改檔案名稱 {fname}
。{mods}
是一個字串,其中包含類似於在命令列上用於檔案名稱的字元。請參閱 檔案名稱修飾符。範例echo fnamemodify("main.c", ":p:h")
/home/user/vim/vim/src
{mods}
為空或使用了不支援的修飾符,則會傳回 {fname}
。當 {fname}
為空時,{mods}
為 ":h" 會傳回 ".",以便 :cd
可以與其一起使用。這與沒有緩衝區名稱的 expand('%:h') 不同,後者會傳回空字串。注意: 環境變數在 {fname}
中不起作用,請先使用 expand()。{fname}
(字串
){mods}
(string
)string
){lnum}
) foldclosed(){lnum}
位於關閉的摺疊中,則結果是該摺疊中第一行的行號。如果行 {lnum}
不在關閉的摺疊中,則傳回 -1。{lnum}
的使用方式與 getline() 相同。因此,"." 是目前行,"'m" 是標記 m,依此類推。{lnum}
(整數
)整數
){lnum}
) foldclosedend(){lnum}
位於關閉的摺疊中,則結果是該摺疊中最後一行的行號。如果行 {lnum}
不在關閉的摺疊中,則傳回 -1。{lnum}
的使用方式與 getline() 相同。因此,"." 是目前行,"'m" 是標記 m,依此類推。{lnum}
(整數
)整數
){lnum}
) foldlevel(){lnum}
的摺疊層級。對於巢狀摺疊,會傳回最深層級。如果行 {lnum}
上沒有摺疊,則傳回零。摺疊是開啟還是關閉都沒有關係。當在更新摺疊時(從 'foldexpr' 中)使用時,對於尚未更新且摺疊層級未知的行,會傳回 -1。作為一種特殊情況,通常可以使用上一行的層級。{lnum}
的使用方式與 getline() 相同。因此,"." 是目前行,"'m" 是標記 m,依此類推。{lnum}
(整數
)整數
)+-- 45 lines: abcdef
string
){lnum}
) foldtextresult(){lnum}
的關閉摺疊所顯示的文字。會在適當的上下文中評估 'foldtext'。當 {lnum}
沒有關閉的摺疊時,會傳回空字串。{lnum}
的使用方式與 getline() 相同。因此,"." 是目前行,"'m" 是標記 m,依此類推。當匯出摺疊文字時(例如匯出到 HTML)很有用。{lnum}
(整數
)string
){expr1}
, {expr2}
) foreach(){expr1}
必須是 List、String、Blob 或 Dictionary。對於 {expr1}
中的每個項目,執行 {expr2}
。{expr1}
不會被修改;其值可能會被修改,如同 :lockvar 1。E741 請參閱 map() 和 filter() 以修改 {expr1}
。{expr2}
是 字串,在 {expr2}
內,v:val 具有目前項目的值。對於 字典,v:key 具有目前項目的鍵,對於 列表,v:key 具有目前項目的索引。對於 Blob,v:key 具有目前位元組的索引。對於 字串,v:key 具有目前字元的索引。範例call foreach(mylist, 'let used[v:val] = v:true')
{expr1}
列表中存在的項目。{expr2}
是運算式的結果,然後會被用作命令。通常最好使用 字面字串,以避免必須使用雙反斜線。{expr2}
是一個 Funcref,它必須接受兩個參數:1. 目前項目的鍵或索引。2. 目前項目的值。使用 lambda 時,如果它只接受一個參數,不會產生錯誤。如果函式傳回一個值,則會被忽略。{expr1}
。當執行 {expr2}
時遇到錯誤時,{expr1}
中不會再處理其他項目。當 {expr2}
是一個 Funcref 時,函式內部的錯誤會被忽略,除非該函式在定義時使用了 "abort" 旗標。{expr1}
(string|table
){expr2}
(string|function
)any
){name}
可能以 :
開頭,並且可以包含 [range],這些會被略過且不會傳回。如果命令不存在或不明確(針對使用者定義的命令),則傳回空字串。fullcommand('s')
、fullcommand('sub')
、fullcommand(':%substitute')
都會傳回 "substitute"。{name}
(string
)string
){name}
[, {arglist}
] [, {dict}
]) funcref(){name}
時,這很重要。{name}
必須是現有的使用者函式。它只有在自動載入的函式已經載入時才會運作(為了避免僅打算使用函式名稱時錯誤地載入自動載入腳本,請改用 function())。{name}
不能是內建函式。發生錯誤時傳回 0。{name}
(string
){arglist}
(any?
){dict}
(any?
)any
){name}
[, {arglist}
] [, {dict}
]) function() partial E700 E923 傳回一個 Funcref 變數,該變數指向函式 {name}
。{name}
可以是使用者定義函式或內部函式的名稱。{name}
也可以是 Funcref 或 partial。當它是 partial 時,會使用其中儲存的 dict,且不允許使用 {dict}
參數。例如:let FuncWithArg = function(dict.Func, [arg])
let Broken = function(dict.Func, [arg], dict)
{name}
找到該函式,即使稍後重新定義也是如此。使用 funcref() 來保留相同的函式。{arglist}
或 {dict}
時,這會建立 partial。這表示參數列表和/或字典會儲存在 Funcref 中,並在呼叫 Funcref 時使用。func Callback(arg1, arg2, name)
"...
endfunc
let Partial = function('Callback', ['one', 'two'])
"...
call Partial('name')
call Callback('one', 'two', 'name')
func Callback(one, two, three)
"...
endfunc
let Partial = function('Callback', ['two'])
"...
eval 'one'->Partial('three')
call Callback('one', 'two', 'three')
func Callback(arg1, arg2, name)
"...
endfunc
let Func = function('Callback', ['one'])
let Func2 = function(Func, ['two'])
"...
call Func2('name')
call Callback('one', 'two', 'name')
{dict}
會以 "self" 的形式傳遞。範例function Callback() dict
echo "called for " .. self.name
endfunction
"...
let context = {"name": "example"}
let Func = function('Callback', context)
"...
call Func() " will echo: called for example
let Func = function('Callback', context)
let Func = context.Callback
function Callback(arg1, count) dict
"...
endfunction
let context = {"name": "example"}
let Func = function('Callback', ['one'], context)
"...
call Func(500)
call context.Callback('one', 500)
{name}
(string
){arglist}
(any?
){dict}
(any?
)any
){atexit}
參數為 1 時,如果之前未執行垃圾收集,則在退出 Vim 時也會執行垃圾收集。這在檢查記憶體洩漏時很有用。{atexit}
(boolean?
)any
){list}
, {idx}
[, {default}
]) get() get()-list 從 列表 {list}
取得項目 {idx}
。當此項目不可用時,傳回 {default}
。當省略 {default}
時,傳回零。{list}
(any[]
){idx}
(integer
){default}
(any?
)any
){blob}
, {idx}
[, {default}
]) get()-blob{blob}
取得位元組 {idx}
。當此位元組不可用時,傳回 {default}
。當省略 {default}
時,傳回 -1。{blob}
(string
){idx}
(integer
){default}
(any?
)any
){dict}
, {key}
[, {default}
]) get()-dict{dict}
取得具有鍵 {key}
的項目。當此項目不可用時,傳回 {default}
。當省略 {default}
時,傳回零。有用的範例let val = get(g:, 'var_name', 'default')
{dict}
(table<string,any>
){key}
(string
){default}
(any?
)any
){func}
, {what}
) get()-func{func}
取得項目 {what}
。{what}
的可能值為:"name" 函式名稱 "func" 函式 "dict" 字典 "args" 包含參數的列表 "arity" 包含函式接受的參數數目資訊(減去 {arglist}
)的字典,具有以下欄位:required 位置參數的數目 optional 除了必要參數之外的可選參數數目 varargs 如果函式接受可變數目的參數,則為 TRUE ...{arglist}
包含的參數比 Funcref 預期的多,則不會發生錯誤,且不會驗證。{func}
(function
){what}
(string
)any
){dict}
中指定以下鍵:buflisted 只包含已列出的緩衝區。bufloaded 只包含已載入的緩衝區。bufmodified 只包含已修改的緩衝區。echo line('.', {winid})
for buf in getbufinfo()
echo buf.name
endfor
for buf in getbufinfo({'buflisted':1})
if buf.changed
" ....
endif
endfor
getbufvar({bufnr}, '&option_name')
{dict}
(vim.fn.getbufinfo.dict?
)vim.fn.getbufinfo.ret.item[]
){buf}
, {lnum}
[, {end}
]) getbufline(){buf}
的 {lnum}
到 {end}
(包含)的行。如果省略 {end}
,則會傳回一個只包含行 {lnum}
的 列表。若要只取得該行,請參閱 getbufoneline()
。{buf}
的使用,請參見上方的 bufname()。{lnum}
和 {end}
,可以使用 "$" 表示緩衝區的最後一行。否則,必須使用數字。{lnum}
小於 1 或大於緩衝區中的行數時,會傳回一個空的 列表。let lines = getbufline(bufnr("myfile"), 1, "$")
{buf}
(整數|字串
){lnum}
(整數
){end_}
(integer?
)any
){buf}
(整數|字串
){lnum}
(整數
)string
){buf}
, {varname}
[, {def}
]) getbufvar(){buf}
中選項或本地緩衝區變數 {varname}
的值。請注意,必須使用不帶 "b:" 的名稱。{varname}
參數是一個字串。當 {varname}
為空時,會傳回一個包含所有緩衝區本地變數的 字典。當 {varname}
等於 "&" 時,會傳回一個包含所有緩衝區本地選項的 字典。否則,當 {varname}
以 "&" 開頭時,會傳回緩衝區本地選項的值。這也適用於全域或緩衝區本地選項,但不適用於全域變數、視窗本地變數或視窗本地選項。關於 {buf}
的使用,請參閱上面的 bufname()。當緩衝區或變數不存在時,會傳回 {def}
或空字串,並且不會顯示錯誤訊息。範例 let bufmodified = getbufvar(1, "&mod")
echo "todo myvar = " .. getbufvar("todo", "myvar")
Parameters: ~
• {buf} (`integer|string`)
• {varname} (`string`)
• {def} (`any?`)
Return: ~
(`any`)
getcellwidths() getcellwidths()any
){buf}
]) getchangelist(){buf}
的 變更列表。關於 {buf}
的使用,請參閱上面的 bufname()。如果緩衝區 {buf}
不存在,則會傳回一個空列表。{buf}
是目前的緩衝區,則目前位置指的是在列表中的位置。對於其他緩衝區,它會被設定為列表的長度。{buf}
(integer|string?
)table[]
){expr}
]) getchar(){expr}
,則會等待直到有字元可用。如果 {expr}
為 0,則僅在有字元可用時才會取得字元。否則傳回零。如果 {expr}
為 1,則僅檢查是否有字元可用,而不會將其消耗掉。如果沒有字元可用,則傳回零。如果您偏好總是取得字串,請使用 getcharstr()。{expr}
以及 {expr}
為 0 的情況下,會傳回一個完整的字元或特殊按鍵。如果它是一個單一字元,則結果是一個數字。使用 nr2char() 將其轉換為字串。否則會傳回一個包含編碼字元的字串。對於特殊按鍵,它是一個以 0x80(十進位:128)開頭的位元組序列字串。這與字串 "\<Key>" 的值相同,例如 "\<Left>"。當使用未包含在字元中的修飾符(shift、control、alt)時,傳回的值也是一個字串。{expr}
為 0 且按下 Esc 鍵時,Vim 會稍作延遲,以判斷這是否為跳脫序列的開頭。{expr}
為 1 時,只會傳回第一個位元組。對於單一位元組字元,它本身就是一個數字。使用 nr2char() 將其轉換為字串。let c = getchar()
if c == "\<LeftMouse>" && v:mouse_win > 0
exe v:mouse_win .. "wincmd w"
exe v:mouse_lnum
exe "normal " .. v:mouse_col .. "|"
endif
<Del>
鍵時,您會取得 <Del>
鍵的程式碼,而不是原始字元序列。範例getchar() == "\<Del>"
getchar() == "\<S-Left>"
nmap f :call FindChar()<CR>
function FindChar()
let c = nr2char(getchar())
while col('.') < col('$') - 1
normal l
if getline('.')[col('.') - 1] ==? c
break
endif
endwhile
endfunction
{expr}
(0|1?
)整數
)整數
){expr}
) getcharpos(){expr}
的位置。與 getpos() 相同,但傳回的列表中的欄號是字元索引,而不是位元組索引。如果 getpos() 傳回一個非常大的欄號,等於 v:maxcol,則 getcharpos() 會傳回最後一個字元的字元索引。getcharpos('.') returns [0, 5, 3, 0]
getpos('.') returns [0, 5, 7, 0]
{expr}
(string
)integer[]
)nnoremap <expr> ; getcharsearch().forward ? ';' : ','
nnoremap <expr> , getcharsearch().forward ? ',' : ';'
表格
){expr}
]) getcharstr(){expr}
,則會等待直到有字元可用。如果 {expr}
為 0 或 false,則僅在有字元可用時才會取得字元。否則傳回空字串。如果 {expr}
為 1 或 true,則僅檢查是否有字元可用,而不會將其消耗掉。如果沒有字元可用,則傳回空字串。否則,這會像 getchar() 一樣運作,只是數字結果會轉換為字串。{expr}
(0|1?
)string
)string
)string
)cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
string
)整數
)string
)any
)-
:insert 或 :append 命令 = i_CTRL-R_=。僅在編輯命令列時有效,因此需要使用 c_CTRL-\_e 或 c_CTRL-R_= 或表達式對應。否則傳回空字串。另請參閱 getcmdpos()、setcmdpos() 和 getcmdline()。':'|'>'|'/'|'?'|'@'|'-'|'='
)':'|'>'|'/'|'?'|'@'|'-'|'='
){pat}
, {type}
[, {filtered}
]) getcompletion(){type}
引數指定了其用途。支援以下完成類型{func}
定義 customlist, {func} 自訂完成,透過 {func}
定義 diff_buffer :diffget 和 :diffput 完成 dir 目錄名稱 dir_in_path 'cdpath' 中的目錄名稱 environment 環境變數名稱 event 自動命令事件 expression Vim 表達式 file 檔案和目錄名稱 file_in_path 'path' 中的檔案和目錄名稱 filetype 檔案類型名稱 'filetype' function 函式名稱 help 說明主題 highlight 醒目提示群組 history :history 子選項 keymap 鍵盤對應 locale 地區設定名稱(如 locale -a 的輸出) mapclear 緩衝區引數對應 mapping 對應名稱 menu 選單 messages :messages 子選項 option 選項 packadd 選用的套件 pack-add 名稱 runtime :runtime 完成 scriptnames 已來源的腳本名稱 :scriptnames shellcmd Shell 命令 shellcmdline 帶有檔案名稱引數的 Shell 命令列 sign :sign 子選項 syntax 語法檔案名稱 'syntax' syntime :syntime 子選項 tag 標籤 tag_listfiles 標籤,檔案名稱 user 使用者名稱 var 使用者變數{type}
是 "cmdline",則會傳回 cmdline-completion 的結果。例如,要完成 ":call" 命令後面的可能值echo getcompletion('call ', 'cmdline')
{type}
的無效值會產生錯誤。{pat}
(string
){type}
(string
){filtered}
(boolean?
)string[]
){winid}
]) getcurpos(){winid}
引數可以指定視窗。它可以是視窗編號或 視窗 ID。會傳回最後已知的游標位置,如果它不是目前的視窗,則對於緩衝區的目前值而言,這可能是無效的。如果 {winid}
無效,則會傳回一個包含零的列表。let save_cursor = getcurpos()
MoveTheCursorAround
call setpos('.', save_cursor)
{winid}
(整數?
)any
)getcursorcharpos() " returns [0, 3, 2, 0, 3]
getcurpos() " returns [0, 3, 4, 0, 3]
{winid}
(整數?
)any
){winnr}
[, {tabnr}
]]) getcwd(){winnr}
或 {tabnr}
時,會傳回該範圍的工作目錄,並忽略 'autochdir'。索引標籤和視窗會由各自的編號識別,0 表示目前的索引標籤或視窗。遺失的索引標籤編號表示 0。因此,下列項目是等效的getcwd(0)
getcwd(0, 0)
{winnr}
是 -1,則會忽略它,只會解析索引標籤。{winnr}
可以是視窗編號或 視窗 ID。如果 {winnr}
和 {tabnr}
都是 -1,則會傳回全域工作目錄。如果引數無效,則會擲回錯誤。E5000 E5001 E5002{winnr}
(整數?
){tabnr}
(整數?
)string
){name}
(string
)string
){name}
]) getfontname(){name}
是否為有效的字型名稱。如果不是,則會傳回空字串。否則會傳回實際的字型名稱,如果 GUI 不支援取得真實名稱,則會傳回 {name}
。僅在 GUI 執行時有效,因此在您的 vimrc 或 gvimrc 檔案中無效。請在 GUI 啟動後立即使用 GUIEnter 自動指令來使用此函式。{name}
(string?
)string
){fname}
) getfperm(){fname}
的讀取、寫入和執行權限。如果 {fname}
不存在或其目錄無法讀取,則會傳回空字串。結果的形式為 "rwxrwxrwx",其中每組 "rwx" 旗標依序表示檔案擁有者、檔案所屬群組和其他使用者的權限。如果使用者沒有給定的權限,則此旗標會由字串 "-" 取代。範例echo getfperm("/etc/passwd")
echo getfperm(expand("~/.config/nvim/init.vim"))
{fname}
(字串
)string
){fname}
) getfsize(){fname}
的大小(以位元組為單位)。如果 {fname}
是目錄,則會傳回 0。如果找不到檔案 {fname}
,則會傳回 -1。如果 {fname}
的大小太大而無法放入數字中,則會傳回 -2。{fname}
(字串
)整數
){fname}
) getftime(){fname}
的上次修改時間。該值以自 1970 年 1 月 1 日起的秒數測量,可以傳遞給 strftime()。另請參閱 localtime() 和 strftime()。如果找不到檔案 {fname}
,則會傳回 -1。{fname}
(字串
)整數
){fname}
) getftype(){fname}
的檔案類型描述。如果 {fname}
不存在,則會傳回空字串。以下是不同檔案類型及其結果的表格:一般檔案 "file"、目錄 "dir"、符號連結 "link"、區塊裝置 "bdev"、字元裝置 "cdev"、Socket "socket"、FIFO "fifo"、所有其他 "other"。範例getftype("/home")
{fname}
(字串
)'file'|'dir'|'link'|'bdev'|'cdev'|'socket'|'fifo'|'other'
){winnr}
時,只會使用目前索引標籤頁面中的此視窗。{winnr}
也可以是 視窗 ID。使用 {winnr}
和 {tabnr}
時,會使用指定索引標籤頁面中的視窗。如果 {winnr}
或 {tabnr}
無效,則會傳回空列表。{winnr}
(整數?
){tabnr}
(整數?
)vim.fn.getjumplist.ret
){lnum}
是小於 1 或大於緩衝區中行數的數字時,會傳回空字串。{end}
時,結果會是一個 List,其中每個項目都是目前緩衝區中從 {lnum}
到 {end}
範圍內的行,包括第 {end}
行。{end}
的使用方式與 {lnum}
相同。會靜默忽略不存在的行。當 {end}
在 {lnum}
之前時,會傳回空的 List。範例let start = line('.')
let end = search("^$") - 1
let lines = getline(start, end)
{lnum}
(integer|string
){end_}
(nil|false?
)string
){nr}
[, {what}
]) getloclist(){nr}
的位置列表中的所有項目。{nr}
可以是視窗編號或 視窗 ID。當 {nr}
為零時,會使用目前視窗。{nr}
,會傳回空列表。否則,與 getqflist() 相同。echo getloclist(3, {'all': 0})
echo getloclist(5, {'filewinid': 0})
{nr}
(integer
){what}
(table?
)any
){buf}
(integer??
)vim.fn.getmarklist.ret.item[]
){win}
]) getmatches(){win}
,則會使用此編號或視窗 ID 的視窗,而不是目前視窗。如果 {win}
無效,則會傳回空列表。範例echo getmatches()
[{"group": "MyGroup1", "pattern": "TODO", "priority": 10, "id": 1}, {"group": "MyGroup2", "pattern": "FIXME", "priority": 10, "id": 2}]
let m = getmatches()
call clearmatches()
echo getmatches()
[]
call setmatches(m)
echo getmatches()
[{"group": "MyGroup1", "pattern": "TODO", "priority": 10, "id": 1}, {"group": "MyGroup2", "pattern": "FIXME", "priority": 10, "id": 2}]
unlet m
{win}
(integer?
)any
)vim.fn.getmousepos.ret
)整數
){expr}
) getpos(){expr}
的位置。{expr}
可接受的值為:. 游標位置。$ 目前緩衝區的最後一行。'x 標記 x 的位置(如果未設定標記,則所有值都傳回 0)。w0 目前視窗中可見的第一行(如果顯示未更新,例如在靜默 Ex 模式中,則為 1)。w$ 目前視窗中可見的最後一行(如果沒有可見的行,則比 "w0" 少 1)。v 當不在視覺模式時,傳回游標位置。在視覺模式中,傳回視覺區域的另一端。一個很好的思考方式是,在視覺模式中,"v" 和 "." 互補。雖然 "." 指的是游標位置,但 "v" 指的是 v_o 將游標移動到的位置。因此,您可以一起使用 "v" 和 "." 來處理字元式視覺模式中的所有選取內容。如果游標位於字元式視覺區域的末尾,則 "v" 指的是同一視覺區域的開頭。如果游標位於字元式視覺區域的開頭,則 "v" 指的是同一視覺區域的結尾。"v" 與 '< 和 '> 的不同之處在於它會立即更新。請注意,可以使用另一個檔案中的標記。然後,行號將套用到另一個緩衝區。<Tab>
內的位置或最後一個字元之後的位置。{expr}
無效,則傳回一個所有數字都為零的列表。let save_a_mark = getpos("'a")
" ...
call setpos("'a", save_a_mark)
{expr}
(string
)integer[]
){what}
]) getqflist()vimgrep /theword/jg *.c
for d in getqflist()
echo bufname(d.bufnr) ':' d.lnum '=' d.text
endfor
{what}
字典引數,則只會傳回 {what}
中列出的項目,作為字典。{what}
中支援下列字串項目:changedtick 取得對列表所做的變更總數 quickfix-changedtick context 取得 quickfix-context efm 剖析 "lines" 時要使用的 errorformat。如果不存在,則會使用 'errorformat' 選項值。id 取得具有 quickfix-ID 的快速修正列表資訊;零表示目前列表或由 "nr" 指定的列表的 ID idx 取得此列表中位於此索引處的快速修正項目資訊,該列表由 "id" 或 "nr" 指定。如果設定為零,則會使用目前的項目。請參閱 quickfix-index items 快速修正列表項目 lines 使用 'efm' 剖析行列表,並傳回產生的項目。只接受 List 類型。目前的快速修正列表不會修改。請參閱 quickfix-parse。nr 取得此快速修正列表的資訊;零表示目前的快速修正列表,「$」表示最後一個快速修正列表 qfbufnr 顯示在快速修正視窗中的緩衝區編號。如果快速修正緩衝區不存在,則傳回 0。請參閱 quickfix-buffer。size 快速修正列表中的項目數 title 取得列表標題 quickfix-title winid 取得快速修正 視窗 ID all 以上所有快速修正屬性 {what}
中的非字串項目會被忽略。若要取得特定項目的值,請將其設定為零。如果 "nr" 不存在,則會使用目前的快速修正列表。如果同時指定了 "nr" 和非零 "id",則會使用由 "id" 指定的列表。若要取得快速修正堆疊中的列表數,請在 {what}
中將 "nr" 設定為「$」。傳回字典中的 "nr" 值包含快速修正堆疊大小。指定 "lines" 時,會忽略除了 "efm" 之外的所有其他項目。傳回的字典包含項目 "items",其中包含項目列表。echo getqflist({'all': 1})
echo getqflist({'nr': 2, 'title': 1})
echo getqflist({'lines' : ["F1:10:L10"]})
{what}
(table?
)any
){regname}
[, 1 [, {list}
]]]) getreg(){regname}
的內容。範例let cliptext = getreg('*')
{regname}
,則結果是一個空字串。{regname}
引數必須是字串。{list}
且為 TRUE,則結果類型會變更為 List。每個列表項目都是一行文字。如果您關心暫存器內可能存在的零位元組,請使用它:如果沒有第三個引數,則 NL 和零位元組都表示為 NL(請參閱 NL-used-for-Nul)。如果未設定暫存器,則會傳回一個空列表。{regname}
,則會使用 v:register。{regname}
(string?
){list}
(nil|false?
)string
){regname}
]) getreginfo(){regname}
的詳細資訊,以包含下列條目的 Dictionary 形式傳回:regcontents 暫存器 {regname}
中包含的行列表,如 getreg({regname}
, 1, 1)。regtype 暫存器 {regname}
的類型,如 getregtype() 中所述。isunnamed 布林值旗標,如果此暫存器目前由未命名的暫存器指向,則為 v:true。points_to 對於未命名的暫存器,給出目前指向的暫存器的單字母名稱(請參閱 quotequote)。例如,在使用 dd
刪除一行之後,此欄位將為 "1",這是取得已刪除文字的暫存器。{regname}
(string?
)表格
){opts}
是 Dict,並支援下列項目{pos1}
和 {pos2}
的順序無關緊要,它始終會回傳從左上角位置到右下角位置的內容。{pos1}
和 {pos2}
不在同一個緩衝區中,則會回傳空清單。xnoremap <CR>
\ <Cmd>echom getregion(
\ getpos('v'), getpos('.'), #{ type: mode() })<CR>
{pos1}
(table
){pos2}
(table
){opts}
(table?
)string[]
){pos1}
, {pos2}
[, {opts}
]) getregionpos(){pos1}
和 {pos2}
綁定的緩衝區文字區段的位置清單。每個區段是每行的兩個位置。[[{start_pos}, {end_pos}], ...]
<Tab>
內或最後一個字元之後的位置。如果結束位置的「off」數字不為零,則它是未包含在選取範圍內的字元第一個儲存格的偏移量,否則會包含其所有儲存格。{opts}
也支援以下選項{pos1}
(table
){pos2}
(table
){opts}
(table?
)integer[][][]
){regname}
]) getregtype(){regname}
的類型。該值將會是以下其中之一:「v」表示 字元式 文字,「V」表示 行式 文字,「<CTRL-V>{width}」表示 區塊式視覺 文字,「」表示空的或不明的暫存器。<CTRL-V>
是一個值為 0x16 的字元。{regname}
引數是一個字串。如果未指定 {regname}
,則會使用 v:register。{regname}
(string?
)string
){opts}
]) getscriptinfo():scriptnames
顯示的內容一樣。{opts}
支援以下可選項目:name 指令檔名稱比對模式。如果指定了,且未指定「sid」,則會回傳符合模式「name」的指令檔相關資訊。sid 指令檔 ID <SID>。如果指定了,則只會回傳 ID 為「sid」的指令檔相關資訊,並忽略「name」。{opts}
中的「sid」項目指定特定指令檔時才會出現。name Vim 指令檔名稱。sid 指令檔 ID <SID>。variables 包含指令檔本機變數的字典。只有在使用 {opts}
中的「sid」項目指定特定指令檔時才會出現。請注意,這是一個複本,無法使用此字典變更指令檔本機變數的值。version Vim 指令檔版本,永遠為 1。echo getscriptinfo({'name': 'myscript'})
echo getscriptinfo({'sid': 15})[0].variables
{opts}
(table?
)vim.fn.getscriptinfo.ret[]
){tabnr}
]) gettabinfo(){tabnr}
,則會將所有索引標籤頁面的資訊以 清單 的形式回傳。每個清單項目都是一個 字典。否則,{tabnr}
會指定索引標籤頁面的編號,並回傳該索引標籤頁面的資訊。如果索引標籤頁面不存在,則會回傳空清單。{tabnr}
(整數?
)any
){tabnr}
, {varname}
[, {def}
]) gettabvar(){tabnr}
中索引標籤本機變數 {varname}
的值。t:var 索引標籤的編號從 1 開始。{varname}
引數是一個字串。當 {varname}
為空時,會回傳包含所有索引標籤本機變數的字典。請注意,必須使用不含「t:」的名稱。當索引標籤或變數不存在時,會回傳 {def}
或空字串,且沒有錯誤訊息。{tabnr}
(integer
){varname}
(string
){def}
(any?
)any
){tabnr}
, {winnr}
, {varname}
[, {def}
]) gettabwinvar(){tabnr}
中視窗 {winnr}
的視窗本機變數 {varname}
的值。{varname}
引數是一個字串。當 {varname}
為空時,會回傳包含所有視窗本機變數的字典。當 {varname}
等於「&」時,會將所有視窗本機選項的值以 字典 的形式取得。否則,當 {varname}
以「&」開頭時,會取得視窗本機選項的值。請注意,{varname}
必須是不含「w:」的名稱。索引標籤的編號從 1 開始。對於目前的索引標籤頁面,請使用 getwinvar()。{winnr}
可以是視窗編號或 視窗 ID。當 {winnr}
為零時,會使用目前的視窗。這也適用於全域選項、緩衝區本機選項和視窗本機選項,但不適用於全域變數或緩衝區本機變數。當索引標籤、視窗或變數不存在時,會回傳 {def}
或空字串,且沒有錯誤訊息。範例let list_is_on = gettabwinvar(1, 2, '&list')
echo "myvar = " .. gettabwinvar(3, 1, 'myvar')
gettabwinvar({tabnr}, {winnr}, '&')
{tabnr}
(integer
){winnr}
(integer
){varname}
(string
){def}
(any?
)any
){winnr}
]) {winnr}
的標籤堆疊。{winnr}
可以是視窗編號或 視窗 ID。如果未指定 {winnr}
,則會使用目前的視窗。當視窗 {winnr}
不存在時,會回傳空的 Dict。{winnr}
(整數?
)any
){text}
) gettext(){text}
。這主要用於分散式 Vim 指令檔中。當產生訊息翻譯時,{text}
會由 xgettext 擷取,翻譯人員可以在 .po 檔案中新增翻譯的訊息,且當呼叫 gettext() 時,Vim 會查閱翻譯。對於 {text}
,雙引號字串是較佳的選擇,因為 xgettext 不理解單引號字串中的跳脫字元。{text}
(字串
)any
){winid}
,則會以包含一個項目的 清單 形式回傳具有該 ID 的視窗相關資訊。如果視窗不存在,則結果為空清單。{winid}
,則會回傳所有索引標籤頁面中所有視窗的相關資訊。{winid}
(整數?
)vim.fn.getwininfo.ret.item[]
){timeout}
]) getwinpos(){timeout}
可以用來指定等待終端回應的毫秒數。如果省略,則預設使用 100 毫秒。while 1
let res = getwinpos(1)
if res[0] >= 0
break
endif
" Do some work here
endwhile
{timeout}
(integer?
)any
)整數
)整數
){winnr}
, {varname}
[, {def}
]) getwinvar() let list_is_on = getwinvar(2, '&list')
echo "myvar = " .. getwinvar(1, 'myvar')
Parameters: ~
• {winnr} (`integer`)
• {varname} (`string`)
• {def} (`any?`)
Return: ~
(`any`)
glob({expr}
[, {nosuf}
[, {list}
[, {alllinks}
]]]) glob(){expr}
中的檔案萬用字元。請參閱 萬用字元 以了解特殊字元的使用方法。{nosuf}
引數且為 TRUE,否則會套用 'suffixes' 和 'wildignore' 選項:符合 'wildignore' 中模式的名稱將會被跳過,而 'suffixes' 會影響比對結果的排序。'wildignorecase' 則永遠適用。{list}
存在且為 TRUE 時,結果會是包含所有符合檔案的 List。使用 List 的優點是,您還可以正確取得包含換行符號的檔案名稱。否則,結果會是一個字串,當有多個符合項目時,它們會以 <NL>
字元分隔。{alllinks}
引數存在且為 TRUE 時,則會包含所有符號連結。let tagfiles = glob("`find . -name tags -print`")
let &tags = substitute(tagfiles, "\n", ",", "g")
{expr}
(string
){nosuf}
(boolean?
){list}
(boolean?
){alllinks}
(boolean?
)any
){string}
) glob2regpat()if filename =~ glob2regpat('Make*.mak')
" ...
endif
if filename =~ '^Make.*\.mak$'
" ...
endif
{string}
是空字串時,結果是 "^$",比對空字串。請注意,結果取決於系統。在 MS-Windows 上,反斜線通常表示路徑分隔符號。{string}
(string
)any
){path}
, {expr}
[, {nosuf}
[, {list}
[, {alllinks}
]]]) globpath() 對於 {path}
中所有目錄的字串 {expr}
執行 glob(),並將結果串連起來。範例:echo globpath(&rtp, "syntax/c.vim")
{path}
是以逗號分隔的目錄名稱列表。每個目錄名稱都會加在 {expr}
的前面,並像 glob() 一樣展開。必要時會插入路徑分隔符號。若要在目錄名稱內加入逗號,請使用反斜線跳脫。請注意,在 MS-Windows 上,目錄可能會有尾隨的反斜線,如果在後面加上逗號,請將其移除。如果其中一個目錄的展開失敗,則不會有錯誤訊息。{nosuf}
引數且為 TRUE,否則會套用 'suffixes' 和 'wildignore' 選項:符合 'wildignore' 中模式的名稱將會被跳過,而 'suffixes' 會影響比對結果的排序。{list}
存在且為 TRUE 時,結果會是包含所有符合檔案的 List。使用 List 的優點是,您還可以正確取得包含換行符號的檔案名稱。否則,結果會是一個字串,當有多個符合項目時,它們會以 <NL>
字元分隔。範例:echo globpath(&rtp, "syntax/c.vim", 0, 1)
{alllinks}
的使用方式與 glob() 相同。echo globpath(&rtp, "**/README.txt")
{path}
(string
){expr}
(string
){nosuf}
(boolean?
){list}
(boolean?
){alllinks}
(boolean?
)any
){feature}
) has(){feature}
,則返回 1,否則返回 0。{feature}
引數是功能名稱,例如 "nvim-0.2.1" 或 "win32",請參閱下方。另請參閱 exists()。print(vim.uv.os_uname().sysname)
if has('feature')
let x = this_breaks_without_the_feature()
endif
if has("nvim-0.2.1")
" ...
endif
if has("win32")
" ...
endif
if v:version > 602 || v:version == 602 && has("patch148")
" ...
endif
if has("patch-7.4.237")
" ...
endif
{feature}
(string
)0|1
){dict}
, {key}
) has_key(){dict}
有一個以 {key}
為鍵的項目,則為 TRUE。否則為 FALSE。{key}
引數是一個字串。{dict}
(表格
){key}
(string
)0|1
){winnr}
[, {tabnr}
]]) haslocaldir(){winnr}
為 -1 且標籤頁透過 :tcd 設定了本機路徑時,則為 1,否則為 0。echo haslocaldir()
echo haslocaldir(0)
echo haslocaldir(0, 0)
{winnr}
在目前的標籤頁中使用該視窗。使用 {winnr}
和 {tabnr}
在該標籤頁中使用該視窗。{winnr}
可以是視窗編號或 視窗 ID。如果 {winnr}
為 -1,則會忽略它,只會解析標籤頁。如果引數無效,則會擲回錯誤。E5000 E5001 E5002{winnr}
(整數?
){tabnr}
(整數?
)0|1
){what}
[, {mode}
[, {abbr}
]]) hasmapto(){what}
,而且這個對應存在於 {mode}
指示的其中一個模式中,則為 TRUE。引數 {what}
和 {mode}
是字串。當 {abbr}
存在且為 TRUE 時,請使用縮寫而非對應。別忘了指定插入模式和/或命令列模式。全域對應和目前緩衝區的本機對應都會檢查是否有符合項目。如果找不到符合的對應,則會返回 FALSE。以下字元會在 {mode}
中被識別:n 一般模式 v 可視和選取模式 x 可視模式 s 選取模式 o 運算子等待模式 i 插入模式 l 語言引數 ("r"、"f"、"t" 等) c 命令列模式。當省略 {mode}
時,會使用 "nvo"。if !hasmapto('\ABCdoit')
map <Leader>d \ABCdoit
endif
{what}
(any
){mode}
(string?
){abbr}
(boolean?
)0|1
){history}
, {item}
) histadd(){item}
加入到歷史記錄 {history}
中,{history}
可以是以下其中之一:hist-names{history}
字串不需要是完整名稱,一個字元就足夠。如果 {item}
已經存在於歷史記錄中,它將被移動成為最新的項目。結果是一個數字:如果操作成功則為 TRUE,否則返回 FALSE。call histadd("input", strftime("%Y %b %d"))
let date=input("Enter date: ")
{history}
(string
){item}
(any
)0|1
){item}
的求值結果為字串,則將其用作正規表示式。所有符合該表達式的條目都將從歷史記錄中刪除(如果有的話)。大小寫必須匹配,除非使用 "\c" /\c。如果 {item}
的求值結果為數字,則將其解釋為索引,請參閱 :history-indexing。如果存在,則將刪除相應的條目。call histdel("expr")
call histdel("/", '^\*')
call histdel("search", histnr("search"))
call histdel("search", -1)
call histdel("search", '^' .. histget("search", -1) .. '$')
call histdel("search", -1)
let @/ = histget("search", -1)
{history}
(string
){item}
(any?
)0|1
){history}
[, {index}
]) histget(){history}
中索引為 {index}
的條目。有關 {history}
的可能值,請參閱 hist-names,有關 {index}
的資訊,請參閱 :history-indexing。如果沒有這樣的條目,則返回空字串。當省略 {index}
時,將使用歷史記錄中最新的項目。execute '/' .. histget("search", -2)
{num}
",它支援重新執行來自 :history 輸出的第 {num}
個條目。command -nargs=1 H execute histget("cmd", 0+<args>)
{history}
(string
){index}
(integer|string?
)string
)let inp_index = histnr("expr")
{history}
(string
)整數
){name}
) hlID(){name}
的高亮群組的 ID。當高亮群組不存在時,返回零。這可以用於檢索有關高亮群組的資訊。例如,要取得 "Comment" 群組的背景顏色:echo synIDattr(synIDtrans(hlID("Comment")), "bg")
{name}
(string
)整數
){name}
) hlexists(){name}
的高亮群組,則為 TRUE。當群組以某種方式定義時,就會發生這種情況。不一定是在為其定義高亮顯示時,它也可能已用於語法項目。{name}
(string
)0|1
)string
){string}
, {from}
, {to}
) iconv(){from}
轉換為編碼 {to}
的文字 {string}
。當轉換完全失敗時,返回空字串。當某些字元無法轉換時,它們會被 "?" 取代。編碼名稱是 iconv() 函式庫函式可以接受的任何名稱,請參閱 ":!man 3 iconv"。請注意,Vim 對於所有 Unicode 編碼都使用 UTF-8,從/到 UCS-2 的轉換會自動變更為使用 UTF-8。無論如何,您都不能在字串中使用 UCS-2,因為它包含 NUL 位元組。{string}
(string
){from}
(string
){to}
(string
)any
){expr}
) id()id(v1) ==# id(v2)
傳回 true 的條件是 type(v1) == type(v2) && v1 is v2
。請注意,v:_null_string
、v:_null_list
、v:_null_dict
和 v:_null_blob
具有相同的 id()
和不同的類型,因為它們在內部表示為 NULL 指標。id()
傳回容器指標的十六進位表示法 (例如 0x994a40
),與 `asprintf("%p", {expr}
)` 相同,但不建議依賴傳回值的確切格式。id(no_longer_existing_container)
不會等於其他某些 id()
:新的容器可能會重複使用垃圾回收容器的識別碼。{expr}
(任意
)any
){lnum}
) indent(){lnum}
行的縮排。縮排是以空格計算的,'tabstop' 的值相關。{lnum}
的使用方式與 getline() 中相同。當 {lnum}
無效時,返回 -1。{lnum}
(integer|string
)整數
){object}
, {expr}
[, {start}
[, {ic}
]]) index(){object}
中尋找 {expr}
並傳回其索引。有關使用 lambda 選取項目的資訊,請參閱 indexof()。{object}
是 List,則傳回項目值等於 {expr}
的最低索引。沒有自動轉換,因此字串 "4" 與數字 4 不同。而且數字 4 與浮點數 4.0 不同。'ignorecase' 的值在此處未使用,大小寫區分,如 {ic}
引數所示。{start}
,則從索引為 {start}
的項目開始尋找(對於相對於結尾的項目,可能為負數)。{ic}
且為 TRUE 時,忽略大小寫。否則,大小寫必須匹配。{object}
中找不到 {expr}
時,返回 -1。範例:let idx = index(words, "the")
if index(numbers, 123) >= 0
" ...
endif
{object}
(任意
){expr}
(任意
){start}
(整數?
){ic}
(布林值?
)any
){object}
, {expr}
[, {opts}
]) indexof(){object}
中 {expr}
為 v:true 的項目的索引。{object}
必須是 List 或 Blob。{expr}
是 字串:如果 {object}
是 List,則在 {expr}
內部,v:key 具有目前 List 項目的索引,v:val 具有項目的值。如果 {object}
是 Blob,則在 {expr}
內部,v:key 具有目前位元組的索引,v:val 具有位元組值。{opts}
是一個 Dict,並支援下列項目:startidx 從具有此索引的項目開始評估 {expr}
;對於相對於結尾的項目,可能為負數。當 {expr}
對所有項目求值均為 v:false 時,返回 -1。範例:let l = [#{n: 10}, #{n: 20}, #{n: 30}]
echo indexof(l, "v:val.n == 20")
echo indexof(l, {i, v -> v.n == 30})
echo indexof(l, "v:val.n == 20", #{startidx: 1})
{object}
(任意
){expr}
(任意
){opts}
(table?
)any
){prompt}
(string
){text}
(string?
){completion}
(string?
)any
){opts}
) 結果是一個字串,它是使用者在命令列上輸入的任何內容。{prompt}
引數可以是提示字串,也可以是空白字串(不顯示提示)。可以在提示中使用 '\n' 來開始新的一行。{prompt}
相同。default "" 與第一種形式中的 {text}
相同。completion 無 與第一種形式中的 {completion}
相同。cancelreturn "" 取消對話框時傳回的值。highlight 無 高亮處理常式:Funcref。if input("Coffee or beer? ") == "beer"
echo "Cheers!"
endif
{text}
且不為空,則將其用作預設回覆,就像使用者輸入此內容一樣。範例:let color = input("Color? ", "white")
{completion}
指定輸入所支援的完成類型。如果沒有它,則不會執行完成。支援的完成類型與可以使用 "-complete=" 引數提供給使用者定義命令的類型相同。有關更多資訊,請參閱 :command-completion。範例:let fname = input("File: ", "", "file")
highlight
鍵允許指定用於高亮顯示使用者輸入的函式。此函式會接收使用者輸入作為其唯一引數,並且必須傳回一個包含 3 元組的列表 [hl_start_col, hl_end_col + 1, hl_group],其中 hl_start_col 是第一個高亮顯示的欄位,hl_end_col 是最後一個高亮顯示的欄位(+ 1!),hl_group 是用於高亮顯示的 :hi 群組。 E5403 E5404 E5405 E5406 hl_start_col 和 hl_end_col + 1 都必須指向多位元組字元的開頭(高亮顯示不能中斷多位元組字元),hl_end_col + 1 可能等於輸入長度。起始欄位必須在範圍 [0, len(input)) 中,結束欄位必須在範圍 (hl_start_col, len(input)] 中,各區段必須依序排列,使下一個 hl_start_col 大於或等於上一個 hl_end_col。highlight RBP1 guibg=Red ctermbg=red
highlight RBP2 guibg=Yellow ctermbg=yellow
highlight RBP3 guibg=Green ctermbg=green
highlight RBP4 guibg=Blue ctermbg=blue
let g:rainbow_levels = 4
function! RainbowParens(cmdline)
let ret = []
let i = 0
let lvl = 0
while i < len(a:cmdline)
if a:cmdline[i] is# '('
call add(ret, [i, i + 1, 'RBP' .. ((lvl % g:rainbow_levels) + 1)])
let lvl += 1
elseif a:cmdline[i] is# ')'
let lvl -= 1
call add(ret, [i, i + 1, 'RBP' .. ((lvl % g:rainbow_levels) + 1)])
endif
let i += 1
endwhile
return ret
endfunction
call input({'prompt':'>','highlight':'RainbowParens'})
nmap \x :call GetFoo()<CR>:exe "/" .. Foo<CR>
function GetFoo()
call inputsave()
let g:Foo = input("enter search pattern: ")
call inputrestore()
endfunction
{opts}
(table
)any
){textlist}
) inputlist(){textlist}
必須是字串的 List。此 List 會被顯示,每行一個字串。將會提示使用者輸入一個數字,該數字會被傳回。使用者也可以使用滑鼠點擊來選擇項目,如果滑鼠在命令列中啟用('mouse' 為 "a" 或包含 "c")。對於第一個字串,會傳回 0。當點擊第一個項目上方時,會傳回一個負數。當點擊提示時,會傳回比 {textlist}
長度多一的值。請確保 {textlist}
的條目少於 'lines',否則它將無法運作。最好將條目編號放在字串的開頭。並在第一個項目中放入提示。範例 let color = inputlist(['Select color:', '1. red',
\ '2. green', '3. blue'])
Parameters: ~
• {textlist} (`string[]`)
Return: ~
(`any`)
inputrestore() inputrestore()any
)any
){prompt}
[, {text}
]) inputsecret(){prompt}
(string
){text}
(string?
)any
){idx}
,則在索引為 {idx}
的項目之前插入 {item}
。如果 {idx}
為零,則它會像省略 {idx}
一樣,放在第一個項目之前。也可以使用負的 {idx}
,請參閱 list-index。-1 會插入到最後一個項目之前。let mylist = insert([2, 3, 5], 1)
call insert(mylist, 4, -1)
call insert(mylist, 6, len(mylist))
{object}
(任意
){item}
(any
){idx}
(integer?
)any
)CTRL-C
,大多數命令不會執行,並且控制權會返回給使用者。這對於從較低層次中止執行很有用,例如在自動命令中。範例function s:check_typoname(file)
if fnamemodify(a:file, ':t') == '['
echomsg 'Maybe typo'
call interrupt()
endif
endfunction
au BufWritePre * call s:check_typoname(expand('<amatch>'))
any
){expr}
(數字
)any
){path}
) isabsolutepath(){path}
是絕對路徑時,該數字為 TRUE。在 Unix 上,當路徑以 '/' 開頭時,會被視為絕對路徑。在 MS-Windows 上,當路徑以可選的磁碟機前綴開頭,並接著 '\' 或 '/' 時,會被視為絕對路徑。UNC 路徑始終是絕對路徑。範例echo isabsolutepath('/usr/share/') " 1
echo isabsolutepath('./foobar') " 0
echo isabsolutepath('C:\Windows') " 1
echo isabsolutepath('foobar') " 0
echo isabsolutepath('\\remote\file') " 1
{path}
(string
)0|1
){directory}
) isdirectory(){directory}
的目錄存在時,該數字為 TRUE。如果 {directory}
不存在,或者不是目錄,則結果為 FALSE。{directory}
是任何運算式,它會被用作字串。{directory}
(string
)0|1
)echo isinf(-1.0 / 0.0)
{expr}
(數字
)1|0|-1
){expr}
) islocked() E786 結果是一個數字,當 {expr}
是鎖定變數的名稱時,該數字為 TRUE。字串引數 {expr}
必須是變數、List 項目或 Dictionary 條目的名稱,而不是變數本身!範例let alist = [0, ['a', 'b'], 2, 3]
lockvar 1 alist
echo islocked('alist') " 1
echo islocked('alist[1]') " 0
{expr}
是不存在的變數時,您會收到錯誤訊息。使用 exists() 來檢查是否存在。{expr}
(任意
)0|1
){expr}
(數字
)0|1
){dict}
) items(){dict}
所有鍵值對的 List。每個 List 項目都是包含兩個項目的列表:{dict}
條目的鍵以及此條目的值。該 List 的順序是任意的。另請參閱 keys() 和 values()。範例for [key, value] in items(mydict)
echo key .. ': ' .. value
endfor
{dict}
(any
)any
){job}
(integer
)整數
){job}
, {width}
, {height}
) jobresize(){job}
的虛擬終端視窗調整為 {width}
個欄位和 {height}
列。如果作業不是使用 "pty":v:true
啟動的,則會失敗。{job}
(integer
){width}
(integer
){height}
(integer
)any
){cmd}
作為作業。如果 {cmd}
是 List,則直接執行(不使用 'shell')。如果 {cmd}
是 String,則在 'shell' 中執行,如下所示call jobstart(split(&shell) + split(&shellcmdflag) + ['{cmd}'])
call jobstart('nvim -h', {'on_stdout':{j,d,e->append(line('.'),d)}})
{cmd}
[0] 或 'shell' 不可執行,則傳回 -1。傳回的 job-id 是有效的 channel-id,表示作業的 stdio 串流。使用 chansend()(如果已啟用 "rpc",則使用 rpcnotify() 和 rpcrequest())將資料傳送到 stdin,並使用 chanclose() 關閉串流而不停止作業。{cmd}
是 Listcall jobstart(['ping', 'neovim.io'])
call jobstart(['System32\ping.exe', 'neovim.io'])
{cmd}
會被摺疊為 CommandLineToArgvW 所預期的引號引數字串 https://msdn.microsoft.com/bb776391,除非 cmd[0] 是某種形式的 "cmd.exe"。env
選項來設定這些。{opts}
是一個具有以下鍵的字典:clear_env: (boolean) env
完全定義作業環境,而不是合併目前環境。cwd: (string, default=|current-directory|) 作業的工作目錄。detach: (boolean) 分離作業處理程序:當 Nvim 結束時,它不會被終止。如果處理程序在 Nvim 之前結束,則會呼叫 on_exit
。env: (dict) 環境變數 name:value 配對的對應,用於延伸(或使用 "clear_env" 替換)目前環境。jobstart-env height: (number) pty
終端機的高度。on_exit: (function) 當作業結束時會呼叫的回呼函數。on_stdout: (function) 當作業發出 stdout 資料時會呼叫的回呼函數。on_stderr: (function) 當作業發出 stderr 資料時會呼叫的回呼函數。overlapped: (boolean) 為傳遞給子處理程序的 stdio 設定 FILE_FLAG_OVERLAPPED。僅適用於 MS-Windows;在其他平台上會被忽略。pty: (boolean) 將作業連接到新的虛擬終端機,並將其串流連接到主檔案描述符。on_stdout
接收所有輸出,on_stderr
會被忽略。terminal-start rpc: (boolean) 使用 msgpack-rpc 通過 stdio 與作業進行通訊。然後 on_stdout
會被忽略,但仍然可以使用 on_stderr
。stderr_buffered: (boolean) 收集資料直到 EOF(串流關閉)才呼叫 on_stderr
。channel-buffered stdout_buffered: (boolean) 收集資料直到 EOF(串流關閉)才呼叫 on_stdout
。channel-buffered stdin: (string) "pipe"(預設值)將作業的 stdin 連接到通道,或 "null" 取消連接 stdin。width: (number) pty
終端機的寬度。{opts}
作為 self 字典傳遞給回呼函數;呼叫者可以設定其他鍵來傳遞應用程式特定的資料。{cmd}
(string|string[]
){opts}
(table?
)any
){id}
) jobstop(){id}
。如果程序在逾時後未終止,則會傳送 SIGKILL。當工作終止時,將會呼叫其 on_exit 處理常式(如果有的話)。請參閱 工作控制。{id}
(integer
)any
)let running = jobwait([{job-id}], 0)[0] == -1
{jobs}
清單中的工作的回呼函數。除非回呼函數呼叫 :redraw,否則螢幕不會重新繪製。{jobs}
) 的整數清單,其中每個整數是相應工作的狀態:如果工作已結束,則為結束代碼;如果超過逾時時間,則為 -1;如果工作被中斷(透過 CTRL-C),則為 -2;如果工作 ID 無效,則為 -3。{jobs}
(integer[]
){timeout}
(integer?
)any
){list}
[, {sep}
]) join(){list}
中的項目連接成一個字串。當指定 {sep}
時,它會放在項目之間。如果省略 {sep}
,則會使用單個空格。請注意,{sep}
不會加在結尾。您可能也想在那裡加上它let lines = join(mylist, "\n") .. "\n"
{list}
(any[]
){sep}
(string?
)any
){expr}
) json_decode(){expr}
從 JSON 物件轉換。接受 readfile() 樣式的清單作為輸入,以及一般字串。可能會輸出任何 Vim 值。在以下情況下,它會輸出 msgpack-special-dict:1. 字典包含重複的鍵。2. 字串包含 NUL 位元組。如果包含 NUL 位元組的字串是字典鍵,則會發出兩個特殊字典:一個用於字典,一個用於字串。{expr}
(任意
)any
){expr}
) json_encode(){expr}
轉換為 JSON 字串。接受 msgpack-special-dict 作為輸入。不會轉換 Funcref、具有非字串鍵的對應 (可以使用 msgpack-special-dict 建立)、具有自我參照容器的值、包含非 UTF-8 字元的字串、包含為代理對保留的碼點的偽 UTF-8 字串(此類字串不是有效的 UTF-8 字串)。不可列印的字元會轉換為 "\u1234" 跳脫字元或像 "\t" 這樣的特殊跳脫字元,其他字元則會按原樣傾印。Blob 會轉換為個別位元組的陣列。{expr}
(任意
)any
){dict}
(表格
)any
)<C-Home>
{string}
(string
)any
){expr}
) len() E701 結果是一個數字,即引數的長度。當 {expr}
是字串或數字時,會像 strlen() 一樣使用位元組的長度。當 {expr}
是 清單 時,會傳回 清單 中項目的數量。當 {expr}
是 Blob 時,會傳回位元組的數量。當 {expr}
是 字典 時,會傳回 字典 中項目的數量。否則會產生錯誤並傳回零。{expr}
(任意
)any
){libname}
, {funcname}
, {argument}
) libcall() E364 E368 在執行階段程式庫 {libname}
中呼叫具有單個引數 {argument}
的函數 {funcname}
。這對於呼叫您專門製作與 Vim 一起使用的程式庫中的函數很有用。由於只能有一個引數,因此呼叫標準程式庫函數相當有限。結果是函數傳回的字串。如果函數傳回 NULL,則在 Vim 中會顯示為空字串 ""。如果函數傳回數字,請使用 libcallnr()!如果 {argument}
是數字,則會作為 int 傳遞給函數;如果 {argument}
是字串,則會作為以 null 結尾的字串傳遞。{libname}
應該是 DLL 的檔案名稱,不含 ".DLL" 後綴。只有在 DLL 不在常用的位置時,才需要完整路徑。對於 Unix:編譯您自己的外掛程式時,請記住物件程式碼必須編譯為與位置無關 ('PIC')。範例 echo libcall("libc.so", "getenv", "HOME")
Parameters: ~
• {libname} (`string`)
• {funcname} (`string`)
• {argument} (`any`)
Return: ~
(`any`)
libcallnr({libname}
, {funcname}
, {argument}
) libcallnr()echo libcallnr("/usr/lib/libc.so", "getpid", "")
call libcallnr("libc.so", "printf", "Hello World!\n")
call libcallnr("libc.so", "sleep", 10)
{libname}
(string
){funcname}
(string
){argument}
(any
)any
){winid}
參數,會取得該視窗的值,而不是目前視窗的值。{expr}
和 {winid}
的無效值,傳回 0。echo line(".") " line number of the cursor
echo line(".", winid) " idem, in window "winid"
echo line("'t") " line number of mark t
echo line("'" .. marker) " line number of mark marker
{expr}
(string|integer[]
){winid}
(整數?
)整數
){lnum}
) line2byte(){lnum}
行從頭開始的位元組計數。這包括行尾字元,具體取決於目前緩衝區的 'fileformat' 選項。第一行傳回 1。使用 UTF-8 編碼,忽略 'fileencoding'。這也可用於取得最後一行下方那一行的位元組計數echo line2byte(line("$") + 1)
{lnum}
的使用方式與 getline() 相同。當 {lnum}
無效時,傳回 -1。另請參閱 byte2line()、go 和 :goto。{lnum}
(整數
)整數
){lnum}
) lispindent(){lnum}
行的縮排量,與 'lisp' 相同。縮排以空格計算,'tabstop' 的值相關。{lnum}
的使用方式與 getline() 相同。當 {lnum}
無效時,傳回 -1。{lnum}
(整數
)any
){list}
) list2blob(){list}
中的所有數字值。範例echo list2blob([1, 2, 3, 4]) " returns 0z01020304
echo list2blob([]) " returns 0z
{list}
(any[]
)any
){list}
[, {utf8}
]) list2str(){list}
中的每個數字轉換為字元字串並將它們全部串連起來。範例echo list2str([32]) " returns " "
echo list2str([65, 66, 67]) " returns "ABC"
echo join(map(list, {nr, val -> nr2char(val)}), '')
{utf8}
選項無效,且僅為了向後相容而存在。使用 UTF-8,組合字元會如預期般運作echo list2str([97, 769]) " returns "á"
{list}
(any[]
){utf8}
(boolean?
)any
)any
){expr}
) log(){expr}
的自然對數(以 e 為底)。{expr}
必須評估為範圍在 (0, inf] 中的 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo log(10)
echo log(exp(5))
{expr}
(數字
)any
){expr}
) log10(){expr}
以 10 為底的對數。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo log10(1000)
echo log10(0.01)
{expr}
(數字
)any
){expr}
(string
){expr1}
(any[]?
)any
){expr1}
, {expr2}
) map(){expr1}
必須是 List、String、Blob 或 Dictionary。當 {expr1}
是 List 或 Dictionary 時,將 {expr1}
中的每個項目替換為計算 {expr2}
的結果。對於 Blob,每個位元組都會被替換。對於 String,每個字元(包括組合字元)都會被替換。如果項目類型變更,您可能需要使用 mapnew() 來建立新的 List 或 Dictionary。{expr2}
是 String,在 {expr2}
內,v:val 具有目前項目的值。對於 Dictionary,v:key 具有目前項目的鍵,而對於 List,v:key 具有目前項目的索引。對於 Blob,v:key 具有目前位元組的索引。對於 String,v:key 具有目前字元的索引。範例:call map(mylist, '"> " .. v:val .. " <"')
{expr2}
是運算式的結果,然後再次用作運算式。通常最好使用字串文字來避免必須使用雙反斜線。您仍然必須使用雙引號。{expr2}
是 Funcref,則會使用兩個引數呼叫它:1. 目前項目的鍵或索引。2. 目前項目的值。該函數必須返回該項目新的值。變更每個值為 "key-value" 的範例:func KeyValue(key, val)
return a:key .. '-' .. a:val
endfunc
call map(myDict, function('KeyValue'))
call map(myDict, {key, val -> key .. '-' .. val})
call map(myDict, {key -> 'item: ' .. key})
call map(myDict, {_, val -> 'item: ' .. val})
{expr1}
,即被篩選過的 List 或 Dictionary,或是一個新的 Blob 或 String。當評估 {expr2}
時遇到錯誤,{expr1}
中剩餘的項目將不會被處理。當 {expr2}
是一個 Funcref 時,函數內部的錯誤會被忽略,除非該函數定義時使用了 "abort" 標誌。{expr1}
(string|table|any[]
){expr2}
(string|function
)any
){name}
[, {mode}
[, {abbr}
[, {dict}
]]]) maparg(){dict}
省略或為零時:傳回模式 {mode}
中對應 {name}
的右側 (rhs)。傳回的 String 會像在 ":map" 命令清單的輸出中一樣轉換特殊字元。當 {dict}
為 TRUE 時,會傳回一個字典,請參閱下方。若要取得所有對應的清單,請參閱 maplist()。{name}
的對應時,如果 {dict}
為 FALSE,則會傳回空的 String,否則會傳回空的 Dict。當 {name}
的對應為空時,則會傳回 "<Nop>"。{name}
可以具有特殊鍵名稱,就像在 ":map" 命令中一樣。{mode}
可以是以下字串之一:"n" Normal "v" Visual (包括 Select) "o" Operator-pending "i" Insert "c" Cmd-line "s" Select "x" Visual "l" langmap 語言對應 "t" Terminal "" Normal、Visual 和 Operator-pending。當省略 {mode}
時,會使用 "" 的模式。{abbr}
存在且為 TRUE 時,請使用縮寫而不是對應。{dict}
存在且為 TRUE 時,傳回包含對應所有資訊的字典,其中包含以下項目:mapping-dict{lhs}
,如輸入時的樣子。"lhsraw" 對應的 {lhs}
,如原始位元組。"lhsrawalt" 對應的 {lhs}
,如原始位元組,替代形式,僅當與 "lhsraw" 不同時存在。"rhs" 對應的 {rhs}
,如輸入時的樣子。"callback" Lua 函數,如果 RHS 定義為此。"silent" 對於 :map-silent 對應為 1,否則為 0。"noremap" 如果對應的 {rhs}
不可重新對應,則為 1。"script" 如果對應是以 <script>
定義,則為 1。"expr" 對於運算式對應 (:map-<expr>) 為 1。"buffer" 對於緩衝區本地對應 (:map-local) 為 1。"mode" 定義對應的模式。除了上面提到的模式之外,還會使用以下字元:" " Normal、Visual 和 Operator-pending "!" Insert 和 Commandline 模式 (mapmode-ic) "sid" 腳本本地 ID,用於 <sid>
對應 (<SID>)。對於特殊內容為負數。"scriptversion" 腳本的版本,始終為 1。"lnum" "sid" 中的行號,如果未知則為零。"nowait" 不等待其他較長的對應。( :map-<nowait>)。"abbr" 如果這是 縮寫,則為 True。"mode_bits" Nvim 的 "mode" 內部二進位表示法。mapset() 會忽略此項;僅使用 "mode"。有關使用範例,請參閱 maplist()。這些值來自 src/nvim/state_defs.h,未來可能會變更。exe 'nnoremap <Tab> ==' .. maparg('<Tab>', 'n')
{name}
(string
){mode}
(string?
){abbr}
(boolean?
){dict}
(false?
)string
){name}
[, {mode}
[, {abbr}
]]) mapcheck(){mode}
中是否有與 {name}
比對的對應。有關 {mode}
和 {name}
中的特殊名稱,請參閱 maparg()。當 {abbr}
存在且為非零時,請使用縮寫而不是對應。如果對應以 {name}
開頭,且對應等於 {name}
的開頭,則會發生比對。{name}
比對的對應,而 maparg() 只會尋找完全符合 {name}
的對應。當沒有以 {name}
開頭的對應時,會傳回空的 String。如果有一個,則會傳回該對應的 RHS。如果有數個以 {name}
開頭的對應,則會傳回其中一個的 RHS。如果 RHS 為空,則會是 "<Nop>"。會先檢查目前緩衝區的本地對應,然後檢查全域對應。此函數可用於檢查是否可以在沒有歧義的情況下新增對應。範例:if mapcheck("_vv") == ""
map _vv :set guifont=7x13<CR>
endif
{name}
(string
){mode}
(string?
){abbr}
(boolean?
)any
){abbr}
]) maplist(){abbr}
存在且為 TRUE 時,請使用縮寫而不是對應。echo maplist()->filter({_, m ->
\ match(get(m, 'rhs', ''), 'MultiMatch') >= 0
\ })
let saved_maps = []
for m in maplist()
if and(m.mode_bits, 0x19) != 0
eval saved_maps->add(m)
endif
endfor
echo saved_maps->mapnew({_, m -> m.lhs})
omap xyzzy <Nop>
let op_bit = maplist()->filter(
\ {_, m -> m.lhs == 'xyzzy'})[0].mode_bits
ounmap xyzzy
echo printf("Operator-pending mode bit: 0x%x", op_bit)
{abbr}
(0|1?
)table[]
){expr1}
, {expr2}
) mapnew(){expr1}
中的項目,而是建立並傳回新的 List 或 Dictionary。{expr1}
保持不變。項目仍然可以透過 {expr2}
變更,如果您不想要這樣,請先使用 deepcopy()。{expr1}
(any
){expr2}
(any
)any
){mode}
, {abbr}
, {dict}
) mapset(){dict}
) 從字典還原對應,可能由 maparg() 或 maplist() 傳回。當 dict.buffer 為 true 時,會在目前緩衝區上設定緩衝區對應;由呼叫者確保預期的緩衝區是目前緩衝區。此功能允許將對應從一個緩衝區複製到另一個緩衝區。dict.mode 值可能會還原涵蓋多個模式的單一對應,例如使用 '!'、' '、"nox" 或 'v' 的模式值。E1276{mode}
和 {abbr}
應該與呼叫 maparg() 的相同。E460 {mode}
用於定義設定對應的模式,而不是 {dict}
中的 "mode" 項目。儲存和還原對應的範例:let save_map = maparg('K', 'n', 0, 1)
nnoremap K somethingelse
" ...
call mapset('n', 0, save_map)
:map!
,則需要儲存/還原它們的全部對應,因為它們可能會有所不同。{dict}
作為唯一的引數,則從字典中取得模式和縮寫。範例let save_maps = maplist()->filter(
\ {_, m -> m.lhs == 'K'})
nnoremap K somethingelse
cnoremap K somethingelse2
" ...
unmap K
for d in save_maps
call mapset(d)
endfor
{dict}
(boolean
)any
){expr}
, {pat}
[, {start}
[, {count}
]]) match(){expr}
是 List 時,這會傳回 {pat}
比對的第一個項目的索引。每個項目都用作 String,List 和 Dictionary 會像回音一樣使用。{expr}
會用作 String。結果是一個 Number,表示 {expr}
中 {pat}
比對的索引(位元組偏移)。echo match("testing", "ing") " results in 4
echo match([1, 'x'], '\a') " results in 1
{pat}
的資訊,請參閱 string-match。strpbrk()let sepidx = match(line, '[.,;: \t]')
{start}
,則搜尋會從 String 中的位元組索引 {start}
或 List 中的項目 {start}
開始。但是,結果仍然是從第一個字元/項目計算的索引。範例echo match("testing", "ing", 2)
echo match("testing", "ing", 4)
echo match("testing", "t", 2)
{start}
> 0,則如同字串從 {start}
個位元組後開始,因此「^」會在 {start}
處匹配。但當指定 {count}
時,則如同忽略 {start}
位元組之前的匹配(為了保持向後相容性,這有點複雜)。對於字串,如果 {start}
< 0,則會被設為 0。對於列表,索引從結尾開始計算。如果 {start}
超出範圍(對於字串,{start}
> strlen({expr}
),或對於列表,{start}
> len({expr}
)),則返回 -1。{count}
時,使用第 {count}
個匹配。當在字串中找到匹配時,搜尋下一個匹配會從下一個字元開始。因此,此範例的結果為 1。echo match("testing", "..", 0, 2)
{expr}
(string|any[]
){pat}
(string
){start}
(整數?
){count}
(integer?
)any
){group}
, {pattern}
[, {priority}
[, {id}
[, {dict}
]]]) 定義要在目前視窗中突顯的模式(「匹配」)。它將使用 {group}
突顯。返回一個識別號碼 (ID),可用於使用 matchdelete() 刪除匹配。ID 與視窗綁定。匹配區分大小寫且為 magic 模式,除非在 {pattern}
中明確覆寫了大小寫敏感性或 magic 模式。 'magic'、'smartcase' 和 'ignorecase' 選項不會被使用。「Conceal」值是特殊的,它會導致匹配被隱藏。{priority}
參數會為匹配指定優先順序。具有較高優先順序的匹配會覆蓋具有較低優先順序的匹配的突顯。優先順序指定為整數(負數也例外)。如果未指定 {priority}
參數,則預設優先順序為 10。 'hlsearch' 的優先順序為零,因此所有優先順序大於零的匹配都會覆蓋它。語法突顯(參閱 'syntax')是一種單獨的機制,無論選擇的優先順序為何,匹配始終會覆蓋語法突顯。{id}
參數允許請求特定的匹配 ID。如果指定的 ID 已被使用,則會出現錯誤訊息,且不會新增匹配。ID 指定為正整數(排除零)。ID 1、2 和 3 分別保留給 :match、:2match 和 :3match。3 保留給 matchparen 外掛程式使用。如果未指定 {id}
參數或指定為 -1,則 matchadd() 會自動選擇一個可用的 ID,該 ID 至少為 1000。{dict}
參數允許使用其他自訂值。目前,它用於指定一個匹配專用的隱藏字元,該字元將針對 hl-Conceal 突顯的匹配顯示。字典可以具有以下成員:highlight MyGroup ctermbg=green guibg=green
let m = matchadd("MyGroup", "TODO")
call matchdelete(m)
{group}
(integer|string
){pattern}
(string
){priority}
(integer?
){id}
(integer?
){dict}
(string?
)any
){group}
, {pos}
[, {priority}
[, {id}
[, {dict}
]]]) matchaddpos() 與 matchadd() 相同,但需要一個位置清單 {pos}
而不是模式。此命令比 matchadd() 快,因為它不處理正規表示式,並且它會設定緩衝區行邊界以重新繪製畫面。當需要快速新增和刪除匹配時(例如,突顯匹配的括號)應使用此命令。E5030 E5031 {pos}
是一個位置清單。每個位置可以是下列其中一個:highlight MyGroup ctermbg=green guibg=green
let m = matchaddpos("MyGroup", [[23, 24], 34])
call matchdelete(m)
{group}
(integer|string
){pos}
(any[]
){priority}
(integer?
){id}
(integer?
){dict}
(string?
)any
){nr}
) matcharg(){nr}
個匹配項目。返回一個包含兩個元素的列表:使用的突顯群組的名稱,以及使用的模式。當 {nr}
不是 1、2 或 3 時,返回一個空的列表。當沒有設定匹配項目時,返回 ['','']。這有助於儲存和還原 :match。使用 :match 命令突顯匹配限制為三個匹配。matchadd() 沒有此限制。{nr}
(integer
)any
){buf}
, {pat}
, {lnum}
, {end}
, [, {dict}
]) matchbufline(){buf}
中,從 {lnum}
到 {end}
的行中,{pat}
匹配的匹配列表。{lnum}
和 {end}
可以是行號,也可以是字串「$」以表示 {buf}
中的最後一行。{dict}
參數支援下列項目: submatches 包含子匹配資訊 (/\()" Assuming line 3 in buffer 5 contains "a"
echo matchbufline(5, '\<\k\+\>', 3, 3)
[{'lnum': 3, 'byteidx': 0, 'text': 'a'}]
" Assuming line 4 in buffer 10 contains "tik tok"
echo matchbufline(10, '\<\k\+\>', 1, 4)
[{'lnum': 4, 'byteidx': 0, 'text': 'tik'}, {'lnum': 4, 'byteidx': 4, 'text': 'tok'}]
{submatch}
且為 v:true,則也會返回類似 "\1"、"\2" 等子匹配。範例" Assuming line 2 in buffer 2 contains "acd"
echo matchbufline(2, '\(a\)\?\(b\)\?\(c\)\?\(.*\)', 2, 2
\ {'submatches': v:true})
[{'lnum': 2, 'byteidx': 0, 'text': 'acd', 'submatches': ['a', '', 'c', 'd', '', '', '', '', '']}]
「submatches」列表始終包含 9 個項目。如果找不到子匹配,則會為該子匹配返回一個空字串。{buf}
(string|integer
){pat}
(string
){lnum}
(string|integer
){end_}
(string|integer
){dict}
(table?
)any
){id}
[, {win}
]) matchdelete() E802 E803 刪除先前由 matchadd() 或其中一個 :match 命令定義的 ID 為 {id}
的匹配。如果成功,則返回 0,否則返回 -1。請參閱 matchadd() 的範例。可以使用 clearmatches() 在一個操作中刪除所有匹配。如果指定了 {win}
,則使用具有此數字或視窗 ID 的視窗,而不是目前視窗。{id}
(integer
){win}
(integer?
)any
){expr}
, {pat}
[, {start}
[, {count}
]]) matchend()echo matchend("testing", "ing")
let span = matchend(line, '[a-zA-Z]')
let span = matchend(line, '[^a-zA-Z]')
echo matchend("testing", "ing", 5)
{expr}
(任意
){pat}
(string
){start}
(整數?
){count}
(integer?
)any
){list}
, {str}
[, {dict}
]) matchfuzzy(){list}
是字串列表,則會返回一個包含 {list}
中與 {str}
模糊匹配的所有字串的 列表。返回的列表中的字串會根據匹配分數排序。{dict}
參數始終支援下列項目: matchseq 當此項目存在時,僅返回包含 {str}
中給定序列的字元的匹配。 limit 要返回的 {list}
中的最大匹配數。零表示沒有限制。{list}
是字典列表,則可選的 {dict}
參數支援下列其他項目: key 與 {str}
模糊匹配的項目索引鍵。此項目的值應為字串。 text_cb Funcref,將針對 {list}
中的每個項目呼叫,以取得模糊匹配的文字。這應接受字典項目作為參數,並返回該項目用於模糊匹配的文字。{str}
會被視為字面字串,不支援正規表達式比對。{str}
支援的最大長度為 256。{str}
包含多個以空白分隔的單字時,會回傳包含所有這些單字的字串列表。{str}
的長度大於 256,則會回傳一個空列表。{limit}
時,matchfuzzy() 將會在 {list}
中尋找最多此數量的相符項目,並以排序順序回傳。echo matchfuzzy(["clay", "crow"], "cay")
echo getbufinfo()->map({_, v -> v.name})->matchfuzzy("ndl")
echo getbufinfo()->matchfuzzy("ndl", {'key' : 'name'})
echo getbufinfo()->matchfuzzy("spl",
\ {'text_cb' : {v -> v.name}})
echo v:oldfiles->matchfuzzy("test")
let l = readfile("buffer.c")->matchfuzzy("str")
echo ['one two', 'two one']->matchfuzzy('two one')
['two one', 'one two']
。echo ['one two', 'two one']->matchfuzzy('two one',
\ {'matchseq': 1})
['two one']
。{list}
(any[]
){str}
(string
){dict}
(string?
)any
){list}
, {str}
[, {dict}
]) matchfuzzypos(){str}
中字元相符的位置列表,以及比對分數的列表。您可以使用 byteidx() 將字元位置轉換為位元組位置。{str}
在一個字串中多次比對成功,則只會回傳最佳比對的位置。echo matchfuzzypos(['testing'], 'tsg')
echo matchfuzzypos(['clay', 'lacy'], 'la')
echo [{'text': 'hello', 'id' : 10}]
\ ->matchfuzzypos('ll', {'key' : 'text'})
[[{"id": 10, "text": "hello"}], [[2, 3]], [127]]
{list}
(any[]
){str}
(string
){dict}
(string?
)any
){expr}
, {pat}
[, {start}
[, {count}
]]) matchlist()echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')
{expr}
(任意
){pat}
(string
){start}
(整數?
){count}
(integer?
)any
){expr}
, {pat}
[, {start}
[, {count}
]]) matchstr()echo matchstr("testing", "ing")
echo matchstr("testing", "ing", 5)
{expr}
為 列表 時,會回傳相符的項目。類型不會變更,不一定是字串。{expr}
(任意
){pat}
(string
){start}
(整數?
){count}
(integer?
)any
){list}
, {pat}
[, {dict}
]) matchstrlist(){list}
中與 {pat}
相符的項目 列表。{list}
是字串的 列表。{pat}
會與 {list}
中的每個字串進行比對。{dict}
參數支援下列項目: submatches 包含子匹配資訊 (/\(){list}
中的索引。text:相符的字串。submatches:子比對的列表。只有在 {dict}
中將 "submatches" 設定為 v:true 時才會出現。echo matchstrlist(['tik tok'], '\<\k\+\>')
[{'idx': 0, 'byteidx': 0, 'text': 'tik'}, {'idx': 0, 'byteidx': 4, 'text': 'tok'}]
echo matchstrlist(['a', 'b'], '\<\k\+\>')
[{'idx': 0, 'byteidx': 0, 'text': 'a'}, {'idx': 1, 'byteidx': 0, 'text': 'b'}]
echo matchstrlist(['acd'], '\(a\)\?\(b\)\?\(c\)\?\(.*\)',
\ #{submatches: v:true})
[{'idx': 0, 'byteidx': 0, 'text': 'acd', 'submatches': ['a', '', 'c', 'd', '', '', '', '', '']}]
"submatches" 列表始終包含 9 個項目。如果找不到子比對,則該子比對會回傳一個空字串。{list}
(string[]
){pat}
(string
){dict}
(table?
)any
){expr}
, {pat}
[, {start}
[, {count}
]]) matchstrpos()echo matchstrpos("testing", "ing")
{start}
,其含義與 match() 相同。echo matchstrpos("testing", "ing", 2)
echo matchstrpos("testing", "ing", 5)
{expr}
為 列表 時,會回傳相符的項目、{pat}
比對成功的第一個項目的索引、起始位置和結束位置。echo matchstrpos([1, '__x'], '\a')
{expr}
(任意
){pat}
(string
){start}
(整數?
){count}
(integer?
)any
){expr}
可以是 列表 或 字典。對於字典,它會回傳字典中所有值的最大值。如果 {expr}
既不是列表也不是字典,或者 {expr}
中的其中一個項目不能用作數字,則會導致錯誤。空的 列表 或 字典 會導致零。{expr}
(任意
)any
){path}
會根據名稱比對選單,如果 {path}
為空字串,則會比對所有選單。範例echo menu_get('File','')
echo menu_get('')
nnoremenu &Test.Test inormal
inoremenu Test.Test insert
vnoremenu Test.Test x
echo menu_get("")
[ { "hidden": 0, "name": "Test", "priority": 500, "shortcut": 84, "submenus": [ { "hidden": 0, "mappings": { i": { "enabled": 1, "noremap": 1, "rhs": "insert", "sid": 1, "silent": 0 }, n": { ... }, s": { ... }, v": { ... } }, "name": "Test", "priority": 500, "shortcut": 0 } ] } ]
{path}
(string
){modes}
(string?
)any
){name}
[, {mode}
]) {mode}
中指定的選單 {name}
的資訊。選單名稱應指定,但不含快捷鍵字元 ('&')。如果 {name}
為 "",則會回傳頂層選單名稱。{mode}
可以是以下字串之一:"n" 普通模式 "v" 視覺模式(包括選取模式) "o" 操作符等待模式 "i" 插入模式 "c" 命令列模式 "s" 選取模式 "x" 視覺模式 "t" 終端機作業模式 "" 普通、視覺和操作符等待模式 "!" 插入和命令列模式。當省略 {mode}
時,會使用 "" 的模式。{rhs}
不可重新對應,則為 v:true,否則為 v:false。priority:選單順序優先級。 選單優先級。rhs:選單項目的右手側。回傳的字串已轉換特殊字元,如 ":menu" 命令清單的輸出。當選單項目的 {rhs}
為空時,則回傳 "<Nop>"。script:如果允許對 {rhs}
進行腳本本地重新對應,則為 v:true,否則為 v:false。請參閱 :menu-script。shortcut:快捷鍵(選單名稱中 '&' 之後的字元)。 選單快捷鍵 silent:如果選單項目是以 <silent>
引數建立,則為 v:true。 :menu-silent。submenus:包含所有子選單名稱的 列表。僅當選單項目有子選單時才會出現。echo menu_info('Edit.Cut')
echo menu_info('File.Save', 'n')
" Display the entire menu hierarchy in a buffer
func ShowMenu(name, pfx)
let m = menu_info(a:name)
call append(line('$'), a:pfx .. m.display)
for child in m->get('submenus', [])
call ShowMenu(a:name .. '.' .. escape(child, '.'),
\ a:pfx .. ' ')
endfor
endfunc
new
for topmenu in menu_info('').submenus
call ShowMenu(topmenu, '')
endfor
{name}
(string
){mode}
(string?
)any
){expr}
可以是 列表 或 字典。對於字典,它會回傳字典中所有值的最小值。如果 {expr}
既不是列表也不是字典,或者 {expr}
中的其中一個項目不能用作數字,則會導致錯誤。空的 列表 或 字典 會導致零。{expr}
(任意
)any
){flags}
時,它必須是一個字串。空字串沒有任何作用。{flags}
可以包含以下字元標記:"p":將根據需要建立中間目錄。"D":{name}
將在目前函式結束時刪除,但不會遞迴刪除。 :defer "R":{name}
將在目前函式結束時遞迴刪除。 :defer{name}
有多個部分且使用 "p" 時,某些目錄可能已經存在。只會排定要刪除第一個建立的目錄及其內容。例如,當使用call mkdir('subdir/tmp/autoload', 'pR')
defer delete('subdir/tmp', 'rf')
{prot}
,則會用來設定新目錄的保護位元。預設值為 0o755 (rwxr-xr-x:使用者可讀寫,其他人可讀)。使用 0o700 可使其對其他人不可讀。{prot}
會套用到 {name}
的所有部分。因此,如果您建立 /tmp/foo/bar,則 /tmp/foo 會以 0o700 建立。範例call mkdir($HOME .. "/tmp/foo/bar", "p", 0o700)
{flags}
設定為 "p",則 mkdir() 會靜默結束。{name}
(string
){flags}
(字串?
){prot}
(string?
)any
){expr}
]) mode(){expr}
且其評估結果為非零數值或非空字串 (non-zero-arg),則傳回完整模式,否則僅傳回第一個字母。另請參閱 state()。CTRL-V
為單一字元 niI 在插入模式中使用 i_CTRL-O 的一般模式 niR 在取代模式中使用 i_CTRL-O 的一般模式 niV 在虛擬取代模式中使用 i_CTRL-O 的一般模式 nt 在 終端模擬器中的一般模式 (插入模式會進入終端模式) ntT 在 終端模式中使用 t_CTRL-\_CTRL-O 的一般模式 v 字元可視模式 vs 在選取模式中使用 v_CTRL-O 的字元可視模式 V 行可視模式 Vs 在選取模式中使用 v_CTRL-O 的行可視模式 CTRL-V
區塊可視模式 CTRL-V
s 在選取模式中使用 v_CTRL-O 的區塊可視模式 s 字元選取模式 S 行選取模式 CTRL-S
區塊選取模式 i 插入模式 ic 插入模式完成 compl-generic ix 插入模式 i_CTRL-X 完成 R 取代模式 R Rc 取代模式完成 compl-generic Rx 取代模式 i_CTRL-X 完成 Rv 虛擬取代 gR Rvc 虛擬取代模式完成 compl-generic Rvx 虛擬取代模式 i_CTRL-X 完成 c 命令列編輯 cr 命令列編輯覆蓋模式 c_<Insert> cv Vim Ex 模式 gQ cvr 覆蓋模式下的 Vim Ex 模式 c_<Insert> r 按 Enter 提示 rm -- 更多 -- 提示 r? 某種 :confirm 查詢 ! Shell 或外部命令正在執行 t 終端模式:按鍵傳送至工作{expr}
(any?
)any
){list}
[, {type}
]) msgpackdump(){type}
包含 "B" 時,則傳回 Blob。範例call writefile(msgpackdump([{}]), 'fname.mpack', 'b')
call writefile(msgpackdump([{}], 'B'), 'fname.mpack')
{list}
(any
){type}
(any?
)any
){data}
) msgpackparse()let fname = expand('~/.config/nvim/shada/main.shada')
let mpack = readfile(fname, 'b')
let shada_objects = msgpackparse(mpack)
_VAL[0] * ((_VAL[1] << 62) & (_VAL[2] << 31) & _VAL[3])
{data}
(any
)any
){lnum}
) nextnonblank(){lnum}
的第一個非空白行的行號。範例if getline(nextnonblank(1)) =~ "Java" | endif
{lnum}
(整數
)any
){expr}
[, {utf8}
]) nr2char(){expr}
。範例echo nr2char(64) " returns '@'
echo nr2char(32) " returns ' '
echo nr2char(300) " returns I with bow character
{utf8}
選項無效,且僅為了回溯相容性而存在。請注意,檔案中的 NUL 字元使用 nr2char(10) 指定,因為 NUL 以換行字元表示。nr2char(0) 是真正的 NUL,並終止字串,因此會產生空字串。{expr}
(integer
){utf8}
(boolean?
)any
){...}
) nvim_...() E5555 eval-api 呼叫 nvim api 函式。引數的型別檢查將比大多數其他內建函式更嚴格。例如,如果預期為整數,則必須傳入 Number,而不會自動轉換 String。由 bufnr() 傳回的緩衝區號碼可用作 nvim_buf_... 函式的第一個引數。所有預期物件 (緩衝區、視窗或索引標籤頁面) 的函式也可以採用數值 0 來表示目前 (焦點) 物件。{...}
(any
)any
){expr}
, {expr}
) or()let bits = or(bits, 0x80)
{expr}
(數字
){expr1}
(數字
)any
){path}
[, {len}
]) pathshorten(){path}
中的目錄名稱,並傳回結果。尾部 (檔案名稱) 會保持不變。路徑中的其他元件縮減為 {len}
個字母的長度。如果省略 {len}
或小於 1,則會使用 1(單個字母)。前導的 '~' 和 '.' 字元會保留。範例echo pathshorten('~/.config/nvim/autoload/file1.vim')
echo pathshorten('~/.config/nvim/autoload/file2.vim', 2)
{path}
(string
){len}
(integer?
)any
){expr}
) perleval(){expr}
並傳回其轉換為 Vim 資料結構的結果。數字和字串會原樣傳回 (字串會複製)。清單會以 Vim List 型別表示。字典會以 Vim Dictionary 型別表示,非字串索引鍵會導致錯誤。{expr}
必須傳回對它的參考。範例echo perleval('[1 .. 4]')
{expr}
(任意
)any
){x}
, {y}
) pow(){x}
對指數 {y}
的次方,作為 Float。{x}
和 {y}
必須評估為 Float 或 Number。如果 {x}
或 {y}
不是 Float 或 Number,則傳回 0.0。範例echo pow(3, 3)
echo pow(2, 16)
echo pow(32, 0.20)
{x}
(number
){y}
(number
)any
){lnum}
) prevnonblank(){lnum}
的第一個非空白行的行號。範例:let ind = indent(prevnonblank(v:lnum - 1))
{lnum}
(整數
)any
){fmt}
, {expr1}
...) printf(){fmt}
中的 "%" 項目會被格式化後的對應參數取代。範例:echo printf("%4d: E%d %.30s", lnum, errno, msg)
Compute()->printf("result: %d")
call()
將項目作為列表傳遞。{n$}
,其中 n >= 1。echo printf("%d: %.*s", nr, width, line)
{n$}
位置參數指定符來指定。請參閱 printf-$。echo printf("%.2f", 12.115)
#, c-format
msgid "%s returning %s"
msgstr "waarde %2$s komt terug van %1$s"
echo printf(
"In The Netherlands, vim's creator's name is: %1$s %2$s",
"Bram", "Moolenaar")
echo printf(
"In Belgium, vim's creator's name is: %2$s %1$s",
"Bram", "Moolenaar")
echo printf("%1$*2$.*3$d", 1, 2, 3)
echo printf("%2$*3$.*1$d", 1, 2, 3)
echo printf("%3$*1$.*2$d", 1, 2, 3)
echo printf("%1$*2$.*3$g", 1.4142, 2, 3)
echo printf("%1$4.*2$f", 1.4142135, 6)
echo printf("%1$*2$.4f", 1.4142135, 6)
echo printf("%1$*2$.*3$f", 1.4142135, 6, 2)
echo printf("%1$d at width %2$ld is: %01$*2$d", 1, 2)
echo printf("%01$*2$.*3$d %4$d", 1, 2)
echo printf("%1$s %2$s %1$d", "One", "Two")
{fmt}
(string
){expr1}
(any?
)string
){buf}
(整數|字串
)any
){buf}
, {expr}
) prompt_setcallback(){buf}
的提示回呼函數設定為 {expr}
。當 {expr}
為空字串時,則會移除回呼函數。這只有在 {buf}
的 'buftype' 設定為 "prompt" 時才會生效。 func s:TextEntered(text)
if a:text == 'exit' || a:text == 'quit'
stopinsert
" Reset 'modified' to allow the buffer to be closed.
" We assume there is nothing useful to be saved.
set nomodified
close
else
" Do something useful with "a:text". In this example
" we just repeat it.
call append(line('$') - 1, 'Entered: "' .. a:text .. '"')
endif
endfunc
call prompt_setcallback(bufnr(), function('s:TextEntered'))
Parameters: ~
• {buf} (`integer|string`)
• {expr} (`string|function`)
Return: ~
(`any`)
prompt_setinterrupt({buf}
, {expr}
) prompt_setinterrupt(){buf}
的回呼函數設定為 {expr}
。當 {expr}
為空字串時,則會移除回呼函數。這只有在 {buf}
的 'buftype' 設定為 "prompt" 時才會生效。CTRL-C
時,會調用此回呼函數。如果沒有設定回呼函數,Vim 將會像在任何緩衝區中一樣退出插入模式。{buf}
(整數|字串
){expr}
(string|function
)any
){buf}
, {text}
) prompt_setprompt(){buf}
的提示設定為 {text}
。您很可能希望 {text}
以空格結尾。只有在 {buf}
的 'buftype' 設定為 "prompt" 時,結果才會可見。範例call prompt_setprompt(bufnr(''), 'command: ')
{buf}
(整數|字串
){text}
(字串
)any
)any
)any
){expr}
) py3eval(){expr}
,並返回其轉換為 Vim 資料結構的結果。數字和字串會按原樣返回(但字串會被複製,Unicode 字串會額外轉換為 UTF-8)。列表會表示為 Vim List 類型。字典會表示為 Vim Dictionary 類型,其中鍵會轉換為字串。{expr}
(任意
)any
){expr}
) pyeval() E858 E859 評估 Python 表達式 {expr}
,並返回其轉換為 Vim 資料結構的結果。數字和字串會按原樣返回(但字串會被複製)。列表會表示為 Vim List 類型。字典會表示為 Vim Dictionary 類型,非字串鍵會導致錯誤。{expr}
(任意
)any
){expr}
) pyxeval(){expr}
,並返回其轉換為 Vim 資料結構的結果。使用 Python 2 或 3,請參閱 python_x 和 'pyxversion'。另請參閱:pyeval()、py3eval(){expr}
(任意
)any
){expr}
]) rand(){expr}
作為種子,以 xoshiro128** 演算法產生一個偽隨機數 Number。為了保持一致性,即使在 64 位系統上,返回的數字也是 32 位。可以使用 srand() 初始化 {expr}
,並由 rand() 更新。如果省略 {expr}
,則會使用並更新一個內部種子值。如果 {expr}
無效,則返回 -1。echo rand()
let seed = srand()
echo rand(seed)
echo rand(seed) % 16 " random number 0 - 15
{expr}
(number?
)any
){expr}
[, {max}
[, {stride}
]]) range() E726 E727 返回一個包含 Numbers 的 List{expr}
:[0, 1, ..., {expr}
- 1]{max}
:[{expr}
, {expr}
+ 1, ..., {max}
]{stride}
:[{expr}
, {expr}
+ {stride}
, ..., {max}
](每次將 {expr}
增加 {stride}
,且不會產生超出 {max}
的值)。當最大值比開始值小一時,結果為空列表。當最大值比開始值小一以上時,則會發生錯誤。範例echo range(4) " [0, 1, 2, 3]
echo range(2, 4) " [2, 3, 4]
echo range(2, 9, 3) " [2, 5, 8]
echo range(2, -2, -1) " [2, 1, 0, -1, -2]
echo range(0) " []
echo range(2, 0) " error!
{expr}
(任意
){max}
(integer?
){stride}
(integer?
)any
){fname}
[, {offset}
[, {size}
]]) readblob(){fname}
,並返回一個 Blob。如果指定了 {offset}
,則從指定的偏移量讀取檔案。如果它是負值,則將其用作從檔案末尾開始的偏移量。例如,要讀取最後 12 個位元組echo readblob('file.bin', -12)
{size}
,則只會讀取指定的大小。例如,要讀取檔案的前 100 個位元組echo readblob('file.bin', 0, 100)
{size}
為 -1 或省略,則會讀取從 {offset}
開始的所有資料。當 {size}
明確設定時,這也可以用於從 Unix 上的字元裝置讀取資料。只有在裝置支援搜尋時,才能使用 {offset}
。否則,它應該為零。例如,要從串列控制台讀取 10 個位元組echo readblob('/dev/ttyS0', 0, 10)
{fname}
(字串
){offset}
(integer?
){size}
(integer?
)any
){directory}
[, {expr}
]) readdir(){directory}
中包含檔案和目錄名稱的列表。如果您不需要執行複雜的操作(例如限制符合的數量),也可以使用 glob()。{expr}
時,會包含所有條目。當給定 {expr}
時,會對其求值以檢查要執行什麼操作:如果 {expr}
的結果為 -1,則不會處理任何其他條目。如果 {expr}
的結果為 0,則此條目不會被新增到列表中。如果 {expr}
的結果為 1,則此條目會被新增到列表中。每次求值 {expr}
時,v:val 都會設定為條目名稱。當 {expr}
為函數時,名稱會作為引數傳遞。例如,要取得以 ".txt" 結尾的檔案列表echo readdir(dirname, {n -> n =~ '.txt$'})
echo readdir(dirname, {n -> n !~ '^\.\|\~$'})
function! s:tree(dir)
return {a:dir : map(readdir(a:dir),
\ {_, x -> isdirectory(x) ?
\ {x : s:tree(a:dir .. '/' .. x)} : x})}
endfunction
echo s:tree(".")
{directory}
(string
){expr}
(integer?
)any
){fname}
[, {type}
[, {max}
]]) readfile(){fname}
並返回一個 List,檔案的每一行都是一個項目。行會以 NL 字元分隔。以 CR 分隔的 Macintosh 檔案會產生單個長行(除非某處出現 NL)。所有 NUL 字元都會被替換為 NL 字元。當 {type}
包含 "b" 時,會使用二進位模式{max}
時,這會指定要讀取的最大行數。如果您只想檢查檔案的前十行,則此功能很有用for line in readfile(fname, '', 10)
if line =~ 'Date' | echo line | endif
endfor
{max}
為負數時,會返回檔案末尾的 -{max} 行,或盡可能多返回。當 {max}
為零時,結果為空列表。請注意,如果沒有 {max}
,則會將整個檔案讀取到記憶體中。另請注意,無法識別編碼。如果需要,請將檔案讀取到緩衝區中。已過時(請改用 readblob()):當 {type}
包含 "B" 時,會返回一個 Blob,其中包含未修改的檔案二進位資料。當無法開啟檔案時,會給出錯誤訊息,並且結果為空列表。另請參閱 writefile()。{fname}
(字串
){type}
(string?
){max}
(integer?
)any
){object}
, {func}
[, {initial}
]) reduce() E998 會針對 {object}
中的每個項目呼叫 {func}
,其中 {object}
可以是 String、List 或 Blob。呼叫 {func}
時,會帶有兩個引數:目前為止的結果和目前的項目。處理完所有項目後,會返回結果。{initial}
是初始結果。當省略時,會使用 {object}
中的第一個項目,並且會先針對第二個項目呼叫 {func}
。如果未給定 {initial}
且 {object}
為空,則無法計算結果,會產生 E998 錯誤。echo reduce([1, 3, 5], { acc, val -> acc + val })
echo reduce(['x', 'y'], { acc, val -> acc .. val }, 'a')
echo reduce(0z1122, { acc, val -> 2 * acc + val })
echo reduce('xyz', { acc, val -> acc .. ',' .. val })
{object}
(任意
){func}
(function
){initial}
(any?
)any
)any
)any
)any
){start}
) reltime({start}
, {end}
) 傳回表示時間值的項目。該項目是一個列表,其項目取決於系統。該項目可以傳遞給 reltimestr() 以將其轉換為字串,或傳遞給 reltimefloat() 以轉換為浮點數。{start}
和 {end}
之間經過的時間。{start}
和 {end}
引數必須是由 reltime() 傳回的值。發生錯誤時傳回零。{start}
(any?
){end_}
(any?
)any
){time}
) reltimefloat(){time}
時間值的浮點數。時間單位為秒。範例:let start = reltime() call MyFunction() let seconds = reltimefloat(reltime(start)) 請參閱 reltimestr() 關於額外負擔的註解。另請參閱 profiling。如果發生錯誤,則傳回空字串{time}
(any
)any
){time}
) reltimestr(){time}
時間值的字串。這是秒數、小數點和微秒數。範例let start = reltime()
call MyFunction()
echo reltimestr(reltime(start))
echo split(reltimestr(reltime(start)))[0]
{time}
(any
)any
){list}
, {idx}
) remove(){list}
, {idx}
, {end}
) 不帶 {end}
:從 List {list}
中移除位於 {idx}
的項目,並傳回該項目。帶 {end}
:從 {idx}
到 {end}
(包含) 移除項目,並傳回包含這些項目的 List。當 {idx}
指向與 {end}
相同的項目時,會傳回包含一個項目的列表。當 {end}
指向 {idx}
之前的項目時,這會發生錯誤。請參閱 list-index 以取得 {idx}
和 {end}
的可能值。發生錯誤時傳回零。範例echo "last item: " .. remove(mylist, -1)
call remove(mylist, 0, 9)
{list}
(any[]
){idx}
(integer
){end_}
(integer?
)any
){blob}
, {idx}
) remove({blob}
, {idx}
, {end}
) 不帶 {end}
:從 Blob {blob}
中移除位於 {idx}
的位元組,並傳回該位元組。帶 {end}
:從 {idx}
到 {end}
(包含) 移除位元組,並傳回包含這些位元組的 Blob。當 {idx}
指向與 {end}
相同的位元組時,會傳回包含一個位元組的 Blob。當 {end}
指向 {idx}
之前的位元組時,這會發生錯誤。發生錯誤時傳回零。範例echo "last byte: " .. remove(myblob, -1)
call remove(mylist, 0, 9)
{blob}
(any
){idx}
(integer
){end_}
(integer?
)any
){dict}
, {key}
) 從 {dict}
中移除具有索引鍵 {key}
的項目,並傳回該項目。範例echo "removed " .. remove(dict, "one")
{dict}
中沒有 {key}
,這會發生錯誤。發生錯誤時傳回零。{dict}
(any
){key}
(string
)any
){from}
, {to}
) rename(){from}
的檔案重新命名為名稱為 {to}
。這也應該適用於跨檔案系統移動檔案。結果是一個數字,如果檔案重新命名成功,則為 0,如果重新命名失敗,則為非零值。注意:如果 {to}
存在,則會覆寫它而不發出警告。此函數在 sandbox 中不可用。{from}
(string
){to}
(string
)any
){count}
為零或負數時,結果為空。當 {expr}
為 List 或 Blob 時,結果是 {expr}
串連 {count}
次。範例let longlist = repeat(['a', 'b'], 3)
{expr}
(任意
){count}
(integer
)any
){filename}
) resolve() E655 在 MS-Windows 上,當 {filename}
是捷徑(.lnk 檔案)時,會以簡化形式傳回捷徑指向的路徑。在 Unix 上,重複解析 {filename}
的所有路徑元件中的符號連結,並傳回簡化的結果。為了處理連結迴圈,符號連結的解析會在 100 次迭代後停止。在其他系統上,傳回簡化的 {filename}
。簡化步驟與 simplify() 相同。resolve() 會保留指定目前目錄的前導路徑元件(如果結果仍然是相對路徑名稱),並且也會保留尾隨路徑分隔符號。{filename}
(string
)any
){object}
) reverse(){object}
中項目的順序。{object}
可以是 List、Blob 或 String。對於列表和 Blob,項目會就地反轉,並傳回 {object}
。對於字串,則會傳回新的字串。如果 {object}
不是列表、Blob 或字串,則傳回零。如果您希望列表或 Blob 保持不變,請先建立副本let revlist = reverse(copy(mylist))
{object}
(任意
)any
){expr}
) round(){expr}
四捨五入到最接近的整數值,並將其以 Float 的形式傳回。如果 {expr}
位於兩個整數值的中間,則使用較大的值(遠離零)。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo round(0.456)
echo round(4.5)
echo round(-4.5)
{expr}
(數字
)any
){channel}
, {event}
[, {args}
...]) rpcnotify(){event}
傳送到 {channel}
,並立即傳回。如果 {channel}
為 0,則會將事件廣播到所有通道。範例au VimLeave call rpcnotify(0, "leaving")
{channel}
(integer
){event}
(string
){args}
(any?
)any
){channel}
, {method}
[, {args}
...]) rpcrequest(){channel}
,以透過 RPC 叫用 {method}
,並封鎖直到收到回應為止。範例let result = rpcrequest(rpc_chan, "func", 1, 2, 3)
{channel}
(integer
){method}
(string
){args}
(any?
)any
){expr}
) rubyeval(){expr}
,並將其結果轉換為 Vim 資料結構。數字、浮點數和字串會按原樣傳回(但會複製字串)。陣列表示為 Vim List 類型。雜湊表示為 Vim Dictionary 類型。其他物件則表示為其 "Object#to_s" 方法產生的字串。{expr}
(任意
)any
){row}
, {col}
) screenattr(){row}
(integer
){col}
(整數
)any
){row}
, {col}
) screenchar(){row}
(integer
){col}
(整數
)any
){row}
, {col}
) screenchars(){row}
(integer
){col}
(整數
)any
)nnoremap <expr> GG ":echom " .. screencol() .. "\n"
nnoremap <silent> GG :echom screencol()<CR>
noremap GG <Cmd>echom screencol()<CR>
any
){winid}
, {lnum}
, {col}
) screenpos(){winid}
中,位於緩衝區的第 {lnum}
行和第 {col}
列的文字字元的螢幕位置。{col}
是一個以 1 為起始的位元組索引。此字典具有以下成員:row (螢幕列)、col (第一個螢幕欄)、endcol (最後一個螢幕欄) 以及 curscol (游標螢幕欄)。如果指定的位置不可見,則所有值均為零。「endcol」值與「col」不同,當字元佔用多個螢幕儲存格時。「例如,對於 Tab,「col」可以是 1,「endcol」可以是 8。「curscol」值是游標將放置的位置。對於 Tab,它將與「endcol」相同,而對於雙寬字元,它將與「col」相同。隱藏功能在此處會被忽略,欄號會視為 'conceallevel' 為零的情況。您可以將游標設定到正確的位置,並使用 screencol() 取得包含 隱藏 功能的值。如果位置在關閉的摺疊中,則會傳回第一個字元的螢幕位置,且不使用 {col}
。如果 {winid}
無效,則會傳回空的字典。{winid}
(integer
){lnum}
(整數
){col}
(整數
)any
)any
){row}
, {col}
) screenstring(){row}
(integer
){col}
(整數
)any
){pattern}
[, {flags}
[, {stopline}
[, {timeout}
[, {skip}
]]]]) search() 搜尋 regexp 樣式 {pattern}
。搜尋從游標位置開始 (您可以使用 cursor() 來設定它)。{flags}
是一個字串,其中可以包含以下字元旗標:'b' 向後搜尋,而非向前搜尋 'c' 接受游標位置的符合項目 'e' 移動到符合項目的結尾 'n' 不要移動游標 'p' 傳回符合的子樣式編號 (請參閱下方) 's' 將 ' 標記設定在游標先前的位置 'w' 繞回到檔案結尾 'W' 不要繞回到檔案結尾 'z' 從游標欄開始搜尋,而不是從零開始 如果未指定 'w' 或 'W',則會套用 'wrapscan' 選項。{stopline}
引數時,搜尋會在搜尋此行後停止。這適用於將搜尋限制在某個範圍的行。範例let match = search('(', 'b', line("w0"))
let end = search('END', '', line("w$"))
{stopline}
且不為零時,這也表示搜尋不會繞回到檔案結尾。零值等於未提供引數。{timeout}
引數時,搜尋會在經過超過這個毫秒數時停止。因此,當 {timeout}
為 500 時,搜尋會在半秒後停止。該值不得為負數。零值如同未提供引數。{skip}
運算式時則不考慮。{skip}
運算式,則會在游標位於符合項目開頭時進行評估。如果評估結果為非零值,則會跳過此符合項目。例如,這可用於跳過註解或字串中的符合項目。{skip}
可以是字串 (會評估為運算式)、函式參考或 lambda。當省略或空白時,會接受每個符合項目。當評估 {skip}
造成錯誤時,搜尋會中止並傳回 -1。search()-sub-matchlet n = 1
while n <= argc() " loop over all files in arglist
exe "argument " .. n
" start at the last char in the file and wrap for the
" first search to find match at start of file
normal G$
let flags = "w"
while search("foo", flags) > 0
s/foo/bar/g
let flags = "W"
endwhile
update " write the file if modified
let n = n + 1
endwhile
echo search('\<if\|\(else\)\|\(endif\)', 'ncpe')
{pattern}
(string
){flags}
(字串?
){stopline}
(integer?
){timeout}
(integer?
){skip}
(string|function?
)any
){options}
]) searchcount(){options}
,請參閱下文。recompute: 0
呼叫此函式。這有時會傳回錯誤的資訊,因為 n 和 N 的最大計數為 99。如果超過 99,結果必須是最大計數 + 1 (100)。如果您想要取得正確的資訊,請指定 recompute: 1
" result == maxcount + 1 (100) when many matches
let result = searchcount(#{recompute: 0})
" Below returns correct result (recompute defaults
" to 1)
let result = searchcount()
function! LastSearchCount() abort
let result = searchcount(#{recompute: 0})
if empty(result)
return ''
endif
if result.incomplete ==# 1 " timed out
return printf(' /%s [?/??]', @/)
elseif result.incomplete ==# 2 " max count exceeded
if result.total > result.maxcount &&
\ result.current > result.maxcount
return printf(' /%s [>%d/>%d]', @/,
\ result.current, result.total)
elseif result.total > result.maxcount
return printf(' /%s [%d/>%d]', @/,
\ result.current, result.total)
endif
endif
return printf(' /%s [%d/%d]', @/,
\ result.current, result.total)
endfunction
let &statusline ..= '%{LastSearchCount()}'
" Or if you want to show the count only when
" 'hlsearch' was on
" let &statusline ..=
" \ '%{v:hlsearch ? LastSearchCount() : ""}'
autocmd CursorMoved,CursorMovedI *
\ let s:searchcount_timer = timer_start(
\ 200, function('s:update_searchcount'))
function! s:update_searchcount(timer) abort
if a:timer ==# s:searchcount_timer
call searchcount(#{
\ recompute: 1, maxcount: 0, timeout: 100})
redrawstatus
endif
endfunction
" Count '\<foo\>' in this buffer
" (Note that it also updates search count)
let result = searchcount(#{pattern: '\<foo\>'})
" To restore old search count by old pattern,
" search again
call searchcount()
{options}
必須是 字典。它可以包含let @/ = pattern
maxcount + 1
(預設:0) pos 清單 重新計算結果時的 [lnum, col, off]
值。這會變更 "current" 結果值。請參閱 cursor()、getpos() (預設:游標的位置){options}
(table?
)any
){thisblock}
引數為非零值,則會忽略在游標位置之前結束的 {} 區塊中的符合項目。避免找到僅在另一個範圍內有效的變數宣告。if searchdecl('myvar') == 0
echo getline('.')
endif
{name}
(string
){global}
(boolean?
){thisblock}
(boolean?
)any
){start}
, {middle}
, {end}
[, {flags}
[, {skip}
[, {stopline}
[, {timeout}
]]]]) 搜尋巢狀開始-結束配對的符合項目。這可用於尋找符合 "if" 的 "endif",同時忽略其間的其他 if/endif 配對。搜尋從游標處開始。預設為向前搜尋,在 {flags}
中包含 'b' 可向後搜尋。如果找到符合項目,游標會放置在該項目處,並傳回行號。如果未找到符合項目,則會傳回 0 或 -1,且游標不會移動。不會顯示錯誤訊息。{start}
、{middle}
和 {end}
是樣式,請參閱 pattern。它們不得包含 \( \) 配對。允許使用 \%( \)。當 {middle}
不為空時,從任一方向搜尋時都會找到它,但僅當不在巢狀開始-結束配對中時。典型的用法是echo searchpair('\<if\>', '\<else\>', '\<endif\>')
{middle}
保留為空白,即可跳過 "else"。{flags}
'b'、'c'、'n'、's'、'w' 和 'W' 的用法與 search() 相同。此外:'r' 重複搜尋直到找不到更多匹配項;會找到最外層的配對。隱含 'W' 旗標。'm' 返回匹配次數,而非匹配所在的行號;當使用 'r' 時,會 > 1。 注意:使用 'W' 旗標幾乎總是個好主意,以避免環繞到檔案末尾。{start}
、{middle}
或 {end}
的匹配項時,會評估 {skip}
表達式,游標會定位在匹配項的開始處。如果此匹配項要被跳過,則應返回非零值。例如,因為它在註解或字串內。當 {skip}
被省略或為空時,每個匹配項都會被接受。當評估 {skip}
導致錯誤時,搜尋會中止並返回 -1。{skip}
可以是字串、lambda、funcref 或 partial。任何其他類型的資料都會導致函數失敗。{start}
、{middle}
或 {end}
匹配項是第一個找到的匹配項。範例:if 1
if 2
endif 2
endif 1
{end}
超過一個字元時,在模式結尾放置 "\zs" 可能會很有用,這樣當游標在與結尾的匹配項內時,會找到匹配的開頭。echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W',
\ 'getline(".") =~ "^\\s*\""')
echo searchpair('{', '', '}', 'bW')
echo searchpair('{', '', '}', 'bW',
\ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
{start}
(string
){middle}
(string
){end_}
(string
){flags}
(字串?
){skip}
(string|function?
){stopline}
(integer?
){timeout}
(integer?
)整數
){start}
, {middle}
, {end}
[, {flags}
[, {skip}
[, {stopline}
[, {timeout}
]]]]) 與 searchpair() 相同,但會返回一個 List,其中包含匹配項的行和欄位置。 List 的第一個元素是行號,第二個元素是匹配項的欄位置的位元組索引。如果找不到匹配項,則返回 [0, 0]。let [lnum,col] = searchpairpos('{', '', '}', 'n')
{start}
(string
){middle}
(string
){end_}
(string
){flags}
(字串?
){skip}
(string|function?
){stopline}
(integer?
){timeout}
(integer?
)[integer, integer]
){pattern}
[, {flags}
[, {stopline}
[, {timeout}
[, {skip}
]]]]) 與 search() 相同,但會返回一個 List,其中包含匹配項的行和欄位置。 List 的第一個元素是行號,第二個元素是匹配項的欄位置的位元組索引。如果找不到匹配項,則返回 [0, 0]。範例:let [lnum, col] = searchpos('mypattern', 'n')
let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np')
{pattern}
(string
){flags}
(字串?
){stopline}
(integer?
){timeout}
(integer?
){skip}
(string|function?
)any
)echo serverlist()
any
){address}
]) serverstart(){address}
開啟一個 socket 或具名管道,並監聽 RPC 訊息。用戶端可以將 API 命令傳送到返回的位址來控制 Nvim。{address}
引數不同,請參閱下文)。{address}
具有冒號 (":"),則它是 TCP/IPv4/IPv6 位址,其中最後一個 ":" 分隔主機和連接埠(空或零會指定隨機連接埠)。{address}
是具名管道的路徑(Windows 除外)。{address}
沒有斜線 ("/"),則會將其視為此格式中產生路徑的 "name" 部分:stdpath("run").."/{name}.{pid}.{counter}"
{address}
,則名稱為 "nvim"。echo serverstart()
=> /tmp/nvim.bram/oknANW/nvim.15430.5
ls ${XDG_RUNTIME_DIR:-${TMPDIR}nvim.${USER}}/*/nvim.*.0
if has('win32')
echo serverstart('\\.\pipe\nvim-pipe-1234')
else
echo serverstart('nvim.sock')
endif
echo serverstart('::1:12345')
{address}
(string?
)any
){address}
) serverstop(){address}
的管道或 socket。如果 {address}
有效,則返回 TRUE,否則返回 FALSE。如果 v:servername 已停止,則會將其設定為 serverlist() 中下一個可用的位址。{address}
(string
)any
){buf}
, {lnum}
, {text}
) setbufline(){buf}
中的行 {lnum}
設定為 {text}
。這與指定緩衝區的 setline() 類似。{text}
可以是設定一行的字串,也可以是設定多行的字串 List。如果 List 延伸到最後一行以下,則會新增這些行。如果 List 為空,則不會變更任何內容,並返回零。{buf}
的使用,請參見上方的 bufname()。{lnum}
的用法與 setline() 相同。使用 "$" 來引用緩衝區 {buf}
中的最後一行。當 {lnum}
剛好在最後一行下方時,{text}
會新增到最後一行下方。成功時返回 0,失敗時返回 1。{buf}
不是有效的緩衝區,或 {lnum}
無效,則會顯示錯誤訊息。{buf}
(整數|字串
){lnum}
(整數
){text}
(字串|字串[]
)any
){buf}
, {varname}
, {val}
) setbufvar(){buf}
中的選項或本機變數 {varname}
設定為 {val}
。這也適用於全域或本機視窗選項,但不適用於全域或本機視窗變數。對於本機視窗選項,全域值不會變更。關於 {buf}
的使用,請參閱上文的 bufname()。{varname}
引數是一個字串。請注意,必須使用沒有 "b:" 的變數名稱。範例:call setbufvar(1, "&mod", 1)
call setbufvar("todo", "myvar", "foobar")
{buf}
(整數|字串
){varname}
(string
){val}
(any
)any
){list}
) setcellwidths()call setcellwidths([
\ [0x111, 0x111, 1],
\ [0x2194, 0x2199, 2],
\ ])
{list}
引數是一個 List 的 List,每個 List 包含三個數字:[{low}
, {high}
, {width}
]。E1109 E1110 {low}
和 {high}
可以相同,在這種情況下,這會參照一個字元。否則,它是從 {low}
到 {high}
(包括)的字元範圍。E1111 E1114 僅可使用值為 0x80 或更高的字元。{list}
。call setcellwidths([])
{list}
引數。{list}
(any[]
)any
)call setcharpos('.', [0, 8, 4, 0])
call setpos('.', [0, 8, 4, 0])
{expr}
(string
){list}
(整數[]
)any
)let prevsearch = getcharsearch()
" Perform a command which clobbers user's search
call setcharsearch(prevsearch)
{dict}
(string
)any
){str}
[, {pos}
]) setcmdline(){str}
,並將游標位置設定為 {pos}
。如果省略 {pos}
,則游標會定位在文字之後。成功時返回 0,未編輯命令列時返回 1。{str}
(string
){pos}
(integer?
)any
){pos}
) setcmdpos(){pos}
。第一個位置為 1。使用 getcmdpos() 取得目前位置。僅在編輯命令列時有效,因此您必須使用 c_CTRL-\_e、c_CTRL-R_= 或 c_CTRL-R_CTRL-R 並搭配 '='。對於 c_CTRL-\_e 和 c_CTRL-R_CTRL-R 並搭配 '=',位置會在命令列設定為表達式後設定。對於 c_CTRL-R_=,位置會在評估表達式之後,但在插入結果文字之前設定。當數字太大時,游標會放在該行的末尾。小於 1 的數字會產生未定義的結果。成功時返回 0,未編輯命令列時返回 1。{pos}
(integer
)any
){lnum}
, {col}
[, {off}
]) setcursorcharpos(){list}
) 與 cursor() 相同,但使用指定的欄位號碼作為字元索引,而不是行中的位元組索引。call setcursorcharpos(4, 3)
call cursor(4, 3)
{list}
(整數[]
)any
){name}
(string
){val}
(string
)any
){fname}
, {mode}
) setfperm() chmod 將 {fname}
的檔案權限設定為 {mode}
。{mode}
必須是包含 9 個字元的字串。其格式為 "rwxrwxrwx",其中每組 "rwx" 旗標依序代表檔案擁有者、檔案所屬群組以及其他使用者的權限。'-' 字元表示關閉權限,任何其他字元表示開啟權限。不支援多位元組字元。{fname}
(字串
){mode}
(string
)any
){lnum}
, {text}
) setline(){lnum}
行設定為 {text}
。若要插入行,請使用 append()。若要在另一個緩衝區中設定行,請使用 setbufline()。{lnum}
的使用方式與 getline() 相同。當 {lnum}
剛好在最後一行下方時,{text}
將會新增至最後一行下方。{text}
可以是任何類型或任何類型的列表,每個項目都會轉換為字串。當 {text}
是空列表時,不會進行任何變更,並返回 FALSE。{lnum}
無效),則會返回 TRUE。call setline(5, strftime("%c"))
for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']]
call setline(n, l)
endfor
{lnum}
(整數
){text}
(any
)any
){nr}
, {list}
[, {action}
[, {what}
]]) setloclist(){nr}
的位置列表。{nr}
可以是視窗編號或 視窗 ID。當 {nr}
為零時,會使用目前視窗。{action}
,請參閱 setqflist-action。{nr}
(integer
){list}
(any
){action}
(string?
){what}
(table?
)any
){list}
[, {win}
]) setmatches(){win}
,則使用具有此編號或視窗 ID 的視窗,而不是目前視窗。{list}
(any
){win}
(integer?
)any
){list}
必須是包含四個或五個數字的 列表:[bufnum, lnum, col, off] [bufnum, lnum, col, off, curswant]<Tab>
內的或最後一個字元後面的位置。{expr}
無效,則會顯示錯誤訊息。{expr}
(string
){list}
(整數[]
)any
){what}
字典引數,則僅會設定 {what}
中列出的項目。會忽略第一個 {list}
引數。如需 {what}
中支援的項目,請參閱下方。 setqflist-what{what}
不存在時,會使用 {list}
中的項目。每個項目都必須是字典。會忽略 {list}
中的非字典項目。每個字典項目可以包含下列項目{list}
,則會清除快速修正列表。請注意,此列表與 getqflist() 返回的列表並不完全相同。{list}
中的項目。這也可用於清除列表。call setqflist([], 'r')
{action}
不存在或設定為 ' ',則會建立新的列表。新的快速修正列表會新增至堆疊中目前快速修正列表之後,並釋放所有後續列表。若要將新的快速修正列表新增至堆疊的結尾,請將 {what}
中的 "nr" 設定為 "$"。{what}
中指定下列項目: context 快速修正列表環境。請參閱 快速修正環境 efm 從 "lines" 剖析文字時要使用的 errorformat。如果此項目不存在,則會使用 'errorformat' 選項值。請參閱 快速修正剖析 id 快速修正列表識別碼 快速修正 ID idx "id" 或 "nr" 所指定之快速修正列表中目前項目的索引。如果設定為 '$',則會將列表中最後一個項目設定為目前項目。請參閱 快速修正索引 items 快速修正項目列表。與 {list}
引數相同。 lines 使用 'errorformat' 來剖析行列表,並將產生的項目新增至快速修正列表 {nr}
或 {id}
。僅支援 列表 值。請參閱 快速修正剖析 nr 快速修正堆疊中的列表編號;零表示目前的快速修正列表,而 "$" 表示最後一個快速修正列表。 quickfixtextfunc 取得要在快速修正視窗中顯示之文字的函數。該值可以是函數名稱或函數參照或 Lambda。如需如何撰寫函數和範例的說明,請參閱 快速修正視窗函數。 title 快速修正列表標題文字。請參閱 快速修正標題。 會忽略 {what}
中不支援的索引鍵。如果 "nr" 項目不存在,則會修改目前的快速修正列表。在建立新的快速修正列表時,可以將 "nr" 設定為大於快速修正堆疊大小的值。在修改快速修正列表時,若要保證修改的是正確的列表,應使用 "id" 而不是 "nr" 來指定列表。call setqflist([], 'r', {'title': 'My search'})
call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]})
:cc 1
的命令跳到第一個位置。{list}
(vim.quickfix.entry[]
){action}
(string?
){what}
(vim.fn.setqflist.what?
)any
){regname}
, {value}
[, {options}
]) setreg(){regname}
設定為 {value}
。如果 {regname}
為 "" 或 "@",則會使用未命名的暫存器 '"'。{regname}
引數是字串。{value}
可以是 getreg() 或 getreginfo() 返回的任何值,包括 List 或 Dict。如果 {options}
包含 "a" 或 {regname}
為大寫字母,則該值會被附加。{options}
也可以包含暫存器類型規範:"c" 或 "v" 字元模式、"l" 或 "V" 行模式、"b" 或 "<CTRL-V>" 區塊模式。如果數字緊隨 "b" 或 "<CTRL-V>" 之後,則會將此數字用作選取的寬度 - 如果未指定,則區塊的寬度會設定為最長行中的字元數(將 <Tab>
計為 1 個字元)。如果 {options}
包含 "u" 或 '"',則未命名的暫存器會設定為指向暫存器 {regname}
。{options}
不包含任何暫存器設定,則預設為使用字元模式,除非字串 {value}
以 <NL>
結尾,或是列表 {value}
使用行模式。永遠不會自動選擇區塊模式。成功則返回零,失敗則返回非零值。call setreg(v:register, @*)
call setreg('*', @%, 'ac')
call setreg('a', "1\n2\n3", 'b5')
call setreg('"', { 'points_to': 'a'})
let var_a = getreginfo()
call setreg('a', var_a)
let var_a = getreg('a', 1, 1)
let var_amode = getregtype('a')
" ....
call setreg('a', var_a, var_amode)
call setreg('a', '', 'al')
Parameters: ~
• {regname} (`string`)
• {value} (`any`)
• {options} (`string?`)
Return: ~
(`any`)
settabvar({tabnr}
, {varname}
, {val}
) settabvar(){tabnr}
中將索引標籤本地變數 {varname}
設定為 {val}
。t:var {varname}
引數是一個字串。請注意,必須使用沒有 "t:" 的變數名稱。索引標籤的編號從 1 開始。此函式在 沙箱 中不可用。{tabnr}
(integer
){varname}
(string
){val}
(any
)any
){tabnr}
, {winnr}
, {varname}
, {val}
) settabwinvar(){winnr}
中的選項或本地變數 {varname}
設定為 {val}
。索引標籤的編號從 1 開始。對於目前的索引標籤頁面,請使用 setwinvar()。{winnr}
可以是視窗編號或 視窗 ID。當 {winnr}
為零時,會使用目前的視窗。這也適用於全域或本機緩衝區選項,但不適用於全域或本機緩衝區變數。對於本機緩衝區選項,全域值不會變更。請注意,必須使用沒有 "w:" 的變數名稱。範例call settabwinvar(1, 1, "&list", 0)
call settabwinvar(3, 2, "myvar", "foobar")
{tabnr}
(integer
){winnr}
(integer
){varname}
(string
){val}
(any
)any
){dict}
中支援的項目列表,請參閱 gettagstack()。"curidx" 在變更標籤堆疊之前生效。E962{action}
引數{action}
不存在或設定為 'r',則會替換標籤堆疊。{action}
設定為 'a',則 {dict}
中的新項目會被推送(新增)到標籤堆疊。{action}
設定為 't',則會移除標籤堆疊中目前項目或 {dict}
中的 "curidx" 的所有項目,然後將新項目推送到堆疊。call settagstack(3, {'items' : []})
let stack = gettagstack(1003)
" do something else
call settagstack(1003, stack)
unlet stack
{nr}
(integer
){dict}
(any
){action}
(string?
)any
){nr}
, {varname}
, {val}
) setwinvar() call setwinvar(1, "&list", 0)
call setwinvar(2, "myvar", "foobar")
Parameters: ~
• {nr} (`integer`)
• {varname} (`string`)
• {val} (`any`)
Return: ~
(`any`)
sha256({string}
) sha256(){string}
的 SHA256 檢查總和。{string}
(string
)any
){string}
括在雙引號中,並將 {string}
內的所有雙引號加倍。否則會將 {string}
括在單引號中,並將所有 "'" 取代為 "'\''"。exe '!dir ' .. shellescape(expand('<cfile>'), 1)
call system("chmod +w -- " .. shellescape(expand("%")))
{string}
(string
){special}
(boolean?
)any
){col}
]) shiftwidth()if exists('*shiftwidth')
func s:sw()
return shiftwidth()
endfunc
else
func s:sw()
return &sw
endfunc
endif
{col}
(integer?
)整數
){name}
[, {dict}
]) sign_define(){list}
) 定義一個名為 {name}
的新標記或修改現有標記的屬性。這類似於 :sign-define 命令。{name}
前面加上唯一的文字,以避免名稱衝突。沒有像放置標記一樣的 {group}
。{name}
可以是字串或數字。選用的 {dict}
引數會指定標記屬性。支援以下值:icon:標記的點陣圖檔案的完整路徑。linehl:用於標記放置的整行的反白顯示群組。priority:標記的預設優先順序值。numhl:用於放置標記的行號的反白顯示群組。text:當沒有圖示或未使用 GUI 時顯示的文字。texthl:用於文字項目的反白顯示群組。culhl:當游標與標記位於同一行且啟用 'cursorline' 時,用於文字項目的反白顯示群組。{name}
的標記已存在,則會更新標記的屬性。{list}
來定義標記列表。每個列表項目都是一個字典,其中包含上述 {dict}
中的項目和標記名稱的 "name" 項目。{list}
時,會針對每個已定義的標記傳回一個值列表。call sign_define("mySign", {
\ "text" : "=>",
\ "texthl" : "Error",
\ "linehl" : "Search"})
call sign_define([
\ {'name' : 'sign1',
\ 'text' : '=>'},
\ {'name' : 'sign2',
\ 'text' : '!!'}
\ ])
{list}
(vim.fn.sign_define.dict[]
)(0|-1)[]
){name}
,則會傳回所有已定義標記的列表。否則,會傳回指定標記的屬性。{name}
,則傳回空的列表。" Get a list of all the defined signs
echo sign_getdefined()
" Get the attribute of the sign named mySign
echo sign_getdefined("mySign")
{name}
(string?
)vim.fn.sign_getdefined.ret.item[]
){buf}
,則僅傳回放置在該緩衝區中的標記列表。如需 {buf}
的用法,請參閱 bufname()。選用的 {dict}
可以包含以下項目:group:僅選取此群組中的標記。id:選取具有此識別碼的標記。lnum:選取放置在此行的標記。如需 {lnum}
的用法,請參閱 line()。如果 {group}
為 "*",則會傳回所有群組(包括全域群組)中的標記。如果未提供 {group}
或為空字串,則僅會傳回全域群組中的標記。如果未提供引數,則會傳回放置在所有緩衝區中的全域群組中的標記。請參閱 sign-group。{bufnr}
中的標記列表。每個列表項目都是一個字典,其中包含下面列出的項目" Get a List of signs placed in eval.c in the
" global group
echo sign_getplaced("eval.c")
" Get a List of signs in group 'g1' placed in eval.c
echo sign_getplaced("eval.c", {'group' : 'g1'})
" Get a List of signs placed at line 10 in eval.c
echo sign_getplaced("eval.c", {'lnum' : 10})
" Get sign with identifier 10 placed in a.py
echo sign_getplaced("a.py", {'id' : 10})
" Get sign with id 20 in group 'g1' placed in a.py
echo sign_getplaced("a.py", {'group' : 'g1',
\ 'id' : 20})
" Get a List of all the placed signs
echo sign_getplaced()
{buf}
(integer|string?
){dict}
(vim.fn.sign_getplaced.dict?
)vim.fn.sign_getplaced.ret.item[]
){id}
, {group}
, {buf}
) sign_jump(){buf}
或跳至包含 {buf}
的視窗,並將游標定位在群組 {group}
中標記 {id}
的位置。這類似於 :sign-jump 指令。" Jump to sign 10 in the current buffer
call sign_jump(10, '', '')
{id}
(integer
){group}
(string
){buf}
(整數|字串
)整數
){id}
, {group}
, {name}
, {buf}
[, {dict}
]) sign_place(){buf}
的 {lnum}
行處放置定義為 {name}
的標記,並將 {id}
和 {group}
指派給標記。這類似於 :sign-place 指令。{id}
為零,則會配置一個新的識別碼。否則,將使用指定的數字。{group}
是標記群組名稱。要使用全域標記群組,請使用空字串。{group}
作為 {id}
的命名空間,因此兩個群組可以使用相同的 ID。有關更多資訊,請參閱 sign-identifier 和 sign-group。{dict}
參數支援以下條目:lnum 檔案或緩衝區 {buf}
中要放置標記的行號。有關可接受的值,請參閱 line()。priority 標記的優先順序。有關更多資訊,請參閱 sign-priority。{dict}
,則會修改群組 {group}
中已放置的標記 {id}
以使用已定義的標記 {name}
。" Place a sign named sign1 with id 5 at line 20 in
" buffer json.c
call sign_place(5, '', 'sign1', 'json.c',
\ {'lnum' : 20})
" Updates sign 5 in buffer json.c to use sign2
call sign_place(5, '', 'sign2', 'json.c')
" Place a sign named sign3 at line 30 in
" buffer json.c with a new identifier
let id = sign_place(0, '', 'sign3', 'json.c',
\ {'lnum' : 30})
" Place a sign named sign4 with id 10 in group 'g3'
" at line 40 in buffer json.c with priority 90
call sign_place(10, 'g3', 'sign4', 'json.c',
\ {'lnum' : 40, 'priority' : 90})
{id}
(integer
){group}
(string
){name}
(string
){buf}
(整數|字串
){dict}
(vim.fn.sign_place.dict?
)整數
){list}
) sign_placelist(){list}
參數指定要放置的標記列表。每個列表項目都是一個字典,包含以下標記屬性:buffer 緩衝區名稱或數字。有關可接受的值,請參閱 bufname()。group 標記群組。{group}
作為 {id}
的命名空間,因此兩個群組可以使用相同的 ID。如果未指定或設定為空字串,則使用全域群組。有關更多資訊,請參閱 sign-group。id 標記識別碼。如果未指定或為零,則會配置一個新的唯一識別碼。否則,將使用指定的數字。有關更多資訊,請參閱 sign-identifier。lnum 緩衝區中要放置標記的行號。有關可接受的值,請參閱 line()。name 要放置的標記名稱。有關更多資訊,請參閱 sign_define()。priority 標記的優先順序。當一行上放置多個標記時,將使用優先順序最高的標記。如果未指定,則使用預設值 10,除非標記定義另有規定。有關更多資訊,請參閱 sign-priority。{id}
指的是現有的標記,則會修改現有的標記以使用指定的 {name}
和/或 {priority}
。" Place sign s1 with id 5 at line 20 and id 10 at line
" 30 in buffer a.c
let [n1, n2] = sign_placelist([
\ {'id' : 5,
\ 'name' : 's1',
\ 'buffer' : 'a.c',
\ 'lnum' : 20},
\ {'id' : 10,
\ 'name' : 's1',
\ 'buffer' : 'a.c',
\ 'lnum' : 30}
\ ])
" Place sign s1 in buffer a.c at line 40 and 50
" with auto-generated identifiers
let [n1, n2] = sign_placelist([
\ {'name' : 's1',
\ 'buffer' : 'a.c',
\ 'lnum' : 40},
\ {'name' : 's1',
\ 'buffer' : 'a.c',
\ 'lnum' : 50}
\ ])
{list}
(vim.fn.sign_placelist.list.item[]
)integer[]
){name}
]) sign_undefine(){list}
) 刪除先前定義的標記 {name}
。這類似於 :sign-undefine 指令。如果未提供 {name}
,則會刪除所有已定義的標記。{list}
來取消定義標記的列表。每個列表項目都是一個標記的名稱。{list}
呼叫,會返回一個值列表,每個值對應一個未定義的標記。" Delete a sign named mySign
call sign_undefine("mySign")
" Delete signs 'sign1' and 'sign2'
call sign_undefine(["sign1", "sign2"])
" Delete all the signs
call sign_undefine()
{list}
(string[]?
)integer[]
){group}
是標記群組名稱。要使用全域標記群組,請使用空字串。如果將 {group}
設定為 "*",則會使用包括全域群組在內的所有群組。{group}
中的標記會根據 {dict}
中的條目選擇。支援 {dict}
中的以下可選條目:buffer 緩衝區名稱或數字。請參閱 bufname()。id 標記識別碼。如果未提供 {dict}
,則會移除 {group}
中的所有標記。 " Remove sign 10 from buffer a.vim
call sign_unplace('', {'buffer' : "a.vim", 'id' : 10})
" Remove sign 20 in group 'g1' from buffer 3
call sign_unplace('g1', {'buffer' : 3, 'id' : 20})
" Remove all the signs in group 'g2' from buffer 10
call sign_unplace('g2', {'buffer' : 10})
" Remove sign 30 in group 'g3' from all the buffers
call sign_unplace('g3', {'id' : 30})
" Remove all the signs placed in buffer 5
call sign_unplace('*', {'buffer' : 5})
" Remove the signs in group 'g4' from all the buffers
call sign_unplace('g4')
" Remove sign 40 from all the buffers
call sign_unplace('*', {'id' : 40})
" Remove all the placed signs from all the buffers
call sign_unplace('*')
Parameters: ~
• {group} (`string`)
• {dict} (`vim.fn.sign_unplace.dict?`)
Return: ~
(`0|-1`)
sign_unplacelist({list}
) sign_unplacelist(){list}
參數指定要移除的標記列表。每個列表項目都是一個字典,包含以下標記屬性:buffer 緩衝區名稱或數字。有關可接受的值,請參閱 bufname()。如果未指定,則會從所有緩衝區中移除指定的標記。group 標記群組名稱。如果未指定或設定為空字串,則使用全域標記群組。如果設定為 "*",則會使用包括全域群組在內的所有群組。id 標記識別碼。如果未指定,則會移除指定群組中的所有標記。" Remove sign with id 10 from buffer a.vim and sign
" with id 20 from buffer b.vim
call sign_unplacelist([
\ {'id' : 10, 'buffer' : "a.vim"},
\ {'id' : 20, 'buffer' : 'b.vim'},
\ ])
{list}
(vim.fn.sign_unplacelist.list.item
)(0|-1)[]
){filename}
) simplify(){filename}
中的第一個路徑元件指定目前目錄,這也將適用於結果。也不會移除尾部的路徑分隔符。在 Unix 上,"//path" 不會變更,但 "///path" 會簡化為 "/path"(這遵循 Posix 標準)。範例simplify("./dir/.././/file/") == "./file/"
{filename}
(string
)any
){expr}
) sin(){expr}
的正弦值,作為 Float。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則返回 0.0。範例echo sin(100)
echo sin(-4.01)
{expr}
(數字
)any
){expr}
) sinh(){expr}
的雙曲正弦值,範圍為 [-inf, inf]。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則返回 0.0。範例echo sinh(0.5)
echo sinh(-0.9)
{expr}
(數字
)any
){expr}
, {start}
[, {end}
]) slice(){end}
時,切片會持續到最後一個項目。當 {end}
為 -1 時,會省略最後一個項目。如果 {start}
或 {end}
無效,則返回空值。{expr}
(任意
){start}
(integer
){end_}
(integer?
)any
){mode}
, {address}
[, {opts}
]) sockconnect(){mode}
是 "pipe",則 {address}
應該是本機網域套接字(在 Unix 上)或具名管道(在 Windows 上)的路徑。如果 {mode}
是 "tcp",則 {address}
應該採用 "host:port" 的形式,其中 host 應該是 IP 位址或主機名稱,而 port 是連接埠號碼。{opts}
是一個可選的字典,包含以下鍵:on_data:當從套接字讀取資料時呼叫的回呼函數。data_buffered:以 channel-buffered 模式讀取套接字資料。rpc:如果設定,將使用 msgpack-rpc 通過套接字通訊。返回{mode}
(string
){address}
(string
){opts}
(table?
)any
)let sortedlist = sort(copy(mylist))
{how}
且其為 'i' 時,會忽略大小寫。為了向後相容,可以使用值 1 來忽略大小寫。零表示不忽略大小寫。{how}
且其為 'l' 時,會使用目前的排序區域設定進行排序。實作細節:使用 strcoll()
來比較字串。請參閱 :language 來檢查或設定排序區域設定。v:collate 也可用於檢查目前的區域設定。使用區域設定排序通常會忽略大小寫。範例" ö is sorted similarly to o with English locale.
language collate en_US.UTF8
echo sort(['n', 'o', 'O', 'ö', 'p', 'z'], 'l')
" ö is sorted after z with Swedish locale.
language collate sv_SE.UTF8
echo sort(['n', 'o', 'O', 'ö', 'p', 'z'], 'l')
{how}
且其為 'n' 時,所有項目都將以數值方式排序(實作細節:這會使用 strtod()
函式來剖析數字,字串、列表、字典和函式參考將被視為 0)。{how}
且其為 'N' 時,所有項目都將以數值方式排序。這類似於 'n',但包含數字的字串將用作它們所代表的數字。{how}
且其為 'f' 時,所有項目都將以數值方式排序。所有值都必須是數字或浮點數。{how}
是 函式參考 或函式名稱時,會呼叫此函式來比較項目。該函式會以兩個項目作為引數來呼叫,如果它們相等則必須傳回零,如果第一個項目排序在第二個項目之後則傳回 1 或更大的值,如果第一個項目排序在第二個項目之前則傳回 -1 或更小的值。{dict}
用於具有 "dict" 屬性的函式。它將用於設定局部變數 "self"。 字典函式func MyCompare(i1, i2)
return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
endfunc
eval mylist->sort("MyCompare")
func MyCompare(i1, i2)
return a:i1 - a:i2
endfunc
eval mylist->sort({i1, i2 -> i1 - i2})
{list}
(any
){how}
(string|function?
){dict}
(any?
)any
){word}
) soundfold(){word}
的聲音摺疊等效形式。針對目前視窗使用 'spelllang' 中第一個支援聲音摺疊的語言。'spell' 必須設定。當無法進行聲音摺疊時,{word}
會以未修改的形式傳回。這可用於提出拼字建議。請注意,此方法可能相當慢。{word}
(string
)any
){sentence}
]) spellbadword(){sentence}
中第一個拼寫錯誤的單字。如果沒有拼字錯誤,則結果為空字串。echo spellbadword("the quik brown fox")
{sentence}
(string?
)any
){word}
[, {max}
[, {capital}
]]) spellsuggest(){word}
的拼字建議。當給定 {max}
時,最多會傳回此數量的建議。否則最多會傳回 25 個建議。{capital}
引數且其為非零值時,只會提供以大寫字母開頭的建議。在使用 'spellcapcheck' 進行比對後使用此引數。{word}
可以是拼寫錯誤的單字,後接其他文字。這允許連接兩個被拆開的單字。建議也包含後續的文字,因此您可以取代一行。{word}
也可能是一個正確的單字。然後會傳回類似的單字。{word}
本身不包含在建議中,儘管它可能會以大寫形式出現。{word}
(string
){max}
(integer?
){capital}
(boolean?
)any
){string}
[, {pattern}
[, {keepempty}
]]) split(){string}
建立一個 列表。當 {pattern}
省略或為空時,每個以空白分隔的字元序列都會變成一個項目。否則,會在 {pattern}
比對的位置分割字串,並移除比對的字元。'ignorecase' 在這裡不會使用,請加入 \c 以忽略大小寫。/\c 除非給定 {keepempty}
引數且其為非零值,否則會省略第一個或最後一個空的項目。當 {pattern}
比對至少一個字元或當 {keepempty}
為非零值時,會保留其他空的項目。範例let words = split(getline('.'), '\W\+')
for c in split(mystring, '\zs') | endfor
echo split('abc:def:ghi', ':\zs')
['abc:', 'def:', 'ghi']
let items = split(line, ':', 1)
{string}
(string
){pattern}
(string?
){keepempty}
(boolean?
)any
){expr}
) sqrt(){expr}
的非負平方根,類型為 浮點數。{expr}
的評估結果必須是 浮點數 或 數字。當 {expr}
為負數時,結果為 NaN(非數字)。如果 {expr}
不是 浮點數 或 數字,則傳回 0.0。範例echo sqrt(100)
echo sqrt(-4.01)
{expr}
(數字
)any
){expr}
]) srand(){expr}
,則種子值會透過讀取 /dev/urandom(如果可能),或使用 time(NULL)(又稱為紀元時間)來初始化;這只有秒級的精確度。{expr}
,則它必須是數字。它會用來初始化種子值。這適用於測試或當需要可預測的序列時。let seed = srand()
let seed = srand(userinput)
echo rand(seed)
{expr}
(number?
)any
){what}
]) state()state()
檢查工作是否可以立即執行,如果可以,則將其從佇列中移除並執行。如果佇列現在為空,則移除自動指令。另請參閱 mode()。{what}
時,只會新增此字串中的字元。例如,這會檢查畫面是否已捲動if state('s') == ''
" screen has not scrolled
{what}
(string?
)any
){opts}
) stdioopen(){opts}
是一個字典,具有以下索引鍵:on_stdin:在寫入 stdin 時呼叫的回呼。on_print:在 Nvim 需要列印訊息時呼叫的回呼,其中訊息(其類型為字串)作為唯一引數。stdin_buffered:在 channel-buffered 模式中讀取 stdin。rpc:如果設定,則會使用 msgpack-rpc 透過 stdio 進行通訊 傳回{opts}
(table
)any
){what}
類型 描述echo stdpath("config")
{what}
('cache'|'config'|'config_dirs'|'data'|'data_dirs'|'log'|'run'|'state'
)字串|字串[]
){string}
[, {quoted}
]) str2float(){string}
轉換為浮點數。這與在表達式中使用浮點數的效果大致相同,請參閱 floating-point-format。但它更寬容一些。例如,「1e40」是被接受的,但在表達式中您需要寫成「1.0e40」。十六進制形式「0x123」也被接受,但其他形式(如二進制或八進制)則不接受。當 {quoted}
存在且非零時,點號前的嵌入單引號會被忽略,因此「1'000.0」表示一千。數字後的文字會被靜默忽略。小數點始終是「.」,無論 locale 設定為何。逗號會結束數字:「12,345.67」會被轉換為 12.0。您可以使用 substitute() 來移除千位分隔符號。let f = str2float(substitute(text, ',', '', 'g'))
{string}
(string
){quoted}
(boolean?
)any
){string}
[, {utf8}
]) str2list(){string}
中每個字元的數值。範例:echo str2list(" ") " returns [32]
echo str2list("ABC") " returns [65, 66, 67]
{utf8}
選項沒有作用,存在僅是為了向後相容。使用 UTF-8 時,組合字元會被正確處理。 echo str2list("á") " returns [97, 769]
Parameters: ~
• {string} (`string`)
• {utf8} (`boolean?`)
Return: ~
(`any`)
str2nr({string}
[, {base}
]) str2nr(){string}
轉換為數字。{base}
是轉換的基數,它可以是 2、8、10 或 16。當 {quoted}
存在且非零時,嵌入的單引號會被忽略,因此「1'000'000」表示一百萬。{base}
被省略時,使用基數 10。這也表示開頭的零不會像預設的字串轉數字轉換那樣,導致使用八進制轉換。範例:let nr = str2nr('0123')
{base}
為 16 時,開頭的「0x」或「0X」會被忽略。使用不同的基數,結果將為零。同樣地,當 {base}
為 8 時,開頭的「0」、「0o」或「0O」會被忽略;當 {base}
為 2 時,開頭的「0b」或「0B」會被忽略。數字後的文字會被靜默忽略。{string}
為空或發生錯誤,則返回 0。{string}
(string
){base}
(integer?
)any
){string}
) strcharlen(){string}
中的字元數。組合字元會被忽略。strchars() 可以計算字元數,但會將組合字元分開計算。{string}
為空或發生錯誤,則返回 0。{string}
(string
)any
){src}
, {start}
[, {len}
[, {skipcc}
]]) strcharpart(){skipcc}
被省略或為零時,組合字元會被分開計算。當 {skipcc}
設定為 1 時,組合字元會被視為前一個基本字元的一部分,類似於 slice()。當使用字元索引指向不存在的字元時,該字元會被省略,並被計為一個字元。例如:echo strcharpart('abc', -1, 2)
{src}
(string
){start}
(integer
){len}
(integer?
){skipcc}
(boolean?
)any
){string}
[, {skipcc}
]) strchars(){string}
中的字元數。當 {skipcc}
被省略或為零時,組合字元會被分開計算。當 {skipcc}
設定為 1 時,組合字元會被忽略。strcharlen() 始終會執行此操作。{skipcc}
僅在 7.4.755 之後可用。為了向後相容,您可以定義一個包裝函式:if has("patch-7.4.755")
function s:strchars(str, skipcc)
return strchars(a:str, a:skipcc)
endfunction
else
function s:strchars(str, skipcc)
if a:skipcc
return strlen(substitute(a:str, ".", "x", "g"))
else
return strchars(a:str)
endif
endfunction
endif
{string}
(string
){skipcc}
(boolean?
)整數
){string}
[, {col}
]) strdisplaywidth(){string}
從 {col}
開始時(第一欄為零)在螢幕上佔用的顯示單元格數。當 {col}
被省略時,使用零。否則,它是要開始的螢幕欄位。這對於 Tab 字元很重要。會使用目前視窗的選項設定。這對於任何顯示不同的內容都很重要,例如 'tabstop' 和 'display'。當 {string}
包含具有東亞寬度類別模糊的字元時,此函式的傳回值取決於 'ambiwidth'。發生錯誤時返回零。另請參閱 strlen()、strwidth() 和 strchars()。{string}
(string
){col}
(integer?
)整數
){format}
[, {time}
]) strftime(){format}
字串指定。使用給定的 {time}
,如果未給定時間,則使用目前時間。接受的 {format}
取決於您的系統,因此這不是可攜式的!請參閱 C 函式 strftime() 的手冊頁,了解格式。結果的最大長度為 80 個字元。另請參閱 localtime()、getftime() 和 strptime()。可以使用 :language 命令來變更語言。範例: echo strftime("%c") " Sun Apr 27 11:49:23 1997
echo strftime("%Y %b %d %X") " 1997 Apr 27 11:53:25
echo strftime("%y%m%d %T") " 970427 11:53:55
echo strftime("%H:%M") " 11:55
echo strftime("%c", getftime("file.c"))
" Show mod time of file.c.
Parameters: ~
• {format} (`string`)
• {time} (`number?`)
Return: ~
(`string`)
strgetchar({str}
, {index}
) strgetchar(){str}
中 {index}
位置的字元對應的數字。這使用基於零的字元索引,而不是位元組索引。此處將組合字元視為個別字元。使用 nr2char() 將數字轉換為字串。如果 {index}
無效,則返回 -1。另請參閱 strcharpart() 和 strchars()。{str}
(string
){index}
(integer
)整數
){haystack}
, {needle}
[, {start}
]) stridx(){needle}
在 {haystack}
中第一次出現的位元組索引。如果指定了 {start}
,則搜尋會從索引 {start}
開始。這可以用於尋找第二個匹配項:let colon1 = stridx(line, ":")
let colon2 = stridx(line, ":", colon1 + 1)
{needle}
未出現在 {haystack}
中,則返回 -1。另請參閱 strridx()。範例:echo stridx("An Example", "Example") " 3
echo stridx("Starting point", "Start") " 0
echo stridx("Starting point", "start") " -1
{haystack}
(string
){needle}
(string
){start}
(整數?
)整數
){expr}
) string(){expr}
。如果 {expr}
是數字、浮點數、字串、Blob 或它們的組合,則可以使用 eval() 將結果重新剖析回原本的型態。{expr}
型別 結果str2float('inf')
Funcref function('name')
Blob 0z00112233.44556677.8899 列表 [項目, 項目] 字典 {鍵: 值, 鍵: 值}
請注意,在字串值中,' 字元會重複。另請參閱 strtrans()。 注意 2:輸出格式主要與 YAML 相容,但無限和 NaN 浮點數值表示除外,這些表示使用 str2float()。 字串也會以字面形式轉儲,只會逸出單引號,這不允許使用 YAML 來重新剖析二進位字串。 eval() 應該始終適用於字串和浮點數,並且這是唯一正式的方法。如果您需要與其他應用程式共用資料,請使用 msgpackdump() 或 json_encode()。{expr}
(任意
)string
){string}
) strlen(){string}
的位元組長度。如果引數為數字,則會先將其轉換為字串。對於其他型別,會給出錯誤並返回零。如果您想要計算多位元組字元的數量,請使用 strchars()。另請參閱 len()、strdisplaywidth() 和 strwidth()。{string}
(string
)整數
){src}
, {start}
[, {len}
[, {chars}
]]) strpart(){src}
的一部分,從位元組 {start}
開始,位元組長度為 {len}
。當 {chars}
存在且為 TRUE 時,{len}
是字元位置的數量(組合字元不會分開計算,因此「1」表示一個基本字元和任何後續的組合字元)。要將 {start}
計算為字元而不是位元組,請使用 strcharpart()。{len}
,則複製會從 {start}
繼續到 {src}
的結尾。echo strpart("abcdefg", 3, 2) " returns 'de'
echo strpart("abcdefg", -2, 4) " returns 'ab'
echo strpart("abcdefg", 5, 4) " returns 'fg'
echo strpart("abcdefg", 3) " returns 'defg'
{start}
必須為 0。例如,要取得游標下的字元:strpart(getline("."), col(".") - 1, 1, v:true)
{src}
(string
){start}
(integer
){len}
(integer?
){chars}
(0|1?
)string
){format}
, {timestring}
) strptime(){timestring}
中日期和時間的 Unix 時間戳記,預期 {timestring}
會符合 {format}
中指定的格式。{format}
取決於您的系統,因此這不是可攜式的!請參閱 C 函式 strptime() 的手冊頁,了解格式。尤其要避免使用「%c」。$TZ 的值也很重要。{format}
剖析 {timestring}
,則返回零。如果您不知道 {timestring}
的格式,您可以嘗試不同的 {format}
值,直到獲得非零結果。echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
echo strftime("%c", strptime("%y%m%d %T", "970427 11:53:55"))
echo strftime("%c", strptime("%Y%m%d%H%M%S", "19970427115355") + 3600)
{format}
(string
){timestring}
(string
)整數
){haystack}
, {needle}
[, {start}
]) strridx(){needle}
在 {haystack}
中最後一次出現的位元組索引。當指定了 {start}
時,會忽略此索引之後的匹配項。這可以用於尋找先前匹配項之前的匹配項:let lastcomma = strridx(line, ",")
let comma2 = strridx(line, ",", lastcomma - 1)
{needle}
未出現在 {haystack}
中,則返回 -1。如果 {needle}
為空,則返回 {haystack}
的長度。另請參閱 stridx()。範例:echo strridx("an angry armadillo", "an") 3
{haystack}
(string
){needle}
(string
){start}
(整數?
)整數
){string}
) strtrans(){string}
,其中所有不可列印字元都被轉換為可列印字元 'isprint'。就像它們在視窗中顯示的方式一樣。範例:echo strtrans(@a)
{string}
(string
)string
){string}
[, {countcc}
]) strutf16len(){string}
中的 UTF-16 碼元數(在將其轉換為 UTF-16 之後)。{countcc}
為 TRUE 時,組合字元會被分開計算。當 {countcc}
被省略或為 FALSE 時,組合字元會被忽略。echo strutf16len('a') " returns 1
echo strutf16len('©') " returns 1
echo strutf16len('😊') " returns 2
echo strutf16len('ą́') " returns 1
echo strutf16len('ą́', v:true) " returns 3
{string}
(string
){countcc}
(0|1?
)整數
){string}
) strwidth(){string}
佔用的顯示單元格數。Tab 字元計為一個單元格,或者使用 strdisplaywidth()。當 {string}
包含具有東亞寬度類別模糊的字元時,此函式的傳回值取決於 'ambiwidth'。發生錯誤時返回零。另請參閱 strlen()、strdisplaywidth() 和 strchars()。{string}
(string
)整數
){nr}
[, {list}
]) submatch() E935 僅用於 :substitute 命令或 substitute() 函數中的表達式。返回匹配文本的第 {nr}
個子匹配。當 {nr}
為 0 時,返回整個匹配文本。請注意,字串中的 NL 可以代表多行匹配的換行符,或者文本中的 NUL 字元。另請參閱 sub-replace-expression。{list}
且非零,則 submatch() 返回字串列表,類似於帶有兩個參數的 getline()。文字中的 NL 字元表示文字中的 NUL 字元。僅對於 :substitute 返回多個項目,在 substitute() 內部,此列表將始終包含一個或零個項目,因為沒有真正的換行符。s/\d\+/\=submatch(0) + 1/
echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
{nr}
(integer
){list}
(nil?
)string
){string}
, {pat}
, {sub}
, {flags}
) substitute(){string}
的副本,其中 {pat}
的第一個匹配項會被 {sub}
替換。當 {flags}
為 "g" 時,{string}
中所有符合 {pat}
的匹配項都會被替換。否則,{flags}
應為 ""。{pat}
的匹配始終像設定了 'magic' 選項並且 'cpoptions' 為空一樣完成(以使腳本具有可移植性)。 'ignorecase' 仍然相關,如果您想要忽略或匹配大小寫並忽略 'ignorecase',請使用 /\c 或 /\C。不會使用 'smartcase'。有關如何使用 {pat}
的資訊,請參閱 string-match。{sub}
中的 "~" 不會被先前的 {sub}
替換。請注意,{sub}
中的某些程式碼具有特殊含義 sub-replace-special。例如,要將某個內容替換為 "\n"(兩個字元),請使用 "\\\\n" 或 '\\n'。{pat}
在 {string}
中不匹配時,將返回未修改的 {string}
。let &path = substitute(&path, ",\\=[^,]*$", "", "")
echo substitute("testing", ".*", "\\U\\0", "")
{sub}
以 "\=" 開頭時,剩餘部分將被解釋為表達式。請參閱 sub-replace-expression。範例echo substitute(s, '%\(\x\x\)',
\ '\=nr2char("0x" .. submatch(1))', 'g')
{sub}
是一個函式參考時,會呼叫該函式,並帶有一個可選參數。範例echo substitute(s, '%\(\x\x\)', SubNr, 'g')
echo substitute(s, '%\(\x\x\)', {m -> '0x' .. m[1]}, 'g')
{string}
(string
){pat}
(string
){sub}
(string
){flags}
(string
)string
) let save_dir = &directory
let &directory = '.'
let swapfiles = swapfilelist()
let &directory = save_dir
Return: ~
(`string[]`)
swapinfo({fname}
) swapinfo(){fname}
的資訊。可用的欄位包括:version Vim 版本 user 使用者名稱 host 主機名稱 fname 原始檔案名稱 pid 建立交換檔案的 Nvim 進程的 PID,如果未執行則為零。mtime 最後修改時間(以秒為單位) inode 可選:檔案的 INODE 編號 dirty 如果檔案已修改則為 1,如果未修改則為 0 如果失敗,則會新增一個帶有原因的 "error" 項目:Cannot open file: 找不到檔案或無法存取 Cannot read file: 無法讀取第一個區塊 Not a swap file: 不包含正確的區塊 ID Magic number mismatch: 第一個區塊中的資訊無效{fname}
(字串
)any
){buf}
) swapname(){buf}
的交換檔案路徑。有關 {buf}
的用法,請參閱上面的 bufname()。如果緩衝區 {buf}
是目前緩衝區,則結果等於 :swapname(除非沒有交換檔案)。如果緩衝區 {buf}
沒有交換檔案,則返回空字串。{buf}
(整數|字串
)string
){lnum}
, {col}
, {trans}
) synID(){lnum}
和 {col}
處的語法 ID。語法 ID 可以與 synIDattr() 和 synIDtrans() 一起使用,以取得有關文字的語法資訊。{col}
為 1,第一行的 {lnum}
為 1。適用 'synmaxcol',在較長的行中,將返回零。請注意,當位置位於最後一個字元之後時(游標可以在插入模式下),synID() 會返回零。 {lnum}
的用法與 getline() 相同。{trans}
為 TRUE 時,透明項目會縮減為它們顯示的項目。當想要知道有效顏色時,這很有用。當 {trans}
為 FALSE 時,將返回透明項目。當想要知道哪個語法項目有效時(例如,在括號內),這很有用。警告:此函數可能非常慢。透過正向瀏覽檔案可以獲得最佳速度。echo synIDattr(synID(line("."), col("."), 1), "name")
{lnum}
(整數
){col}
(整數
){trans}
(0|1
)整數
){synID}
, {what}
[, {mode}
]) synIDattr(){synID}
的 {what}
屬性。這可用於取得有關語法項目的資訊。{mode}
可以是 "gui" 或 "cterm",以取得該模式的屬性。當省略 {mode}
或使用無效值時,將使用目前作用中高亮的屬性(GUI 或 cterm)。使用 synIDtrans() 來追蹤連結的高亮群組。 {what}
結果 "name" 語法項目的名稱 "fg" 前景顏色(GUI:用於設定顏色的顏色名稱,cterm:以字串表示的顏色編號,term:空字串) "bg" 背景顏色(與 "fg" 相同) "font" 字型名稱(僅在 GUI 中可用) highlight-font "sp" 特殊顏色(與 "fg" 相同) guisp "fg#" 類似 "fg",但適用於 GUI,且 GUI 正在以 "#RRGGBB" 格式執行的名稱 "bg#" 類似 "fg#",但適用於 "bg" "sp#" 類似 "fg#",但適用於 "sp" "bold" 如果粗體則為 "1" "italic" 如果斜體則為 "1" "reverse" 如果反向則為 "1" "inverse" 如果反向(= 反向)則為 "1" "standout" 如果突出則為 "1" "underline" 如果有底線則為 "1" "undercurl" 如果有波浪底線則為 "1" "underdouble" 如果有雙底線則為 "1" "underdotted" 如果有點狀底線則為 "1" "underdashed" 如果有虛線底線則為 "1" "strikethrough" 如果有刪除線則為 "1" "altfont" 如果有替代字型則為 "1" "nocombine" 如果為 nocombine 則為 "1"echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
{synID}
(integer
){what}
(string
){mode}
(string?
)string
){synID}
) synIDtrans(){synID}
的轉換語法 ID。這是用於高亮顯示字元的語法群組 ID。將追蹤使用 ":highlight link" 給定的高亮連結。{synID}
(integer
)整數
){lnum}
, {col}
) synconcealed(){lnum}
和 {col}
處的字元不屬於可隱藏區域,則列表中的第一個項目為 0;如果是,則為 1。{lnum}
的用法與 getline() 相同。 2. 列表中的第二個項目是一個字串。如果第一個項目為 1,則第二個項目包含將顯示以取代隱藏文字的文字,具體取決於 'conceallevel' 和 'listchars' 的目前設定。 3. 列表中的第三個也是最後一個項目是一個數字,表示該行中符合的特定語法區域。當字元未被隱藏時,值為零。如果兩個連續區域具有相同的替換字元,則可以偵測到新可隱藏區域的開始。例如,如果文字為 "123456",且 "23" 和 "45" 都被隱藏並由字元 "X" 替換,則{lnum}
(整數
){col}
(整數
)[integer, string, integer]
){lnum}
, {col}
) synstack(){lnum}
和 {col}
處的語法項目堆疊。 {lnum}
的用法與 getline() 相同。列表中的每個項目都是一個 ID,類似於 synID() 返回的內容。列表中的第一個項目是外部區域,後面的項目包含在該項目中。最後一個是 synID() 返回的內容,除非未高亮顯示整個項目或它是透明項目。此函數對於偵錯語法檔案很有用。範例顯示游標下的語法堆疊for id in synstack(line("."), col("."))
echo synIDattr(id, "name")
endfor
{lnum}
和 {col}
指定的位置無效時,會返回一個空列表。行中最後一個字元之後的位置和空行中的第一列是有效位置。{lnum}
(整數
){col}
(整數
)integer[]
){cmd}
的輸出作為 字串(systemlist() 返回一個 列表),並將 v:shell_error 設定為錯誤碼。 {cmd}
的處理方式與 jobstart() 中相同:如果 {cmd}
是一個列表,它會直接執行(不使用 'shell')。如果 {cmd}
是一個字串,它會像這樣在 'shell' 中執行call jobstart(split(&shell) + split(&shellcmdflag) + ['{cmd}'])
<CR>
<NL>
會被取代為 <NL>
echo system(['ls', expand('%:h')])
{input}
是字串,它會被寫入管道並作為標準輸入傳遞給指令。該字串會原樣寫入,不會變更行分隔符號。如果 {input}
是 List,它會像 writefile() 一樣寫入管道,其中 {binary}
設為 "b"(即,在每個列表項目之間加入換行符號,而列表項目內的換行符號會轉換為 NUL)。當提供 {input}
且它是有效的緩衝區 ID 時,緩衝區的內容會逐行寫入檔案,每行以 NL 終止(且在文字有 NL 的地方以 NUL 終止)。E5677echo system("cat - &", "foo")
$ echo foo | bash -c 'cat - &'
echo system('ls '..shellescape(expand('%:h')))
echo system('ls '..expand('%:h:S'))
{cmd}
(string|string[]
){input}
(string|string[]|integer?
)string
){cmd}
[, {input}
[, {keepempty}
]]) systemlist(){binary}
引數設為 "b" 時的輸出相同,但最後的換行符號不會保留,除非 {keepempty}
非零。請注意,在 MS-Windows 上您可能會取得尾隨的 CR 字元。echo split(system('echo hello'), '\n', 1)
{cmd}
(string|string[]
){input}
(string|string[]|integer?
){keepempty}
(integer?
)string[]
){arg}
]) tabpagebuflist(){arg}
指定要使用的標籤頁編號。省略時會使用目前的標籤頁。當 {arg}
無效時,會傳回數字零。若要取得所有標籤中所有緩衝區的列表,請使用此指令let buflist = []
for i in range(tabpagenr('$'))
call extend(buflist, tabpagebuflist(i + 1))
endfor
{arg}
(integer?
)any
){arg}
支援下列值:$ 最後一個標籤頁的編號(標籤頁計數)。# 最後存取的標籤頁的編號(g<Tab> 會前往該標籤頁)。如果沒有先前的標籤頁,則會傳回 0。此數字可以用於 :tab 指令。{arg}
('$'|'#'?
)整數
){tabarg}
[, {arg}
]) tabpagewinnr(){tabarg}
。{tabarg}
指定要使用的標籤頁編號。{arg}
的使用方式與 winnr() 相同tabpagewinnr(1) " current window of tab page 1
tabpagewinnr(4, '$') " number of windows in tab page 4
{tabarg}
無效時,會傳回零。{tabarg}
(integer
){arg}
('$'|'#'?
)整數
)string[]
){expr}
中使用錨點 '^' 和 '$'。這也會使函式執行得更快。如需有關標籤搜尋規則運算式模式的更多資訊,請參閱 tag-regexp。{expr}
(任意
){filename}
(string?
)any
){expr}
) tan(){expr}
的正切值,以範圍 [-inf, inf] 中的 Float 形式傳回。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo tan(10)
echo tan(-4.01)
{expr}
(數字
)數字
){expr}
) tanh(){expr}
的雙曲正切值。{expr}
必須評估為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo tanh(0.5)
echo tanh(-1)
{expr}
(數字
)數字
)let tmpfile = tempname()
exe "redir > " .. tmpfile
string
){cmd}
[, {opts}
]) termopen(){cmd}
。參數和行為與 jobstart() 相同,但 "pty"、"width"、"height" 和 "TERM" 會被忽略: "height" 和 "width" 取自目前的視窗。請注意,termopen() 隱含 jobstart() 的 "pty" 引數,因此具有 jobstart() 中記載的含義。{cmd}
(string|string[]
){opts}
(table?
)any
)any
){id}
]) timer_info(){id}
時,只會傳回此計時器的資訊。當計時器 {id}
不存在時,會傳回空列表。當省略 {id}
時,會傳回所有計時器的資訊。{id}
(integer?
)any
){timer}
, {paused}
) timer_pause(){paused}
評估為非零的 Number 或非空字串,則會暫停計時器,否則會取消暫停計時器。請參閱 non-zero-arg。{timer}
(integer
){paused}
(boolean
)any
){time}
是等待時間,以毫秒為單位。這是呼叫回呼之前的最短時間。當系統忙碌或 Vim 沒有等待輸入時,時間會更長。可以使用零來在 Vim 回到主迴圈時執行回呼。{callback}
是要呼叫的函式。它可以是函式的名稱或 Funcref。它會使用一個引數呼叫,即計時器 ID。僅當 Vim 等待輸入時,才會呼叫回呼。{options}
是一個字典。支援的項目:"repeat" 重複回呼的次數。-1 表示永遠重複。預設值為 1。如果計時器連續三次發生錯誤,則會取消重複。func MyHandler(timer)
echo 'Handler called'
endfunc
let timer = timer_start(500, 'MyHandler',
\ {'repeat': 3})
{time}
(number
){callback}
(string|function
){options}
(table?
)any
){timer}
) timer_stop(){timer}
是 timer_start() 傳回的 ID,因此它必須是數字。如果 {timer}
不存在,則不會產生錯誤。{timer}
(integer
)any
)any
){expr}
(string
)string
){expr}
(string
)string
){src}
, {fromstr}
, {tostr}
) tr(){src}
字串的副本,其中所有出現在 {fromstr}
中的字元都會被 {tostr}
字串中相同位置的字元取代。因此,{fromstr}
中的第一個字元會被翻譯成 {tostr}
中的第一個字元,依此類推。這就像 unix 的 "tr" 命令一樣。此程式碼也能正確處理多位元組字元。echo tr("hello there", "ht", "HT")
echo tr("<blob>", "<>", "{}")
{src}
(string
){fromstr}
(string
){tostr}
(string
)string
){mask}
,或是空字串,則 {mask}
為所有直到 0x20 的字元,包含 Tab、空格、NL 和 CR,再加上不斷行空格字元 0xa0。{dir}
參數指定從何處移除字元:0 從 {text}
的開頭和結尾移除,1 只從 {text}
的開頭移除,2 只從 {text}
的結尾移除。省略時,兩端都會被修剪。echo trim(" some text ")
echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") .. "_TAIL"
echo trim("rm<Xrm<>X>rrm", "rm<>")
echo trim(" vim ", " ", 2)
{text}
(字串
){mask}
(string?
){dir}
(0|1|2?
)string
){expr}
) trunc(){expr}
的最大整數值,以 Float 型態表示 (朝零截斷)。{expr}
的計算結果必須為 Float 或 Number。如果 {expr}
不是 Float 或 Number,則傳回 0.0。範例echo trunc(1.456)
echo trunc(-5.456)
echo trunc(4.0)
{expr}
(數字
)整數
){expr}
) type(){expr}
的類型。與其直接使用數字,不如使用 v:t_ 變數,其值如下:數字:0 v:t_number 字串:1 v:t_string 函式參考:2 v:t_func 列表:3 v:t_list 字典:4 v:t_dict 浮點數:5 v:t_float 布林值:6 v:t_bool (v:false 和 v:true) Null:7 (v:null) Blob:10 v:t_blob 為了向後相容,可以使用此方法if type(myvar) == type(0) | endif
if type(myvar) == type("") | endif
if type(myvar) == type(function("tr")) | endif
if type(myvar) == type([]) | endif
if type(myvar) == type({}) | endif
if type(myvar) == type(0.0) | endif
if type(myvar) == type(v:true) | endif
if exists('v:t_number') | endif
{expr}
(任意
)整數
){name}
) undofile(){name}
的檔案將使用的復原檔案名稱。這會使用 'undodir' 選項,尋找存在的目錄。它不會檢查復原檔案是否存在。{name}
會始終展開為完整路徑,因為這是內部使用的路徑。如果 {name}
為空,undofile() 會傳回空字串,因為沒有檔案名稱的緩衝區不會寫入復原檔案。與 :wundo 和 :rundo 搭配使用時很有用。{name}
(string
)string
){buf}
]) undotree(){buf}
,則傳回指定緩衝區的復原樹的目前狀態。結果是一個字典,其中包含下列項目:"seq_last" 最後使用的最高復原序列號。"seq_cur" 復原樹中目前位置的序列號。當某些變更被復原時,此數字與 "seq_last" 不同。"time_cur" 最後一次用於 :earlier 和相關命令的時間。使用 strftime() 轉換為可讀取的格式。"save_last" 上次寫入檔案的次數。尚未寫入時為零。"save_cur" 復原樹中目前位置的次數。"synced" 當最後的復原區塊被同步時,為非零值。當等待使用者輸入時,會發生這種情況。請參閱 undo-blocks。"entries" 包含復原區塊資訊的字典列表。{buf}
(integer|string?
)vim.fn.undotree.ret
){list}
[, {func}
[, {dict}
]]) uniq() E882 就地移除 {list}
中重複相鄰項目的第二個及後續副本。傳回 {list}
。如果您希望列表保持不變,請先複製一份let newlist = uniq(copy(mylist))
{list}
不是 List,則傳回零。{list}
(any
){func}
(any?
){dict}
(any?
)any[]|0
){string}
, {idx}
[, {countcc}
[, {charidx}
]]) utf16idx(){string}
中位於 {idx}
的位元組的 UTF-16 碼位索引 (在將其轉換為 UTF-16 之後)。{charidx}
存在且為 TRUE 時,{idx}
會被當成字串 {string}
中的字元索引,而不是位元組索引。UTF-8 序列中間的 {idx}
會向下捨入到該序列的開頭。{string}
中的位元組少於 {idx}
個,則傳回 -1。如果正好有 {idx}
個位元組,則傳回字串中 UTF-16 碼位的長度。echo utf16idx('a😊😊', 3) " returns 2
echo utf16idx('a😊😊', 7) " returns 4
echo utf16idx('a😊😊', 1, 0, 1) " returns 2
echo utf16idx('a😊😊', 2, 0, 1) " returns 4
echo utf16idx('aą́c', 6) " returns 2
echo utf16idx('aą́c', 6, 1) " returns 4
echo utf16idx('a😊😊', 9) " returns -1
{string}
(string
){idx}
(integer
){countcc}
(boolean?
){charidx}
(boolean?
)整數
){dict}
) values(){dict}
所有值的 List。List 的順序是任意的。另請參閱 items() 和 keys()。如果 {dict}
不是 Dict,則傳回零。{dict}
(any
)any
){expr}
[, {list}
[, {winid}
]]) virtcol(){expr}
給定的檔案位置的螢幕欄位。也就是說,當螢幕寬度不受限制時,該位置的字元所佔用的最後一個螢幕位置。當位置有一個 <Tab>
時,傳回的數字將是 <Tab>
結尾的欄位。例如,對於欄位 1 中的 <Tab>
,'ts' 設定為 8,它會傳回 8。隱藏會被忽略。如要取得位元組位置,請使用 col()。{expr}
可以是 [lnum, col, off],其中 "off" 是從字元開頭到螢幕欄位的偏移量。例如,<Tab>
內或最後一個字元後的位置。當省略 "off" 時,會使用零。當虛擬編輯在目前模式下啟用時,可以傳回超出該行結尾的位置。另請參閱 'virtualedit'{list}
存在且非零,則 virtcol() 會傳回一個列表,其中包含字元佔用的第一個和最後一個螢幕位置。{winid}
參數,會取得該視窗的值,而不是目前視窗的值。" With text "foo^Lbar" and cursor on the "^L":
echo virtcol(".") " returns 5
echo virtcol(".", 1) " returns [4, 5]
echo virtcol("$") " returns 9
" With text " there", with 't at 'h':
echo virtcol("'t") " returns 6
echo max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
{expr}
(string|integer[]
){list}
(boolean?
){winid}
(整數?
)any
){winid}
, {lnum}
, {col}
) virtcol2col(){winid}
中緩衝區行 {lnum}
和虛擬欄位 {col}
的字元位元組索引。{lnum}
是空行,則會傳回 0。{col}
大於行 {lnum}
中的最後一個虛擬欄位,則會傳回最後一個虛擬欄位中字元的位元組索引。{winid}
引數可以是視窗號碼或 視窗 ID。如果此值為零,則會使用目前的視窗。{winid}
不存在,或者緩衝區行 {lnum}
或虛擬欄位 {col}
無效,則傳回 -1。{winid}
(integer
){lnum}
(整數
){col}
(整數
)any
){expr}
]) visualmode()CTRL-V
字元)。範例exe "normal " .. visualmode()
{expr}
,且其評估結果為非零數值或非空字串,則視覺模式將會被清除,並傳回舊值。請參閱 non-zero-arg。{expr}
(boolean?
)any
){timeout}
, {condition}
[, {interval}
]) wait(){condition}
評估為 TRUE,其中 {condition}
是包含運算式的 函式參考 或 字串。{timeout}
是最大等待時間,以毫秒為單位,-1 表示永遠等待。{interval}
毫秒 (預設值:200) 評估一次。{timeout}
(integer
){condition}
(any
){interval}
(number?
)any
)<c-j>
在 wildmode 中像 <down>
一樣工作,請使用cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
any
){id}
, {command}
[, {silent}
]) win_execute()execute()
類似,但在視窗 {id}
的上下文中執行。視窗將臨時設為目前視窗,而不會觸發自動指令或變更目錄。執行 {command}
時會觸發自動指令,這可能會產生意外的副作用。如果需要,請使用 :noautocmd
。範例call win_execute(winid, 'syntax enable')
setwinvar()
執行相同的操作不會觸發自動指令,也不會實際顯示語法高亮。{id}
不存在時,不會給出錯誤,且會傳回空字串。{id}
(integer
){command}
(string
){silent}
(boolean?
)any
){bufnr}
(integer
)integer[]
){win}
[, {tab}
]]) win_getid(){win}
,則使用目前視窗。使用 {win}
時,這是視窗編號。頂部視窗的編號為 1。如果沒有 {tab}
,則使用目前的標籤頁,否則使用編號為 {tab}
的標籤頁。第一個標籤頁的編號為 1。如果找不到視窗,則傳回零。{win}
(integer?
){tab}
(integer?
)整數
){nr}
]) win_gettype(){nr}
{nr}
(整數?
)'autocmd'|'command'|''|'loclist'|'popup'|'preview'|'quickfix'|'unknown'
){expr}
(integer
)0|1
){expr}
) win_id2tabwin(){expr}
的視窗的標籤頁編號和視窗編號:[tabnr, winnr]。如果找不到視窗,則傳回 [0, 0]。{expr}
(integer
)any
){expr}
(integer
)any
){nr}
, {offset}
) win_move_separator(){nr}
的垂直分隔線 (即右邊框) 移動 {offset}
個欄位,就像使用滑鼠拖曳一樣。{nr}
可以是視窗編號或 視窗 ID。正數 {offset}
向右移動,負數 {offset}
向左移動。移動視窗的垂直分隔線會變更視窗的寬度以及與垂直分隔線相鄰的其他視窗的寬度。移動的幅度可能會小於指定的幅度 (例如,由於維持 'winminwidth')。如果可以找到視窗,則傳回 TRUE,否則傳回 FALSE。這對於最右邊的視窗和全寬視窗會失敗,因為它右側沒有分隔線。僅適用於目前的標籤頁。 E1308{nr}
(integer
){offset}
(integer
)any
){nr}
, {offset}
) win_move_statusline(){nr}
的狀態列 (即底部邊框) 移動 {offset}
列,就像使用滑鼠拖曳一樣。{nr}
可以是視窗編號或 視窗 ID。正數 {offset}
向下移動,負數 {offset}
向上移動。移動視窗的狀態列會變更視窗的高度以及與狀態列相鄰的其他視窗的高度。移動的幅度可能會小於指定的幅度 (例如,由於維持 'winminheight')。如果可以找到視窗,則傳回 TRUE,否則傳回 FALSE。僅適用於目前的標籤頁。{nr}
(integer
){offset}
(integer
)any
){nr}
) win_screenpos(){nr}
的螢幕位置:[列, 欄]。第一個視窗的位置始終為 [1, 1],除非有標籤列,否則為 [2, 1]。{nr}
可以是視窗編號或 視窗 ID。對於目前視窗,請使用零。如果找不到視窗,則傳回 [0, 0]。{nr}
(integer
)any
){nr}
, {target}
[, {options}
]) win_splitmove(){target}
,然後將視窗 {nr}
移動到與 {target}
相鄰的新分割畫面。與 :split 等命令不同,不會建立新的視窗 (移動後,視窗 {nr}
的 視窗 ID 不會變更)。{options}
是一個 字典,其中包含以下可選項目:「vertical」當為 TRUE 時,會像使用 :vsplit 一樣垂直建立分割畫面。「rightbelow」當為 TRUE 時,分割畫面會建立在下方或右側 (如果為垂直)。當為 FALSE 時,則建立在上方或左側 (如果為垂直)。如果不存在,則使用 'splitbelow' 和 'splitright' 的值。{nr}
(integer
){target}
(integer
){options}
(table?
)any
){nr}
) winbufnr(){nr}
相關聯的緩衝區編號。{nr}
可以是視窗編號或 視窗 ID。當 {nr}
為零時,會傳回目前視窗中緩衝區的編號。當視窗 {nr}
不存在時,會傳回 -1。範例echo "The file in the current window is " .. bufname(winbufnr(0))
{nr}
(integer
)整數
)整數
)string
){nr}
) winheight(){nr}
的高度。{nr}
可以是視窗編號或 視窗 ID。當 {nr}
為零時,會傳回目前視窗的高度。當視窗 {nr}
不存在時,會傳回 -1。現有視窗的高度始終為零或以上。這不包含任何視窗工具列行。範例echo "The current window has " .. winheight(0) .. " lines."
{nr}
(integer
)整數
){tabnr}
,則使用目前的標籤頁,否則使用編號為 {tabnr}
的標籤頁。如果找不到標籤頁 {tabnr}
,則傳回空列表。["leaf", {winid}]
["col", [{nested list of windows}]]
["row", [{nested list of windows}]]
" Only one window in the tab page
echo winlayout()
['leaf', 1000]
" Two horizontally split windows
echo winlayout()
['col', [['leaf', 1000], ['leaf', 1001]]]
" The second tab page, with three horizontally split
" windows, with two vertically split windows in the
" middle window
echo winlayout(2)
['col', [['leaf', 1002], ['row', [['leaf', 1003], ['leaf', 1001]]], ['leaf', 1000]]]
{tabnr}
(整數?
)any
)整數
){arg}
支援以下值: $ 最後一個視窗的編號(視窗計數)。 # 最後存取的視窗編號(CTRL-W_p 會跳至的視窗)。如果沒有上一個視窗,或上一個視窗位於另一個標籤頁,則返回 0。在某些情況下可能指向目前視窗(例如,當評估 'statusline' 表達式時)。{N}
j 目前視窗下方第 N 個視窗的編號(CTRL-W_j 會跳至的視窗)。{N}
k 目前視窗上方第 N 個視窗的編號(CTRL-W_k 會跳至的視窗)。{N}
h 目前視窗左邊第 N 個視窗的編號(CTRL-W_h 會跳至的視窗)。{N}
l 目前視窗右邊第 N 個視窗的編號(CTRL-W_l 會跳至的視窗)。這個數字可以與 CTRL-W_w 和 ":wincmd w" :wincmd 一起使用。當 {arg}
無效時,會給出錯誤並返回零。另請參閱 tabpagewinnr() 和 win_getid()。範例let window_count = winnr('$')
let prev_window = winnr('#')
let wnum = winnr('3k')
{arg}
(string|integer?
)any
)let cmd = winrestcmd()
call MessWithWindowSizes()
exe cmd
any
){dict}
) winrestview(){dict}
不必包含 winsaveview() 返回的所有值。如果缺少值,那些設定將不會被還原。因此您可以使用call winrestview({'curswant': 4})
{dict}
(vim.fn.winrestview.dict
)any
)vim.fn.winsaveview.ret
){nr}
) winwidth(){nr}
的寬度。{nr}
可以是視窗編號或 window-ID。當 {nr}
為零時,會返回目前視窗的寬度。當視窗 {nr}
不存在時,會返回 -1。現有的視窗始終具有零或更大的寬度。範例echo "The current window has " .. winwidth(0) .. " columns."
if winwidth(0) <= 50
50 wincmd |
endif
{nr}
(integer
)any
)any
){object}
, {fname}
[, {flags}
]) writefile(){object}
為 List 時,將其寫入檔案 {fname}
。每個列表項目都以 NL 分隔。每個列表項目必須是 String 或 Number。所有的 NL 字元都會被 NUL 字元取代。插入 CR 字元需要在將 {list}
傳遞給 writefile() 之前完成。{flags}
必須是字串。這些字元會被識別:call writefile(["foo"], "event.log", "a")
call writefile(["bar"], "event.log", "a")
defer delete({fname})
{flags}
不包含 "S" 或 "s" 時,如果設定了 'fsync' 選項,則會呼叫 fsync()。let fl = readfile("foo", "b")
call writefile(fl, "foocopy", "b")
{object}
(任意
){fname}
(字串
){flags}
(字串?
)any
){expr}
, {expr}
) xor()and()
和 or()
。範例let bits = xor(bits, 0x80)
{expr}
(數字
){expr1}
(數字
)any
)let a = "aaaa\nxxxx"
echo matchstr(a, "..\n..")
" aa
" xx
echo matchstr(a, "a.x")
" a
" x
別忘了 "^" 只會匹配字串的第一個字元,而 "$" 只會匹配字串的最後一個字元。它們不會匹配 "\n" 之後或之前。