This page was created by www.chinacode.com on 03/15/08 10:09:52.
Address: http://man.chinacode.com/VIM/eval.html
Title: VIM: eval •
Size: 505321 •
Last Modified: Thu, 20 Sep 2007 19:58:51 GMT
EVAL
*eval.txt* For Vim version 7.1. 最近更新: 2007年5月
VIM å‚考手册 by Bram Moolenaar
译者: Willis
http://vimcdoc.sf.net
è¡¨è¾¾å¼æ±‚值 *expression* *expr* *E15* *eval*
用户手册第 41 ç« |usr_41.txt| 有使用表达å¼çš„介ç»ã€‚
注æ„: è¡¨è¾¾å¼æ±‚值å¯ä»¥åœ¨ç¼–译时关é—ã€‚å¦‚æžœä½ è¿™ä¹ˆåšï¼Œæœ¬æ–‡æ¡£ä»‹ç»çš„特性就ä¸å¤å˜åœ¨ã€‚è§
|+eval| 和 |no-eval-feature|。
1. å˜é‡ |variables|
1.1 å˜é‡ç±»åž‹
1.2 函数引用 |Funcref|
1.3 列表 |Lists|
1.4 å—å…¸ |Dictionaries|
1.5 å˜é‡çš„æ›´å¤šç»†èŠ‚ |more-variables|
2. 表达å¼è¯æ³• |expression-syntax|
3. 内部å˜é‡ |internal-variables|
4. 内建函数 |functions|
5. 定义函数 |user-functions|
6. 花括å·åå— |curly-braces-names|
7. 命令 |expression-commands|
8. ä¾‹å¤–å¤„ç† |exception-handling|
9. 示例 |eval-examples|
10. ä¸åŒ…å« +eval 特性 |no-eval-feature|
11. 沙盘 (sandbox) |eval-sandbox|
12. æ–‡æœ¬é” |textlock|
{Vi æ— æ¤åŠŸèƒ½}
1.1 å˜é‡ç±»åž‹
*E712*
有五ç§ç±»åž‹çš„å˜é‡:
数值 32 ä½å¸¦ç¬¦å·æ•´æ•°ã€‚
示例: -123 0x10 0177
å—符串 NUL 结尾的 8 使— 符å·å—符 (å³å—节) 的串。
示例: "ab\txx\"--" 'x-z''a,c'
函数引用 指å‘一个函数的引用 |Funcref|。
示例: function("strlen")
列表 项目的有åºçš„åºåˆ— |List|。
示例: [1, 2, ['a', 'b']]
å—å…¸ å…³è”çš„æ— åºæ•°ç»„: æ¯ä¸ªé¡¹ç›®åŒ…å«ä¸€ä¸ªé”®å’Œä¸€ä¸ªå€¼ã€‚|Dictionary|
示例: {'blue': "#0000ff", 'red': "#ff0000"}
数值和å—ç¬¦ä¸²ç±»åž‹ä¹‹é—´ä¼šæ ¹æ®ä½¿ç”¨çš„æƒ…况自动转æ¢ã€‚
数值到å—符串的转æ¢ä½¿ç”¨æ•°å€¼çš„ ASCII 表示。例如:
数值 123 --> å—符串 "123"
数值 0 --> å—符串 "0"
数值 -1 --> å—符串 "-1"
å—符串到数值的转æ¢åˆ™æŠŠå—符串开头的一系列数å—ä½è½¬æ¢æˆæ•°å€¼ã€‚åå…进制 "0xf9" 和八
进制 "017" å½¢å¼çš„æ•°å€¼å¯ä»¥è¯†åˆ«ã€‚如果å—符串ä¸ä»¥æ•°å—开始,则结果为零。例如:
å—符串 "456" --> 数值 456
å—符串 "6bar" --> 数值 6
å—符串 "foo" --> 数值 0
å—符串 "0xf1" --> 数值 241
å—符串 "0100" --> 数值 64
å—符串 "-8" --> 数值 -8
å—符串 "+8" --> 数值 0
è¦å¼ºåˆ¶ä»Žå—符串转æ¢åˆ°æ•°å€¼ï¼Œç»™å®ƒåŠ é›¶:
:echo "0100" + 0
64
è¦é¿å…开头的零导致八进制的转æ¢ï¼Œæˆ–者想æ¢ä¸åŒçš„基底,用 |str2nr()|。
布尔型的æ“作使用数值类型。零代表å‡å€¼ (FALSE),éžé›¶ä»£è¡¨çœŸå€¼ (TRUE)。
æ³¨æ„ åœ¨å‘½ä»¤
:if "foo"
里,"foo" è¢«è½¬æ¢æˆ 0,也就是å‡å€¼ã€‚è¦æµ‹è¯•å—符串éžç©ºï¼Œåº”该使用 strlen():
:if strlen("foo")
*E745* *E728* *E703* *E729* *E730* *E731*
列表ã€å—典和函数引用类型ä¸ä¼šè‡ªåŠ¨è¿›è¡Œè½¬æ¢ã€‚
*E706*
å¦‚æžœä½ è¯•å›¾æ”¹å˜å˜é‡ç±»åž‹ï¼Œä½ 会得到错误。先 |:unlet| å¯ä»¥é¿å…æ¤é”™è¯¯ã€‚ä¸è¿‡ï¼Œå—符串
和数值被认为是ç‰ä»·çš„类型。考虑如下的命令åºåˆ—:
:let l = "string"
:let l = 44 " 类型从å—符串改为数值
:let l = [1, 2, 3] " 出错ï¼
1.2 函数引用
*Funcref* *E695* *E718*
函数引用å˜é‡å¯ä»¥é€šè¿‡ |function()| 函数得到。å¯ä»¥åœ¨è¡¨è¾¾å¼é‡Œç”¨å®ƒæ¥ä»£æ›¿å‡½æ•°å,在
å›´ç»•å‚æ•°çš„æ‹¬å·ä¹‹å‰ï¼Œä»¥è°ƒç”¨å®ƒå¼•用的函数。例如:
:let Fn = function("MyFunc")
:echo Fn()
*E704* *E705* *E707*
函数引用å˜é‡å¿…须以大写嗿¯ã€"s:"ã€"w:"ã€"t:" 或 "b:" 开始。函数引用å˜é‡ä¸èƒ½å’Œ
任何函数é‡å。
特例是å¯ä»¥å®šä¹‰å‡½æ•°å¹¶ç›´æŽ¥æŠŠå®ƒçš„函数引用赋给å—典的一个项目。例如:
:function dict.init() dict
: let self.val = 0
:endfunction
该å—典的键å¯ä»¥ç”¨å°å†™å—æ¯å¼€å§‹ã€‚这里ä¸ç”¨å®žé™…的函数å。å¦è§ |numbered-function|。
函数引用å¯ä»¥ç”¨ |:call| 命令调用:
:call Fn()
:call dict.init()
所引用的函数的åå—å¯ä»¥ç”¨ |string()| 得到,
:let func = string(Fn)
ä½ å¯ä»¥ç”¨ |call()| æ¥è°ƒç”¨å‡½æ•°å¼•用并用一个列表å˜é‡æ¥ä¼ 递傿•°:
:let r = call(Fn, mylist)
1.3 列表
*List* *Lists* *E686*
列表是项目的有åºåºåˆ—。项目å¯ä»¥æ˜¯ä»»ä½•类型,用索引å·å¯ä»¥è¿›è¡Œè®¿é—®ã€‚å¯ä»¥åœ¨åºåˆ—的任
何ä½ç½®ä¸Šå¢žåŠ æˆ–è€…åˆ é™¤é¡¹ç›®ã€‚
列表建立
*E696* *E697*
列表用方括å·é‡Œé€—å·åˆ†éš”的项目åºåˆ—建立。例如:
:let mylist = [1, two, 3, "four"]
:let emptylist = []
项目å¯ä»¥æ˜¯ä»»ä½•表达å¼ã€‚用列表作为项目就能建立列表的列表:
:let nestlist = [[11, 12], [21, 22], [31, 32]]
忽略末项之åŽé¢å¤–的逗å·ã€‚
列表索引
*list-index* *E684*
在列表之åŽçš„æ–¹æ‹¬å·ä¸æ”¾ä¸Šç´¢å¼•å·å¯ä»¥è®¿é—®åˆ—表项目。索引从零开始,也就是说,第一个
项目的索引值为零。
:let item = mylist[0] " 得到第一个项目: 1
:let item = mylist[2] " 得到第三个项目: 3
如果返回的项目本身是列表,å¯ä»¥é‡å¤è¿™æ ·çš„æ“ä½œ:
:let item = nestlist[0][1] " 得到第一个列表的第二个项目: 12
负索引从尾端开始计算。索引 -1 指å‘列表的最åŽä¸€ä¸ªé¡¹ç›®ï¼Œ-2 指å‘倒数第二个项目,
便¤ç±»æŽ¨ã€‚
:let last = mylist[-1] " 得到最åŽä¸€ä¸ªé¡¹ç›®: "four"
è¦é¿å…éžæ³•索引值产生的错误,用 |get()| 函数。如果项目ä¸å˜åœ¨ï¼Œå®ƒè¿”å›žé›¶æˆ–è€…ä½ æŒ‡
定的缺çœå€¼:
:echo get(mylist, idx)
:echo get(mylist, idx, "NONE")
列表连接
两个列表å¯ä»¥ç”¨ "+" æ“作符连接:
:let longlist = mylist + [5, 6]
:let mylist += [7, 8]
è¦åœ¨å‰é¢æˆ–åŽé¢é™„åŠ é¡¹ç›®ï¼Œåœ¨é¡¹ç›®å¤–é¢åŠ ä¸Š [] 从而把它å˜ä¸ºä¸€ä¸ªåˆ—è¡¨ã€‚è¦æ”¹å˜åˆ—表内部
的值,è§ä¸‹ |list-modification|。
å列表
列表的一部分å¯ä»¥é€šè¿‡æŒ‡å®šé¦–末两个索引获得,方括å·å†…以冒å·åˆ†éš”两者:
:let shortlist = mylist[2:-1] " 得到列表 [3, "four"]
首索引的çœç•¥ç±»ä¼¼äºŽç”¨ 0。末索引的çœç•¥ç±»ä¼¼äºŽç”¨ -1。
:let endlist = mylist[2:] " 从项目 2 到结æŸ: [3, "four"]
:let shortlist = mylist[2:2] " å•个项目的列表: [3]
:let otherlist = mylist[:] " å¤åˆ¶åˆ—表
å¦‚æžœé¦–ç´¢å¼•åœ¨åˆ—è¡¨æœ«é¡¹ä¹‹åŽæˆ–者末索引å°äºŽé¦–索引,返回空列表。没有错误信æ¯ã€‚
如果末索引大于ç‰äºŽåˆ—表的长度,使用列表长度å‡ä¸€:
:let mylist = [0, 1, 2, 3]
:echo mylist[2:8] " 返回: [2, 3]
注æ„: mylist[s:e] æ„味ç€ç”¨å˜é‡ "s:e" 作为索引。在 ":" 之å‰ç”¨å•ä¸ªå—æ¯ä½œä¸ºå˜é‡è¦
å°å¿ƒã€‚需è¦çš„è¯åŠ ä¸Šç©ºæ ¼: mylist[s : e]。
列表åŒä¸€
*list-identity*
如果å˜é‡ "aa" 是列表,把它赋给å¦ä¸€ä¸ªå˜é‡ "bb" åŽï¼Œä¸¤ä¸ªå˜é‡æŒ‡å‘åŒä¸€åˆ—è¡¨ã€‚å› æ¤ï¼Œ
对列表 "aa" çš„ä¿®æ”¹ä¹ŸåŒæ—¶ä¿®æ”¹äº† "bb":
:let aa = [1, 2, 3]
:let bb = aa
:call add(aa, 4)
:echo bb
[1, 2, 3, 4]
|copy()| 函数å¯ä»¥å¤åˆ¶åˆ—表。如上所述,用 [:] 也å¯ã€‚è¿™ç§æ–¹å¼å»ºç«‹åˆ—表的浅备份: 改
å˜åˆ—表ä¸çš„列表项目ä»ç„¶ä¼šä¿®æ”¹å¤åˆ¶åˆ—表的相应项目:
:let aa = [[1, 'a'], 2, 3]
:let bb = copy(aa)
:call add(aa, 4)
:let aa[0][1] = 'aaa'
:echo aa
[[1, aaa], 2, 3, 4]
:echo bb
[[1, aaa], 2, 3]
è¦å»ºç«‹ä¸€ä¸ªå®Œå…¨ç‹¬ç«‹çš„列表,用 |deepcopy()|。它递归地建立列表值的备份。最深å¯è¾¾
100 层。
å¯ç”¨æ“作符 "is" 检查两个å˜é‡æ˜¯å¦æŒ‡å‘åŒä¸€ä¸ªåˆ—表。"isnot" 刚好相å。与æ¤å¯¹ç…§ï¼Œ
"==" 比较两个列表的值是å¦ç›¸åŒã€‚
:let alist = [1, 2, 3]
:let blist = [1, 2, 3]
:echo alist is blist
0
:echo alist == blist
1
比较列表时 注æ„: 如果长度相åŒï¼Œæ‰€æœ‰é¡¹ç›®ç”¨ "==" 的比较的结果也相åŒï¼Œä¸¤ä¸ªåˆ—表就
认为相åŒã€‚有一个例外: 数值和å—符串总被认为ä¸ç›¸åŒã€‚这里ä¸è¿›è¡Œè‡ªåŠ¨ç±»åž‹è½¬æ¢ï¼Œè€Œåœ¨
å˜é‡é—´ç›´æŽ¥ç”¨ "==" å´ä¸æ˜¯å¦‚æ¤ã€‚例如:
echo 4 == "4"
1
echo [4] == ["4"]
0
å› æ¤å¯ä»¥è¯´ï¼Œåˆ—表的比较比数值和å—ç¬¦ä¸²çš„æ¯”è¾ƒæ›´ä¸¥æ ¼ã€‚ä½ åŒæ ·å¯ä»¥ç”¨è¿™ç§æ–¹å¼æ¯”较简å•
类型的值,把它们放到å—符串 (译者注: 方括å·ï¼Ÿ) 里就行了:
:let a = 5
:let b = "5"
echo a == b
1
echo [a] == [b]
0
列表解包
è¦ç»™åˆ—è¡¨é¡¹ç›®è§£åŒ…ï¼Œå³æŠŠå®ƒä»¬åˆ†åˆ«å˜å…¥å•独的å˜é‡ï¼Œç”¨æ–¹æ‹¬å·æŠŠå˜é‡æ‹¬èµ·æ¥ï¼Œå¦‚åŒæŠŠå®ƒä»¬
当作列表项目:
:let [var1, var2] = mylist
如果å˜é‡å’Œåˆ—表的项目数é‡ä¸åŒï¼ŒæŠ¥é”™ã€‚è¦å¤„ç†åˆ—è¡¨ä¸æ‰€æœ‰é¢å¤–çš„é¡¹ç›®ï¼ŒåŠ ä¸Š ";" å’Œå•
个å˜é‡:
:let [var1, var2; rest] = mylist
它的工作方å¼å°±åƒ:
:let var1 = mylist[0]
:let var2 = mylist[1]
:let rest = mylist[2:]
å¦‚æžœåªæœ‰ä¸¤ä¸ªé¡¹ç›®ï¼Œä¸ä¼šæŠ¥é”™ã€‚这时 "rest" æˆä¸ºç©ºè¡¨ã€‚
列表修改
*list-modification*
è¦ä¿®æ”¹åˆ—表的指定项目,用 |:let|:
:let list[4] = "four"
:let listlist[0][3] = item
è¦ä¿®æ”¹åˆ—表的一部分,å¯ä»¥æŒ‡å®šè¦ä¿®æ”¹çš„首末项目。æä¾›çš„值的个数必须ä¸å°‘于该范围内
的项目数:
:let list[3:5] = [3, 4, 5]
ç»™åˆ—è¡¨å¢žåŠ å’Œåˆ é™¤é¡¹ç›®å¯ä»¥é€šè¿‡å‡½æ•°å®Œæˆã€‚一些例å如下:
:call insert(list, 'a') " 在最å‰é¢æ’å…¥ 'a'
:call insert(list, 'a', 3) " 在 list[3] 剿’入项目 'a'
:call add(list, "new") " 在最åŽé™„åŠ å—符串项目
:call add(list, [1, 2]) " 在最åŽé™„åŠ æ–°çš„åˆ—è¡¨é¡¹ç›®
:call extend(list, [1, 2]) " åœ¨æœ€åŽæ‰©å±•列表,使之多包å«ä¸¤ä¸ªé¡¹ç›®
:let i = remove(list, 3) " åˆ é™¤é¡¹ç›® 3
:unlet list[3] " åŒä¸Š
:let l = remove(list, 3, -1) " 从项目 3 åˆ é™¤åˆ°æœ€åŽ
:unlet list[3 : ] " åŒä¸Š
:call filter(list, 'v:val !~ "x"') " åˆ é™¤æœ‰ 'x' 的项目
改å˜åˆ—表项目的顺åº:
:call sort(list) " æŒ‰å—æ¯ç»™åˆ—表排åº
:call reverse(list) " å转项目的顺åº
For 循环
|:for| 循环为æ¯ä¸ªåˆ—表项目执行命令。一个å˜é‡è¢«ä¾æ¬¡è®¾ä¸ºæ¯ä¸ªåˆ—表项目。例如:
:for item in mylist
: call Doit(item)
:endfor
它的工作方å¼å°±åƒ:
:let index = 0
:while index < len(mylist)
: let item = mylist[index]
: :call Doit(item)
: let index = index + 1
:endwhile
æ³¨æ„ æ‰€æœ‰åˆ—è¡¨é¡¹ç›®å¿…é¡»æ˜¯ç›¸åŒç±»åž‹ï¼Œä¸ç„¶ä¼šæŠ¥é”™ |E706|。è¦é¿å…这一点,在循环尾部
|:unlet| 该å˜é‡ã€‚
å¦‚æžœä½ åªæ˜¯æƒ³è¦ä¿®æ”¹æ¯ä¸ªåˆ—表项目,|map()| 函数比 for 循环简å•得多。
å°±åƒ |:let| 命令,|:for| 也å¯ä»¥æŽ¥å—å˜é‡çš„列表。这需è¦å‚数是列表的列表。
:for [lnum, col] in [[1, 3], [2, 8], [3, 0]]
: call Doit(lnum, col)
:endfor
这就åƒå¯¹åˆ—表的æ¯ä¸ªé¡¹ç›®ä½¿ç”¨äº† |:let| 命令。é‡å¤ä¸€æ¬¡ï¼Œç±»åž‹å¿…须相åŒï¼Œå¦åˆ™ä¼šæŠ¥é”™ã€‚
也å¯ä»¥ç”¨å˜é‡ä¿å˜åˆ—表å˜é‡çš„其余项目:
:for [i, j; rest] in listlist
: call Doit(i, j)
: if !empty(rest)
: echo "remainder: " . string(rest)
: endif
:endfor
列表的相关函数
*E714*
å¯ç”¨äºŽåˆ—表的函数:
:let r = call(funcname, list) " è°ƒç”¨å¸¦å‚æ•°åˆ—表的函数
:if empty(list) " 检查 list 是å¦ä¸ºç©º
:let l = len(list) " list 项目的数é‡
:let big = max(list) " list 项目的最大值
:let small = min(list) " list 项目的最å°å€¼
:let xs = count(list, 'x') " 计算 list 里 'x' 出现的次数
:let i = index(list, 'x') " list 第一个 'x' çš„ä½ç½®
:let lines = getline(1, 10) " 得到缓冲区å行文本行
:call append('$', lines) " é™„åŠ è‹¥å¹²æ–‡æœ¬è¡Œåˆ°ç¼“å†²åŒºå°¾éƒ¨
:let list = split("a b c") " 用å—符串ä¸çš„项目建立列表
:let string = join(list, ', ') " 用 list é¡¹ç›®æž„é€ å—符串
:let s = string(list) " list çš„å—符串表示
:call map(list, '">> " . v:val') " 在æ¯ä¸ªé¡¹ç›®å‰åŠ ä¸Š ">> "
ä¸è¦å¿˜è®°ç»„åˆä½¿ç”¨ä¸åŒåŠŸèƒ½å¯ä»¥ç®€åŒ–任务。例如,è¦è®¡ç®—åˆ—è¡¨ä¸æ‰€æœ‰æ•°å€¼çš„æ€»å’Œ:
:exe 'let sum = ' . join(nrlist, '+')
1.4 å—å…¸
*Dictionaries* *Dictionary*
å—å…¸æ˜¯å…³è”æ•°ç»„: æ¯ä¸ªé¡¹ç›®æœ‰ä¸€ä¸ªé”®å’Œä¸€ä¸ªå€¼ã€‚用键å¯ä»¥å®šä½é¡¹ç›®ï¼Œè€Œé¡¹ç›®çš„å˜å‚¨ä¸èƒ½ç¡®
定任何特定顺åºã€‚
å—典建立
*E720* *E721* *E722* *E723*
å—典通过花括å·é‡Œé€—å·åˆ†éš”的项目列表建立。æ¯ä¸ªé¡¹ç›®åŒ…å«ä»¥å†’å·åˆ†éš”的键和值。一个键
åªèƒ½å‡ºçŽ°ä¸€æ¬¡ã€‚ä¾‹å¦‚:
:let mydict = {1: 'one', 2: 'two', 3: 'three'}
:let emptydict = {}
*E713* *E716* *E717*
键必须是å—符串。用数值也å¯ä»¥ï¼Œä½†å®ƒæ€»è¢«è‡ªåŠ¨è½¬æ¢ä¸ºå—符串。所以å—符串 '4' 和数值
4 总会找到相åŒçš„é¡¹ç›®ã€‚æ³¨æ„ å—符串 '04' 和数值 04 是ä¸ä¸€æ ·çš„ï¼Œå› ä¸ºåŽè€…è¢«è½¬æ¢æˆ
å—符串 '4'。
值å¯ä»¥æ˜¯ä»»ä½•表达å¼ã€‚如果值本身是å—典,就å¯ä»¥å»ºç«‹åµŒå¥—çš„å—å…¸:
:let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}}
忽略末项之åŽçš„逗å·ã€‚
访问项目
常è§çš„è®¿é—®é¡¹ç›®çš„æ–¹å¼æ˜¯æŠŠé”®æ”¾å…¥æ–¹æ‹¬å·:
:let val = mydict["one"]
:let mydict["four"] = 4
ç”¨è¿™ç§æ–¹å¼å¯ä»¥ç»™å·²å˜åœ¨çš„å—å…¸å¢žåŠ æ–°é¡¹ç›®ï¼Œè¿™å’Œåˆ—è¡¨ä¸åŒã€‚
如果键åªåŒ…å«å—æ¯ã€æ•°å—和下划线,å¯ä»¥ä½¿ç”¨å¦‚ä¸‹å½¢å¼ |expr-entry|:
:let val = mydict.one
:let mydict.four = 4
å› ä¸ºé¡¹ç›®å¯ä»¥æ˜¯åŒ…括列表和å—å…¸çš„ä»»ä½•ç±»åž‹ï¼Œä½ å¯ä»¥åå¤ä½¿ç”¨ç´¢å¼•和键进行访问:
:echo dict.key[idx].key
å—典到列表的转æ¢
ä½ å¯ä»¥å¾ªçޝé历å—典的所有项目。为æ¤ï¼Œä½ éœ€è¦æŠŠå—å…¸è½¬ä¸ºåˆ—è¡¨ï¼Œç„¶åŽæŠŠå®ƒä¼ é€’ç»™
|:for|。
é€šå¸¸ï¼Œä½ æœŸæœ›é历所有的键,用 |keys()| 函数就å¯ä»¥äº†:
:for key in keys(mydict)
: echo key . ': ' . mydict[key]
:endfor
键列表没有ç»è¿‡æŽ’åºã€‚ä½ å¯èƒ½å¸Œæœ›å…ˆè¿›è¡ŒæŽ’åº:
:for key in sort(keys(mydict))
è¦é历所有的值,用 |values()| 函数:
:for v in values(mydict)
: echo "value: " . v
:endfor
å¦‚æžœä½ æƒ³åŒæ—¶å¾—到键和值,用 |items()| å‡½æ•°ã€‚å®ƒè¿”å›žä¸€ä¸ªåˆ—è¡¨ï¼Œå…¶ä¸æ¯ä¸ªé¡¹ç›®æ˜¯ä¸¤ä¸ª
项目的列表: 键和值:
:for [key, value] in items(mydict)
: echo key . ': ' . value
:endfor
å—å…¸åŒä¸€
*dict-identity*
å°±åƒåˆ—è¡¨é‚£æ ·ï¼Œä½ éœ€è¦ç”¨ |copy()| å’Œ |deepcopy()| æ¥æž„é€ å—典的备份。å¦åˆ™ï¼Œèµ‹å€¼äº§
生的结果会引用åŒä¸€ä¸ªå—å…¸:
:let onedict = {'a': 1, 'b': 2}
:let adict = onedict
:let adict['a'] = 11
:echo onedict['a']
11
如果所有的键-值组对的比较结果相åŒï¼Œä¸¤ä¸ªå—典比较的结果也相åŒã€‚详情è§
|list-identity|。
å—典修改
*dict-modification*
è¦ä¿®æ”¹å—典已ç»å˜åœ¨çš„é¡¹ç›®æˆ–è€…å¢žåŠ æ–°çš„é¡¹ç›®ï¼Œç”¨ |:let|:
:let dict[4] = "four"
:let dict['one'] = item
从å—å…¸é‡Œåˆ é™¤é¡¹ç›®å¯ä»¥é€šè¿‡ |remove()| 或 |:unlet| 完æˆã€‚
从 dict é‡Œåˆ é™¤é”® "aaa" çš„é¡¹ç›®æœ‰ä¸‰ç§æ–¹æ³•:
:let i = remove(dict, 'aaa')
:unlet dict.aaa
:unlet dict['aaa']
两个å—典的åˆå¹¶å¯ä»¥ç”¨ |extend()|:
:call extend(adict, bdict)
这使得 adict å¾—åˆ°æ‰©å±•ï¼ŒåŠ å…¥æ‰€æœ‰çš„ bdict 项目。对于é‡å¤çš„键,adict 项目被覆盖。
å¯é€‰çš„ç¬¬ä¸‰ä¸ªå‚æ•°å¯ä»¥æ”¹å˜è¿™ä¸€ç‚¹ã€‚
æ³¨æ„ è¿™ä¸å½±å“å—典项目的顺åºï¼Œä¸è¦å¸Œæœ› ":echo adict" 会先显示原有 adict 项目,
ç„¶åŽå†æ˜¾ç¤º bdict 的项目。
从å—å…¸é‡Œåˆ é™¤å¤šä¸ªé¡¹ç›®å¯ä»¥ç”¨ |filter()| 完æˆ:
:call filter(dict, 'v:val =~ "x"')
åˆ é™¤ "dict" 里所有值ä¸åŒ¹é… "x" 的项目。
å—典函数
*Dictionary-function* *self* *E725*
定义函数时,如果带有 "dict" 属性,å¯ä»¥ä»¥ä¸€ç§ç‰¹æ®Šæ–¹å¼ä½¿ç”¨å—典。例如:
:function Mylen() dict
: return len(self.data)
:endfunction
:let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")}
:echo mydict.len()
这类似于é¢å‘对象编程的方法。å—典项目用作 |Funcref|。局部å˜é‡ "self" 引用函数所
在的å—典。
å—典里也å¯ä»¥åŠ å…¥æŒ‡å‘æ²¡æœ‰ "dict" 属性的函数的函数引用,ä¸è¿‡è¿™æ—¶æ— 法使用 "self"
å˜é‡ã€‚
*numbered-function* *anonymous-function*
è¦é¿å…é¢å¤–的函数å,å¯ä»¥å®šä¹‰æ—¶ç›´æŽ¥èµ‹ç»™å—å…¸:
:let mydict = {'data': [0, 1, 2, 3]}
:function mydict.len() dict
: return len(self.data)
:endfunction
:echo mydict.len()
该函数会得到一个编å·ï¼Œè€Œ dict.len çš„å€¼æ˜¯æŒ‡å‘æ¤å‡½æ•°çš„ |Funcref|。该函数åªèƒ½é€šè¿‡
|Funcref| 访问。如果没有任何 |Funcref| å¼•ç”¨ï¼Œå®ƒä¼šè¢«è‡ªåŠ¨åˆ é™¤ã€‚
ç¼–å·å‡½æ•°ä¸ä¸€å®šè¦æœ‰ "dict" 属性。
å—典相关函数
*E715*
å¯ä»¥ç”¨äºŽå—典的函数:
:if has_key(dict, 'foo') " 如果 dict 有带 "foo" 键的项目则为真
:if empty(dict) " 如果 dict 为空则为真
:let l = len(dict) " dict 项目的数é‡
:let big = max(dict) " dict 项目的最大值
:let small = min(dict) " dict 项目的最å°å€¼
:let xs = count(dict, 'x') " 统计 dict 里 'x' 出现的数目
:let s = string(dict) " dict çš„å—符串表示
:call map(dict, '">> " . v:val') " 在æ¯ä¸ªé¡¹ç›®å‰åŠ ä¸Š ">> "
1.5 å˜é‡çš„æ›´å¤šç»†èŠ‚
*more-variables*
å¦‚æžœä½ éœ€è¦çŸ¥é“å˜é‡æˆ–表达å¼çš„类型,使用 |type()| 函数。
如果 'viminfo' é€‰é¡¹åŒ…å« '!' æ ‡å¿—ä½ï¼Œå¤§å†™å¼€å¤´ä¸”ä¸åŒ…å«å°å†™å—æ¯çš„全局å˜é‡è¢«ä¿å˜åœ¨
viminfo 文件里 |viminfo-file|。
如果 'sessionoptions' é€‰é¡¹åŒ…å« "global",大写开头且包å«è‡³å°‘一个å°å†™å—æ¯çš„全局
å˜é‡è¢«ä¿å˜åœ¨ä¼šè¯æ–‡ä»¶é‡Œ |session-file|。
å˜é‡å å¯ä»¥ä¿å˜çš„ä½ç½®
my_var_6 æ—
My_Var_6 ä¼šè¯æ–‡ä»¶
MY_VAR_6 viminfo 文件
å¯ä»¥ä½¿ç”¨èŠ±æ‹¬å·æ¥æž„é€ å˜é‡åï¼Œè§ |curly-braces-names|。
表达å¼è¯æ³•å°ç»“,优先级从低到高排列:
|expr1| expr2 ? expr1 : expr1 if-then-else
|expr2| expr3 || expr3 .. 逻辑或
|expr3| expr4 && expr4 .. 逻辑与
|expr4| expr5 == expr5 ç‰äºŽ
expr5 != expr5 ä¸ç‰äºŽ
expr5 > expr5 大于
expr5 >= expr5 大于ç‰äºŽ
expr5 < expr5 å°äºŽ
expr5 <= expr5 å°äºŽç‰äºŽ
expr5 =~ expr5 åŒ¹é…æ£è§„表达å¼
expr5 !~ expr5 ä¸åŒ¹é…æ£è§„表达å¼
expr5 ==? expr5 ç‰äºŽï¼Œå¿½ç•¥å¤§å°å†™
expr5 ==# expr5 ç‰äºŽï¼ŒåŒ¹é…大å°å†™
ç‰ç‰ 如上,? 忽略大å°å†™ï¼Œ# 则匹é…之
expr5 is expr5 相åŒçš„ |List| 实例
expr5 isnot expr5 ä¸åŒçš„ |List| 实例
|expr5| expr6 + expr6 .. æ•°å€¼åŠ æ³•æˆ–åˆ—è¡¨è¿žæŽ¥
expr6 - expr6 .. æ•°å€¼å‡æ³•
expr6 . expr6 .. å—符串连接
|expr6| expr7 * expr7 .. 数值乘法
expr7 / expr7 .. 数值除法
expr7 % expr7 .. 数值求余
|expr7| ! expr7 逻辑éž
- expr7 ä¸€å…ƒå‡æ³•: å–å
+ expr7 ä¸€å…ƒåŠ æ³•: 原值
|expr8| expr8[expr1] å—符串里的å—节或者 |List| 的项目
expr8[expr1 : expr1] å—符串å串或 |List| çš„å列表
expr8.name |Dictionary| 的项目
expr8(expr1, ...) 使用 |Funcref| å˜é‡çš„函数调用
|expr9| number 数值常数
"string" å—ç¬¦ä¸²å¸¸æ•°ï¼Œåæ–œæ 有特殊å«ä¹‰
'string' å—符串常数,' åŠ å€
[expr1, ...] |List|
{expr1: expr1, ...} |Dictionary|
&option 选项值
(expr1) 嵌套表达å¼
variable 内部å˜é‡
va{ria}ble 带花括å·çš„内部å˜é‡
$VAR 环境å˜é‡
@r 寄å˜å™¨ 'r' 的值
function(expr1, ...) 函数调用
func{ti}on(expr1, ...) 带花括å·çš„函数调用
".." æ ‡æ˜Žè¿™ä¸€å±‚ä¸Šçš„æ“作å¯ä»¥è¿žæŽ¥ã€‚比如:
&nu || &list && &shell == "csh"
åŒä¸€å±‚的表达å¼ä»Žå·¦åˆ°å³è¿›è¡Œåˆ†æžã€‚
expr1 *expr1* *E109*
expr2 ? expr1 : expr1
'?' 之å‰çš„表达å¼ä½œä¸ºæ•°å€¼æ±‚值。如果结果éžé›¶ï¼Œæœ€ç»ˆçš„结果是 '?' å’Œ ':' 之间的表达
å¼çš„值,ä¸ç„¶æœ€ç»ˆçš„结果是 ':' 之åŽçš„表达å¼çš„值。例如:
:echo lnum == 1 ? "top" : lnum
å› ä¸ºç¬¬ä¸€ä¸ªè¡¨è¾¾å¼æ˜¯ "expr2",它ä¸èƒ½åŒ…å«å¦ä¸€ä¸ª ?:。å¦å¤–两个表达å¼åˆ™æ²¡æœ‰è¿™ä¸ªé™
制,从而使得递归使用 ?: æˆä¸ºå¯èƒ½ã€‚例如:
:echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
è¦ä½¿ä¹‹å¯è¯»ï¼Œå»ºè®®ä½¿ç”¨ç»è¡Œç¬¦ |line-continuation|:
:echo lnum == 1
:\ ? "top"
:\ : lnum == 1000
:\ ? "last"
:\ : lnum
在 ':' å‰ï¼Œä½ æ€»æ˜¯åº”è¯¥åŠ ä¸Šç©ºæ ¼ï¼Œå¦åˆ™å®ƒå¯èƒ½è¢«é”™è¯¯ç”¨åœ¨å¦‚ "a:1" è¿™æ ·çš„å˜é‡é‡Œã€‚
expr2 和 expr3 *expr2* *expr3*
*expr-barbar* *expr-&&*
"||" å’Œ "&&" æ“作符左å³ä¸¤è¾¹å„接å—ä¸€ä¸ªå‚æ•°ã€‚傿•°æ˜¯ (或转化为) 数值。è¿ç®—结果是:
输入 输出
n1 n2 n1 || n2 n1 && n2
é›¶ é›¶ é›¶ é›¶
é›¶ éžé›¶ éžé›¶ é›¶
éžé›¶ é›¶ éžé›¶ é›¶
éžé›¶ éžé›¶ éžé›¶ éžé›¶
æ“作符å¯ä»¥è¿žæŽ¥ã€‚比如:
&nu || &list && &shell == "csh"
æ³¨æ„ "&&" 比 "||" 优先级高,所以这ç‰ä»·äºŽ:
&nu || (&list && &shell == "csh")
一旦结果å¯ä»¥ç¡®å®šï¼Œè¡¨è¾¾å¼ä½¿ç”¨ "çŸè·¯" 计算,也就是,ä¸å†è®¡ç®—åŽé¢çš„傿•°ï¼Œè¿™å’Œ C
的情形类似。比如:
let a = 1
echo a || b
è¿™æ˜¯åˆæ³•的,å³ä½¿æ²¡æœ‰å« "b" çš„å˜é‡ä¹Ÿæ˜¯å¦‚æ¤ã€‚å› ä¸º "a" å·²ç»æ˜¯éžé›¶å€¼ï¼Œç»“果必然是éž
零。下é¢çš„æƒ…形类似:
echo exists("b") && b == "yes"
æ— è®º "b" 定义与å¦ï¼Œè¿™æ˜¯åˆæ³•的。第二个åå¥åªæœ‰åœ¨ "b" 定义的时候æ‰ä¼šè¢«è®¡ç®—。
expr4 *expr4*
expr5 {cmp} expr5
比较两个 expr 表达å¼ï¼Œå¦‚果结果为å‡ï¼Œè¿”回 0,如果结果为真,返回 1。
*expr-==* *expr-!=* *expr->* *expr->=*
*expr-<* *expr-<=* *expr-=~* *expr-!~*
*expr-==#* *expr-!=#* *expr->#* *expr->=#*
*expr-<#* *expr-<=#* *expr-=~#* *expr-!~#*
*expr-==?* *expr-!=?* *expr->?* *expr->=?*
*expr-<?* *expr-<=?* *expr-=~?* *expr-!~?*
*expr-is*
使用 'ignorecase' 匹é…大å°å†™ 忽略大å°å†™
ç‰äºŽ == ==# ==?
ä¸ç‰äºŽ != !=# !=?
大于 > ># >?
大于ç‰äºŽ >= >=# >=?
å°äºŽ < <# <?
å°äºŽç‰äºŽ <= <=# <=?
åŒ¹é…æ£è§„è¡¨è¾¾å¼ =~ =~# =~?
ä¸åŒ¹é…æ£è§„è¡¨è¾¾å¼ !~ !~# !~?
相åŒå®žä¾‹ is
ä¸åŒå®žä¾‹ isnot
示例:
"abc" ==# "Abc" 结果为 0
"abc" ==? "Abc" 结果为 1
"abc" == "Abc" 如果置ä½äº† 'ignorecase',结果为 1,ä¸ç„¶ç»“果为 0
*E691* *E692*
|List| åªèƒ½å’Œ |List| 比较,而且åªèƒ½ç”¨ "ç‰äºŽ"ã€"ä¸ç‰äºŽ" å’Œ "is"。比较针对列表的
值,递归进行。忽略大å°å†™æ„å‘³ç€æ¯”较项目的值时忽略大å°å†™ã€‚
*E735* *E736*
|Dictionary| åªèƒ½å’Œ |Dictionary| 比较,而且åªèƒ½ç”¨ "ç‰äºŽ"ã€"ä¸ç‰äºŽ" å’Œ "is"。比
较针对 |Dictionary| 的键/值,递归进行。忽略大å°å†™æ„å‘³ç€æ¯”较项目的值时忽略大å°
写。
*E693* *E694*
|Funcref| åªèƒ½å’Œ |Funcref| 比较,而且åªèƒ½ç”¨ "ç‰äºŽ" å’Œ "ä¸ç‰äºŽ"。这里永ä¸å¿½ç•¥å¤§
å°å†™ã€‚
|List| 用 "is" 或 "isnot" æ—¶ï¼Œæ£€æŸ¥è¡¨è¾¾å¼æ˜¯å¦æŒ‡å‘åŒä¸€ä¸ª |List| 实例。|List| çš„
备份和原æ¥çš„ |List| ä¸åŒã€‚å¦‚æžœä¸æ˜¯ |List|,用 "is" ç‰ä»·äºŽç”¨ "ç‰äºŽ",而 "isnot"
ç‰ä»·äºŽ "ä¸ç‰äºŽ",有一点区别: ä¸åŒçš„类型总认为有ä¸åŒçš„值。"4 == '4'" 为真,而
"4 is '4'" 为å‡ã€‚
如果比较å—符串和数值,å—ç¬¦ä¸²è¢«è½¬åŒ–æˆæ•°å€¼ï¼Œè€Œæ¯”较是在数值之间进行的。这æ„味ç€
"0 == 'x'" ä¸ºçœŸï¼Œå› ä¸º 'x' è¢«è½¬åŒ–æˆæ•°å€¼ 0。
如果比较两个å—符串,使用 strcmp() 或 stricmp()ã€‚å› è€Œï¼Œæ¯”è¾ƒçš„æ˜¯æ•°å¦ä¸Šçš„差异 (比
较å—节ç ),而ä¸å¿…然是本地è¯è¨€çš„å—æ¯çš„差异。
如果æ“作符åŽå¸¦ä¸Š '#',或者 'ignorecase' 关闿—¶ä½¿ç”¨æ— '#' 的版本时,比较使用
strcmp(): 大å°å†™ç›¸å…³ã€‚
如果æ“作符åŽå¸¦ä¸Š '?',或者 'ignorecase' æ‰“å¼€æ—¶ä½¿ç”¨æ— '?' 的版本时,比较使用
stricmp(): 大å°å†™æ— 关。
这里 'smartcase' ä¸é€‚用。
"=~" å’Œ "!~" æ“作符使用å³è¾¹çš„傿•°ä½œä¸ºæ¨¡å¼æ¥åŒ¹é…å·¦è¾¹çš„å‚æ•°ã€‚模å¼çš„定义è§
|pattern|。匹é…进行时,总是å‡è®¾ç½®ä½äº† 'magic' 并且 'cpoptions' ä¸ºç©ºï¼Œæ— è®º
'magic' 或 'cpoptions' 实际的值为何。这使得脚本å¯ç§»æ¤ã€‚è¦é¿å…在æ£è§„表达å¼é‡Œä½¿
ç”¨çš„åæ–œæ 需è¦åŠ å€çš„问题,å¯ä»¥ä½¿ç”¨å•引å·çš„å—ç¬¦ä¸²ï¼Œè§ |literal-string|。
既然å—符串å‡å®šä¸ºå•è¡Œï¼Œå¤šè¡Œçš„æ¨¡å¼ (åŒ…å« \n,å³åæ–œæ -n) ä¸ä¼šè¢«åŒ¹é…。ä¸è¿‡ï¼ŒæŒ‰æœ¬
义出现的å•个 NL å—符å¯ä»¥åƒæ™®é€šå—ç¬¦ä¸€æ ·åŒ¹é…。比如:
"foo\nbar" =~ "\n" 结果为 1
"foo\nbar" =~ "\\n" 结果为 0
expr5 和 expr6 *expr5* *expr6*
expr6 + expr6 .. æ•°å€¼åŠ æ³•æˆ– |List| 连接 *expr-+*
expr6 - expr6 .. æ•°å€¼å‡æ³• *expr--*
expr6 . expr6 .. å—符串连接 *expr-.*
|Lists| åªèƒ½ç”¨ "+",而且两个 expr6 必须都是列表。返回两者连接以åŽçš„æ–°åˆ—表。
expr7 * expr7 .. 数值乘法 *expr-star*
expr7 / expr7 .. 数值除法 *expr-/*
expr7 % expr7 .. 数值求余 *expr-%*
除了 "." 以外,这里所有的æ“作都把å—ç¬¦ä¸²è½¬åŒ–æˆæ•°å€¼ã€‚
æ³¨æ„ "+" å’Œ "." 的差异:
"123" + "456" = 579
"123" . "456" = "123456"
如果 '/' çš„å³è¾¹ä¸ºé›¶ï¼Œç»“果为 0x7fffffff。
如果 '%' çš„å³è¾¹ä¸ºé›¶ï¼Œç»“果为 0。
这里没有能用于 |Funcref| çš„æ“作。
expr7 *expr7*
! expr7 é€»è¾‘éž *expr-!*
- expr7 ä¸€å…ƒå‡æ³•: å–å *expr-unary--*
+ expr7 ä¸€å…ƒåŠ æ³•: 原值 *expr-unary-+*
'!' 把éžé›¶å˜ä¸ºé›¶ï¼Œé›¶å˜ä¸º 1。
'-' æ”¹å˜æ•°å€¼çš„符å·ã€‚
'+' ä¿æŒåŽŸå€¼ã€‚
å—符串会先转化为数值。
å¯ä»¥é‡å¤å’Œæ··åˆè¿™ä¸‰ç§è¿ç®—。例如:
!-1 == 0
!!8 == 1
--9 == 9
expr8 *expr8*
expr8[expr1] å—符串或 |List| 的项目 *expr-[]* *E111*
如果 expr8 是数值或å—符串,结果是å—ç¬¦ä¸²ï¼ŒåŒ…å« expr8 里第 expr1 个å—节。expr8
视作å—符串,expr1 è§†ä½œæ•°å€¼ã€‚æ³¨æ„ è¿™é‡Œä¸è¯†åˆ«å¤šå—节编ç 。
索引 0 给出第一个å—符。这和 C ç±»åŒã€‚è¦å°å¿ƒ: 文本列å·å¯æ˜¯ä»Ž 1 开始的ï¼ä¾‹å¦‚,è¦
å¾—åˆ°å…‰æ ‡æ‰€åœ¨çš„å—符:
:let c = getline(line("."))[col(".") - 1]
如果å—符串的长度å°äºŽç´¢å¼•值,结果为空å—符串。负索引总是给出空å—符串 (åŽŸå› : åå‘
兼容)。用 [-1:] 得到最åŽä¸€ä¸ªå—节。
如果 expr8 是 |List|,返回索引值为 expr1 的项目。å¯ç”¨çš„ç´¢å¼•å€¼è§ |list-index|。
如果索引越界,产生错误。例如:
:let item = mylist[-1] " 得到最åŽä¸€ä¸ªé¡¹ç›®
一般的,如果 |List| 索引大于ç‰äºŽ |List| 的长度,或者比 |List| 的长度更负,产生
错误。
expr8[expr1a : expr1b] åå—符串或å列表 *expr-[:]*
如果 expr8 是数值或å—符串,结果是åå—符串,包å«ç¬¬ expr1a 到第 expr1b (包å«) 个
å—节。expr8 视作å—符串,expr1a å’Œ expr1b è§†ä½œæ•°å€¼ã€‚æ³¨æ„ è¿™é‡Œä¸è¯†åˆ«å¤šå—节编ç 。
如果çœç•¥ expr1a,用零。如果çœç•¥ expr1b,用å—符串的长度å‡ä¸€ã€‚
å¯ä»¥ç”¨è´Ÿæ•°æ¥ä»Žå—符串尾部开始计算ä½ç½®ã€‚-1 代表最åŽä¸€ä¸ªå—符,-2 å€’æ•°ç¬¬äºŒä¸ªï¼Œä¾æ¤
类推。
如果索引越界,忽略这些å—符。如果 expr1b å°äºŽ expr1a,结果是空å—符串。
例如:
:let c = name[-1:] " å—符串最åŽä¸€ä¸ªå—节
:let c = name[-2:-2] " å—符串倒数第二个å—节
:let s = line(".")[4:] " 从第五个å—节到最åŽ
:let s = s[:-3] " åˆ é™¤æœ€åŽä¸¤ä¸ªå—节
如果 expr8 是 |List|,结果是新的 |List|ï¼ŒåŒ…å« expr1 å’Œ expr1b 索引指定的项目。
å’Œä¸Šé¢æè¿°çš„å—符串情形类似,除了越界的索引会报错以外。例如:
:let l = mylist[:3] " å‰å››ä¸ªé¡¹ç›®
:let l = mylist[4:4] " å•个项目的列表
:let l = mylist[:] " 列表的浅备份
在 |Funcref| 上用 expr8[expr1] 或 expr8[expr1a : expr1b] 出错。
expr8.name |Dictionary| 的项目 *expr-entry*
如果 expr8 是一个 |Dictionary| 且åŽè·Ÿå¥å·å†è·Ÿä¸€ä¸ªåå—,该åå—用作 |Dictionary|
的键。这相当于: expr8[name]。
该åå—å¿…é¡»ç”±å—æ¯æ•°å—å—符组æˆã€‚这和å˜é‡åä¸€æ ·ï¼Œä¸è¿‡è¿™é‡Œå¯ä»¥ç”¨æ•°å—开始。但ä¸èƒ½ç”¨
花括å·ã€‚
å¥å·å‰åŽä¸èƒ½ç”¨ç©ºç™½ã€‚
例如:
:let dict = {"one": 1, 2: "two"}
:echo dict.one
:echo dict .2
æ³¨æ„ å¥å·ä¹Ÿç”¨äºŽå—符串连接。è¦é¿å…混淆,用于å—符串连接的å¥å·å‰åŽåŠ ä¸Šç©ºç™½ã€‚
expr8(expr1, ...) |Funcref| 函数调用
如果 expr8 是 |Funcref| 类型的å˜é‡ï¼Œè°ƒç”¨å®ƒæŒ‡å‘的函数。
*expr9*
number
number 数值常数 *expr-number*
å进制ã€åå…进制 (0x 或 0X 开始)ã€æˆ–八进制 (0 开始)。
string *expr-string* *E114*
"string" å—符串常数 *expr-quote*
æ³¨æ„ ä½¿ç”¨çš„æ˜¯åŒå¼•å·ã€‚
å—符串常数接å—以下特殊å—符:
\... 三ä½å…«è¿›åˆ¶æ•° (例如,"\316")
\.. 两ä½å…«è¿›åˆ¶æ•° (å¿…é¡»åŽè·Ÿéžæ•°å—)
\. 一ä½å…«è¿›åˆ¶æ•° (å¿…é¡»åŽè·Ÿéžæ•°å—)
\x.. 两ä½åå…进制数指定的å—节 (例如,"\x1f")
\x. 一ä½åå…进制数指定的å—节 (å¿…é¡»åŽè·Ÿéžåå…进制数å—)
\X.. ç‰åŒäºŽ \x..
\X. ç‰åŒäºŽ \x.
\u.... å››ä½åå…进制指定的å—ç¬¦ã€‚æ ¹æ® 'encoding' 的当å‰å€¼å†³å®šçš„ç¼–ç 进行å˜è´® (例
如,"\u02a4")
\U.... ç‰åŒäºŽ \u.....
\b é€€æ ¼ <BS>
\e escape <Esc>
\f æ¢é¡µ <FF>
\n æ¢è¡Œ <NL>
\r 回车 <CR>
\t 制表 <Tab>
\\ åæ–œæ
\" åŒå¼•å·
\<xxx> "xxx" 命å的特殊å—符,例如 "\<C-W>" 代表 CTRL-W。
æ³¨æ„ "\xff" ä¿å˜ä¸ºå—节 255,在æŸäº›ç¼–ç ä¸å®ƒæ˜¯ä¸åˆæ³•的。使用 "\u00ff" å¯ä»¥æŒ‰ç…§
'encoding' 的当å‰å€¼ä¿å˜å—符 255。
æ³¨æ„ "\000" å’Œ "\x00" 强制å—符串结æŸã€‚
literal-string *literal-string* *E115*
'string' å—符串常数 *expr-'*
æ³¨æ„ ä½¿ç”¨çš„æ˜¯å•引å·ã€‚
å—符串这里按原义出现。ä¸åŽ»æŽ‰åæ–œæ ,它也没有特殊å«ä¹‰ã€‚唯一的特例是两个å•引å·ä»£
表一个å•引å·ã€‚
å•引å·å—符串有助于模å¼çš„ä½¿ç”¨ï¼Œå› ä¸ºåæ–œæ ä¸å†éœ€è¦åŠ å€ã€‚以下两个命令ç‰ä»·:
if a =~ "\\s*"
if a =~ '\s*'
option *expr-option* *E112* *E113*
&option 选项值,如有å˜åœ¨ï¼Œä½¿ç”¨å±€éƒ¨å€¼
&g:option 全局选项值
&l:option 局部选项值
例如:
echo "tabstop is " . &tabstop
if &insertmode
这里å¯ä»¥ä½¿ç”¨ä»»ä½•é€‰é¡¹å€¼ã€‚è§ |options|。如果指定è¦ä½¿ç”¨å±€éƒ¨å€¼ï¼Œä½†ä¸å˜åœ¨å±€éƒ¨äºŽç¼“冲
区或局部于窗å£çš„选项,则还是使用全局值。
register *expr-register* *@r*
@r 寄å˜å™¨ 'r' 的值
结果是命å寄å˜å™¨çš„内容,以å•个å—符串表达。æ¢è¡Œç¬¦åœ¨éœ€è¦æ—¶ä¼šè¢«æ’入。è¦å¾—åˆ°æ— å寄
å˜å™¨çš„内容,使用 @" 或 @@。å¯ç”¨å¯„å˜å™¨çš„相关解释å¯è§ |registers|。
如果用 '=' 寄å˜å™¨ï¼Œä½ 得到表达å¼è‡ªèº«ï¼Œè€Œä¸æ˜¯å®ƒè®¡ç®—的结果。用 |eval()| æ¥è¿›è¡Œè®¡
算。
nesting *expr-nesting* *E110*
(expr1) 嵌套表达å¼
environment variable *expr-env*
$VAR 环境å˜é‡
任何环境å˜é‡çš„å—符串值。如果该环境å˜é‡æ²¡æœ‰å®šä¹‰ï¼Œç»“果为空å—符串。
*expr-env-expand*
æ³¨æ„ ç›´æŽ¥ä½¿ç”¨ $VAR 和使用 expand("$VAR") 有区别。直接使用的形å¼åªèƒ½æ‰©å±•当å‰
Vim ä¼šè¯æ‰€çŸ¥çš„环境å˜é‡ã€‚使用 expand() 会先å°è¯•å½“å‰ Vim ä¼šè¯æ‰€çŸ¥çš„环境å˜é‡ï¼Œå¦‚
æžœä¸æˆåŠŸï¼Œåˆ™ä½¿ç”¨å¤–å£³æ‰©å±•è¯¥å˜é‡ã€‚è¿™ä¼šå˜æ…¢ï¼Œä½†å¯ä»¥ç”¨æ¥æ‰©å±•åªæœ‰å¤–壳知é“çš„å˜é‡ã€‚
例如:
:echo $version
:echo expand("$version")
å‰è€…å¯èƒ½ä¸ä¼šå›žæ˜¾ä»»ä½•内容,åŽè€…会回显 $version å˜é‡ (å¦‚æžœä½ çš„å¤–å£³æ”¯æŒçš„è¯)。
internal variable *expr-variable*
variable 内部å˜é‡
è§ä¸‹é¢çš„ |internal-variables|。
function call *expr-function* *E116* *E118* *E119* *E120*
function(expr1, ...) 函数调用
è§ä¸‹é¢çš„ |functions|。
*E461*
内部å˜é‡çš„åå—ç”±å—æ¯ã€æ•°å—å’Œ '_' 组æˆã€‚但ä¸èƒ½ç”±æ•°å—开始。å¯ä»¥ä½¿ç”¨èŠ±æ‹¬å·ï¼Œè§
|curly-braces-names|。
内部å˜é‡é€šè¿‡ ":let" 命令建立 |:let|。
内部å˜é‡é€šè¿‡ ":unlet" 命令显å¼åˆ 除 |:unlet|。
使用éžå†…部å˜é‡çš„åå—æˆ–引用已ç»åˆ 除的内部å˜é‡ä¼šäº§ç”Ÿé”™è¯¯ã€‚
å˜é‡æœ‰ä¸åŒçš„命åç©ºé—´ï¼Œæ ¹æ®é™„åŠ çš„å‰ç¼€å†³å®š:
(æ— ) 函数内: 局部于函数;å¦åˆ™: 全局
|buffer-variable| b: 局部于当å‰ç¼“冲区。
|window-variable| w: 局部于当å‰çª—å£ã€‚
|tabpage-variable| t: å±€éƒ¨äºŽå½“å‰æ ‡ç¾é¡µã€‚
|global-variable| g: 全局。
|local-variable| l: 局部于函数。
|script-variable| s: 局部于 |:source| 的 Vim 脚本。
|function-argument| a: å‡½æ•°å‚æ•° (åªé™äºŽå‡½æ•°å†…使用)。
|vim-variable| v: Vim 预定义的全局å˜é‡ã€‚
作用域本身å¯ä»¥ç”¨ä½œ |Dictionary|。例如,è¦åˆ 除所有局部于脚本的å˜é‡:
:for k in keys(s:)
: unlet s:[k]
:endfor
*buffer-variable* *b:var*
"b:" 开头的å˜é‡å局部于当å‰ç¼“å†²åŒºã€‚è¿™æ ·ï¼Œä½ å¯ä»¥ä¸ºæ¯ä¸ªç¼“冲区定义ä¸åŒçš„ "b:foo"
å˜é‡ã€‚è¿™ç§å˜é‡åœ¨ç¼“å†²åŒºè¢«åˆ é™¤æ—¶ (:bwipeout 或 :bdelete |:bdelete|) åŒæ—¶è¢«åˆ 除。
预定义了如下的缓冲区局部å˜é‡:
*b:changedtick-variable* *changetick*
b:changedtick 当å‰ç¼“å†²åŒºçš„æ”¹å˜æ¬¡æ•°ã€‚æ¯æ¬¡æ”¹å˜éƒ½ä¼šé€’å¢žã€‚æ’¤é”€å‘½ä»¤åœ¨æ¤æƒ…形下也被
视作一次改å˜ã€‚è¿™å¯ç”¨æ¥åœ¨ç¼“冲区å‘ç”Ÿæ”¹å˜æ—¶æ‰§è¡Œä¸€äº›åŠ¨ä½œã€‚æ¯”å¦‚:
:if my_changedtick != b:changedtick
: let my_changedtick = b:changedtick
: call My_Update()
:endif
*window-variable* *w:var*
"w:" 开头的å˜é‡å局部于当å‰çª—å£ã€‚窗å£å…³é—æ—¶è¢«åˆ é™¤ã€‚
*tabpage-variable* *t:var*
"t" 开始的å˜é‡åå±€éƒ¨äºŽå½“å‰æ ‡ç¾é¡µã€‚æ ‡ç¾é¡µå…³é—时,这些å˜é‡è¢«åˆ 除。{仅当编译时åŠ
å…¥ +windows ç‰¹æ€§æ‰æœ‰æ•ˆ}
*global-variable* *g:var*
函数内部,全局å˜é‡å¯ä»¥é€šè¿‡ "g:" è®¿é—®ã€‚å¦‚æžœä¸æä¾›å‰ç¼€ï¼Œä¼šä½¿ç”¨å‡½æ•°çš„局部å˜é‡ã€‚在
å…¶ä»–åœ°æ–¹ï¼Œå¦‚æžœä½ æƒ³çš„è¯ã€‚也å¯ä»¥ä½¿ç”¨ "g:"。
*local-variable* *l:var*
访问函数的局部å˜é‡æ— 需任何å‰ç¼€ã€‚ä½†å¦‚æžœä½ æƒ³è¦ï¼Œå¯ä»¥ä½¿ç”¨ "l:"。ä¸è¿‡ï¼Œå¦‚果没有
"l:" å‰ç¼€ï¼Œä½ å¯èƒ½ä¼šå’Œä¿ç•™çš„å˜é‡å冲çªã€‚例如 "count"。它本身指代 "v:count"。但
使用了 "l:count" ä½ å°±å¯ä»¥ä½¿ç”¨åŒå的局部å˜é‡ã€‚
*script-variable* *s:var*
Vim 脚本里,å¯ä»¥ä½¿ç”¨ "s:" 开头的å˜é‡ã€‚它们ä¸èƒ½åœ¨è„šæœ¬ä¹‹å¤–è®¿é—®ï¼Œå› è€Œå¯ä»¥ç§°ä¸ºå±€éƒ¨
于脚本的å˜é‡ã€‚
它们å¯ä»¥ç”¨äºŽ:
- 载入脚本时执行的命令
- 脚本定义的函数
- 脚本定义的自动命令
- 脚本定义的函数和自动命令里定义的函数和自动命令 (递归)
- 脚本里定义的用户定义命令
但ä¸èƒ½ç”¨åœ¨:
- 该脚本载入的其它脚本
- æ˜ å°„
- ç‰ç‰
脚本å˜é‡å¯ä»¥ç”¨æ¥é˜²æ¢å’Œå…¨å±€å˜é‡å的冲çªã€‚看看这个例å:
let s:counter = 0
function MyCounter()
let s:counter = s:counter + 1
echo s:counter
endfunction
command Tick call MyCounter()
ä½ å¯ä»¥ä»Žä»»ä½•脚本里å¯åЍ "Tick",但那个脚本里的 "s:counter" å˜é‡ä¸ä¼šè¢«æ”¹å˜ï¼Œåªæœ‰
在 "Tick" 定义所在脚本的 "s:counter" æ‰ä¼šã€‚
å¦ä¸€ä¸ªå®Œæˆç›¸åŒåŠŸèƒ½çš„ä¾‹å:
let s:counter = 0
command Tick let s:counter = s:counter + 1 | echo s:counter
如果调用函数或者å¯åŠ¨ç”¨æˆ·å®šä¹‰å‘½ä»¤ï¼Œè„šæœ¬å˜é‡çš„上下文设置为函数和命令定义所在的脚
本。
脚本å˜é‡ä¹Ÿå¯ç”¨äºŽè„šæœ¬é‡Œå®šä¹‰çš„å‡½æ•°é‡Œå®šä¹‰çš„å‡½æ•°ã€‚ä¾‹å¦‚:
let s:counter = 0
function StartCounting(incr)
if a:incr
function MyCounter()
let s:counter = s:counter + 1
endfunction
else
function MyCounter()
let s:counter = s:counter - 1
endfunction
endif
endfunction
调用 StartCounting() 时,定义 MyCounter() 函数或者递增或者递å‡è®¡æ•°å™¨ã€‚ä¸ç®¡
StartCounting() 在哪里调用,s:counter å˜é‡æ€»å¯ä»¥åœ¨ MyCounter() 里访问。
如果相åŒçš„脚本多次执行,使用的是åŒä¸€ä¸ªè„šæœ¬å˜é‡ã€‚åªè¦ Vim 还在è¿è¡Œï¼Œå°±ä¿æŒæœ‰
效。这å¯ä»¥ç”¨äºŽç»´æŠ¤è®¡æ•°:
if !exists("s:counter")
let s:counter = 1
echo "脚本首次执行"
else
let s:counter = s:counter + 1
echo "脚本现在执行了 " . s:counter . " 次"
endif
æ³¨æ„ è¿™æ„å‘³ç€ filetype æ’ä»¶ä¸èƒ½ä¸ºæ¯ä¸ªç¼“冲区æä¾›ä¸åŒçš„脚本å˜é‡ã€‚这时应使用缓冲
区的局部å˜é‡ |b:var|。
预定义的 Vim å˜é‡: *vim-variable* *v:var*
*v:beval_col* *beval_col-variable*
v:beval_col é¼ æ ‡æŒ‡é’ˆæ‰€åœ¨çš„åˆ—å·ï¼Œå³ |v:beval_lnum| 行ä¸çš„å—节ä½ç½®ã€‚
仅当计算 'balloonexpr' 选项时有效。
*v:beval_bufnr* *beval_bufnr-variable*
v:beval_bufnr é¼ æ ‡æŒ‡é’ˆæ‰€åœ¨çš„ç¼“å†²åŒºå·ã€‚仅当计算 'balloonexpr' 选项时有效。
*v:beval_lnum* *beval_lnum-variable*
v:beval_lnum é¼ æ ‡æŒ‡é’ˆæ‰€åœ¨çš„è¡Œå·ã€‚仅当计算 'balloonexpr' 选项时有效。
*v:beval_text* *beval_text-variable*
v:beval_text é¼ æ ‡æŒ‡é’ˆæ‰€åœ¨æˆ–ä¹‹åŽçš„æ–‡æœ¬ã€‚通常是一个å•è¯ï¼Œå¯ç”¨äºŽè°ƒè¯• C 程åºã€‚
æ¤å¤„用到 'iskeyword',但也包括æ¤ä½ç½®ä¹‹å‰çš„å¥å·å’Œ "->"。如果在
']' 上,使用它之å‰çš„æ–‡æœ¬ï¼ŒåŒ…括匹é…çš„ '[' 和它之å‰çš„å•è¯ã€‚如果
在å•行的å¯è§†åŒºåŸŸä¸Šï¼Œä½¿ç”¨é«˜äº®æ–‡æœ¬ã€‚
仅当计算 'balloonexpr' 选项时有效。
*v:beval_winnr* *beval_winnr-variable*
v:beval_winnr é¼ æ ‡æŒ‡é’ˆæ‰€åœ¨çš„çª—å£å·ã€‚仅当计算 'balloonexpr' 选项时有效。
*v:char* *char-variable*
v:char 计算 'formatexpr' æ—¶ä½¿ç”¨çš„å‚æ•°ã€‚
*v:charconvert_from* *charconvert_from-variable*
v:charconvert_from
è¦è½¬æ¢çš„æ–‡ä»¶å—符编ç å。åªåœ¨è®¡ç®— 'charconvert' 选项时有效。
*v:charconvert_to* *charconvert_to-variable*
v:charconvert_to
转æ¢åŽçš„æ–‡ä»¶å—符编ç å。åªåœ¨è®¡ç®— 'charconvert' 选项时有效。
*v:cmdarg* *cmdarg-variable*
v:cmdarg 该å˜é‡æœ‰ä¸¤ä¸ªç›®çš„:
1. 文件读写命令的é¢å¤–傿•°ã€‚ç›®å‰ï¼Œå®ƒä»¬åŒ…括 "++enc=" å’Œ
"++ff="。该å˜é‡åœ¨æ–‡ä»¶è¯»å†™å‘½ä»¤çš„自动命令事件激活之å‰è®¾ç½®ã€‚å¼€
å¤´æœ‰ä¸€ä¸ªç©ºæ ¼ï¼Œä»¥ä¾¿ç›´æŽ¥æŠŠè¯¥å˜é‡é™„åŠ åˆ°è¯»å†™å‘½ä»¤ä¹‹åŽã€‚注æ„: è¿™
里ä¸åŒ…括 "+cmd" 傿•°ï¼Œå› 为它总è¦è¢«æ‰§è¡Œçš„。
2. 使用 ":hardcopy" æ‰“å° PostScript 文件时,":hardcopy" 命令的
傿•°ã€‚在 'printexpr' 里用得到。
*v:cmdbang* *cmdbang-variable*
v:cmdbang 文件读写命令时,和 v:cmdarg 设置的时间类似。如果使用了 "!",其
值为 1,ä¸ç„¶ä¸º 0ã€‚æ³¨æ„ å®ƒåªèƒ½ç”¨äºŽè‡ªåŠ¨å‘½ä»¤ã€‚ç”¨æˆ·å‘½ä»¤é‡Œå¯ä»¥ç”¨
|<bang>|。
*v:count* *count-variable*
v:count 最近的普通模å¼å‘½ä»¤ä½¿ç”¨çš„è®¡æ•°ã€‚åœ¨æ˜ å°„å‰å¯ç”¨äºŽå¾—到计数。åªè¯»ã€‚
例如:
:map _x :<C-U>echo "计数为 " . v:count<CR>
注æ„: <C-U> 是必è¦çš„ï¼Œå®ƒåˆ é™¤ç´§è·Ÿåœ¨è®¡æ•°ä¹‹åŽ ':' 所给出的行范
围。
也用于计算 'formatexpr' 选项。
为了åŽå‘兼容,这里也å¯ä»¥ç”¨ "count"。
*v:count1* *count1-variable*
v:count1 类似于 "v:count",但没有给出计数时,缺çœä¸º 1。
*v:ctype* *ctype-variable*
v:ctype è¿è¡ŒçŽ¯å¢ƒå½“å‰çš„å—符 locale 设置。它使得 Vim 脚本能得到当å‰çš„
locale ç¼–ç 。技术细节: 这就是 LC_CTYPE 的值。如果没有使用
locale,其值为 "C"。
该å˜é‡ä¸èƒ½ç›´æŽ¥è®¾ç½®ï¼Œè¯·ä½¿ç”¨ |:language| 命令。
è§ |multi-lang|。
*v:dying* *dying-variable*
v:dying 通常为零。如果æ•获到æŸä¸ª "致命" çš„ signal,设为 1ã€‚å¦‚æžœåŒæ—¶æ•
获到多个 signalï¼Œå…¶å€¼ç›¸åº”å¢žåŠ ã€‚åœ¨è‡ªåŠ¨å‘½ä»¤é‡Œå¯ä»¥ç”¨æ¥æ£€æŸ¥ Vim
是å¦è¢«å¼‚常终æ¢ã€‚{ä»…é™äºŽ Unix}
例如:
:au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif
*v:errmsg* *errmsg-variable*
v:errmsg 最近给出的错误信æ¯ã€‚该å˜é‡å¯ä»¥è®¾ç½®ã€‚
例如:
:let v:errmsg = ""
:silent! next
:if v:errmsg != ""
: ... handle error
为了åŽå‘兼容,这里也å¯ä»¥ç”¨ "errmsg"。
*v:exception* *exception-variable*
v:exception 最近æ•获且没有完æˆçš„ä¾‹å¤–çš„å€¼ã€‚è§ |v:throwpoint| å’Œ
|throw-variables|。
例如:
:try
: throw "oops"
:catch /.*/
: echo "caught" v:exception
:endtry
输出: "caught oops"。
*v:fcs_reason* *fcs_reason-variable*
v:fcs_reason 激活 |FileChangedShell| äº‹ä»¶çš„åŽŸå› ã€‚
å¯ä»¥åœ¨è‡ªåŠ¨å‘½ä»¤é‡Œç”¨æ¥å†³å®šè¯¥åšä»€ä¹ˆå’Œ/或如何设置 v:fcs_choice。å¯
能的值是:
deleted 文件ä¸å†å˜åœ¨
conflict æ–‡ä»¶å†…å®¹ã€æ¨¡å¼æˆ–修改时间被改å˜ï¼Œè€Œç¼“冲
åŒºåŒæ—¶è¢«ä¿®æ”¹
changed 文件内容被改å˜
mode 文件模å¼è¢«æ”¹å˜
time 文件修改时间被改å˜
*v:fcs_choice* *fcs_choice-variable*
v:fcs_choice |FileChangedShell| 事件激活åŽè¯¥åšä»€ä¹ˆã€‚å¯ä»¥åœ¨è‡ªåŠ¨å‘½ä»¤é‡Œç”¨æ¥å‘Š
诉 Vim å¦‚ä½•å¤„ç†æ¶‰åŠçš„缓冲区:
reload 釿–°è½½å…¥ç¼“冲区 (å¦‚æžœæ–‡ä»¶å·²åˆ é™¤ï¼Œä¸èƒ½å·¥
作)。
ask 询问用户该åšä»€ä¹ˆï¼Œå°±åƒæ²¡æœ‰è‡ªåЍ命令䏀
æ ·ã€‚ä¸è¿‡ï¼Œå¦‚æžœåªæœ‰ä¿®æ”¹æ—¶é—´è¢«æ”¹å˜ï¼Œä¸åš
任何事。
<空> ä¸åšä»»ä½•事。自动命令应该已ç»å¤„ç†å®Œæ¯•。
缺çœä¸ºç©ºã€‚如果使用别的 (éžæ³•çš„) 值,Vim 的行为就åƒå®ƒä¸ºç©ºä¸€æ ·ã€‚
ä¸ä¼šæœ‰è¦å‘Šä¿¡æ¯ã€‚
*v:fname_in* *fname_in-variable*
v:fname_in 输入文件åã€‚åœ¨è®¡ç®—ä»¥ä¸‹é€‰é¡¹æ—¶åˆæ³•:
选项 用于
'charconvert' è¦è½¬æ¢çš„æ–‡ä»¶
'diffexpr' 原始文件
'patchexpr' 原始文件
'printexpr' è¦æ‰“å°çš„æ–‡ä»¶
|SwapExists| é‡Œè®¾ä¸ºäº¤æ¢æ–‡ä»¶å。
*v:fname_out* *fname_out-variable*
v:fname_out 输出文件åã€‚åªæœ‰åœ¨è®¡ç®—以下选项时æ‰åˆæ³•:
选项 用于
'charconvert' 生æˆçš„转æ¢å®Œæˆçš„æ–‡ä»¶ (*)
'diffexpr' diff 的结果
'patchexpr' äº§ç”Ÿçš„è¡¥ä¸æ–‡ä»¶
(*) å¦‚æžœç”¨äºŽä¸ºå†™å…¥å‘½ä»¤è¿›è¡Œè½¬æ¢ (比如,":w file"),ç‰ä»·äºŽ
v:fname_inã€‚å¦‚æžœç”¨äºŽä¸ºè¯»å…¥å‘½ä»¤è¿›è¡Œè½¬æ¢ (比如,":e file"),它是
一个临时文件å,和 v:fname_in ä¸åŒã€‚
*v:fname_new* *fname_new-variable*
v:fname_new 文件新版本的åå—ã€‚åªæœ‰åœ¨è®¡ç®— 'diffexpr' çš„æ—¶å€™æ‰æœ‰æ•ˆã€‚
*v:fname_diff* *fname_diff-variable*
v:fname_diff 比较结果 (或补ä¸) 的文件åã€‚åªæœ‰åœ¨è®¡ç®— 'patchexpr' çš„æ—¶å€™æ‰æœ‰
效。
*v:folddashes* *folddashes-variable*
v:folddashes 用于 'foldtext': åæ˜ å…³é—的折å 的折å 级别的连å—符。
|sandbox| 里åªè¯»ã€‚|fold-foldtext|
*v:foldlevel* *foldlevel-variable*
v:foldlevel 用于 'foldtext': å…³é—的折å 的折å 级别。
|sandbox| 里åªè¯»ã€‚|fold-foldtext|
*v:foldend* *foldend-variable*
v:foldend 用于 'foldtext': å…³é—的折å 的最åŽä¸€è¡Œã€‚
|sandbox| 里åªè¯»ã€‚|fold-foldtext|
*v:foldstart* *foldstart-variable*
v:foldstart 用于 'foldtext': å…³é—的折å 的第一行。
|sandbox| 里åªè¯»ã€‚|fold-foldtext|
*v:insertmode* *insertmode-variable*
v:insertmode 用于 |InsertEnter| å’Œ |InsertChange| 自动命令事件。å–值:
i æ’入模å¼
r æ›¿æ¢æ¨¡å¼
v è™šæ‹Ÿæ›¿æ¢æ¨¡å¼
*v:key* *key-variable*
v:key |Dictionary| 里当å‰é¡¹ç›®çš„é”®ã€‚åªæœ‰åœ¨ |map()| å’Œ |filter()| 里计
ç®—è¡¨è¾¾å¼æ—¶æœ‰æ•ˆã€‚
åªè¯»ã€‚
*v:lang* *lang-variable*
v:lang è¿è¡ŒçŽ¯å¢ƒå½“å‰çš„æ¶ˆæ¯ locale 设置。它使得 Vim 脚本能得到当å‰ä½¿ç”¨
çš„è¯è¨€ã€‚技术细节: 这就是 LC_MESSAGES 的值。该值和系统有关。
该å˜é‡ä¸èƒ½ç›´æŽ¥è®¾ç½®ï¼Œè¯·ä½¿ç”¨ |:language| 命令。
它和 |v:ctype| ä¸åŒï¼Œå› 为消æ¯å¯èƒ½ä½¿ç”¨ä¸åŒäºŽå—符编ç çš„è¯è¨€ã€‚è§
|multi-lang|。
*v:lc_time* *lc_time-variable*
v:lc_time è¿è¡ŒçŽ¯å¢ƒå½“å‰çš„æ—¶é—´æ¶ˆæ¯ locale 设置。它使得 Vim
脚本能得到当å‰ä½¿ç”¨çš„è¯è¨€ã€‚技术细节: 这就是 LC_TIME 的值。
该å˜é‡ä¸èƒ½ç›´æŽ¥è®¾ç½®ï¼Œè¯·ä½¿ç”¨ |:language| å‘½ä»¤ã€‚è§ |multi-lang|。
*v:lnum* *lnum-variable*
v:lnum 'foldexpr' |fold-expr| å’Œ 'indentexpr' 表达å¼é‡Œçš„行å·ï¼Œè¿˜æœ‰
'guitablevel' å’Œ 'guitabtooltip' é‡Œçš„æ ‡ç¾é¡µå·ã€‚åªæœ‰åœ¨è®¡ç®—这些
表达å¼çš„æ—¶å€™æ‰åˆæ³•。|sandbox| 里åªè¯»ã€‚
*v:mouse_win* *mouse_win-variable*
v:mouse_win 用 |getchar()| å¾—åˆ°é¼ æ ‡ç‚¹å‡»æ—¶æ‰€åœ¨çš„çª—å£å·ã€‚首个窗å£çš„ç¼–å·ä¸º
1 ï¼Œå°±åƒ |winnr()| é‚£æ ·ã€‚å¦‚æžœé‚£æ—¶æ²¡æœ‰é¼ æ ‡ç‚¹å‡»ï¼Œè¯¥å€¼ä¸ºé›¶ã€‚
*v:mouse_lnum* *mouse_lnum-variable*
v:mouse_lnum 用 |getchar()| å¾—åˆ°é¼ æ ‡ç‚¹å‡»æ—¶æ‰€åœ¨çš„è¡Œå·ã€‚这是文本行å·ï¼Œä¸æ˜¯å±
幕行å·ã€‚å¦‚æžœé‚£æ—¶æ²¡æœ‰é¼ æ ‡ç‚¹å‡»ï¼Œè¯¥å€¼ä¸ºé›¶ã€‚
*v:mouse_col* *mouse_col-variable*
v:mouse_col 用 |getchar()| å¾—åˆ°é¼ æ ‡ç‚¹å‡»æ—¶æ‰€åœ¨çš„åˆ—å·ã€‚这是å±å¹•列å·ï¼Œå°±åƒ
|virtcol()| é‚£æ ·ã€‚å¦‚æžœé‚£æ—¶æ²¡æœ‰é¼ æ ‡ç‚¹å‡»ï¼Œè¯¥å€¼ä¸ºé›¶ã€‚
*v:prevcount* *prevcount-variable*
v:prevcount 倒数第二次的普通模å¼å‘½ä»¤ä½¿ç”¨çš„计数,也就是å†ä¸Šä¸€ä¸ªå‘½ä»¤ç”¨çš„
v:count 的值。å¯ä»¥ç”¨æ¥å…ˆä¸æ¢å¯è§†æ¨¡å¼ï¼Œç„¶åŽä½¿ç”¨è®¡æ•°ã€‚
:vmap % <Esc>:call MyFilter(v:prevcount)<CR>
åªè¯»ã€‚
*v:profiling* *profiling-variable*
v:profiling 通常为零。开始用 ":profile start" 之åŽè®¾ä¸ºä¸€ã€‚è§ |profiling|。
*v:progname* *progname-variable*
v:progname åŒ…å« Vim å¯åŠ¨æ—¶ä½¿ç”¨çš„åå— (路径已被去掉)。å¯ä»¥ç”¨æ¥ä¸º "view"ã€
"evim" ç‰ç¬¦å·é“¾æŽ¥åˆ° Vim çš„åå—æä¾›ç‰¹æ®Šçš„è®¾ç½®ã€‚
åªè¯»ã€‚
*v:register* *register-variable*
v:register 最近的普通模å¼å‘½ä»¤ä½¿ç”¨çš„寄å˜å™¨åå—。如果没有使用过,为空。
|getreg()| |setreg()|
*v:scrollstart* *scrollstart-variable*
v:scrollstart 指示使å±å¹•上滚的脚本或函数的å—ç¬¦ä¸²ã€‚åªæœ‰åœ¨åŽŸæ¥ä¸ºç©ºæ—¶æ‰è®¾ç½®ï¼Œå›
æ¤åªè®°ä½ç¬¬ä¸€ä¸ªåŽŸå› ã€‚å¦‚æžœæ¥è‡ªè¾“入的命令,设为 "Unknown"。
å¯ä»¥ç”¨æ¥å‘çŽ°ä½ çš„è„šæœ¬ä¸ºä»€ä¹ˆäº§ç”Ÿ hit-enter æç¤ºã€‚
*v:servername* *servername-variable*
v:servername 如果有的è¯ï¼Œæ³¨å†Œè¿‡çš„ |x11-clientserver| åå—。
åªè¯»ã€‚
*v:shell_error* *shell_error-variable*
v:shell_error 最近一次外壳命令的返回值。如果éžé›¶ï¼Œæœ€è¿‘一次外壳命令有错。如果
为零,则该命令æˆåŠŸè¿”å›žã€‚è¿™åªæœ‰åœ¨å¤–壳把错误代ç 返回给 Vim 的时
候æ‰å·¥ä½œã€‚-1 通常用æ¥å‘ŠçŸ¥è¯¥å‘½ä»¤æ— 法执行。åªè¯»ã€‚
例如:
:!mv foo bar
:if v:shell_error
: echo 'ä¸èƒ½æŠŠ "foo" æ¢å为 "bar"!'
:endif
为了åŽå‘兼容,这里也å¯ä»¥ç”¨ "shell_error"。
*v:statusmsg* *statusmsg-variable*
v:statusmsg æœ€è¿‘ç»™å‡ºçš„çŠ¶æ€æ¶ˆæ¯ã€‚å¯ä»¥è®¾ç½®è¯¥å˜é‡ã€‚
*v:swapname* *swapname-variable*
v:swapname åªæœ‰åœ¨æ‰§è¡Œ |SwapExists| 自动命令时æ‰åˆæ³•: æ‰¾åˆ°çš„äº¤æ¢æ–‡ä»¶å。åª
读。
*v:swapchoice* *swapchoice-variable*
v:swapchoice |SwapExists| 自动命令å¯ä»¥è®¾ç½®æ¤å€¼ï¼Œä»¥é€‰æ‹©å¦‚何处ç†å·²æœ‰äº¤æ¢æ–‡ä»¶:
'o' 以åªè¯»æ–¹å¼æ‰“å¼€
'e' ä»ç„¶ç¼–辑
'r' æ¢å¤
'd' åˆ é™¤äº¤æ¢æ–‡ä»¶
'q' 退出
'a' 䏿¢
该值应是å•个å—符的å—ç¬¦ä¸²ã€‚å¦‚æžœä¸ºç©ºï¼Œç”¨æˆ·ä¼šè¢«è¯¢é—®ï¼Œå°±åƒæ²¡æœ‰
SwapExists è‡ªåŠ¨å‘½ä»¤é‚£æ ·ã€‚ç¼ºçœä¸ºç©ºã€‚
*v:swapcommand* *swapcommand-variable*
v:swapcommand æ‰“å¼€æ–‡ä»¶åŽæ‰§è¡Œçš„æ™®é€šæ¨¡å¼å‘½ä»¤ã€‚å¯ä»¥ç”¨äºŽ |SwapExists| 自动命令,
用以让å¦ä¸€ä¸ª Vim 打开文件并跳转到åˆé€‚çš„ä½ç½®ã€‚例如,è¦è·³è½¬åˆ°æŸ
æ ‡ç¾ï¼Œç”¨çš„值是 ":tag tagname\r"。":edit +cmd file" 用的值是
":cmd\r"。
*v:termresponse* *termresponse-variable*
v:termresponse 使用 |t_RV| termcap 项目返回的终端的转义åºåˆ—。Vim 收到 ESC [
或者 CSI 开始,以一个 'c' 结æŸï¼Œå¹¶ä¸”å…¶é—´åªåŒ…嫿•°å—,';' å’Œ '.'
的转义åºåˆ—的时候,会设置该值。
如果设置该选项,会激活 TermResponse è‡ªåŠ¨å‘½ä»¤äº‹ä»¶ï¼Œè¿™æ ·ä½ å°±å¯ä»¥
对终端的应ç”åšå‡ºå应。
æ–°çš„ xterm çš„åº”ç”æ˜¯: "<Esc>[ Pp ; Pv ; Pc c"。 Pp 是终端类型:
0 代表 vt100,而 1 代表 vt220。 Pv 是补ä¸å· (å› ä¸ºè¿™æ˜¯ patch 95
引入的,补ä¸å·åº”该总是 95 会更高)。Pc 总是零。
{ä»…å½“ç¼–è¯‘æ—¶åŠ å…¥ |+termresponse| ç‰¹æ€§æ‰æœ‰æ•ˆ}
*v:this_session* *this_session-variable*
v:this_session 最近载入或者ä¿å˜çš„ä¼šè¯æ–‡ä»¶çš„æ–‡ä»¶å |:mksession|。å¯ä»¥è®¾ç½®è¯¥å˜
é‡ã€‚如果没有ä¿å˜è¿‡ä¼šè¯æ–‡ä»¶ï¼Œè¯¥å˜é‡ä¸ºç©ºã€‚
为了åŽå‘兼容,这里也å¯ä»¥ç”¨ "this_session"。
*v:throwpoint* *throwpoint-variable*
v:throwpoint 最近æ•获且未完æˆçš„例外的抛出ä½ç½®ã€‚输入的命令ä¸ä¼šè®¾ç½®æ¤å˜é‡ã€‚å¦
è§ |v:exception| å’Œ |throw-variables|。
例如:
:try
: throw "oops"
:catch /.*/
: echo "Exception from" v:throwpoint
:endtry
输出: "Exception from test.vim, line 2"
*v:val* *val-variable*
v:val |List| 或 |Dictionary| 当å‰é¡¹ç›®çš„å€¼ã€‚åªæœ‰åœ¨è®¡ç®— |map()| å’Œ
|filter()| é‡Œçš„è¡¨è¾¾å¼æ—¶æ‰æœ‰æ•ˆã€‚åªè¯»ã€‚
*v:version* *version-variable*
v:version Vim 的版本å·: 主版本å·ä¹˜ä»¥ 100 åŠ ä¸Šå‰¯ç‰ˆæœ¬å·ã€‚5.0 版本对应的是
500。5.1 版本 (5.01) 则是 501。åªè¯»ã€‚为了åŽå‘兼容,这里也å¯ä»¥
用 "version"。
用 |has()| å¯ä»¥æ£€æŸ¥æ˜¯å¦åŒ…嫿Ÿè¡¥ä¸ï¼Œä¾‹å¦‚:
if has("patch123")
æ³¨æ„ è¡¥ä¸å·å’Œç‰ˆæœ¬æœ‰å…³ï¼Œ5.0 å’Œ 5.1 版本都有补ä¸å· 123,但完全ä¸
åŒã€‚
*v:warningmsg* *warningmsg-variable*
v:warningmsg 最近给出的è¦å‘Šæ¶ˆæ¯ã€‚该å˜é‡å¯ä»¥è®¾ç½®ã€‚
|function-list| æä¾›äº†æŒ‰åŠŸèƒ½åˆ†ç»„çš„ä¸€ä¸ªå‡½æ•°åˆ—è¡¨ã€‚
(在函数å上使用 CTRL-] 跳转到完整的功能说明。)
用法 结果 æè¿°
add( {list}, {item}) 列表 在 |List| {list} 最åŽé™„åŠ {item}
append( {lnum}, {string}) 数值 在第 {lnum} è¡Œä¸‹é™„åŠ å—符串 {string}
append( {lnum}, {list}) 数值 在第 {lnum} è¡Œä¸‹é™„åŠ è¡Œ {list}
argc() 数值 傿•°åˆ—表的文件数目
argidx() 数值 傿•°åˆ—表的当å‰ç´¢å¼•
argv( {nr}) å—符串 傿•°åˆ—表第 {nr} ä¸ªå‚æ•°
argv( ) 列表 傿•°åˆ—表
browse( {save}, {title}, {initdir}, {default})
å—符串 å¯åŠ¨æ–‡ä»¶è¯·æ±‚çª—å£
browsedir( {title}, {initdir}) å—符串 å¯åŠ¨ç›®å½•è¯·æ±‚çª—å£
bufexists( {expr}) 数值 如果缓冲区 {expr} å˜åœ¨åˆ™ä¸ºçœŸ
buflisted( {expr}) 数值 如果缓冲区 {expr} 在列表内则为真
bufloaded( {expr}) 数值 如果缓冲区 {expr} 被载入则为真
bufname( {expr}) å—符串 缓冲区 {expr} çš„åå—
bufnr( {expr}) 数值 缓冲区 {expr} 的数目
bufwinnr( {expr}) 数值 缓冲区 {expr} 的窗å£å·
byte2line( {byte}) 数值 第 {byte} 个å—节所在的行å·
byteidx( {expr}, {nr}) 数值 {expr} 里第 {nr} 个å—符的å—节ä½ç½®
call( {func}, {arglist} [, {dict}])
å¯å˜ 调用函数 {func}ï¼Œä½¿ç”¨å‚æ•° {arglist}
changenr() 数值 当剿”¹å˜å·
char2nr( {expr}) 数值 {expr} 里第一个å—符串的 ASCII 值
cindent( {lnum}) 数值 第 {lnum} 行的 C 缩进
col( {expr}) 数值 å…‰æ ‡æˆ–ä½ç½®æ ‡è®°çš„列å·
complete({startcol}, {matches}) å—符串 设置æ’入模å¼è¡¥å…¨
complete_add( {expr}) 数值 å¢žåŠ è¡¥å…¨åŒ¹é…
complete_check() 数值 补全时检查输入的键
confirm( {msg} [, {choices} [, {default} [, {type}]]])
数值 用户选择的åºå·
copy( {expr}) å¯å˜ æä¾› {expr} 的浅备份
count( {list}, {expr} [, {start} [, {ic}]])
数值 计算 {list} 里有多少个 {expr}
cscope_connection( [{num} , {dbpath} [, {prepend}]])
数值 检查 cscope 连接是å¦å˜åœ¨
cursor( {lnum}, {col} [, {coladd}])
数值 ç§»åŠ¨å…‰æ ‡åˆ° {lnum},{col},{coladd}
cursor( {list}) 数值 ç§»åŠ¨å…‰æ ‡åˆ° {list} 里的ä½ç½®
deepcopy( {expr}) å¯å˜ æä¾› {expr} 的完整备份
delete( {fname}) 数值 åˆ é™¤æ–‡ä»¶ {fname}
did_filetype() 数值 如果使用过 FileType 自动命令事件则为真
diff_filler( {lnum}) 数值 {lnum} 行之上的 diff 填充行数
diff_hlID( {lnum}, {col}) 数值 {lnum}/{col} ä½ç½®çš„ diff 高亮
empty( {expr}) 数值 如果 {expr} 为空则为真
escape( {string}, {chars}) å—符串 在 {string} 里用 '\' 转义 {chars}
eval( {string}) å¯å˜ 计算 {string},返回结果
eventhandler( ) 数值 如果在事件处ç†ä¸åˆ™ä¸ºçœŸ
executable( {expr}) 数值 å¦‚æžœå¯æ‰§è¡Œæ–‡ä»¶ {expr} å˜åœ¨åˆ™ä¸º 1
exists( {expr}) 数值 如果 {expr} å˜åœ¨åˆ™ä¸ºçœŸ
extend({expr1}, {expr2} [, {expr3}])
列表/å—å…¸ 把 {expr2} 里的项目æ’å…¥ {expr1}
expand( {expr}) å—符串 扩展 {expr} 里的特殊关键å—
feedkeys( {string} [, {mode}]) 数值 ç»™é¢„è¾“å…¥ç¼“å†²åŒºåŠ å…¥é”®åºåˆ—
filereadable( {file}) 数值 如果 {file} 是个å¯è¯»æ–‡ä»¶åˆ™ä¸ºçœŸ
filewritable( {file}) 数值 如果 {file} 是个å¯å†™æ–‡ä»¶åˆ™ä¸ºçœŸ
filter( {expr}, {string}) 列表/å—å…¸ åˆ é™¤ {expr} 里 {string} 为 0 的项目
finddir( {name}[, {path}[, {count}]])
å—符串 在 {path} 里寻找目录 {name}
findfile( {name}[, {path}[, {count}]])
å—符串 在 {path} 里寻找文件 {name}
fnamemodify( {fname}, {mods}) å—符串 修改文件å
foldclosed( {lnum}) 数值 {lnum} 所在折å 的首行,如果是关é—çš„è¯
foldclosedend( {lnum}) 数值 {lnum} 所在折å 的末行,如果是关é—çš„è¯
foldlevel( {lnum}) 数值 {lnum} 的折å 级别
foldtext( ) å—符串 å…³é—çš„æŠ˜å æ˜¾ç¤ºçš„行
foldtextresult( {lnum}) å—符串 {lnum} 所在的关é—的折å 的文本
foreground( ) 数值 把 Vim 窗å£å¸¦åˆ°å‰å°
function( {name}) 函数引用 函数 {name} 的引用
garbagecollect() æ— é‡Šæ”¾å†…å˜ï¼Œæ‰“ç ´å¾ªçŽ¯å¼•ç”¨
get( {list}, {idx} [, {def}]) å¯å˜ 得到 {list} 或 {def} 的项目 {idx}
get( {dict}, {key} [, {def}]) å¯å˜ 得到 {dict} 或 {def} 的项目 {idx}
getbufline( {expr}, {lnum} [, {end}])
列表 缓冲区 {expr} 第 {lnum} 到 {end} 行
getbufvar( {expr}, {varname}) å¯å˜ 缓冲区 {expr} çš„å˜é‡ {varname}
getchar( [expr]) 数值 让用户输入一个å—符
getcharmod( ) 数值 最近输入å—符的修饰符
getcmdline() å—符串 返回当å‰å‘½ä»¤è¡Œ
getcmdpos() 数值 è¿”å›žå‘½ä»¤è¡Œçš„å…‰æ ‡ä½ç½®
getcmdtype() å—符串 返回当å‰å‘½ä»¤è¡Œç±»åž‹
getcwd() å—符串 当å‰å·¥ä½œç›®å½•
getfperm( {fname}) å—符串 文件 {fname} 的文件æƒé™
getfsize( {fname}) 数值 å—节计算的文件 {fname} 大å°
getfontname( [{name}]) å—符串 使用的å—体å
getftime( {fname}) 数值 文件的最新修改时间
getftype( {fname}) å—符串 文件 {fname} 类型的æè¿°
getline( {lnum}) å—符串 当å‰ç¼“冲区的第 {lnum} 行
getline( {lnum}, {end}) 列表 当å‰ç¼“冲区第 {lnum} 到 {end} 行
getloclist({nr}) 列表 ä½ç½®åˆ—表项目的列表
getpos( {expr}) 列表 å…‰æ ‡ã€ä½ç½®æ ‡è®°ç‰çš„ä½ç½®
getqflist() 列表 quickfix 项目的列表
getreg( [{regname} [, 1]]) å—符串 寄å˜å™¨å†…容
getregtype( [{regname}]) å—符串 寄å˜å™¨ç±»åž‹
gettabwinvar( {tabnr}, {winnr}, {name})
å¯å˜ {tabnr} æ ‡ç¾é¡µ {winnr} 窗å£çš„ {name}
getwinposx() 数值 GUI Vim 窗å£ä»¥åƒç´ 计的 X åæ ‡
getwinposy() 数值 GUI Vim 窗å£ä»¥åƒç´ 计的 Y åæ ‡
getwinvar( {nr}, {varname}) å¯å˜ çª—å£ {expr} çš„å˜é‡ {varname}
glob( {expr}) å—符串 扩展 {expr} 里的文件通é…符
globpath( {path}, {expr}) å—符串 在 {path} 所有目录下执行 glob({expr})
has( {feature}) 数值 如果支æŒç‰¹æ€§ {feature} 则为真
has_key( {dict}, {key}) 数值 如果 {dict} 有项目 {key} 则为真
haslocaldir() 数值 如果当å‰çª—壿‰§è¡Œè¿‡ |:lcd|
hasmapto( {what} [, {mode} [, {abbr}]])
数值 如果 {what} çš„æ˜ å°„å˜åœ¨åˆ™ä¸ºçœŸ
histadd( {history},{item}) å—符串 在历å²é‡Œå¢žåŠ é¡¹ç›®
histdel( {history} [, {item}]) å—符串 从历å²é‡Œåˆ 除项目
histget( {history} [, {index}]) å—符串 得到历å²çš„第 {index} 项
histnr( {history}) 数值 历å²é‡Œæœ€é«˜çš„项目å·
hlexists( {name}) 数值 如果高亮组 {name} å˜åœ¨åˆ™ä¸ºçœŸ
hlID( {name}) 数值 高亮组 {name} çš„è¯æ³• ID
hostname() å—符串 Vim è¿è¡Œçš„æœºå™¨åå—
iconv( {expr}, {from}, {to}) å—符串 è½¬æ¢ {expr} 的编ç
indent( {lnum}) 数值 第 {lnum} 行的缩进
index( {list}, {expr} [, {start} [, {ic}]])
数值 {list} 列表里出现 {expr} 的项目的索引
input( {prompt} [, {text} [, {completion}]])
å—符串 从用户得到输入
inputdialog( {p} [, {t} [, {c}]]) å—符串 类似于 input(),但使用 GUI å¯¹è¯æ¡†
inputlist( {textlist}) 数值 让用户从选择列表里挑选
inputrestore() 数值 æ¢å¤é¢„输入
inputsave() 数值 ä¿å˜å’Œæ¸…除预输入
inputsecret( {prompt} [, {text}]) å—符串 类似于 input(),但éšè—文本
insert( {list}, {item} [, {idx}]) 列表 在 {list} 里æ’å…¥ {item} [{idx} 之å‰]
isdirectory( {directory}) 数值 如果 {directory} 是目录则为真
islocked( {expr}) 数值 如果 {expr} 被é”ä½åˆ™ä¸ºçœŸ
items( {dict}) 列表 {dict} 里的键-值组对
join( {list} [, {sep}]) å—符串 连接 {list} 的项目æˆä¸ºä¸€ä¸ªå—符串
keys( {dict}) 列表 {dict} 的所有键
len( {expr}) 数值 {expr} 的长度
libcall( {lib}, {func}, {arg}) å—符串 调用库 {lib} 的函数 {func}ï¼Œä½¿ç”¨å‚æ•°
{arg}
libcallnr( {lib}, {func}, {arg}) 数值 åŒä¸Šï¼Œä½†è¿”回数值
line( {expr}) 数值 å…‰æ ‡æ‰€åœ¨ã€æœ«è¡Œæˆ–者ä½ç½®æ ‡è®°æ‰€åœ¨çš„行å·
line2byte( {lnum}) 数值 行 {lnum} çš„å—节ä½ç½®
lispindent( {lnum}) 数值 行 {lnum} 的 Lisp 缩进
localtime() 数值 当剿—¶é—´
map( {expr}, {string}) 列表/å—å…¸ {expr} çš„æ¯ä¸ªé¡¹ç›®æ”¹å˜ä¸º {string}
maparg( {name}[, {mode} [, {abbr}]])
å—符串 æ¨¡å¼ {mode} çš„æ˜ å°„ {name} çš„å³è¾¹
mapcheck( {name}[, {mode} [, {abbr}]])
å—符串 æ£€æŸ¥åŒ¹é… {name} çš„æ˜ å°„
match( {expr}, {pat}[, {start}[, {count}]])
数值 {expr} 里 {pat} 的匹é…ä½ç½®
matcharg( {nr}) 列表 |:match| çš„å‚æ•°
matchend( {expr}, {pat}[, {start}])
数值 {expr} 里 {pat} 的结æŸä½ç½®
matchlist( {expr}, {pat}[, {start}[, {count}]])
列表 {expr} 里 {pat} 的匹é…å’Œå匹é…
matchstr( {expr}, {pat}[, {start}[, {count}]])
å—符串 第 {count} 个 {expr} 里 {pat} çš„åŒ¹é…æ–‡
本
max({list}) 数值 {list} 的项目的最大值
min({list}) 数值 {list} 的项目的最å°å€¼
mkdir({name} [, {path} [, {prot}]])
数值 建立目录 {name}
mode() å—符串 当å‰ç¼–辑模å¼
nextnonblank( {lnum}) 数值 第一个 >= {lnum} çš„éžç©ºç™½è¡Œçš„行å·
nr2char( {expr}) å—符串 ASCII 值为 {expr} çš„å•个å—符
pathshorten( {expr}) å—符串 缩çŸè·¯å¾„里的目录å
prevnonblank( {lnum}) 数值 最åŽä¸€ä¸ª <= {lnum} çš„éžç©ºç™½è¡Œçš„行å·
printf( {fmt}, {expr1}...) å—符串 排版文本
pumvisible() 数值 å¼¹å‡ºçª—å£æ˜¯å¦å¯è§
range( {expr} [, {max} [, {stride}]])
列表 从 {expr} 到 {max} çš„åºåˆ—
readfile({fname} [, {binary} [, {max}]])
列表 得到文件 {fname} 的行列表
reltime( [{start} [, {end}]]) 列表 得到时间值
reltimestr( {time}) å—符串 把时间值转化为å—符串
remote_expr( {server}, {string} [, {idvar}])
å—符串 å‘é€è¡¨è¾¾å¼
remote_foreground( {server}) 数值 把 Vim æœåŠ¡å™¨å¸¦åˆ°å‰å°
remote_peek( {serverid} [, {retvar}])
数值 检查应ç”å—符串
remote_read( {serverid}) å—符串 读入应ç”å—符串
remote_send( {server}, {string} [, {idvar}])
å—符串 å‘é€é”®åºåˆ—
remove( {list}, {idx} [, {end}]) å¯å˜ 从 {list} é‡Œåˆ é™¤é¡¹ç›® {idx}-{end}
remove( {dict}, {key}) å¯å˜ 从 {dict} é‡Œåˆ é™¤é¡¹ç›® {key}
rename( {from}, {to}) 数值 æ¢å (移动) 文件,从 {from} 到 {to}
repeat( {expr}, {count}) å—符串 é‡å¤ {expr} {count} 次
resolve( {filename}) å—符串 è§£æžå¿«æ·æ–¹å¼å¯¹åº”的文件å
reverse( {list}) 列表 å转 {list},直接修改 {list}
search( {pattern} [, {flags}]) 数值 æœç´¢ {pattern}
searchdecl({name} [, {global} [, {thisblock}]])
数值 æœç´¢å˜é‡å£°æ˜Ž
searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
数值 æœç´¢ start/end 对的å¦ä¸€ä¾§
searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
列表 æœç´¢ start/end 队的å¦ä¸€ä¾§
searchpos( {pattern} [, {flags} [, {stopline}]])
列表 æœç´¢ {pattern}
server2client( {clientid}, {string})
数值 å‘é€åº”ç”å—符串
serverlist() å—符串 得到å¯ç”¨çš„æœåŠ¡å™¨åˆ—è¡¨
setbufvar( {expr}, {varname}, {val}) 设置缓冲区 {expr} 的 {varname} 为
{val}
setcmdpos( {pos}) 数值 è®¾ç½®å‘½ä»¤è¡Œçš„å…‰æ ‡ä½ç½®
setline( {lnum}, {line}) 数值 设置第 {lnum} 行的内容为 {line}
setloclist( {nr}, {list}[, {action}])
数值 用 {list} 修改ä½ç½®åˆ—表
setpos( {expr}, {list}) æ— è®¾ç½® {expr} çš„ä½ç½®ä¸º {list}
setqflist( {list}[, {action}]) 数值 用 {list} 修改 quickfix 列表
setreg( {n}, {v}[, {opt}]) 数值 设置寄å˜å™¨çš„值和类型
settabwinvar( {tabnr}, {winnr}, {varname}, {val})
æ— è®¾ç½®æ ‡ç¾é¡µ {tabnr} çª—å£ {winnr} çš„
{varname} å˜é‡ä¸º {val}
setwinvar( {nr}, {varname}, {val}) è®¾ç½®çª—å£ {expr} çš„ {varname} 为 {val}
shellescape( {string}) å—符串 转义 {string} ä»¥ä¾¿ç”¨ä½œå¤–å£³å‘½ä»¤çš„å‚æ•°
simplify( {filename}) å—符串 å°½å¯èƒ½ç®€åŒ–文件å
sort( {list} [, {func}]) 列表 æŽ’åº {list},用比较函数 {func}
soundfold( {word}) å—符串 按å‘音折å {word}
spellbadword() å—符串 å…‰æ ‡æ‰€åœ¨çš„æ‹¼å†™é”™è¯¯çš„å•è¯
spellsuggest( {word} [, {max} [, {capital}]])
列表 拼写建议
split( {expr} [, {pat} [, {keepempty}]])
列表 从 {pat} 分割的 {expr} é‡Œæž„é€ |List|
str2nr( {expr} [, {base}]) 数值 把å—符串转æ¢ä¸ºæ•°å€¼
strftime( {format}[, {time}]) å—符串 æŒ‡å®šæ ¼å¼çš„æ—¶é—´
stridx( {haystack}, {needle}[, {start}])
数值 {haystack} 里 {needle} çš„ä½ç½®
string( {expr}) å—符串 {expr} 值得å—符串表示
strlen( {expr}) 数值 å—符串 {expr} 的长度
strpart( {src}, {start}[, {len}])
å—符串 {src} 从 {start} 开始的 {len} 个å—节
strridx( {haystack}, {needle} [, {start}])
数值 {haystack} 里最åŽä¸€ä¸ª {needle} çš„ä½ç½®
strtrans( {expr}) å—符串 翻译å—符串,使之å¯ä»¥æ˜¾ç¤º
submatch( {nr}) å—符串 ":substitute" 的特定匹é…
substitute( {expr}, {pat}, {sub}, {flags})
å—符串 {expr} 里的所有 {pat} 被 {sub} 替代
synID( {lnum}, {col}, {trans}) 数值 {lnum} 行 {col} åˆ—æ‰€åœ¨çš„è¯æ³• ID
synIDattr( {synID}, {what} [, {mode}])
å—符串 syntax ID {synID} çš„ {what} 属性
synIDtrans( {synID}) 数值 {synID} ç»è¿‡ç¿»è¯‘çš„è¯æ³• ID
system( {expr} [, {input}]) å—符串 外壳命令/过滤 {expr} 的输出
tabpagebuflist( [{arg}]) 列表 æ ‡ç¾é¡µé‡Œçš„缓冲区å·åˆ—表
tabpagenr( [{arg}]) 数值 当剿ˆ–æœ€åŽæ ‡ç¾é¡µçš„ç¼–å·
tabpagewinnr( {tabarg}[, {arg}])
数值 æ ‡ç¾é¡µé‡Œå½“å‰çª—å£çš„ç¼–å·
taglist( {expr}) 列表 åŒ¹é… {expr} çš„æ ‡ç¾åˆ—表
tagfiles() 列表 ä½¿ç”¨çš„æ ‡ç¾æ–‡ä»¶
tempname() å—符串 临时文件的文件å
tolower( {expr}) å—符串 å—符串 {expr} å˜ä¸ºå°å