1*eval.txt* For Vim version 7.4. Last change: 2015 Dec 29 2 3 4 VIM REFERENCE MANUAL by Bram Moolenaar 5 6 7Expression evaluation *expression* *expr* *E15* *eval* 8 9Using expressions is introduced in chapter 41 of the user manual |usr_41.txt|. 10 11Note: Expression evaluation can be disabled at compile time. If this has been 12done, the features in this document are not available. See |+eval| and 13|no-eval-feature|. 14 151. Variables |variables| 16 1.1 Variable types 17 1.2 Function references |Funcref| 18 1.3 Lists |Lists| 19 1.4 Dictionaries |Dictionaries| 20 1.5 More about variables |more-variables| 212. Expression syntax |expression-syntax| 223. Internal variable |internal-variables| 234. Builtin Functions |functions| 245. Defining functions |user-functions| 256. Curly braces names |curly-braces-names| 267. Commands |expression-commands| 278. Exception handling |exception-handling| 289. Examples |eval-examples| 2910. No +eval feature |no-eval-feature| 3011. The sandbox |eval-sandbox| 3112. Textlock |textlock| 32 33{Vi does not have any of these commands} 34 35============================================================================== 361. Variables *variables* 37 381.1 Variable types ~ 39 *E712* 40There are six types of variables: 41 42Number A 32 or 64 bit signed number. |expr-number| *Number* 43 Examples: -123 0x10 0177 44 45Float A floating point number. |floating-point-format| *Float* 46 {only when compiled with the |+float| feature} 47 Examples: 123.456 1.15e-6 -1.1e3 48 49String A NUL terminated string of 8-bit unsigned characters (bytes). 50 |expr-string| Examples: "ab\txx\"--" 'x-z''a,c' 51 52Funcref A reference to a function |Funcref|. 53 Example: function("strlen") 54 55List An ordered sequence of items |List|. 56 Example: [1, 2, ['a', 'b']] 57 58Dictionary An associative, unordered array: Each entry has a key and a 59 value. |Dictionary| 60 Example: {'blue': "#0000ff", 'red': "#ff0000"} 61 62The Number and String types are converted automatically, depending on how they 63are used. 64 65Conversion from a Number to a String is by making the ASCII representation of 66the Number. Examples: 67 Number 123 --> String "123" ~ 68 Number 0 --> String "0" ~ 69 Number -1 --> String "-1" ~ 70 *octal* 71Conversion from a String to a Number is done by converting the first digits 72to a number. Hexadecimal "0xf9" and Octal "017" numbers are recognized. If 73the String doesn't start with digits, the result is zero. Examples: 74 String "456" --> Number 456 ~ 75 String "6bar" --> Number 6 ~ 76 String "foo" --> Number 0 ~ 77 String "0xf1" --> Number 241 ~ 78 String "0100" --> Number 64 ~ 79 String "-8" --> Number -8 ~ 80 String "+8" --> Number 0 ~ 81 82To force conversion from String to Number, add zero to it: > 83 :echo "0100" + 0 84< 64 ~ 85 86To avoid a leading zero to cause octal conversion, or for using a different 87base, use |str2nr()|. 88 89For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE. 90 91Note that in the command > 92 :if "foo" 93"foo" is converted to 0, which means FALSE. To test for a non-empty string, 94use empty(): > 95 :if !empty("foo") 96< *E745* *E728* *E703* *E729* *E730* *E731* 97List, Dictionary and Funcref types are not automatically converted. 98 99 *E805* *E806* *E808* 100When mixing Number and Float the Number is converted to Float. Otherwise 101there is no automatic conversion of Float. You can use str2float() for String 102to Float, printf() for Float to String and float2nr() for Float to Number. 103 104 *E706* *sticky-type-checking* 105You will get an error if you try to change the type of a variable. You need 106to |:unlet| it first to avoid this error. String and Number are considered 107equivalent though, as well are Float and Number. Consider this sequence of 108commands: > 109 :let l = "string" 110 :let l = 44 " changes type from String to Number 111 :let l = [1, 2, 3] " error! l is still a Number 112 :let l = 4.4 " changes type from Number to Float 113 :let l = "string" " error! 114 115 1161.2 Function references ~ 117 *Funcref* *E695* *E718* 118A Funcref variable is obtained with the |function()| function. It can be used 119in an expression in the place of a function name, before the parenthesis 120around the arguments, to invoke the function it refers to. Example: > 121 122 :let Fn = function("MyFunc") 123 :echo Fn() 124< *E704* *E705* *E707* 125A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:". You 126can use "g:" but the following name must still start with a capital. You 127cannot have both a Funcref variable and a function with the same name. 128 129A special case is defining a function and directly assigning its Funcref to a 130Dictionary entry. Example: > 131 :function dict.init() dict 132 : let self.val = 0 133 :endfunction 134 135The key of the Dictionary can start with a lower case letter. The actual 136function name is not used here. Also see |numbered-function|. 137 138A Funcref can also be used with the |:call| command: > 139 :call Fn() 140 :call dict.init() 141 142The name of the referenced function can be obtained with |string()|. > 143 :let func = string(Fn) 144 145You can use |call()| to invoke a Funcref and use a list variable for the 146arguments: > 147 :let r = call(Fn, mylist) 148 149 1501.3 Lists ~ 151 *list* *List* *Lists* *E686* 152A List is an ordered sequence of items. An item can be of any type. Items 153can be accessed by their index number. Items can be added and removed at any 154position in the sequence. 155 156 157List creation ~ 158 *E696* *E697* 159A List is created with a comma separated list of items in square brackets. 160Examples: > 161 :let mylist = [1, two, 3, "four"] 162 :let emptylist = [] 163 164An item can be any expression. Using a List for an item creates a 165List of Lists: > 166 :let nestlist = [[11, 12], [21, 22], [31, 32]] 167 168An extra comma after the last item is ignored. 169 170 171List index ~ 172 *list-index* *E684* 173An item in the List can be accessed by putting the index in square brackets 174after the List. Indexes are zero-based, thus the first item has index zero. > 175 :let item = mylist[0] " get the first item: 1 176 :let item = mylist[2] " get the third item: 3 177 178When the resulting item is a list this can be repeated: > 179 :let item = nestlist[0][1] " get the first list, second item: 12 180< 181A negative index is counted from the end. Index -1 refers to the last item in 182the List, -2 to the last but one item, etc. > 183 :let last = mylist[-1] " get the last item: "four" 184 185To avoid an error for an invalid index use the |get()| function. When an item 186is not available it returns zero or the default value you specify: > 187 :echo get(mylist, idx) 188 :echo get(mylist, idx, "NONE") 189 190 191List concatenation ~ 192 193Two lists can be concatenated with the "+" operator: > 194 :let longlist = mylist + [5, 6] 195 :let mylist += [7, 8] 196 197To prepend or append an item turn the item into a list by putting [] around 198it. To change a list in-place see |list-modification| below. 199 200 201Sublist ~ 202 203A part of the List can be obtained by specifying the first and last index, 204separated by a colon in square brackets: > 205 :let shortlist = mylist[2:-1] " get List [3, "four"] 206 207Omitting the first index is similar to zero. Omitting the last index is 208similar to -1. > 209 :let endlist = mylist[2:] " from item 2 to the end: [3, "four"] 210 :let shortlist = mylist[2:2] " List with one item: [3] 211 :let otherlist = mylist[:] " make a copy of the List 212 213If the first index is beyond the last item of the List or the second item is 214before the first item, the result is an empty list. There is no error 215message. 216 217If the second index is equal to or greater than the length of the list the 218length minus one is used: > 219 :let mylist = [0, 1, 2, 3] 220 :echo mylist[2:8] " result: [2, 3] 221 222NOTE: mylist[s:e] means using the variable "s:e" as index. Watch out for 223using a single letter variable before the ":". Insert a space when needed: 224mylist[s : e]. 225 226 227List identity ~ 228 *list-identity* 229When variable "aa" is a list and you assign it to another variable "bb", both 230variables refer to the same list. Thus changing the list "aa" will also 231change "bb": > 232 :let aa = [1, 2, 3] 233 :let bb = aa 234 :call add(aa, 4) 235 :echo bb 236< [1, 2, 3, 4] 237 238Making a copy of a list is done with the |copy()| function. Using [:] also 239works, as explained above. This creates a shallow copy of the list: Changing 240a list item in the list will also change the item in the copied list: > 241 :let aa = [[1, 'a'], 2, 3] 242 :let bb = copy(aa) 243 :call add(aa, 4) 244 :let aa[0][1] = 'aaa' 245 :echo aa 246< [[1, aaa], 2, 3, 4] > 247 :echo bb 248< [[1, aaa], 2, 3] 249 250To make a completely independent list use |deepcopy()|. This also makes a 251copy of the values in the list, recursively. Up to a hundred levels deep. 252 253The operator "is" can be used to check if two variables refer to the same 254List. "isnot" does the opposite. In contrast "==" compares if two lists have 255the same value. > 256 :let alist = [1, 2, 3] 257 :let blist = [1, 2, 3] 258 :echo alist is blist 259< 0 > 260 :echo alist == blist 261< 1 262 263Note about comparing lists: Two lists are considered equal if they have the 264same length and all items compare equal, as with using "==". There is one 265exception: When comparing a number with a string they are considered 266different. There is no automatic type conversion, as with using "==" on 267variables. Example: > 268 echo 4 == "4" 269< 1 > 270 echo [4] == ["4"] 271< 0 272 273Thus comparing Lists is more strict than comparing numbers and strings. You 274can compare simple values this way too by putting them in a list: > 275 276 :let a = 5 277 :let b = "5" 278 :echo a == b 279< 1 > 280 :echo [a] == [b] 281< 0 282 283 284List unpack ~ 285 286To unpack the items in a list to individual variables, put the variables in 287square brackets, like list items: > 288 :let [var1, var2] = mylist 289 290When the number of variables does not match the number of items in the list 291this produces an error. To handle any extra items from the list append ";" 292and a variable name: > 293 :let [var1, var2; rest] = mylist 294 295This works like: > 296 :let var1 = mylist[0] 297 :let var2 = mylist[1] 298 :let rest = mylist[2:] 299 300Except that there is no error if there are only two items. "rest" will be an 301empty list then. 302 303 304List modification ~ 305 *list-modification* 306To change a specific item of a list use |:let| this way: > 307 :let list[4] = "four" 308 :let listlist[0][3] = item 309 310To change part of a list you can specify the first and last item to be 311modified. The value must at least have the number of items in the range: > 312 :let list[3:5] = [3, 4, 5] 313 314Adding and removing items from a list is done with functions. Here are a few 315examples: > 316 :call insert(list, 'a') " prepend item 'a' 317 :call insert(list, 'a', 3) " insert item 'a' before list[3] 318 :call add(list, "new") " append String item 319 :call add(list, [1, 2]) " append a List as one new item 320 :call extend(list, [1, 2]) " extend the list with two more items 321 :let i = remove(list, 3) " remove item 3 322 :unlet list[3] " idem 323 :let l = remove(list, 3, -1) " remove items 3 to last item 324 :unlet list[3 : ] " idem 325 :call filter(list, 'v:val !~ "x"') " remove items with an 'x' 326 327Changing the order of items in a list: > 328 :call sort(list) " sort a list alphabetically 329 :call reverse(list) " reverse the order of items 330 :call uniq(sort(list)) " sort and remove duplicates 331 332 333For loop ~ 334 335The |:for| loop executes commands for each item in a list. A variable is set 336to each item in the list in sequence. Example: > 337 :for item in mylist 338 : call Doit(item) 339 :endfor 340 341This works like: > 342 :let index = 0 343 :while index < len(mylist) 344 : let item = mylist[index] 345 : :call Doit(item) 346 : let index = index + 1 347 :endwhile 348 349Note that all items in the list should be of the same type, otherwise this 350results in error |E706|. To avoid this |:unlet| the variable at the end of 351the loop. 352 353If all you want to do is modify each item in the list then the |map()| 354function will be a simpler method than a for loop. 355 356Just like the |:let| command, |:for| also accepts a list of variables. This 357requires the argument to be a list of lists. > 358 :for [lnum, col] in [[1, 3], [2, 8], [3, 0]] 359 : call Doit(lnum, col) 360 :endfor 361 362This works like a |:let| command is done for each list item. Again, the types 363must remain the same to avoid an error. 364 365It is also possible to put remaining items in a List variable: > 366 :for [i, j; rest] in listlist 367 : call Doit(i, j) 368 : if !empty(rest) 369 : echo "remainder: " . string(rest) 370 : endif 371 :endfor 372 373 374List functions ~ 375 *E714* 376Functions that are useful with a List: > 377 :let r = call(funcname, list) " call a function with an argument list 378 :if empty(list) " check if list is empty 379 :let l = len(list) " number of items in list 380 :let big = max(list) " maximum value in list 381 :let small = min(list) " minimum value in list 382 :let xs = count(list, 'x') " count nr of times 'x' appears in list 383 :let i = index(list, 'x') " index of first 'x' in list 384 :let lines = getline(1, 10) " get ten text lines from buffer 385 :call append('$', lines) " append text lines in buffer 386 :let list = split("a b c") " create list from items in a string 387 :let string = join(list, ', ') " create string from list items 388 :let s = string(list) " String representation of list 389 :call map(list, '">> " . v:val') " prepend ">> " to each item 390 391Don't forget that a combination of features can make things simple. For 392example, to add up all the numbers in a list: > 393 :exe 'let sum = ' . join(nrlist, '+') 394 395 3961.4 Dictionaries ~ 397 *dict* *Dictionaries* *Dictionary* 398A Dictionary is an associative array: Each entry has a key and a value. The 399entry can be located with the key. The entries are stored without a specific 400ordering. 401 402 403Dictionary creation ~ 404 *E720* *E721* *E722* *E723* 405A Dictionary is created with a comma separated list of entries in curly 406braces. Each entry has a key and a value, separated by a colon. Each key can 407only appear once. Examples: > 408 :let mydict = {1: 'one', 2: 'two', 3: 'three'} 409 :let emptydict = {} 410< *E713* *E716* *E717* 411A key is always a String. You can use a Number, it will be converted to a 412String automatically. Thus the String '4' and the number 4 will find the same 413entry. Note that the String '04' and the Number 04 are different, since the 414Number will be converted to the String '4'. 415 416A value can be any expression. Using a Dictionary for a value creates a 417nested Dictionary: > 418 :let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}} 419 420An extra comma after the last entry is ignored. 421 422 423Accessing entries ~ 424 425The normal way to access an entry is by putting the key in square brackets: > 426 :let val = mydict["one"] 427 :let mydict["four"] = 4 428 429You can add new entries to an existing Dictionary this way, unlike Lists. 430 431For keys that consist entirely of letters, digits and underscore the following 432form can be used |expr-entry|: > 433 :let val = mydict.one 434 :let mydict.four = 4 435 436Since an entry can be any type, also a List and a Dictionary, the indexing and 437key lookup can be repeated: > 438 :echo dict.key[idx].key 439 440 441Dictionary to List conversion ~ 442 443You may want to loop over the entries in a dictionary. For this you need to 444turn the Dictionary into a List and pass it to |:for|. 445 446Most often you want to loop over the keys, using the |keys()| function: > 447 :for key in keys(mydict) 448 : echo key . ': ' . mydict[key] 449 :endfor 450 451The List of keys is unsorted. You may want to sort them first: > 452 :for key in sort(keys(mydict)) 453 454To loop over the values use the |values()| function: > 455 :for v in values(mydict) 456 : echo "value: " . v 457 :endfor 458 459If you want both the key and the value use the |items()| function. It returns 460a List in which each item is a List with two items, the key and the value: > 461 :for [key, value] in items(mydict) 462 : echo key . ': ' . value 463 :endfor 464 465 466Dictionary identity ~ 467 *dict-identity* 468Just like Lists you need to use |copy()| and |deepcopy()| to make a copy of a 469Dictionary. Otherwise, assignment results in referring to the same 470Dictionary: > 471 :let onedict = {'a': 1, 'b': 2} 472 :let adict = onedict 473 :let adict['a'] = 11 474 :echo onedict['a'] 475 11 476 477Two Dictionaries compare equal if all the key-value pairs compare equal. For 478more info see |list-identity|. 479 480 481Dictionary modification ~ 482 *dict-modification* 483To change an already existing entry of a Dictionary, or to add a new entry, 484use |:let| this way: > 485 :let dict[4] = "four" 486 :let dict['one'] = item 487 488Removing an entry from a Dictionary is done with |remove()| or |:unlet|. 489Three ways to remove the entry with key "aaa" from dict: > 490 :let i = remove(dict, 'aaa') 491 :unlet dict.aaa 492 :unlet dict['aaa'] 493 494Merging a Dictionary with another is done with |extend()|: > 495 :call extend(adict, bdict) 496This extends adict with all entries from bdict. Duplicate keys cause entries 497in adict to be overwritten. An optional third argument can change this. 498Note that the order of entries in a Dictionary is irrelevant, thus don't 499expect ":echo adict" to show the items from bdict after the older entries in 500adict. 501 502Weeding out entries from a Dictionary can be done with |filter()|: > 503 :call filter(dict, 'v:val =~ "x"') 504This removes all entries from "dict" with a value not matching 'x'. 505 506 507Dictionary function ~ 508 *Dictionary-function* *self* *E725* *E862* 509When a function is defined with the "dict" attribute it can be used in a 510special way with a dictionary. Example: > 511 :function Mylen() dict 512 : return len(self.data) 513 :endfunction 514 :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")} 515 :echo mydict.len() 516 517This is like a method in object oriented programming. The entry in the 518Dictionary is a |Funcref|. The local variable "self" refers to the dictionary 519the function was invoked from. 520 521It is also possible to add a function without the "dict" attribute as a 522Funcref to a Dictionary, but the "self" variable is not available then. 523 524 *numbered-function* *anonymous-function* 525To avoid the extra name for the function it can be defined and directly 526assigned to a Dictionary in this way: > 527 :let mydict = {'data': [0, 1, 2, 3]} 528 :function mydict.len() 529 : return len(self.data) 530 :endfunction 531 :echo mydict.len() 532 533The function will then get a number and the value of dict.len is a |Funcref| 534that references this function. The function can only be used through a 535|Funcref|. It will automatically be deleted when there is no |Funcref| 536remaining that refers to it. 537 538It is not necessary to use the "dict" attribute for a numbered function. 539 540If you get an error for a numbered function, you can find out what it is with 541a trick. Assuming the function is 42, the command is: > 542 :function {42} 543 544 545Functions for Dictionaries ~ 546 *E715* 547Functions that can be used with a Dictionary: > 548 :if has_key(dict, 'foo') " TRUE if dict has entry with key "foo" 549 :if empty(dict) " TRUE if dict is empty 550 :let l = len(dict) " number of items in dict 551 :let big = max(dict) " maximum value in dict 552 :let small = min(dict) " minimum value in dict 553 :let xs = count(dict, 'x') " count nr of times 'x' appears in dict 554 :let s = string(dict) " String representation of dict 555 :call map(dict, '">> " . v:val') " prepend ">> " to each item 556 557 5581.5 More about variables ~ 559 *more-variables* 560If you need to know the type of a variable or expression, use the |type()| 561function. 562 563When the '!' flag is included in the 'viminfo' option, global variables that 564start with an uppercase letter, and don't contain a lowercase letter, are 565stored in the viminfo file |viminfo-file|. 566 567When the 'sessionoptions' option contains "global", global variables that 568start with an uppercase letter and contain at least one lowercase letter are 569stored in the session file |session-file|. 570 571variable name can be stored where ~ 572my_var_6 not 573My_Var_6 session file 574MY_VAR_6 viminfo file 575 576 577It's possible to form a variable name with curly braces, see 578|curly-braces-names|. 579 580============================================================================== 5812. Expression syntax *expression-syntax* 582 583Expression syntax summary, from least to most significant: 584 585|expr1| expr2 ? expr1 : expr1 if-then-else 586 587|expr2| expr3 || expr3 .. logical OR 588 589|expr3| expr4 && expr4 .. logical AND 590 591|expr4| expr5 == expr5 equal 592 expr5 != expr5 not equal 593 expr5 > expr5 greater than 594 expr5 >= expr5 greater than or equal 595 expr5 < expr5 smaller than 596 expr5 <= expr5 smaller than or equal 597 expr5 =~ expr5 regexp matches 598 expr5 !~ expr5 regexp doesn't match 599 600 expr5 ==? expr5 equal, ignoring case 601 expr5 ==# expr5 equal, match case 602 etc. As above, append ? for ignoring case, # for 603 matching case 604 605 expr5 is expr5 same |List| instance 606 expr5 isnot expr5 different |List| instance 607 608|expr5| expr6 + expr6 .. number addition or list concatenation 609 expr6 - expr6 .. number subtraction 610 expr6 . expr6 .. string concatenation 611 612|expr6| expr7 * expr7 .. number multiplication 613 expr7 / expr7 .. number division 614 expr7 % expr7 .. number modulo 615 616|expr7| ! expr7 logical NOT 617 - expr7 unary minus 618 + expr7 unary plus 619 620|expr8| expr8[expr1] byte of a String or item of a |List| 621 expr8[expr1 : expr1] substring of a String or sublist of a |List| 622 expr8.name entry in a |Dictionary| 623 expr8(expr1, ...) function call with |Funcref| variable 624 625|expr9| number number constant 626 "string" string constant, backslash is special 627 'string' string constant, ' is doubled 628 [expr1, ...] |List| 629 {expr1: expr1, ...} |Dictionary| 630 &option option value 631 (expr1) nested expression 632 variable internal variable 633 va{ria}ble internal variable with curly braces 634 $VAR environment variable 635 @r contents of register 'r' 636 function(expr1, ...) function call 637 func{ti}on(expr1, ...) function call with curly braces 638 639 640".." indicates that the operations in this level can be concatenated. 641Example: > 642 &nu || &list && &shell == "csh" 643 644All expressions within one level are parsed from left to right. 645 646 647expr1 *expr1* *E109* 648----- 649 650expr2 ? expr1 : expr1 651 652The expression before the '?' is evaluated to a number. If it evaluates to 653non-zero, the result is the value of the expression between the '?' and ':', 654otherwise the result is the value of the expression after the ':'. 655Example: > 656 :echo lnum == 1 ? "top" : lnum 657 658Since the first expression is an "expr2", it cannot contain another ?:. The 659other two expressions can, thus allow for recursive use of ?:. 660Example: > 661 :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum 662 663To keep this readable, using |line-continuation| is suggested: > 664 :echo lnum == 1 665 :\ ? "top" 666 :\ : lnum == 1000 667 :\ ? "last" 668 :\ : lnum 669 670You should always put a space before the ':', otherwise it can be mistaken for 671use in a variable such as "a:1". 672 673 674expr2 and expr3 *expr2* *expr3* 675--------------- 676 677 *expr-barbar* *expr-&&* 678The "||" and "&&" operators take one argument on each side. The arguments 679are (converted to) Numbers. The result is: 680 681 input output ~ 682n1 n2 n1 || n2 n1 && n2 ~ 683zero zero zero zero 684zero non-zero non-zero zero 685non-zero zero non-zero zero 686non-zero non-zero non-zero non-zero 687 688The operators can be concatenated, for example: > 689 690 &nu || &list && &shell == "csh" 691 692Note that "&&" takes precedence over "||", so this has the meaning of: > 693 694 &nu || (&list && &shell == "csh") 695 696Once the result is known, the expression "short-circuits", that is, further 697arguments are not evaluated. This is like what happens in C. For example: > 698 699 let a = 1 700 echo a || b 701 702This is valid even if there is no variable called "b" because "a" is non-zero, 703so the result must be non-zero. Similarly below: > 704 705 echo exists("b") && b == "yes" 706 707This is valid whether "b" has been defined or not. The second clause will 708only be evaluated if "b" has been defined. 709 710 711expr4 *expr4* 712----- 713 714expr5 {cmp} expr5 715 716Compare two expr5 expressions, resulting in a 0 if it evaluates to false, or 1 717if it evaluates to true. 718 719 *expr-==* *expr-!=* *expr->* *expr->=* 720 *expr-<* *expr-<=* *expr-=~* *expr-!~* 721 *expr-==#* *expr-!=#* *expr->#* *expr->=#* 722 *expr-<#* *expr-<=#* *expr-=~#* *expr-!~#* 723 *expr-==?* *expr-!=?* *expr->?* *expr->=?* 724 *expr-<?* *expr-<=?* *expr-=~?* *expr-!~?* 725 *expr-is* *expr-isnot* *expr-is#* *expr-isnot#* 726 *expr-is?* *expr-isnot?* 727 use 'ignorecase' match case ignore case ~ 728equal == ==# ==? 729not equal != !=# !=? 730greater than > ># >? 731greater than or equal >= >=# >=? 732smaller than < <# <? 733smaller than or equal <= <=# <=? 734regexp matches =~ =~# =~? 735regexp doesn't match !~ !~# !~? 736same instance is is# is? 737different instance isnot isnot# isnot? 738 739Examples: 740"abc" ==# "Abc" evaluates to 0 741"abc" ==? "Abc" evaluates to 1 742"abc" == "Abc" evaluates to 1 if 'ignorecase' is set, 0 otherwise 743 744 *E691* *E692* 745A |List| can only be compared with a |List| and only "equal", "not equal" and 746"is" can be used. This compares the values of the list, recursively. 747Ignoring case means case is ignored when comparing item values. 748 749 *E735* *E736* 750A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not 751equal" and "is" can be used. This compares the key/values of the |Dictionary| 752recursively. Ignoring case means case is ignored when comparing item values. 753 754 *E693* *E694* 755A |Funcref| can only be compared with a |Funcref| and only "equal" and "not 756equal" can be used. Case is never ignored. 757 758When using "is" or "isnot" with a |List| or a |Dictionary| this checks if the 759expressions are referring to the same |List| or |Dictionary| instance. A copy 760of a |List| is different from the original |List|. When using "is" without 761a |List| or a |Dictionary| it is equivalent to using "equal", using "isnot" 762equivalent to using "not equal". Except that a different type means the 763values are different: "4 == '4'" is true, "4 is '4'" is false and "0 is []" is 764false and not an error. "is#"/"isnot#" and "is?"/"isnot?" can be used to match 765and ignore case. 766 767When comparing a String with a Number, the String is converted to a Number, 768and the comparison is done on Numbers. This means that "0 == 'x'" is TRUE, 769because 'x' converted to a Number is zero. 770 771When comparing two Strings, this is done with strcmp() or stricmp(). This 772results in the mathematical difference (comparing byte values), not 773necessarily the alphabetical difference in the local language. 774 775When using the operators with a trailing '#', or the short version and 776'ignorecase' is off, the comparing is done with strcmp(): case matters. 777 778When using the operators with a trailing '?', or the short version and 779'ignorecase' is set, the comparing is done with stricmp(): case is ignored. 780 781'smartcase' is not used. 782 783The "=~" and "!~" operators match the lefthand argument with the righthand 784argument, which is used as a pattern. See |pattern| for what a pattern is. 785This matching is always done like 'magic' was set and 'cpoptions' is empty, no 786matter what the actual value of 'magic' or 'cpoptions' is. This makes scripts 787portable. To avoid backslashes in the regexp pattern to be doubled, use a 788single-quote string, see |literal-string|. 789Since a string is considered to be a single line, a multi-line pattern 790(containing \n, backslash-n) will not match. However, a literal NL character 791can be matched like an ordinary character. Examples: 792 "foo\nbar" =~ "\n" evaluates to 1 793 "foo\nbar" =~ "\\n" evaluates to 0 794 795 796expr5 and expr6 *expr5* *expr6* 797--------------- 798expr6 + expr6 .. Number addition or |List| concatenation *expr-+* 799expr6 - expr6 .. Number subtraction *expr--* 800expr6 . expr6 .. String concatenation *expr-.* 801 802For |Lists| only "+" is possible and then both expr6 must be a list. The 803result is a new list with the two lists Concatenated. 804 805expr7 * expr7 .. Number multiplication *expr-star* 806expr7 / expr7 .. Number division *expr-/* 807expr7 % expr7 .. Number modulo *expr-%* 808 809For all, except ".", Strings are converted to Numbers. 810For bitwise operators see |and()|, |or()| and |xor()|. 811 812Note the difference between "+" and ".": 813 "123" + "456" = 579 814 "123" . "456" = "123456" 815 816Since '.' has the same precedence as '+' and '-', you need to read: > 817 1 . 90 + 90.0 818As: > 819 (1 . 90) + 90.0 820That works, since the String "190" is automatically converted to the Number 821190, which can be added to the Float 90.0. However: > 822 1 . 90 * 90.0 823Should be read as: > 824 1 . (90 * 90.0) 825Since '.' has lower precedence than '*'. This does NOT work, since this 826attempts to concatenate a Float and a String. 827 828When dividing a Number by zero the result depends on the value: 829 0 / 0 = -0x80000000 (like NaN for Float) 830 >0 / 0 = 0x7fffffff (like positive infinity) 831 <0 / 0 = -0x7fffffff (like negative infinity) 832 (before Vim 7.2 it was always 0x7fffffff) 833 834When the righthand side of '%' is zero, the result is 0. 835 836None of these work for |Funcref|s. 837 838. and % do not work for Float. *E804* 839 840 841expr7 *expr7* 842----- 843! expr7 logical NOT *expr-!* 844- expr7 unary minus *expr-unary--* 845+ expr7 unary plus *expr-unary-+* 846 847For '!' non-zero becomes zero, zero becomes one. 848For '-' the sign of the number is changed. 849For '+' the number is unchanged. 850 851A String will be converted to a Number first. 852 853These three can be repeated and mixed. Examples: 854 !-1 == 0 855 !!8 == 1 856 --9 == 9 857 858 859expr8 *expr8* 860----- 861expr8[expr1] item of String or |List| *expr-[]* *E111* 862 863If expr8 is a Number or String this results in a String that contains the 864expr1'th single byte from expr8. expr8 is used as a String, expr1 as a 865Number. This doesn't recognize multi-byte encodings, see |byteidx()| for 866an alternative. 867 868Index zero gives the first byte. This is like it works in C. Careful: 869text column numbers start with one! Example, to get the byte under the 870cursor: > 871 :let c = getline(".")[col(".") - 1] 872 873If the length of the String is less than the index, the result is an empty 874String. A negative index always results in an empty string (reason: backwards 875compatibility). Use [-1:] to get the last byte. 876 877If expr8 is a |List| then it results the item at index expr1. See |list-index| 878for possible index values. If the index is out of range this results in an 879error. Example: > 880 :let item = mylist[-1] " get last item 881 882Generally, if a |List| index is equal to or higher than the length of the 883|List|, or more negative than the length of the |List|, this results in an 884error. 885 886 887expr8[expr1a : expr1b] substring or sublist *expr-[:]* 888 889If expr8 is a Number or String this results in the substring with the bytes 890from expr1a to and including expr1b. expr8 is used as a String, expr1a and 891expr1b are used as a Number. This doesn't recognize multi-byte encodings, see 892|byteidx()| for computing the indexes. 893 894If expr1a is omitted zero is used. If expr1b is omitted the length of the 895string minus one is used. 896 897A negative number can be used to measure from the end of the string. -1 is 898the last character, -2 the last but one, etc. 899 900If an index goes out of range for the string characters are omitted. If 901expr1b is smaller than expr1a the result is an empty string. 902 903Examples: > 904 :let c = name[-1:] " last byte of a string 905 :let c = name[-2:-2] " last but one byte of a string 906 :let s = line(".")[4:] " from the fifth byte to the end 907 :let s = s[:-3] " remove last two bytes 908< 909 *sublist* *slice* 910If expr8 is a |List| this results in a new |List| with the items indicated by 911the indexes expr1a and expr1b. This works like with a String, as explained 912just above, except that indexes out of range cause an error. Examples: > 913 :let l = mylist[:3] " first four items 914 :let l = mylist[4:4] " List with one item 915 :let l = mylist[:] " shallow copy of a List 916 917Using expr8[expr1] or expr8[expr1a : expr1b] on a |Funcref| results in an 918error. 919 920 921expr8.name entry in a |Dictionary| *expr-entry* 922 923If expr8 is a |Dictionary| and it is followed by a dot, then the following 924name will be used as a key in the |Dictionary|. This is just like: 925expr8[name]. 926 927The name must consist of alphanumeric characters, just like a variable name, 928but it may start with a number. Curly braces cannot be used. 929 930There must not be white space before or after the dot. 931 932Examples: > 933 :let dict = {"one": 1, 2: "two"} 934 :echo dict.one 935 :echo dict .2 936 937Note that the dot is also used for String concatenation. To avoid confusion 938always put spaces around the dot for String concatenation. 939 940 941expr8(expr1, ...) |Funcref| function call 942 943When expr8 is a |Funcref| type variable, invoke the function it refers to. 944 945 946 947 *expr9* 948number 949------ 950number number constant *expr-number* 951 *hex-number* *octal-number* 952 953Decimal, Hexadecimal (starting with 0x or 0X), or Octal (starting with 0). 954 955 *floating-point-format* 956Floating point numbers can be written in two forms: 957 958 [-+]{N}.{M} 959 [-+]{N}.{M}[eE][-+]{exp} 960 961{N} and {M} are numbers. Both {N} and {M} must be present and can only 962contain digits. 963[-+] means there is an optional plus or minus sign. 964{exp} is the exponent, power of 10. 965Only a decimal point is accepted, not a comma. No matter what the current 966locale is. 967{only when compiled with the |+float| feature} 968 969Examples: 970 123.456 971 +0.0001 972 55.0 973 -0.123 974 1.234e03 975 1.0E-6 976 -3.1416e+88 977 978These are INVALID: 979 3. empty {M} 980 1e40 missing .{M} 981 982 *float-pi* *float-e* 983A few useful values to copy&paste: > 984 :let pi = 3.14159265359 985 :let e = 2.71828182846 986 987Rationale: 988Before floating point was introduced, the text "123.456" was interpreted as 989the two numbers "123" and "456", both converted to a string and concatenated, 990resulting in the string "123456". Since this was considered pointless, and we 991could not find it intentionally being used in Vim scripts, this backwards 992incompatibility was accepted in favor of being able to use the normal notation 993for floating point numbers. 994 995 *floating-point-precision* 996The precision and range of floating points numbers depends on what "double" 997means in the library Vim was compiled with. There is no way to change this at 998runtime. 999 1000The default for displaying a |Float| is to use 6 decimal places, like using 1001printf("%g", f). You can select something else when using the |printf()| 1002function. Example: > 1003 :echo printf('%.15e', atan(1)) 1004< 7.853981633974483e-01 1005 1006 1007 1008string *string* *String* *expr-string* *E114* 1009------ 1010"string" string constant *expr-quote* 1011 1012Note that double quotes are used. 1013 1014A string constant accepts these special characters: 1015\... three-digit octal number (e.g., "\316") 1016\.. two-digit octal number (must be followed by non-digit) 1017\. one-digit octal number (must be followed by non-digit) 1018\x.. byte specified with two hex numbers (e.g., "\x1f") 1019\x. byte specified with one hex number (must be followed by non-hex char) 1020\X.. same as \x.. 1021\X. same as \x. 1022\u.... character specified with up to 4 hex numbers, stored according to the 1023 current value of 'encoding' (e.g., "\u02a4") 1024\U.... same as \u but allows up to 8 hex numbers. 1025\b backspace <BS> 1026\e escape <Esc> 1027\f formfeed <FF> 1028\n newline <NL> 1029\r return <CR> 1030\t tab <Tab> 1031\\ backslash 1032\" double quote 1033\<xxx> Special key named "xxx". e.g. "\<C-W>" for CTRL-W. This is for use 1034 in mappings, the 0x80 byte is escaped. Don't use <Char-xxxx> to get a 1035 utf-8 character, use \uxxxx as mentioned above. 1036 1037Note that "\xff" is stored as the byte 255, which may be invalid in some 1038encodings. Use "\u00ff" to store character 255 according to the current value 1039of 'encoding'. 1040 1041Note that "\000" and "\x00" force the end of the string. 1042 1043 1044literal-string *literal-string* *E115* 1045--------------- 1046'string' string constant *expr-'* 1047 1048Note that single quotes are used. 1049 1050This string is taken as it is. No backslashes are removed or have a special 1051meaning. The only exception is that two quotes stand for one quote. 1052 1053Single quoted strings are useful for patterns, so that backslashes do not need 1054to be doubled. These two commands are equivalent: > 1055 if a =~ "\\s*" 1056 if a =~ '\s*' 1057 1058 1059option *expr-option* *E112* *E113* 1060------ 1061&option option value, local value if possible 1062&g:option global option value 1063&l:option local option value 1064 1065Examples: > 1066 echo "tabstop is " . &tabstop 1067 if &insertmode 1068 1069Any option name can be used here. See |options|. When using the local value 1070and there is no buffer-local or window-local value, the global value is used 1071anyway. 1072 1073 1074register *expr-register* *@r* 1075-------- 1076@r contents of register 'r' 1077 1078The result is the contents of the named register, as a single string. 1079Newlines are inserted where required. To get the contents of the unnamed 1080register use @" or @@. See |registers| for an explanation of the available 1081registers. 1082 1083When using the '=' register you get the expression itself, not what it 1084evaluates to. Use |eval()| to evaluate it. 1085 1086 1087nesting *expr-nesting* *E110* 1088------- 1089(expr1) nested expression 1090 1091 1092environment variable *expr-env* 1093-------------------- 1094$VAR environment variable 1095 1096The String value of any environment variable. When it is not defined, the 1097result is an empty string. 1098 *expr-env-expand* 1099Note that there is a difference between using $VAR directly and using 1100expand("$VAR"). Using it directly will only expand environment variables that 1101are known inside the current Vim session. Using expand() will first try using 1102the environment variables known inside the current Vim session. If that 1103fails, a shell will be used to expand the variable. This can be slow, but it 1104does expand all variables that the shell knows about. Example: > 1105 :echo $shell 1106 :echo expand("$shell") 1107The first one probably doesn't echo anything, the second echoes the $shell 1108variable (if your shell supports it). 1109 1110 1111internal variable *expr-variable* 1112----------------- 1113variable internal variable 1114See below |internal-variables|. 1115 1116 1117function call *expr-function* *E116* *E118* *E119* *E120* 1118------------- 1119function(expr1, ...) function call 1120See below |functions|. 1121 1122 1123============================================================================== 11243. Internal variable *internal-variables* *E461* 1125 1126An internal variable name can be made up of letters, digits and '_'. But it 1127cannot start with a digit. It's also possible to use curly braces, see 1128|curly-braces-names|. 1129 1130An internal variable is created with the ":let" command |:let|. 1131An internal variable is explicitly destroyed with the ":unlet" command 1132|:unlet|. 1133Using a name that is not an internal variable or refers to a variable that has 1134been destroyed results in an error. 1135 1136There are several name spaces for variables. Which one is to be used is 1137specified by what is prepended: 1138 1139 (nothing) In a function: local to a function; otherwise: global 1140|buffer-variable| b: Local to the current buffer. 1141|window-variable| w: Local to the current window. 1142|tabpage-variable| t: Local to the current tab page. 1143|global-variable| g: Global. 1144|local-variable| l: Local to a function. 1145|script-variable| s: Local to a |:source|'ed Vim script. 1146|function-argument| a: Function argument (only inside a function). 1147|vim-variable| v: Global, predefined by Vim. 1148 1149The scope name by itself can be used as a |Dictionary|. For example, to 1150delete all script-local variables: > 1151 :for k in keys(s:) 1152 : unlet s:[k] 1153 :endfor 1154< 1155 *buffer-variable* *b:var* *b:* 1156A variable name that is preceded with "b:" is local to the current buffer. 1157Thus you can have several "b:foo" variables, one for each buffer. 1158This kind of variable is deleted when the buffer is wiped out or deleted with 1159|:bdelete|. 1160 1161One local buffer variable is predefined: 1162 *b:changedtick* *changetick* 1163b:changedtick The total number of changes to the current buffer. It is 1164 incremented for each change. An undo command is also a change 1165 in this case. This can be used to perform an action only when 1166 the buffer has changed. Example: > 1167 :if my_changedtick != b:changedtick 1168 : let my_changedtick = b:changedtick 1169 : call My_Update() 1170 :endif 1171< 1172 *window-variable* *w:var* *w:* 1173A variable name that is preceded with "w:" is local to the current window. It 1174is deleted when the window is closed. 1175 1176 *tabpage-variable* *t:var* *t:* 1177A variable name that is preceded with "t:" is local to the current tab page, 1178It is deleted when the tab page is closed. {not available when compiled 1179without the |+windows| feature} 1180 1181 *global-variable* *g:var* *g:* 1182Inside functions global variables are accessed with "g:". Omitting this will 1183access a variable local to a function. But "g:" can also be used in any other 1184place if you like. 1185 1186 *local-variable* *l:var* *l:* 1187Inside functions local variables are accessed without prepending anything. 1188But you can also prepend "l:" if you like. However, without prepending "l:" 1189you may run into reserved variable names. For example "count". By itself it 1190refers to "v:count". Using "l:count" you can have a local variable with the 1191same name. 1192 1193 *script-variable* *s:var* 1194In a Vim script variables starting with "s:" can be used. They cannot be 1195accessed from outside of the scripts, thus are local to the script. 1196 1197They can be used in: 1198- commands executed while the script is sourced 1199- functions defined in the script 1200- autocommands defined in the script 1201- functions and autocommands defined in functions and autocommands which were 1202 defined in the script (recursively) 1203- user defined commands defined in the script 1204Thus not in: 1205- other scripts sourced from this one 1206- mappings 1207- menus 1208- etc. 1209 1210Script variables can be used to avoid conflicts with global variable names. 1211Take this example: > 1212 1213 let s:counter = 0 1214 function MyCounter() 1215 let s:counter = s:counter + 1 1216 echo s:counter 1217 endfunction 1218 command Tick call MyCounter() 1219 1220You can now invoke "Tick" from any script, and the "s:counter" variable in 1221that script will not be changed, only the "s:counter" in the script where 1222"Tick" was defined is used. 1223 1224Another example that does the same: > 1225 1226 let s:counter = 0 1227 command Tick let s:counter = s:counter + 1 | echo s:counter 1228 1229When calling a function and invoking a user-defined command, the context for 1230script variables is set to the script where the function or command was 1231defined. 1232 1233The script variables are also available when a function is defined inside a 1234function that is defined in a script. Example: > 1235 1236 let s:counter = 0 1237 function StartCounting(incr) 1238 if a:incr 1239 function MyCounter() 1240 let s:counter = s:counter + 1 1241 endfunction 1242 else 1243 function MyCounter() 1244 let s:counter = s:counter - 1 1245 endfunction 1246 endif 1247 endfunction 1248 1249This defines the MyCounter() function either for counting up or counting down 1250when calling StartCounting(). It doesn't matter from where StartCounting() is 1251called, the s:counter variable will be accessible in MyCounter(). 1252 1253When the same script is sourced again it will use the same script variables. 1254They will remain valid as long as Vim is running. This can be used to 1255maintain a counter: > 1256 1257 if !exists("s:counter") 1258 let s:counter = 1 1259 echo "script executed for the first time" 1260 else 1261 let s:counter = s:counter + 1 1262 echo "script executed " . s:counter . " times now" 1263 endif 1264 1265Note that this means that filetype plugins don't get a different set of script 1266variables for each buffer. Use local buffer variables instead |b:var|. 1267 1268 1269Predefined Vim variables: *vim-variable* *v:var* *v:* 1270 1271 *v:beval_col* *beval_col-variable* 1272v:beval_col The number of the column, over which the mouse pointer is. 1273 This is the byte index in the |v:beval_lnum| line. 1274 Only valid while evaluating the 'balloonexpr' option. 1275 1276 *v:beval_bufnr* *beval_bufnr-variable* 1277v:beval_bufnr The number of the buffer, over which the mouse pointer is. Only 1278 valid while evaluating the 'balloonexpr' option. 1279 1280 *v:beval_lnum* *beval_lnum-variable* 1281v:beval_lnum The number of the line, over which the mouse pointer is. Only 1282 valid while evaluating the 'balloonexpr' option. 1283 1284 *v:beval_text* *beval_text-variable* 1285v:beval_text The text under or after the mouse pointer. Usually a word as 1286 it is useful for debugging a C program. 'iskeyword' applies, 1287 but a dot and "->" before the position is included. When on a 1288 ']' the text before it is used, including the matching '[' and 1289 word before it. When on a Visual area within one line the 1290 highlighted text is used. 1291 Only valid while evaluating the 'balloonexpr' option. 1292 1293 *v:beval_winnr* *beval_winnr-variable* 1294v:beval_winnr The number of the window, over which the mouse pointer is. Only 1295 valid while evaluating the 'balloonexpr' option. The first 1296 window has number zero (unlike most other places where a 1297 window gets a number). 1298 1299 *v:char* *char-variable* 1300v:char Argument for evaluating 'formatexpr' and used for the typed 1301 character when using <expr> in an abbreviation |:map-<expr>|. 1302 It is also used by the |InsertCharPre| and |InsertEnter| events. 1303 1304 *v:charconvert_from* *charconvert_from-variable* 1305v:charconvert_from 1306 The name of the character encoding of a file to be converted. 1307 Only valid while evaluating the 'charconvert' option. 1308 1309 *v:charconvert_to* *charconvert_to-variable* 1310v:charconvert_to 1311 The name of the character encoding of a file after conversion. 1312 Only valid while evaluating the 'charconvert' option. 1313 1314 *v:cmdarg* *cmdarg-variable* 1315v:cmdarg This variable is used for two purposes: 1316 1. The extra arguments given to a file read/write command. 1317 Currently these are "++enc=" and "++ff=". This variable is 1318 set before an autocommand event for a file read/write 1319 command is triggered. There is a leading space to make it 1320 possible to append this variable directly after the 1321 read/write command. Note: The "+cmd" argument isn't 1322 included here, because it will be executed anyway. 1323 2. When printing a PostScript file with ":hardcopy" this is 1324 the argument for the ":hardcopy" command. This can be used 1325 in 'printexpr'. 1326 1327 *v:cmdbang* *cmdbang-variable* 1328v:cmdbang Set like v:cmdarg for a file read/write command. When a "!" 1329 was used the value is 1, otherwise it is 0. Note that this 1330 can only be used in autocommands. For user commands |<bang>| 1331 can be used. 1332 1333 *v:completed_item* *completed_item-variable* 1334v:completed_item 1335 |Dictionary| containing the |complete-items| for the most 1336 recently completed word after |CompleteDone|. The 1337 |Dictionary| is empty if the completion failed. 1338 1339 *v:count* *count-variable* 1340v:count The count given for the last Normal mode command. Can be used 1341 to get the count before a mapping. Read-only. Example: > 1342 :map _x :<C-U>echo "the count is " . v:count<CR> 1343< Note: The <C-U> is required to remove the line range that you 1344 get when typing ':' after a count. 1345 When there are two counts, as in "3d2w", they are multiplied, 1346 just like what happens in the command, "d6w" for the example. 1347 Also used for evaluating the 'formatexpr' option. 1348 "count" also works, for backwards compatibility. 1349 1350 *v:count1* *count1-variable* 1351v:count1 Just like "v:count", but defaults to one when no count is 1352 used. 1353 1354 *v:ctype* *ctype-variable* 1355v:ctype The current locale setting for characters of the runtime 1356 environment. This allows Vim scripts to be aware of the 1357 current locale encoding. Technical: it's the value of 1358 LC_CTYPE. When not using a locale the value is "C". 1359 This variable can not be set directly, use the |:language| 1360 command. 1361 See |multi-lang|. 1362 1363 *v:dying* *dying-variable* 1364v:dying Normally zero. When a deadly signal is caught it's set to 1365 one. When multiple signals are caught the number increases. 1366 Can be used in an autocommand to check if Vim didn't 1367 terminate normally. {only works on Unix} 1368 Example: > 1369 :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif 1370< Note: if another deadly signal is caught when v:dying is one, 1371 VimLeave autocommands will not be executed. 1372 1373 *v:errmsg* *errmsg-variable* 1374v:errmsg Last given error message. It's allowed to set this variable. 1375 Example: > 1376 :let v:errmsg = "" 1377 :silent! next 1378 :if v:errmsg != "" 1379 : ... handle error 1380< "errmsg" also works, for backwards compatibility. 1381 1382 *v:errors* *errors-variable* 1383v:errors Errors found by assert functions, such as |assert_true()|. 1384 This is a list of strings. 1385 The assert functions append an item when an assert fails. 1386 To remove old results make it empty: > 1387 :let v:errors = [] 1388< If v:errors is set to anything but a list it is made an empty 1389 list by the assert function. 1390 1391 *v:exception* *exception-variable* 1392v:exception The value of the exception most recently caught and not 1393 finished. See also |v:throwpoint| and |throw-variables|. 1394 Example: > 1395 :try 1396 : throw "oops" 1397 :catch /.*/ 1398 : echo "caught" v:exception 1399 :endtry 1400< Output: "caught oops". 1401 1402 *v:fcs_reason* *fcs_reason-variable* 1403v:fcs_reason The reason why the |FileChangedShell| event was triggered. 1404 Can be used in an autocommand to decide what to do and/or what 1405 to set v:fcs_choice to. Possible values: 1406 deleted file no longer exists 1407 conflict file contents, mode or timestamp was 1408 changed and buffer is modified 1409 changed file contents has changed 1410 mode mode of file changed 1411 time only file timestamp changed 1412 1413 *v:fcs_choice* *fcs_choice-variable* 1414v:fcs_choice What should happen after a |FileChangedShell| event was 1415 triggered. Can be used in an autocommand to tell Vim what to 1416 do with the affected buffer: 1417 reload Reload the buffer (does not work if 1418 the file was deleted). 1419 ask Ask the user what to do, as if there 1420 was no autocommand. Except that when 1421 only the timestamp changed nothing 1422 will happen. 1423 <empty> Nothing, the autocommand should do 1424 everything that needs to be done. 1425 The default is empty. If another (invalid) value is used then 1426 Vim behaves like it is empty, there is no warning message. 1427 1428 *v:fname_in* *fname_in-variable* 1429v:fname_in The name of the input file. Valid while evaluating: 1430 option used for ~ 1431 'charconvert' file to be converted 1432 'diffexpr' original file 1433 'patchexpr' original file 1434 'printexpr' file to be printed 1435 And set to the swap file name for |SwapExists|. 1436 1437 *v:fname_out* *fname_out-variable* 1438v:fname_out The name of the output file. Only valid while 1439 evaluating: 1440 option used for ~ 1441 'charconvert' resulting converted file (*) 1442 'diffexpr' output of diff 1443 'patchexpr' resulting patched file 1444 (*) When doing conversion for a write command (e.g., ":w 1445 file") it will be equal to v:fname_in. When doing conversion 1446 for a read command (e.g., ":e file") it will be a temporary 1447 file and different from v:fname_in. 1448 1449 *v:fname_new* *fname_new-variable* 1450v:fname_new The name of the new version of the file. Only valid while 1451 evaluating 'diffexpr'. 1452 1453 *v:fname_diff* *fname_diff-variable* 1454v:fname_diff The name of the diff (patch) file. Only valid while 1455 evaluating 'patchexpr'. 1456 1457 *v:folddashes* *folddashes-variable* 1458v:folddashes Used for 'foldtext': dashes representing foldlevel of a closed 1459 fold. 1460 Read-only in the |sandbox|. |fold-foldtext| 1461 1462 *v:foldlevel* *foldlevel-variable* 1463v:foldlevel Used for 'foldtext': foldlevel of closed fold. 1464 Read-only in the |sandbox|. |fold-foldtext| 1465 1466 *v:foldend* *foldend-variable* 1467v:foldend Used for 'foldtext': last line of closed fold. 1468 Read-only in the |sandbox|. |fold-foldtext| 1469 1470 *v:foldstart* *foldstart-variable* 1471v:foldstart Used for 'foldtext': first line of closed fold. 1472 Read-only in the |sandbox|. |fold-foldtext| 1473 1474 *v:hlsearch* *hlsearch-variable* 1475v:hlsearch Variable that indicates whether search highlighting is on. 1476 Setting it makes sense only if 'hlsearch' is enabled which 1477 requires |+extra_search|. Setting this variable to zero acts 1478 the like |:nohlsearch| command, setting it to one acts like > 1479 let &hlsearch = &hlsearch 1480< Note that the value is restored when returning from a 1481 function. |function-search-undo|. 1482 1483 *v:insertmode* *insertmode-variable* 1484v:insertmode Used for the |InsertEnter| and |InsertChange| autocommand 1485 events. Values: 1486 i Insert mode 1487 r Replace mode 1488 v Virtual Replace mode 1489 1490 *v:key* *key-variable* 1491v:key Key of the current item of a |Dictionary|. Only valid while 1492 evaluating the expression used with |map()| and |filter()|. 1493 Read-only. 1494 1495 *v:lang* *lang-variable* 1496v:lang The current locale setting for messages of the runtime 1497 environment. This allows Vim scripts to be aware of the 1498 current language. Technical: it's the value of LC_MESSAGES. 1499 The value is system dependent. 1500 This variable can not be set directly, use the |:language| 1501 command. 1502 It can be different from |v:ctype| when messages are desired 1503 in a different language than what is used for character 1504 encoding. See |multi-lang|. 1505 1506 *v:lc_time* *lc_time-variable* 1507v:lc_time The current locale setting for time messages of the runtime 1508 environment. This allows Vim scripts to be aware of the 1509 current language. Technical: it's the value of LC_TIME. 1510 This variable can not be set directly, use the |:language| 1511 command. See |multi-lang|. 1512 1513 *v:lnum* *lnum-variable* 1514v:lnum Line number for the 'foldexpr' |fold-expr|, 'formatexpr' and 1515 'indentexpr' expressions, tab page number for 'guitablabel' 1516 and 'guitabtooltip'. Only valid while one of these 1517 expressions is being evaluated. Read-only when in the 1518 |sandbox|. 1519 1520 *v:mouse_win* *mouse_win-variable* 1521v:mouse_win Window number for a mouse click obtained with |getchar()|. 1522 First window has number 1, like with |winnr()|. The value is 1523 zero when there was no mouse button click. 1524 1525 *v:mouse_lnum* *mouse_lnum-variable* 1526v:mouse_lnum Line number for a mouse click obtained with |getchar()|. 1527 This is the text line number, not the screen line number. The 1528 value is zero when there was no mouse button click. 1529 1530 *v:mouse_col* *mouse_col-variable* 1531v:mouse_col Column number for a mouse click obtained with |getchar()|. 1532 This is the screen column number, like with |virtcol()|. The 1533 value is zero when there was no mouse button click. 1534 1535 *v:oldfiles* *oldfiles-variable* 1536v:oldfiles List of file names that is loaded from the |viminfo| file on 1537 startup. These are the files that Vim remembers marks for. 1538 The length of the List is limited by the ' argument of the 1539 'viminfo' option (default is 100). 1540 When the |viminfo| file is not used the List is empty. 1541 Also see |:oldfiles| and |c_#<|. 1542 The List can be modified, but this has no effect on what is 1543 stored in the |viminfo| file later. If you use values other 1544 than String this will cause trouble. 1545 {only when compiled with the |+viminfo| feature} 1546 1547 *v:option_new* 1548v:option_new New value of the option. Valid while executing an |OptionSet| 1549 autocommand. 1550 *v:option_old* 1551v:option_old Old value of the option. Valid while executing an |OptionSet| 1552 autocommand. 1553 *v:option_type* 1554v:option_type Scope of the set command. Valid while executing an 1555 |OptionSet| autocommand. Can be either "global" or "local" 1556 *v:operator* *operator-variable* 1557v:operator The last operator given in Normal mode. This is a single 1558 character except for commands starting with <g> or <z>, 1559 in which case it is two characters. Best used alongside 1560 |v:prevcount| and |v:register|. Useful if you want to cancel 1561 Operator-pending mode and then use the operator, e.g.: > 1562 :omap O <Esc>:call MyMotion(v:operator)<CR> 1563< The value remains set until another operator is entered, thus 1564 don't expect it to be empty. 1565 v:operator is not set for |:delete|, |:yank| or other Ex 1566 commands. 1567 Read-only. 1568 1569 *v:prevcount* *prevcount-variable* 1570v:prevcount The count given for the last but one Normal mode command. 1571 This is the v:count value of the previous command. Useful if 1572 you want to cancel Visual or Operator-pending mode and then 1573 use the count, e.g.: > 1574 :vmap % <Esc>:call MyFilter(v:prevcount)<CR> 1575< Read-only. 1576 1577 *v:profiling* *profiling-variable* 1578v:profiling Normally zero. Set to one after using ":profile start". 1579 See |profiling|. 1580 1581 *v:progname* *progname-variable* 1582v:progname Contains the name (with path removed) with which Vim was 1583 invoked. Allows you to do special initialisations for |view|, 1584 |evim| etc., or any other name you might symlink to Vim. 1585 Read-only. 1586 1587 *v:progpath* *progpath-variable* 1588v:progpath Contains the command with which Vim was invoked, including the 1589 path. Useful if you want to message a Vim server using a 1590 |--remote-expr|. 1591 To get the full path use: > 1592 echo exepath(v:progpath) 1593< NOTE: This does not work when the command is a relative path 1594 and the current directory has changed. 1595 Read-only. 1596 1597 *v:register* *register-variable* 1598v:register The name of the register in effect for the current normal mode 1599 command (regardless of whether that command actually used a 1600 register). Or for the currently executing normal mode mapping 1601 (use this in custom commands that take a register). 1602 If none is supplied it is the default register '"', unless 1603 'clipboard' contains "unnamed" or "unnamedplus", then it is 1604 '*' or '+'. 1605 Also see |getreg()| and |setreg()| 1606 1607 *v:scrollstart* *scrollstart-variable* 1608v:scrollstart String describing the script or function that caused the 1609 screen to scroll up. It's only set when it is empty, thus the 1610 first reason is remembered. It is set to "Unknown" for a 1611 typed command. 1612 This can be used to find out why your script causes the 1613 hit-enter prompt. 1614 1615 *v:servername* *servername-variable* 1616v:servername The resulting registered |x11-clientserver| name if any. 1617 Read-only. 1618 1619 1620v:searchforward *v:searchforward* *searchforward-variable* 1621 Search direction: 1 after a forward search, 0 after a 1622 backward search. It is reset to forward when directly setting 1623 the last search pattern, see |quote/|. 1624 Note that the value is restored when returning from a 1625 function. |function-search-undo|. 1626 Read-write. 1627 1628 *v:shell_error* *shell_error-variable* 1629v:shell_error Result of the last shell command. When non-zero, the last 1630 shell command had an error. When zero, there was no problem. 1631 This only works when the shell returns the error code to Vim. 1632 The value -1 is often used when the command could not be 1633 executed. Read-only. 1634 Example: > 1635 :!mv foo bar 1636 :if v:shell_error 1637 : echo 'could not rename "foo" to "bar"!' 1638 :endif 1639< "shell_error" also works, for backwards compatibility. 1640 1641 *v:statusmsg* *statusmsg-variable* 1642v:statusmsg Last given status message. It's allowed to set this variable. 1643 1644 *v:swapname* *swapname-variable* 1645v:swapname Only valid when executing |SwapExists| autocommands: Name of 1646 the swap file found. Read-only. 1647 1648 *v:swapchoice* *swapchoice-variable* 1649v:swapchoice |SwapExists| autocommands can set this to the selected choice 1650 for handling an existing swap file: 1651 'o' Open read-only 1652 'e' Edit anyway 1653 'r' Recover 1654 'd' Delete swapfile 1655 'q' Quit 1656 'a' Abort 1657 The value should be a single-character string. An empty value 1658 results in the user being asked, as would happen when there is 1659 no SwapExists autocommand. The default is empty. 1660 1661 *v:swapcommand* *swapcommand-variable* 1662v:swapcommand Normal mode command to be executed after a file has been 1663 opened. Can be used for a |SwapExists| autocommand to have 1664 another Vim open the file and jump to the right place. For 1665 example, when jumping to a tag the value is ":tag tagname\r". 1666 For ":edit +cmd file" the value is ":cmd\r". 1667 1668 *v:termresponse* *termresponse-variable* 1669v:termresponse The escape sequence returned by the terminal for the |t_RV| 1670 termcap entry. It is set when Vim receives an escape sequence 1671 that starts with ESC [ or CSI and ends in a 'c', with only 1672 digits, ';' and '.' in between. 1673 When this option is set, the TermResponse autocommand event is 1674 fired, so that you can react to the response from the 1675 terminal. 1676 The response from a new xterm is: "<Esc>[ Pp ; Pv ; Pc c". Pp 1677 is the terminal type: 0 for vt100 and 1 for vt220. Pv is the 1678 patch level (since this was introduced in patch 95, it's 1679 always 95 or bigger). Pc is always zero. 1680 {only when compiled with |+termresponse| feature} 1681 1682 *v:this_session* *this_session-variable* 1683v:this_session Full filename of the last loaded or saved session file. See 1684 |:mksession|. It is allowed to set this variable. When no 1685 session file has been saved, this variable is empty. 1686 "this_session" also works, for backwards compatibility. 1687 1688 *v:throwpoint* *throwpoint-variable* 1689v:throwpoint The point where the exception most recently caught and not 1690 finished was thrown. Not set when commands are typed. See 1691 also |v:exception| and |throw-variables|. 1692 Example: > 1693 :try 1694 : throw "oops" 1695 :catch /.*/ 1696 : echo "Exception from" v:throwpoint 1697 :endtry 1698< Output: "Exception from test.vim, line 2" 1699 1700 *v:val* *val-variable* 1701v:val Value of the current item of a |List| or |Dictionary|. Only 1702 valid while evaluating the expression used with |map()| and 1703 |filter()|. Read-only. 1704 1705 *v:version* *version-variable* 1706v:version Version number of Vim: Major version number times 100 plus 1707 minor version number. Version 5.0 is 500. Version 5.1 (5.01) 1708 is 501. Read-only. "version" also works, for backwards 1709 compatibility. 1710 Use |has()| to check if a certain patch was included, e.g.: > 1711 if has("patch-7.4.123") 1712< Note that patch numbers are specific to the version, thus both 1713 version 5.0 and 5.1 may have a patch 123, but these are 1714 completely different. 1715 1716 *v:warningmsg* *warningmsg-variable* 1717v:warningmsg Last given warning message. It's allowed to set this variable. 1718 1719 *v:windowid* *windowid-variable* 1720v:windowid When any X11 based GUI is running or when running in a 1721 terminal and Vim connects to the X server (|-X|) this will be 1722 set to the window ID. 1723 When an MS-Windows GUI is running this will be set to the 1724 window handle. 1725 Otherwise the value is zero. 1726 Note: for windows inside Vim use |winnr()|. 1727 1728============================================================================== 17294. Builtin Functions *functions* 1730 1731See |function-list| for a list grouped by what the function is used for. 1732 1733(Use CTRL-] on the function name to jump to the full explanation.) 1734 1735USAGE RESULT DESCRIPTION ~ 1736 1737abs( {expr}) Float or Number absolute value of {expr} 1738acos( {expr}) Float arc cosine of {expr} 1739add( {list}, {item}) List append {item} to |List| {list} 1740and( {expr}, {expr}) Number bitwise AND 1741append( {lnum}, {string}) Number append {string} below line {lnum} 1742append( {lnum}, {list}) Number append lines {list} below line {lnum} 1743argc() Number number of files in the argument list 1744argidx() Number current index in the argument list 1745arglistid( [{winnr} [, {tabnr}]]) 1746 Number argument list id 1747argv( {nr}) String {nr} entry of the argument list 1748argv( ) List the argument list 1749assert_equal( {exp}, {act} [, {msg}]) none assert that {exp} equals {act} 1750assert_false( {actual} [, {msg}]) none assert that {actual} is false 1751assert_true( {actual} [, {msg}]) none assert that {actual} is true 1752asin( {expr}) Float arc sine of {expr} 1753atan( {expr}) Float arc tangent of {expr} 1754atan2( {expr}, {expr}) Float arc tangent of {expr1} / {expr2} 1755browse( {save}, {title}, {initdir}, {default}) 1756 String put up a file requester 1757browsedir( {title}, {initdir}) String put up a directory requester 1758bufexists( {expr}) Number TRUE if buffer {expr} exists 1759buflisted( {expr}) Number TRUE if buffer {expr} is listed 1760bufloaded( {expr}) Number TRUE if buffer {expr} is loaded 1761bufname( {expr}) String Name of the buffer {expr} 1762bufnr( {expr} [, {create}]) Number Number of the buffer {expr} 1763bufwinnr( {expr}) Number window number of buffer {expr} 1764byte2line( {byte}) Number line number at byte count {byte} 1765byteidx( {expr}, {nr}) Number byte index of {nr}'th char in {expr} 1766byteidxcomp( {expr}, {nr}) Number byte index of {nr}'th char in {expr} 1767call( {func}, {arglist} [, {dict}]) 1768 any call {func} with arguments {arglist} 1769ceil( {expr}) Float round {expr} up 1770changenr() Number current change number 1771char2nr( {expr}[, {utf8}]) Number ASCII/UTF8 value of first char in {expr} 1772cindent( {lnum}) Number C indent for line {lnum} 1773clearmatches() none clear all matches 1774col( {expr}) Number column nr of cursor or mark 1775complete( {startcol}, {matches}) none set Insert mode completion 1776complete_add( {expr}) Number add completion match 1777complete_check() Number check for key typed during completion 1778confirm( {msg} [, {choices} [, {default} [, {type}]]]) 1779 Number number of choice picked by user 1780copy( {expr}) any make a shallow copy of {expr} 1781cos( {expr}) Float cosine of {expr} 1782cosh( {expr}) Float hyperbolic cosine of {expr} 1783count( {list}, {expr} [, {ic} [, {start}]]) 1784 Number count how many {expr} are in {list} 1785cscope_connection( [{num} , {dbpath} [, {prepend}]]) 1786 Number checks existence of cscope connection 1787cursor( {lnum}, {col} [, {off}]) 1788 Number move cursor to {lnum}, {col}, {off} 1789cursor( {list}) Number move cursor to position in {list} 1790deepcopy( {expr} [, {noref}]) any make a full copy of {expr} 1791delete( {fname}) Number delete file {fname} 1792did_filetype() Number TRUE if FileType autocommand event used 1793diff_filler( {lnum}) Number diff filler lines about {lnum} 1794diff_hlID( {lnum}, {col}) Number diff highlighting at {lnum}/{col} 1795empty( {expr}) Number TRUE if {expr} is empty 1796escape( {string}, {chars}) String escape {chars} in {string} with '\' 1797eval( {string}) any evaluate {string} into its value 1798eventhandler( ) Number TRUE if inside an event handler 1799executable( {expr}) Number 1 if executable {expr} exists 1800exepath( {expr}) String full path of the command {expr} 1801exists( {expr}) Number TRUE if {expr} exists 1802extend( {expr1}, {expr2} [, {expr3}]) 1803 List/Dict insert items of {expr2} into {expr1} 1804exp( {expr}) Float exponential of {expr} 1805expand( {expr} [, {nosuf} [, {list}]]) 1806 any expand special keywords in {expr} 1807feedkeys( {string} [, {mode}]) Number add key sequence to typeahead buffer 1808filereadable( {file}) Number TRUE if {file} is a readable file 1809filewritable( {file}) Number TRUE if {file} is a writable file 1810filter( {expr}, {string}) List/Dict remove items from {expr} where 1811 {string} is 0 1812finddir( {name}[, {path}[, {count}]]) 1813 String find directory {name} in {path} 1814findfile( {name}[, {path}[, {count}]]) 1815 String find file {name} in {path} 1816float2nr( {expr}) Number convert Float {expr} to a Number 1817floor( {expr}) Float round {expr} down 1818fmod( {expr1}, {expr2}) Float remainder of {expr1} / {expr2} 1819fnameescape( {fname}) String escape special characters in {fname} 1820fnamemodify( {fname}, {mods}) String modify file name 1821foldclosed( {lnum}) Number first line of fold at {lnum} if closed 1822foldclosedend( {lnum}) Number last line of fold at {lnum} if closed 1823foldlevel( {lnum}) Number fold level at {lnum} 1824foldtext( ) String line displayed for closed fold 1825foldtextresult( {lnum}) String text for closed fold at {lnum} 1826foreground( ) Number bring the Vim window to the foreground 1827function( {name}) Funcref reference to function {name} 1828garbagecollect( [{atexit}]) none free memory, breaking cyclic references 1829get( {list}, {idx} [, {def}]) any get item {idx} from {list} or {def} 1830get( {dict}, {key} [, {def}]) any get item {key} from {dict} or {def} 1831getbufline( {expr}, {lnum} [, {end}]) 1832 List lines {lnum} to {end} of buffer {expr} 1833getbufvar( {expr}, {varname} [, {def}]) 1834 any variable {varname} in buffer {expr} 1835getchar( [expr]) Number get one character from the user 1836getcharmod( ) Number modifiers for the last typed character 1837getcharsearch() Dict last character search 1838getcmdline() String return the current command-line 1839getcmdpos() Number return cursor position in command-line 1840getcmdtype() String return current command-line type 1841getcmdwintype() String return current command-line window type 1842getcurpos() List position of the cursor 1843getcwd() String the current working directory 1844getfontname( [{name}]) String name of font being used 1845getfperm( {fname}) String file permissions of file {fname} 1846getfsize( {fname}) Number size in bytes of file {fname} 1847getftime( {fname}) Number last modification time of file 1848getftype( {fname}) String description of type of file {fname} 1849getline( {lnum}) String line {lnum} of current buffer 1850getline( {lnum}, {end}) List lines {lnum} to {end} of current buffer 1851getloclist( {nr}) List list of location list items 1852getmatches() List list of current matches 1853getpid() Number process ID of Vim 1854getpos( {expr}) List position of cursor, mark, etc. 1855getqflist() List list of quickfix items 1856getreg( [{regname} [, 1 [, {list}]]]) 1857 String or List contents of register 1858getregtype( [{regname}]) String type of register 1859gettabvar( {nr}, {varname} [, {def}]) 1860 any variable {varname} in tab {nr} or {def} 1861gettabwinvar( {tabnr}, {winnr}, {name} [, {def}]) 1862 any {name} in {winnr} in tab page {tabnr} 1863getwinposx() Number X coord in pixels of GUI Vim window 1864getwinposy() Number Y coord in pixels of GUI Vim window 1865getwinvar( {nr}, {varname} [, {def}]) 1866 any variable {varname} in window {nr} 1867glob( {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 1868 any expand file wildcards in {expr} 1869glob2regpat( {expr}) String convert a glob pat into a search pat 1870globpath( {path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 1871 String do glob({expr}) for all dirs in {path} 1872has( {feature}) Number TRUE if feature {feature} supported 1873has_key( {dict}, {key}) Number TRUE if {dict} has entry {key} 1874haslocaldir() Number TRUE if current window executed |:lcd| 1875hasmapto( {what} [, {mode} [, {abbr}]]) 1876 Number TRUE if mapping to {what} exists 1877histadd( {history},{item}) String add an item to a history 1878histdel( {history} [, {item}]) String remove an item from a history 1879histget( {history} [, {index}]) String get the item {index} from a history 1880histnr( {history}) Number highest index of a history 1881hlexists( {name}) Number TRUE if highlight group {name} exists 1882hlID( {name}) Number syntax ID of highlight group {name} 1883hostname() String name of the machine Vim is running on 1884iconv( {expr}, {from}, {to}) String convert encoding of {expr} 1885indent( {lnum}) Number indent of line {lnum} 1886index( {list}, {expr} [, {start} [, {ic}]]) 1887 Number index in {list} where {expr} appears 1888input( {prompt} [, {text} [, {completion}]]) 1889 String get input from the user 1890inputdialog( {p} [, {t} [, {c}]]) String like input() but in a GUI dialog 1891inputlist( {textlist}) Number let the user pick from a choice list 1892inputrestore() Number restore typeahead 1893inputsave() Number save and clear typeahead 1894inputsecret( {prompt} [, {text}]) String like input() but hiding the text 1895insert( {list}, {item} [, {idx}]) List insert {item} in {list} [before {idx}] 1896invert( {expr}) Number bitwise invert 1897isdirectory( {directory}) Number TRUE if {directory} is a directory 1898islocked( {expr}) Number TRUE if {expr} is locked 1899items( {dict}) List key-value pairs in {dict} 1900join( {list} [, {sep}]) String join {list} items into one String 1901keys( {dict}) List keys in {dict} 1902len( {expr}) Number the length of {expr} 1903libcall( {lib}, {func}, {arg}) String call {func} in library {lib} with {arg} 1904libcallnr( {lib}, {func}, {arg}) Number idem, but return a Number 1905line( {expr}) Number line nr of cursor, last line or mark 1906line2byte( {lnum}) Number byte count of line {lnum} 1907lispindent( {lnum}) Number Lisp indent for line {lnum} 1908localtime() Number current time 1909log( {expr}) Float natural logarithm (base e) of {expr} 1910log10( {expr}) Float logarithm of Float {expr} to base 10 1911luaeval( {expr}[, {expr}]) any evaluate |Lua| expression 1912map( {expr}, {string}) List/Dict change each item in {expr} to {expr} 1913maparg( {name}[, {mode} [, {abbr} [, {dict}]]]) 1914 String or Dict 1915 rhs of mapping {name} in mode {mode} 1916mapcheck( {name}[, {mode} [, {abbr}]]) 1917 String check for mappings matching {name} 1918match( {expr}, {pat}[, {start}[, {count}]]) 1919 Number position where {pat} matches in {expr} 1920matchadd( {group}, {pattern}[, {priority}[, {id}]]) 1921 Number highlight {pattern} with {group} 1922matchaddpos( {group}, {list}[, {priority}[, {id}]]) 1923 Number highlight positions with {group} 1924matcharg( {nr}) List arguments of |:match| 1925matchdelete( {id}) Number delete match identified by {id} 1926matchend( {expr}, {pat}[, {start}[, {count}]]) 1927 Number position where {pat} ends in {expr} 1928matchlist( {expr}, {pat}[, {start}[, {count}]]) 1929 List match and submatches of {pat} in {expr} 1930matchstr( {expr}, {pat}[, {start}[, {count}]]) 1931 String {count}'th match of {pat} in {expr} 1932max( {list}) Number maximum value of items in {list} 1933min( {list}) Number minimum value of items in {list} 1934mkdir( {name} [, {path} [, {prot}]]) 1935 Number create directory {name} 1936mode( [expr]) String current editing mode 1937mzeval( {expr}) any evaluate |MzScheme| expression 1938nextnonblank( {lnum}) Number line nr of non-blank line >= {lnum} 1939nr2char( {expr}[, {utf8}]) String single char with ASCII/UTF8 value {expr} 1940or( {expr}, {expr}) Number bitwise OR 1941pathshorten( {expr}) String shorten directory names in a path 1942pow( {x}, {y}) Float {x} to the power of {y} 1943prevnonblank( {lnum}) Number line nr of non-blank line <= {lnum} 1944printf( {fmt}, {expr1}...) String format text 1945pumvisible() Number whether popup menu is visible 1946pyeval( {expr}) any evaluate |Python| expression 1947py3eval( {expr}) any evaluate |python3| expression 1948range( {expr} [, {max} [, {stride}]]) 1949 List items from {expr} to {max} 1950readfile( {fname} [, {binary} [, {max}]]) 1951 List get list of lines from file {fname} 1952reltime( [{start} [, {end}]]) List get time value 1953reltimestr( {time}) String turn time value into a String 1954remote_expr( {server}, {string} [, {idvar}]) 1955 String send expression 1956remote_foreground( {server}) Number bring Vim server to the foreground 1957remote_peek( {serverid} [, {retvar}]) 1958 Number check for reply string 1959remote_read( {serverid}) String read reply string 1960remote_send( {server}, {string} [, {idvar}]) 1961 String send key sequence 1962remove( {list}, {idx} [, {end}]) any remove items {idx}-{end} from {list} 1963remove( {dict}, {key}) any remove entry {key} from {dict} 1964rename( {from}, {to}) Number rename (move) file from {from} to {to} 1965repeat( {expr}, {count}) String repeat {expr} {count} times 1966resolve( {filename}) String get filename a shortcut points to 1967reverse( {list}) List reverse {list} in-place 1968round( {expr}) Float round off {expr} 1969screenattr( {row}, {col}) Number attribute at screen position 1970screenchar( {row}, {col}) Number character at screen position 1971screencol() Number current cursor column 1972screenrow() Number current cursor row 1973search( {pattern} [, {flags} [, {stopline} [, {timeout}]]]) 1974 Number search for {pattern} 1975searchdecl( {name} [, {global} [, {thisblock}]]) 1976 Number search for variable declaration 1977searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 1978 Number search for other end of start/end pair 1979searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 1980 List search for other end of start/end pair 1981searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]]) 1982 List search for {pattern} 1983server2client( {clientid}, {string}) 1984 Number send reply string 1985serverlist() String get a list of available servers 1986setbufvar( {expr}, {varname}, {val}) set {varname} in buffer {expr} to {val} 1987setcharsearch( {dict}) Dict set character search from {dict} 1988setcmdpos( {pos}) Number set cursor position in command-line 1989setline( {lnum}, {line}) Number set line {lnum} to {line} 1990setloclist( {nr}, {list}[, {action}]) 1991 Number modify location list using {list} 1992setmatches( {list}) Number restore a list of matches 1993setpos( {expr}, {list}) Number set the {expr} position to {list} 1994setqflist( {list}[, {action}]) Number modify quickfix list using {list} 1995setreg( {n}, {v}[, {opt}]) Number set register to value and type 1996settabvar( {nr}, {varname}, {val}) set {varname} in tab page {nr} to {val} 1997settabwinvar( {tabnr}, {winnr}, {varname}, {val}) set {varname} in window 1998 {winnr} in tab page {tabnr} to {val} 1999setwinvar( {nr}, {varname}, {val}) set {varname} in window {nr} to {val} 2000sha256( {string}) String SHA256 checksum of {string} 2001shellescape( {string} [, {special}]) 2002 String escape {string} for use as shell 2003 command argument 2004shiftwidth() Number effective value of 'shiftwidth' 2005simplify( {filename}) String simplify filename as much as possible 2006sin( {expr}) Float sine of {expr} 2007sinh( {expr}) Float hyperbolic sine of {expr} 2008sort( {list} [, {func} [, {dict}]]) 2009 List sort {list}, using {func} to compare 2010soundfold( {word}) String sound-fold {word} 2011spellbadword() String badly spelled word at cursor 2012spellsuggest( {word} [, {max} [, {capital}]]) 2013 List spelling suggestions 2014split( {expr} [, {pat} [, {keepempty}]]) 2015 List make |List| from {pat} separated {expr} 2016sqrt( {expr}) Float square root of {expr} 2017str2float( {expr}) Float convert String to Float 2018str2nr( {expr} [, {base}]) Number convert String to Number 2019strchars( {expr} [, {skipcc}]) Number character length of the String {expr} 2020strdisplaywidth( {expr} [, {col}]) Number display length of the String {expr} 2021strftime( {format}[, {time}]) String time in specified format 2022stridx( {haystack}, {needle}[, {start}]) 2023 Number index of {needle} in {haystack} 2024string( {expr}) String String representation of {expr} value 2025strlen( {expr}) Number length of the String {expr} 2026strpart( {src}, {start}[, {len}]) 2027 String {len} characters of {src} at {start} 2028strridx( {haystack}, {needle} [, {start}]) 2029 Number last index of {needle} in {haystack} 2030strtrans( {expr}) String translate string to make it printable 2031strwidth( {expr}) Number display cell length of the String {expr} 2032submatch( {nr}[, {list}]) String or List 2033 specific match in ":s" or substitute() 2034substitute( {expr}, {pat}, {sub}, {flags}) 2035 String all {pat} in {expr} replaced with {sub} 2036synID( {lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col} 2037synIDattr( {synID}, {what} [, {mode}]) 2038 String attribute {what} of syntax ID {synID} 2039synIDtrans( {synID}) Number translated syntax ID of {synID} 2040synconcealed( {lnum}, {col}) List info about concealing 2041synstack( {lnum}, {col}) List stack of syntax IDs at {lnum} and {col} 2042system( {expr} [, {input}]) String output of shell command/filter {expr} 2043systemlist( {expr} [, {input}]) List output of shell command/filter {expr} 2044tabpagebuflist( [{arg}]) List list of buffer numbers in tab page 2045tabpagenr( [{arg}]) Number number of current or last tab page 2046tabpagewinnr( {tabarg}[, {arg}]) 2047 Number number of current window in tab page 2048taglist( {expr}) List list of tags matching {expr} 2049tagfiles() List tags files used 2050tempname() String name for a temporary file 2051tan( {expr}) Float tangent of {expr} 2052tanh( {expr}) Float hyperbolic tangent of {expr} 2053tolower( {expr}) String the String {expr} switched to lowercase 2054toupper( {expr}) String the String {expr} switched to uppercase 2055tr( {src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr} 2056 to chars in {tostr} 2057trunc( {expr}) Float truncate Float {expr} 2058type( {name}) Number type of variable {name} 2059undofile( {name}) String undo file name for {name} 2060undotree() List undo file tree 2061uniq( {list} [, {func} [, {dict}]]) 2062 List remove adjacent duplicates from a list 2063values( {dict}) List values in {dict} 2064virtcol( {expr}) Number screen column of cursor or mark 2065visualmode( [expr]) String last visual mode used 2066wildmenumode() Number whether 'wildmenu' mode is active 2067winbufnr( {nr}) Number buffer number of window {nr} 2068wincol() Number window column of the cursor 2069winheight( {nr}) Number height of window {nr} 2070winline() Number window line of the cursor 2071winnr( [{expr}]) Number number of current window 2072winrestcmd() String returns command to restore window sizes 2073winrestview( {dict}) none restore view of current window 2074winsaveview() Dict save view of current window 2075winwidth( {nr}) Number width of window {nr} 2076writefile( {list}, {fname} [, {flags}]) 2077 Number write list of lines to file {fname} 2078xor( {expr}, {expr}) Number bitwise XOR 2079 2080abs({expr}) *abs()* 2081 Return the absolute value of {expr}. When {expr} evaluates to 2082 a |Float| abs() returns a |Float|. When {expr} can be 2083 converted to a |Number| abs() returns a |Number|. Otherwise 2084 abs() gives an error message and returns -1. 2085 Examples: > 2086 echo abs(1.456) 2087< 1.456 > 2088 echo abs(-5.456) 2089< 5.456 > 2090 echo abs(-4) 2091< 4 2092 {only available when compiled with the |+float| feature} 2093 2094 2095acos({expr}) *acos()* 2096 Return the arc cosine of {expr} measured in radians, as a 2097 |Float| in the range of [0, pi]. 2098 {expr} must evaluate to a |Float| or a |Number| in the range 2099 [-1, 1]. 2100 Examples: > 2101 :echo acos(0) 2102< 1.570796 > 2103 :echo acos(-0.5) 2104< 2.094395 2105 {only available when compiled with the |+float| feature} 2106 2107 2108add({list}, {expr}) *add()* 2109 Append the item {expr} to |List| {list}. Returns the 2110 resulting |List|. Examples: > 2111 :let alist = add([1, 2, 3], item) 2112 :call add(mylist, "woodstock") 2113< Note that when {expr} is a |List| it is appended as a single 2114 item. Use |extend()| to concatenate |Lists|. 2115 Use |insert()| to add an item at another position. 2116 2117 2118and({expr}, {expr}) *and()* 2119 Bitwise AND on the two arguments. The arguments are converted 2120 to a number. A List, Dict or Float argument causes an error. 2121 Example: > 2122 :let flag = and(bits, 0x80) 2123 2124 2125append({lnum}, {expr}) *append()* 2126 When {expr} is a |List|: Append each item of the |List| as a 2127 text line below line {lnum} in the current buffer. 2128 Otherwise append {expr} as one text line below line {lnum} in 2129 the current buffer. 2130 {lnum} can be zero to insert a line before the first one. 2131 Returns 1 for failure ({lnum} out of range or out of memory), 2132 0 for success. Example: > 2133 :let failed = append(line('$'), "# THE END") 2134 :let failed = append(0, ["Chapter 1", "the beginning"]) 2135< 2136 *argc()* 2137argc() The result is the number of files in the argument list of the 2138 current window. See |arglist|. 2139 2140 *argidx()* 2141argidx() The result is the current index in the argument list. 0 is 2142 the first file. argc() - 1 is the last one. See |arglist|. 2143 2144 *arglistid()* 2145arglistid([{winnr}, [ {tabnr} ]]) 2146 Return the argument list ID. This is a number which 2147 identifies the argument list being used. Zero is used for the 2148 global argument list. See |arglist|. 2149 Return -1 if the arguments are invalid. 2150 2151 Without arguments use the current window. 2152 With {winnr} only use this window in the current tab page. 2153 With {winnr} and {tabnr} use the window in the specified tab 2154 page. 2155 2156 *argv()* 2157argv([{nr}]) The result is the {nr}th file in the argument list of the 2158 current window. See |arglist|. "argv(0)" is the first one. 2159 Example: > 2160 :let i = 0 2161 :while i < argc() 2162 : let f = escape(fnameescape(argv(i)), '.') 2163 : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>' 2164 : let i = i + 1 2165 :endwhile 2166< Without the {nr} argument a |List| with the whole |arglist| is 2167 returned. 2168 2169 *assert_equal()* 2170assert_equal({expected}, {actual}, [, {msg}]) 2171 When {expected} and {actual} are not equal an error message is 2172 added to |v:errors|. 2173 There is no automatic conversion, the String "4" is different 2174 from the Number 4. And the number 4 is different from the 2175 Float 4.0. The value of 'ignorecase' is not used here, case 2176 always matters. 2177 When {msg} is omitted an error in the form "Expected 2178 {expected} but got {actual}" is produced. 2179 Example: > 2180 assert_equal('foo', 'bar') 2181< Will result in a string to be added to |v:errors|: 2182 test.vim line 12: Expected 'foo' but got 'bar' ~ 2183 2184assert_false({actual}, [, {msg}]) *assert_false()* 2185 When {actual} is not false an error message is added to 2186 |v:errors|, like with |assert_equal()|.. 2187 A value is false when it is zero. When "{actual}" is not a 2188 number the assert fails. 2189 When {msg} is omitted an error in the form "Expected False but 2190 got {actual}" is produced. 2191 2192assert_true({actual}, [, {msg}]) *assert_true()* 2193 When {actual} is not true an error message is added to 2194 |v:errors|, like with |assert_equal()|.. 2195 A value is true when it is a non-zeron number. When {actual} 2196 is not a number the assert fails. 2197 When {msg} is omitted an error in the form "Expected True but 2198 got {actual}" is produced. 2199 2200asin({expr}) *asin()* 2201 Return the arc sine of {expr} measured in radians, as a |Float| 2202 in the range of [-pi/2, pi/2]. 2203 {expr} must evaluate to a |Float| or a |Number| in the range 2204 [-1, 1]. 2205 Examples: > 2206 :echo asin(0.8) 2207< 0.927295 > 2208 :echo asin(-0.5) 2209< -0.523599 2210 {only available when compiled with the |+float| feature} 2211 2212 2213atan({expr}) *atan()* 2214 Return the principal value of the arc tangent of {expr}, in 2215 the range [-pi/2, +pi/2] radians, as a |Float|. 2216 {expr} must evaluate to a |Float| or a |Number|. 2217 Examples: > 2218 :echo atan(100) 2219< 1.560797 > 2220 :echo atan(-4.01) 2221< -1.326405 2222 {only available when compiled with the |+float| feature} 2223 2224 2225atan2({expr1}, {expr2}) *atan2()* 2226 Return the arc tangent of {expr1} / {expr2}, measured in 2227 radians, as a |Float| in the range [-pi, pi]. 2228 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 2229 Examples: > 2230 :echo atan2(-1, 1) 2231< -0.785398 > 2232 :echo atan2(1, -1) 2233< 2.356194 2234 {only available when compiled with the |+float| feature} 2235 2236 2237 *browse()* 2238browse({save}, {title}, {initdir}, {default}) 2239 Put up a file requester. This only works when "has("browse")" 2240 returns non-zero (only in some GUI versions). 2241 The input fields are: 2242 {save} when non-zero, select file to write 2243 {title} title for the requester 2244 {initdir} directory to start browsing in 2245 {default} default file name 2246 When the "Cancel" button is hit, something went wrong, or 2247 browsing is not possible, an empty string is returned. 2248 2249 *browsedir()* 2250browsedir({title}, {initdir}) 2251 Put up a directory requester. This only works when 2252 "has("browse")" returns non-zero (only in some GUI versions). 2253 On systems where a directory browser is not supported a file 2254 browser is used. In that case: select a file in the directory 2255 to be used. 2256 The input fields are: 2257 {title} title for the requester 2258 {initdir} directory to start browsing in 2259 When the "Cancel" button is hit, something went wrong, or 2260 browsing is not possible, an empty string is returned. 2261 2262bufexists({expr}) *bufexists()* 2263 The result is a Number, which is non-zero if a buffer called 2264 {expr} exists. 2265 If the {expr} argument is a number, buffer numbers are used. 2266 If the {expr} argument is a string it must match a buffer name 2267 exactly. The name can be: 2268 - Relative to the current directory. 2269 - A full path. 2270 - The name of a buffer with 'buftype' set to "nofile". 2271 - A URL name. 2272 Unlisted buffers will be found. 2273 Note that help files are listed by their short name in the 2274 output of |:buffers|, but bufexists() requires using their 2275 long name to be able to find them. 2276 bufexists() may report a buffer exists, but to use the name 2277 with a |:buffer| command you may need to use |expand()|. Esp 2278 for MS-Windows 8.3 names in the form "c:\DOCUME~1" 2279 Use "bufexists(0)" to test for the existence of an alternate 2280 file name. 2281 *buffer_exists()* 2282 Obsolete name: buffer_exists(). 2283 2284buflisted({expr}) *buflisted()* 2285 The result is a Number, which is non-zero if a buffer called 2286 {expr} exists and is listed (has the 'buflisted' option set). 2287 The {expr} argument is used like with |bufexists()|. 2288 2289bufloaded({expr}) *bufloaded()* 2290 The result is a Number, which is non-zero if a buffer called 2291 {expr} exists and is loaded (shown in a window or hidden). 2292 The {expr} argument is used like with |bufexists()|. 2293 2294bufname({expr}) *bufname()* 2295 The result is the name of a buffer, as it is displayed by the 2296 ":ls" command. 2297 If {expr} is a Number, that buffer number's name is given. 2298 Number zero is the alternate buffer for the current window. 2299 If {expr} is a String, it is used as a |file-pattern| to match 2300 with the buffer names. This is always done like 'magic' is 2301 set and 'cpoptions' is empty. When there is more than one 2302 match an empty string is returned. 2303 "" or "%" can be used for the current buffer, "#" for the 2304 alternate buffer. 2305 A full match is preferred, otherwise a match at the start, end 2306 or middle of the buffer name is accepted. If you only want a 2307 full match then put "^" at the start and "$" at the end of the 2308 pattern. 2309 Listed buffers are found first. If there is a single match 2310 with a listed buffer, that one is returned. Next unlisted 2311 buffers are searched for. 2312 If the {expr} is a String, but you want to use it as a buffer 2313 number, force it to be a Number by adding zero to it: > 2314 :echo bufname("3" + 0) 2315< If the buffer doesn't exist, or doesn't have a name, an empty 2316 string is returned. > 2317 bufname("#") alternate buffer name 2318 bufname(3) name of buffer 3 2319 bufname("%") name of current buffer 2320 bufname("file2") name of buffer where "file2" matches. 2321< *buffer_name()* 2322 Obsolete name: buffer_name(). 2323 2324 *bufnr()* 2325bufnr({expr} [, {create}]) 2326 The result is the number of a buffer, as it is displayed by 2327 the ":ls" command. For the use of {expr}, see |bufname()| 2328 above. 2329 If the buffer doesn't exist, -1 is returned. Or, if the 2330 {create} argument is present and not zero, a new, unlisted, 2331 buffer is created and its number is returned. 2332 bufnr("$") is the last buffer: > 2333 :let last_buffer = bufnr("$") 2334< The result is a Number, which is the highest buffer number 2335 of existing buffers. Note that not all buffers with a smaller 2336 number necessarily exist, because ":bwipeout" may have removed 2337 them. Use bufexists() to test for the existence of a buffer. 2338 *buffer_number()* 2339 Obsolete name: buffer_number(). 2340 *last_buffer_nr()* 2341 Obsolete name for bufnr("$"): last_buffer_nr(). 2342 2343bufwinnr({expr}) *bufwinnr()* 2344 The result is a Number, which is the number of the first 2345 window associated with buffer {expr}. For the use of {expr}, 2346 see |bufname()| above. If buffer {expr} doesn't exist or 2347 there is no such window, -1 is returned. Example: > 2348 2349 echo "A window containing buffer 1 is " . (bufwinnr(1)) 2350 2351< The number can be used with |CTRL-W_w| and ":wincmd w" 2352 |:wincmd|. 2353 Only deals with the current tab page. 2354 2355 2356byte2line({byte}) *byte2line()* 2357 Return the line number that contains the character at byte 2358 count {byte} in the current buffer. This includes the 2359 end-of-line character, depending on the 'fileformat' option 2360 for the current buffer. The first character has byte count 2361 one. 2362 Also see |line2byte()|, |go| and |:goto|. 2363 {not available when compiled without the |+byte_offset| 2364 feature} 2365 2366byteidx({expr}, {nr}) *byteidx()* 2367 Return byte index of the {nr}'th character in the string 2368 {expr}. Use zero for the first character, it returns zero. 2369 This function is only useful when there are multibyte 2370 characters, otherwise the returned value is equal to {nr}. 2371 Composing characters are not counted separately, their byte 2372 length is added to the preceding base character. See 2373 |byteidxcomp()| below for counting composing characters 2374 separately. 2375 Example : > 2376 echo matchstr(str, ".", byteidx(str, 3)) 2377< will display the fourth character. Another way to do the 2378 same: > 2379 let s = strpart(str, byteidx(str, 3)) 2380 echo strpart(s, 0, byteidx(s, 1)) 2381< If there are less than {nr} characters -1 is returned. 2382 If there are exactly {nr} characters the length of the string 2383 in bytes is returned. 2384 2385byteidxcomp({expr}, {nr}) *byteidxcomp()* 2386 Like byteidx(), except that a composing character is counted 2387 as a separate character. Example: > 2388 let s = 'e' . nr2char(0x301) 2389 echo byteidx(s, 1) 2390 echo byteidxcomp(s, 1) 2391 echo byteidxcomp(s, 2) 2392< The first and third echo result in 3 ('e' plus composing 2393 character is 3 bytes), the second echo results in 1 ('e' is 2394 one byte). 2395 Only works different from byteidx() when 'encoding' is set to 2396 a Unicode encoding. 2397 2398call({func}, {arglist} [, {dict}]) *call()* *E699* 2399 Call function {func} with the items in |List| {arglist} as 2400 arguments. 2401 {func} can either be a |Funcref| or the name of a function. 2402 a:firstline and a:lastline are set to the cursor line. 2403 Returns the return value of the called function. 2404 {dict} is for functions with the "dict" attribute. It will be 2405 used to set the local variable "self". |Dictionary-function| 2406 2407ceil({expr}) *ceil()* 2408 Return the smallest integral value greater than or equal to 2409 {expr} as a |Float| (round up). 2410 {expr} must evaluate to a |Float| or a |Number|. 2411 Examples: > 2412 echo ceil(1.456) 2413< 2.0 > 2414 echo ceil(-5.456) 2415< -5.0 > 2416 echo ceil(4.0) 2417< 4.0 2418 {only available when compiled with the |+float| feature} 2419 2420changenr() *changenr()* 2421 Return the number of the most recent change. This is the same 2422 number as what is displayed with |:undolist| and can be used 2423 with the |:undo| command. 2424 When a change was made it is the number of that change. After 2425 redo it is the number of the redone change. After undo it is 2426 one less than the number of the undone change. 2427 2428char2nr({expr}[, {utf8}]) *char2nr()* 2429 Return number value of the first char in {expr}. Examples: > 2430 char2nr(" ") returns 32 2431 char2nr("ABC") returns 65 2432< When {utf8} is omitted or zero, the current 'encoding' is used. 2433 Example for "utf-8": > 2434 char2nr("�") returns 225 2435 char2nr("�"[0]) returns 195 2436< With {utf8} set to 1, always treat as utf-8 characters. 2437 A combining character is a separate character. 2438 |nr2char()| does the opposite. 2439 2440cindent({lnum}) *cindent()* 2441 Get the amount of indent for line {lnum} according the C 2442 indenting rules, as with 'cindent'. 2443 The indent is counted in spaces, the value of 'tabstop' is 2444 relevant. {lnum} is used just like in |getline()|. 2445 When {lnum} is invalid or Vim was not compiled the |+cindent| 2446 feature, -1 is returned. 2447 See |C-indenting|. 2448 2449clearmatches() *clearmatches()* 2450 Clears all matches previously defined by |matchadd()| and the 2451 |:match| commands. 2452 2453 *col()* 2454col({expr}) The result is a Number, which is the byte index of the column 2455 position given with {expr}. The accepted positions are: 2456 . the cursor position 2457 $ the end of the cursor line (the result is the 2458 number of bytes in the cursor line plus one) 2459 'x position of mark x (if the mark is not set, 0 is 2460 returned) 2461 v In Visual mode: the start of the Visual area (the 2462 cursor is the end). When not in Visual mode 2463 returns the cursor position. Differs from |'<| in 2464 that it's updated right away. 2465 Additionally {expr} can be [lnum, col]: a |List| with the line 2466 and column number. Most useful when the column is "$", to get 2467 the last column of a specific line. When "lnum" or "col" is 2468 out of range then col() returns zero. 2469 To get the line number use |line()|. To get both use 2470 |getpos()|. 2471 For the screen column position use |virtcol()|. 2472 Note that only marks in the current file can be used. 2473 Examples: > 2474 col(".") column of cursor 2475 col("$") length of cursor line plus one 2476 col("'t") column of mark t 2477 col("'" . markname) column of mark markname 2478< The first column is 1. 0 is returned for an error. 2479 For an uppercase mark the column may actually be in another 2480 buffer. 2481 For the cursor position, when 'virtualedit' is active, the 2482 column is one higher if the cursor is after the end of the 2483 line. This can be used to obtain the column in Insert mode: > 2484 :imap <F2> <C-O>:let save_ve = &ve<CR> 2485 \<C-O>:set ve=all<CR> 2486 \<C-O>:echo col(".") . "\n" <Bar> 2487 \let &ve = save_ve<CR> 2488< 2489 2490complete({startcol}, {matches}) *complete()* *E785* 2491 Set the matches for Insert mode completion. 2492 Can only be used in Insert mode. You need to use a mapping 2493 with CTRL-R = |i_CTRL-R|. It does not work after CTRL-O or 2494 with an expression mapping. 2495 {startcol} is the byte offset in the line where the completed 2496 text start. The text up to the cursor is the original text 2497 that will be replaced by the matches. Use col('.') for an 2498 empty string. "col('.') - 1" will replace one character by a 2499 match. 2500 {matches} must be a |List|. Each |List| item is one match. 2501 See |complete-items| for the kind of items that are possible. 2502 Note that the after calling this function you need to avoid 2503 inserting anything that would cause completion to stop. 2504 The match can be selected with CTRL-N and CTRL-P as usual with 2505 Insert mode completion. The popup menu will appear if 2506 specified, see |ins-completion-menu|. 2507 Example: > 2508 inoremap <F5> <C-R>=ListMonths()<CR> 2509 2510 func! ListMonths() 2511 call complete(col('.'), ['January', 'February', 'March', 2512 \ 'April', 'May', 'June', 'July', 'August', 'September', 2513 \ 'October', 'November', 'December']) 2514 return '' 2515 endfunc 2516< This isn't very useful, but it shows how it works. Note that 2517 an empty string is returned to avoid a zero being inserted. 2518 2519complete_add({expr}) *complete_add()* 2520 Add {expr} to the list of matches. Only to be used by the 2521 function specified with the 'completefunc' option. 2522 Returns 0 for failure (empty string or out of memory), 2523 1 when the match was added, 2 when the match was already in 2524 the list. 2525 See |complete-functions| for an explanation of {expr}. It is 2526 the same as one item in the list that 'omnifunc' would return. 2527 2528complete_check() *complete_check()* 2529 Check for a key typed while looking for completion matches. 2530 This is to be used when looking for matches takes some time. 2531 Returns non-zero when searching for matches is to be aborted, 2532 zero otherwise. 2533 Only to be used by the function specified with the 2534 'completefunc' option. 2535 2536 *confirm()* 2537confirm({msg} [, {choices} [, {default} [, {type}]]]) 2538 Confirm() offers the user a dialog, from which a choice can be 2539 made. It returns the number of the choice. For the first 2540 choice this is 1. 2541 Note: confirm() is only supported when compiled with dialog 2542 support, see |+dialog_con| and |+dialog_gui|. 2543 2544 {msg} is displayed in a |dialog| with {choices} as the 2545 alternatives. When {choices} is missing or empty, "&OK" is 2546 used (and translated). 2547 {msg} is a String, use '\n' to include a newline. Only on 2548 some systems the string is wrapped when it doesn't fit. 2549 2550 {choices} is a String, with the individual choices separated 2551 by '\n', e.g. > 2552 confirm("Save changes?", "&Yes\n&No\n&Cancel") 2553< The letter after the '&' is the shortcut key for that choice. 2554 Thus you can type 'c' to select "Cancel". The shortcut does 2555 not need to be the first letter: > 2556 confirm("file has been modified", "&Save\nSave &All") 2557< For the console, the first letter of each choice is used as 2558 the default shortcut key. 2559 2560 The optional {default} argument is the number of the choice 2561 that is made if the user hits <CR>. Use 1 to make the first 2562 choice the default one. Use 0 to not set a default. If 2563 {default} is omitted, 1 is used. 2564 2565 The optional {type} argument gives the type of dialog. This 2566 is only used for the icon of the GTK, Mac, Motif and Win32 2567 GUI. It can be one of these values: "Error", "Question", 2568 "Info", "Warning" or "Generic". Only the first character is 2569 relevant. When {type} is omitted, "Generic" is used. 2570 2571 If the user aborts the dialog by pressing <Esc>, CTRL-C, 2572 or another valid interrupt key, confirm() returns 0. 2573 2574 An example: > 2575 :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2) 2576 :if choice == 0 2577 : echo "make up your mind!" 2578 :elseif choice == 3 2579 : echo "tasteful" 2580 :else 2581 : echo "I prefer bananas myself." 2582 :endif 2583< In a GUI dialog, buttons are used. The layout of the buttons 2584 depends on the 'v' flag in 'guioptions'. If it is included, 2585 the buttons are always put vertically. Otherwise, confirm() 2586 tries to put the buttons in one horizontal line. If they 2587 don't fit, a vertical layout is used anyway. For some systems 2588 the horizontal layout is always used. 2589 2590 *copy()* 2591copy({expr}) Make a copy of {expr}. For Numbers and Strings this isn't 2592 different from using {expr} directly. 2593 When {expr} is a |List| a shallow copy is created. This means 2594 that the original |List| can be changed without changing the 2595 copy, and vice versa. But the items are identical, thus 2596 changing an item changes the contents of both |Lists|. Also 2597 see |deepcopy()|. 2598 2599cos({expr}) *cos()* 2600 Return the cosine of {expr}, measured in radians, as a |Float|. 2601 {expr} must evaluate to a |Float| or a |Number|. 2602 Examples: > 2603 :echo cos(100) 2604< 0.862319 > 2605 :echo cos(-4.01) 2606< -0.646043 2607 {only available when compiled with the |+float| feature} 2608 2609 2610cosh({expr}) *cosh()* 2611 Return the hyperbolic cosine of {expr} as a |Float| in the range 2612 [1, inf]. 2613 {expr} must evaluate to a |Float| or a |Number|. 2614 Examples: > 2615 :echo cosh(0.5) 2616< 1.127626 > 2617 :echo cosh(-0.5) 2618< -1.127626 2619 {only available when compiled with the |+float| feature} 2620 2621 2622count({comp}, {expr} [, {ic} [, {start}]]) *count()* 2623 Return the number of times an item with value {expr} appears 2624 in |List| or |Dictionary| {comp}. 2625 If {start} is given then start with the item with this index. 2626 {start} can only be used with a |List|. 2627 When {ic} is given and it's non-zero then case is ignored. 2628 2629 2630 *cscope_connection()* 2631cscope_connection([{num} , {dbpath} [, {prepend}]]) 2632 Checks for the existence of a |cscope| connection. If no 2633 parameters are specified, then the function returns: 2634 0, if cscope was not available (not compiled in), or 2635 if there are no cscope connections; 2636 1, if there is at least one cscope connection. 2637 2638 If parameters are specified, then the value of {num} 2639 determines how existence of a cscope connection is checked: 2640 2641 {num} Description of existence check 2642 ----- ------------------------------ 2643 0 Same as no parameters (e.g., "cscope_connection()"). 2644 1 Ignore {prepend}, and use partial string matches for 2645 {dbpath}. 2646 2 Ignore {prepend}, and use exact string matches for 2647 {dbpath}. 2648 3 Use {prepend}, use partial string matches for both 2649 {dbpath} and {prepend}. 2650 4 Use {prepend}, use exact string matches for both 2651 {dbpath} and {prepend}. 2652 2653 Note: All string comparisons are case sensitive! 2654 2655 Examples. Suppose we had the following (from ":cs show"): > 2656 2657 # pid database name prepend path 2658 0 27664 cscope.out /usr/local 2659< 2660 Invocation Return Val ~ 2661 ---------- ---------- > 2662 cscope_connection() 1 2663 cscope_connection(1, "out") 1 2664 cscope_connection(2, "out") 0 2665 cscope_connection(3, "out") 0 2666 cscope_connection(3, "out", "local") 1 2667 cscope_connection(4, "out") 0 2668 cscope_connection(4, "out", "local") 0 2669 cscope_connection(4, "cscope.out", "/usr/local") 1 2670< 2671cursor({lnum}, {col} [, {off}]) *cursor()* 2672cursor({list}) 2673 Positions the cursor at the column (byte count) {col} in the 2674 line {lnum}. The first column is one. 2675 2676 When there is one argument {list} this is used as a |List| 2677 with two, three or four item: 2678 [{lnum}, {col}, {off}] 2679 [{lnum}, {col}, {off}, {curswant}] 2680 This is like the return value of |getpos()| or |getcurpos()|, 2681 but without the first item. 2682 2683 Does not change the jumplist. 2684 If {lnum} is greater than the number of lines in the buffer, 2685 the cursor will be positioned at the last line in the buffer. 2686 If {lnum} is zero, the cursor will stay in the current line. 2687 If {col} is greater than the number of bytes in the line, 2688 the cursor will be positioned at the last character in the 2689 line. 2690 If {col} is zero, the cursor will stay in the current column. 2691 If {curswant} is given it is used to set the preferred column 2692 for vertical movement. Otherwise {col} is used. 2693 2694 When 'virtualedit' is used {off} specifies the offset in 2695 screen columns from the start of the character. E.g., a 2696 position within a <Tab> or after the last character. 2697 Returns 0 when the position could be set, -1 otherwise. 2698 2699 2700deepcopy({expr}[, {noref}]) *deepcopy()* *E698* 2701 Make a copy of {expr}. For Numbers and Strings this isn't 2702 different from using {expr} directly. 2703 When {expr} is a |List| a full copy is created. This means 2704 that the original |List| can be changed without changing the 2705 copy, and vice versa. When an item is a |List|, a copy for it 2706 is made, recursively. Thus changing an item in the copy does 2707 not change the contents of the original |List|. 2708 When {noref} is omitted or zero a contained |List| or 2709 |Dictionary| is only copied once. All references point to 2710 this single copy. With {noref} set to 1 every occurrence of a 2711 |List| or |Dictionary| results in a new copy. This also means 2712 that a cyclic reference causes deepcopy() to fail. 2713 *E724* 2714 Nesting is possible up to 100 levels. When there is an item 2715 that refers back to a higher level making a deep copy with 2716 {noref} set to 1 will fail. 2717 Also see |copy()|. 2718 2719delete({fname}) *delete()* 2720 Deletes the file by the name {fname}. The result is a Number, 2721 which is 0 if the file was deleted successfully, and non-zero 2722 when the deletion failed. 2723 Use |remove()| to delete an item from a |List|. 2724 To delete a line from the buffer use |:delete|. Use |:exe| 2725 when the line number is in a variable. 2726 2727 *did_filetype()* 2728did_filetype() Returns non-zero when autocommands are being executed and the 2729 FileType event has been triggered at least once. Can be used 2730 to avoid triggering the FileType event again in the scripts 2731 that detect the file type. |FileType| 2732 When editing another file, the counter is reset, thus this 2733 really checks if the FileType event has been triggered for the 2734 current buffer. This allows an autocommand that starts 2735 editing another buffer to set 'filetype' and load a syntax 2736 file. 2737 2738diff_filler({lnum}) *diff_filler()* 2739 Returns the number of filler lines above line {lnum}. 2740 These are the lines that were inserted at this point in 2741 another diff'ed window. These filler lines are shown in the 2742 display but don't exist in the buffer. 2743 {lnum} is used like with |getline()|. Thus "." is the current 2744 line, "'m" mark m, etc. 2745 Returns 0 if the current window is not in diff mode. 2746 2747diff_hlID({lnum}, {col}) *diff_hlID()* 2748 Returns the highlight ID for diff mode at line {lnum} column 2749 {col} (byte index). When the current line does not have a 2750 diff change zero is returned. 2751 {lnum} is used like with |getline()|. Thus "." is the current 2752 line, "'m" mark m, etc. 2753 {col} is 1 for the leftmost column, {lnum} is 1 for the first 2754 line. 2755 The highlight ID can be used with |synIDattr()| to obtain 2756 syntax information about the highlighting. 2757 2758empty({expr}) *empty()* 2759 Return the Number 1 if {expr} is empty, zero otherwise. 2760 A |List| or |Dictionary| is empty when it does not have any 2761 items. A Number is empty when its value is zero. 2762 For a long |List| this is much faster than comparing the 2763 length with zero. 2764 2765escape({string}, {chars}) *escape()* 2766 Escape the characters in {chars} that occur in {string} with a 2767 backslash. Example: > 2768 :echo escape('c:\program files\vim', ' \') 2769< results in: > 2770 c:\\program\ files\\vim 2771< Also see |shellescape()|. 2772 2773 *eval()* 2774eval({string}) Evaluate {string} and return the result. Especially useful to 2775 turn the result of |string()| back into the original value. 2776 This works for Numbers, Floats, Strings and composites of 2777 them. Also works for |Funcref|s that refer to existing 2778 functions. 2779 2780eventhandler() *eventhandler()* 2781 Returns 1 when inside an event handler. That is that Vim got 2782 interrupted while waiting for the user to type a character, 2783 e.g., when dropping a file on Vim. This means interactive 2784 commands cannot be used. Otherwise zero is returned. 2785 2786executable({expr}) *executable()* 2787 This function checks if an executable with the name {expr} 2788 exists. {expr} must be the name of the program without any 2789 arguments. 2790 executable() uses the value of $PATH and/or the normal 2791 searchpath for programs. *PATHEXT* 2792 On MS-DOS and MS-Windows the ".exe", ".bat", etc. can 2793 optionally be included. Then the extensions in $PATHEXT are 2794 tried. Thus if "foo.exe" does not exist, "foo.exe.bat" can be 2795 found. If $PATHEXT is not set then ".exe;.com;.bat;.cmd" is 2796 used. A dot by itself can be used in $PATHEXT to try using 2797 the name without an extension. When 'shell' looks like a 2798 Unix shell, then the name is also tried without adding an 2799 extension. 2800 On MS-DOS and MS-Windows it only checks if the file exists and 2801 is not a directory, not if it's really executable. 2802 On MS-Windows an executable in the same directory as Vim is 2803 always found. Since this directory is added to $PATH it 2804 should also work to execute it |win32-PATH|. 2805 The result is a Number: 2806 1 exists 2807 0 does not exist 2808 -1 not implemented on this system 2809 2810exepath({expr}) *exepath()* 2811 If {expr} is an executable and is either an absolute path, a 2812 relative path or found in $PATH, return the full path. 2813 Note that the current directory is used when {expr} starts 2814 with "./", which may be a problem for Vim: > 2815 echo exepath(v:progpath) 2816< If {expr} cannot be found in $PATH or is not executable then 2817 an empty string is returned. 2818 2819 *exists()* 2820exists({expr}) The result is a Number, which is non-zero if {expr} is 2821 defined, zero otherwise. The {expr} argument is a string, 2822 which contains one of these: 2823 &option-name Vim option (only checks if it exists, 2824 not if it really works) 2825 +option-name Vim option that works. 2826 $ENVNAME environment variable (could also be 2827 done by comparing with an empty 2828 string) 2829 *funcname built-in function (see |functions|) 2830 or user defined function (see 2831 |user-functions|). Also works for a 2832 variable that is a Funcref. 2833 varname internal variable (see 2834 |internal-variables|). Also works 2835 for |curly-braces-names|, |Dictionary| 2836 entries, |List| items, etc. Beware 2837 that evaluating an index may cause an 2838 error message for an invalid 2839 expression. E.g.: > 2840 :let l = [1, 2, 3] 2841 :echo exists("l[5]") 2842< 0 > 2843 :echo exists("l[xx]") 2844< E121: Undefined variable: xx 2845 0 2846 :cmdname Ex command: built-in command, user 2847 command or command modifier |:command|. 2848 Returns: 2849 1 for match with start of a command 2850 2 full match with a command 2851 3 matches several user commands 2852 To check for a supported command 2853 always check the return value to be 2. 2854 :2match The |:2match| command. 2855 :3match The |:3match| command. 2856 #event autocommand defined for this event 2857 #event#pattern autocommand defined for this event and 2858 pattern (the pattern is taken 2859 literally and compared to the 2860 autocommand patterns character by 2861 character) 2862 #group autocommand group exists 2863 #group#event autocommand defined for this group and 2864 event. 2865 #group#event#pattern 2866 autocommand defined for this group, 2867 event and pattern. 2868 ##event autocommand for this event is 2869 supported. 2870 For checking for a supported feature use |has()|. 2871 2872 Examples: > 2873 exists("&shortname") 2874 exists("$HOSTNAME") 2875 exists("*strftime") 2876 exists("*s:MyFunc") 2877 exists("bufcount") 2878 exists(":Make") 2879 exists("#CursorHold") 2880 exists("#BufReadPre#*.gz") 2881 exists("#filetypeindent") 2882 exists("#filetypeindent#FileType") 2883 exists("#filetypeindent#FileType#*") 2884 exists("##ColorScheme") 2885< There must be no space between the symbol (&/$/*/#) and the 2886 name. 2887 There must be no extra characters after the name, although in 2888 a few cases this is ignored. That may become more strict in 2889 the future, thus don't count on it! 2890 Working example: > 2891 exists(":make") 2892< NOT working example: > 2893 exists(":make install") 2894 2895< Note that the argument must be a string, not the name of the 2896 variable itself. For example: > 2897 exists(bufcount) 2898< This doesn't check for existence of the "bufcount" variable, 2899 but gets the value of "bufcount", and checks if that exists. 2900 2901exp({expr}) *exp()* 2902 Return the exponential of {expr} as a |Float| in the range 2903 [0, inf]. 2904 {expr} must evaluate to a |Float| or a |Number|. 2905 Examples: > 2906 :echo exp(2) 2907< 7.389056 > 2908 :echo exp(-1) 2909< 0.367879 2910 {only available when compiled with the |+float| feature} 2911 2912 2913expand({expr} [, {nosuf} [, {list}]]) *expand()* 2914 Expand wildcards and the following special keywords in {expr}. 2915 'wildignorecase' applies. 2916 2917 If {list} is given and it is non-zero, a List will be returned. 2918 Otherwise the result is a String and when there are several 2919 matches, they are separated by <NL> characters. [Note: in 2920 version 5.0 a space was used, which caused problems when a 2921 file name contains a space] 2922 2923 If the expansion fails, the result is an empty string. A name 2924 for a non-existing file is not included, unless {expr} does 2925 not start with '%', '#' or '<', see below. 2926 2927 When {expr} starts with '%', '#' or '<', the expansion is done 2928 like for the |cmdline-special| variables with their associated 2929 modifiers. Here is a short overview: 2930 2931 % current file name 2932 # alternate file name 2933 #n alternate file name n 2934 <cfile> file name under the cursor 2935 <afile> autocmd file name 2936 <abuf> autocmd buffer number (as a String!) 2937 <amatch> autocmd matched name 2938 <sfile> sourced script file or function name 2939 <slnum> sourced script file line number 2940 <cword> word under the cursor 2941 <cWORD> WORD under the cursor 2942 <client> the {clientid} of the last received 2943 message |server2client()| 2944 Modifiers: 2945 :p expand to full path 2946 :h head (last path component removed) 2947 :t tail (last path component only) 2948 :r root (one extension removed) 2949 :e extension only 2950 2951 Example: > 2952 :let &tags = expand("%:p:h") . "/tags" 2953< Note that when expanding a string that starts with '%', '#' or 2954 '<', any following text is ignored. This does NOT work: > 2955 :let doesntwork = expand("%:h.bak") 2956< Use this: > 2957 :let doeswork = expand("%:h") . ".bak" 2958< Also note that expanding "<cfile>" and others only returns the 2959 referenced file name without further expansion. If "<cfile>" 2960 is "~/.cshrc", you need to do another expand() to have the 2961 "~/" expanded into the path of the home directory: > 2962 :echo expand(expand("<cfile>")) 2963< 2964 There cannot be white space between the variables and the 2965 following modifier. The |fnamemodify()| function can be used 2966 to modify normal file names. 2967 2968 When using '%' or '#', and the current or alternate file name 2969 is not defined, an empty string is used. Using "%:p" in a 2970 buffer with no name, results in the current directory, with a 2971 '/' added. 2972 2973 When {expr} does not start with '%', '#' or '<', it is 2974 expanded like a file name is expanded on the command line. 2975 'suffixes' and 'wildignore' are used, unless the optional 2976 {nosuf} argument is given and it is non-zero. 2977 Names for non-existing files are included. The "**" item can 2978 be used to search in a directory tree. For example, to find 2979 all "README" files in the current directory and below: > 2980 :echo expand("**/README") 2981< 2982 Expand() can also be used to expand variables and environment 2983 variables that are only known in a shell. But this can be 2984 slow, because a shell may be used to do the expansion. See 2985 |expr-env-expand|. 2986 The expanded variable is still handled like a list of file 2987 names. When an environment variable cannot be expanded, it is 2988 left unchanged. Thus ":echo expand('$FOOBAR')" results in 2989 "$FOOBAR". 2990 2991 See |glob()| for finding existing files. See |system()| for 2992 getting the raw output of an external command. 2993 2994extend({expr1}, {expr2} [, {expr3}]) *extend()* 2995 {expr1} and {expr2} must be both |Lists| or both 2996 |Dictionaries|. 2997 2998 If they are |Lists|: Append {expr2} to {expr1}. 2999 If {expr3} is given insert the items of {expr2} before item 3000 {expr3} in {expr1}. When {expr3} is zero insert before the 3001 first item. When {expr3} is equal to len({expr1}) then 3002 {expr2} is appended. 3003 Examples: > 3004 :echo sort(extend(mylist, [7, 5])) 3005 :call extend(mylist, [2, 3], 1) 3006< When {expr1} is the same List as {expr2} then the number of 3007 items copied is equal to the original length of the List. 3008 E.g., when {expr3} is 1 you get N new copies of the first item 3009 (where N is the original length of the List). 3010 Use |add()| to concatenate one item to a list. To concatenate 3011 two lists into a new list use the + operator: > 3012 :let newlist = [1, 2, 3] + [4, 5] 3013< 3014 If they are |Dictionaries|: 3015 Add all entries from {expr2} to {expr1}. 3016 If a key exists in both {expr1} and {expr2} then {expr3} is 3017 used to decide what to do: 3018 {expr3} = "keep": keep the value of {expr1} 3019 {expr3} = "force": use the value of {expr2} 3020 {expr3} = "error": give an error message *E737* 3021 When {expr3} is omitted then "force" is assumed. 3022 3023 {expr1} is changed when {expr2} is not empty. If necessary 3024 make a copy of {expr1} first. 3025 {expr2} remains unchanged. 3026 When {expr1} is locked and {expr2} is not empty the operation 3027 fails. 3028 Returns {expr1}. 3029 3030 3031feedkeys({string} [, {mode}]) *feedkeys()* 3032 Characters in {string} are queued for processing as if they 3033 come from a mapping or were typed by the user. 3034 By default the string is added to the end of the typeahead 3035 buffer, thus if a mapping is still being executed the 3036 characters come after them. Use the 'i' flag to insert before 3037 other characters, they will be executed next, before any 3038 characters from a mapping. 3039 The function does not wait for processing of keys contained in 3040 {string}. 3041 To include special keys into {string}, use double-quotes 3042 and "\..." notation |expr-quote|. For example, 3043 feedkeys("\<CR>") simulates pressing of the <Enter> key. But 3044 feedkeys('\<CR>') pushes 5 characters. 3045 If {mode} is absent, keys are remapped. 3046 {mode} is a String, which can contain these character flags: 3047 'm' Remap keys. This is default. 3048 'n' Do not remap keys. 3049 't' Handle keys as if typed; otherwise they are handled as 3050 if coming from a mapping. This matters for undo, 3051 opening folds, etc. 3052 'i' Insert the string instead of appending (see above). 3053 Return value is always 0. 3054 3055filereadable({file}) *filereadable()* 3056 The result is a Number, which is TRUE when a file with the 3057 name {file} exists, and can be read. If {file} doesn't exist, 3058 or is a directory, the result is FALSE. {file} is any 3059 expression, which is used as a String. 3060 If you don't care about the file being readable you can use 3061 |glob()|. 3062 *file_readable()* 3063 Obsolete name: file_readable(). 3064 3065 3066filewritable({file}) *filewritable()* 3067 The result is a Number, which is 1 when a file with the 3068 name {file} exists, and can be written. If {file} doesn't 3069 exist, or is not writable, the result is 0. If {file} is a 3070 directory, and we can write to it, the result is 2. 3071 3072 3073filter({expr}, {string}) *filter()* 3074 {expr} must be a |List| or a |Dictionary|. 3075 For each item in {expr} evaluate {string} and when the result 3076 is zero remove the item from the |List| or |Dictionary|. 3077 Inside {string} |v:val| has the value of the current item. 3078 For a |Dictionary| |v:key| has the key of the current item. 3079 Examples: > 3080 :call filter(mylist, 'v:val !~ "OLD"') 3081< Removes the items where "OLD" appears. > 3082 :call filter(mydict, 'v:key >= 8') 3083< Removes the items with a key below 8. > 3084 :call filter(var, 0) 3085< Removes all the items, thus clears the |List| or |Dictionary|. 3086 3087 Note that {string} is the result of expression and is then 3088 used as an expression again. Often it is good to use a 3089 |literal-string| to avoid having to double backslashes. 3090 3091 The operation is done in-place. If you want a |List| or 3092 |Dictionary| to remain unmodified make a copy first: > 3093 :let l = filter(copy(mylist), 'v:val =~ "KEEP"') 3094 3095< Returns {expr}, the |List| or |Dictionary| that was filtered. 3096 When an error is encountered while evaluating {string} no 3097 further items in {expr} are processed. 3098 3099 3100finddir({name}[, {path}[, {count}]]) *finddir()* 3101 Find directory {name} in {path}. Supports both downwards and 3102 upwards recursive directory searches. See |file-searching| 3103 for the syntax of {path}. 3104 Returns the path of the first found match. When the found 3105 directory is below the current directory a relative path is 3106 returned. Otherwise a full path is returned. 3107 If {path} is omitted or empty then 'path' is used. 3108 If the optional {count} is given, find {count}'s occurrence of 3109 {name} in {path} instead of the first one. 3110 When {count} is negative return all the matches in a |List|. 3111 This is quite similar to the ex-command |:find|. 3112 {only available when compiled with the |+file_in_path| 3113 feature} 3114 3115findfile({name}[, {path}[, {count}]]) *findfile()* 3116 Just like |finddir()|, but find a file instead of a directory. 3117 Uses 'suffixesadd'. 3118 Example: > 3119 :echo findfile("tags.vim", ".;") 3120< Searches from the directory of the current file upwards until 3121 it finds the file "tags.vim". 3122 3123float2nr({expr}) *float2nr()* 3124 Convert {expr} to a Number by omitting the part after the 3125 decimal point. 3126 {expr} must evaluate to a |Float| or a Number. 3127 When the value of {expr} is out of range for a |Number| the 3128 result is truncated to 0x7fffffff or -0x7fffffff. NaN results 3129 in -0x80000000. 3130 Examples: > 3131 echo float2nr(3.95) 3132< 3 > 3133 echo float2nr(-23.45) 3134< -23 > 3135 echo float2nr(1.0e100) 3136< 2147483647 > 3137 echo float2nr(-1.0e150) 3138< -2147483647 > 3139 echo float2nr(1.0e-100) 3140< 0 3141 {only available when compiled with the |+float| feature} 3142 3143 3144floor({expr}) *floor()* 3145 Return the largest integral value less than or equal to 3146 {expr} as a |Float| (round down). 3147 {expr} must evaluate to a |Float| or a |Number|. 3148 Examples: > 3149 echo floor(1.856) 3150< 1.0 > 3151 echo floor(-5.456) 3152< -6.0 > 3153 echo floor(4.0) 3154< 4.0 3155 {only available when compiled with the |+float| feature} 3156 3157 3158fmod({expr1}, {expr2}) *fmod()* 3159 Return the remainder of {expr1} / {expr2}, even if the 3160 division is not representable. Returns {expr1} - i * {expr2} 3161 for some integer i such that if {expr2} is non-zero, the 3162 result has the same sign as {expr1} and magnitude less than 3163 the magnitude of {expr2}. If {expr2} is zero, the value 3164 returned is zero. The value returned is a |Float|. 3165 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 3166 Examples: > 3167 :echo fmod(12.33, 1.22) 3168< 0.13 > 3169 :echo fmod(-12.33, 1.22) 3170< -0.13 3171 {only available when compiled with |+float| feature} 3172 3173 3174fnameescape({string}) *fnameescape()* 3175 Escape {string} for use as file name command argument. All 3176 characters that have a special meaning, such as '%' and '|' 3177 are escaped with a backslash. 3178 For most systems the characters escaped are 3179 " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash 3180 appears in a filename, it depends on the value of 'isfname'. 3181 A leading '+' and '>' is also escaped (special after |:edit| 3182 and |:write|). And a "-" by itself (special after |:cd|). 3183 Example: > 3184 :let fname = '+some str%nge|name' 3185 :exe "edit " . fnameescape(fname) 3186< results in executing: > 3187 edit \+some\ str\%nge\|name 3188 3189fnamemodify({fname}, {mods}) *fnamemodify()* 3190 Modify file name {fname} according to {mods}. {mods} is a 3191 string of characters like it is used for file names on the 3192 command line. See |filename-modifiers|. 3193 Example: > 3194 :echo fnamemodify("main.c", ":p:h") 3195< results in: > 3196 /home/mool/vim/vim/src 3197< Note: Environment variables don't work in {fname}, use 3198 |expand()| first then. 3199 3200foldclosed({lnum}) *foldclosed()* 3201 The result is a Number. If the line {lnum} is in a closed 3202 fold, the result is the number of the first line in that fold. 3203 If the line {lnum} is not in a closed fold, -1 is returned. 3204 3205foldclosedend({lnum}) *foldclosedend()* 3206 The result is a Number. If the line {lnum} is in a closed 3207 fold, the result is the number of the last line in that fold. 3208 If the line {lnum} is not in a closed fold, -1 is returned. 3209 3210foldlevel({lnum}) *foldlevel()* 3211 The result is a Number, which is the foldlevel of line {lnum} 3212 in the current buffer. For nested folds the deepest level is 3213 returned. If there is no fold at line {lnum}, zero is 3214 returned. It doesn't matter if the folds are open or closed. 3215 When used while updating folds (from 'foldexpr') -1 is 3216 returned for lines where folds are still to be updated and the 3217 foldlevel is unknown. As a special case the level of the 3218 previous line is usually available. 3219 3220 *foldtext()* 3221foldtext() Returns a String, to be displayed for a closed fold. This is 3222 the default function used for the 'foldtext' option and should 3223 only be called from evaluating 'foldtext'. It uses the 3224 |v:foldstart|, |v:foldend| and |v:folddashes| variables. 3225 The returned string looks like this: > 3226 +-- 45 lines: abcdef 3227< The number of dashes depends on the foldlevel. The "45" is 3228 the number of lines in the fold. "abcdef" is the text in the 3229 first non-blank line of the fold. Leading white space, "//" 3230 or "/*" and the text from the 'foldmarker' and 'commentstring' 3231 options is removed. 3232 {not available when compiled without the |+folding| feature} 3233 3234foldtextresult({lnum}) *foldtextresult()* 3235 Returns the text that is displayed for the closed fold at line 3236 {lnum}. Evaluates 'foldtext' in the appropriate context. 3237 When there is no closed fold at {lnum} an empty string is 3238 returned. 3239 {lnum} is used like with |getline()|. Thus "." is the current 3240 line, "'m" mark m, etc. 3241 Useful when exporting folded text, e.g., to HTML. 3242 {not available when compiled without the |+folding| feature} 3243 3244 *foreground()* 3245foreground() Move the Vim window to the foreground. Useful when sent from 3246 a client to a Vim server. |remote_send()| 3247 On Win32 systems this might not work, the OS does not always 3248 allow a window to bring itself to the foreground. Use 3249 |remote_foreground()| instead. 3250 {only in the Win32, Athena, Motif and GTK GUI versions and the 3251 Win32 console version} 3252 3253 3254function({name}) *function()* *E700* 3255 Return a |Funcref| variable that refers to function {name}. 3256 {name} can be a user defined function or an internal function. 3257 3258 3259garbagecollect([{atexit}]) *garbagecollect()* 3260 Cleanup unused |Lists| and |Dictionaries| that have circular 3261 references. There is hardly ever a need to invoke this 3262 function, as it is automatically done when Vim runs out of 3263 memory or is waiting for the user to press a key after 3264 'updatetime'. Items without circular references are always 3265 freed when they become unused. 3266 This is useful if you have deleted a very big |List| and/or 3267 |Dictionary| with circular references in a script that runs 3268 for a long time. 3269 When the optional {atexit} argument is one, garbage 3270 collection will also be done when exiting Vim, if it wasn't 3271 done before. This is useful when checking for memory leaks. 3272 3273get({list}, {idx} [, {default}]) *get()* 3274 Get item {idx} from |List| {list}. When this item is not 3275 available return {default}. Return zero when {default} is 3276 omitted. 3277get({dict}, {key} [, {default}]) 3278 Get item with key {key} from |Dictionary| {dict}. When this 3279 item is not available return {default}. Return zero when 3280 {default} is omitted. 3281 3282 *getbufline()* 3283getbufline({expr}, {lnum} [, {end}]) 3284 Return a |List| with the lines starting from {lnum} to {end} 3285 (inclusive) in the buffer {expr}. If {end} is omitted, a 3286 |List| with only the line {lnum} is returned. 3287 3288 For the use of {expr}, see |bufname()| above. 3289 3290 For {lnum} and {end} "$" can be used for the last line of the 3291 buffer. Otherwise a number must be used. 3292 3293 When {lnum} is smaller than 1 or bigger than the number of 3294 lines in the buffer, an empty |List| is returned. 3295 3296 When {end} is greater than the number of lines in the buffer, 3297 it is treated as {end} is set to the number of lines in the 3298 buffer. When {end} is before {lnum} an empty |List| is 3299 returned. 3300 3301 This function works only for loaded buffers. For unloaded and 3302 non-existing buffers, an empty |List| is returned. 3303 3304 Example: > 3305 :let lines = getbufline(bufnr("myfile"), 1, "$") 3306 3307getbufvar({expr}, {varname} [, {def}]) *getbufvar()* 3308 The result is the value of option or local buffer variable 3309 {varname} in buffer {expr}. Note that the name without "b:" 3310 must be used. 3311 When {varname} is empty returns a dictionary with all the 3312 buffer-local variables. 3313 This also works for a global or buffer-local option, but it 3314 doesn't work for a global variable, window-local variable or 3315 window-local option. 3316 For the use of {expr}, see |bufname()| above. 3317 When the buffer or variable doesn't exist {def} or an empty 3318 string is returned, there is no error message. 3319 Examples: > 3320 :let bufmodified = getbufvar(1, "&mod") 3321 :echo "todo myvar = " . getbufvar("todo", "myvar") 3322< 3323getchar([expr]) *getchar()* 3324 Get a single character from the user or input stream. 3325 If [expr] is omitted, wait until a character is available. 3326 If [expr] is 0, only get a character when one is available. 3327 Return zero otherwise. 3328 If [expr] is 1, only check if a character is available, it is 3329 not consumed. Return zero if no character available. 3330 3331 Without [expr] and when [expr] is 0 a whole character or 3332 special key is returned. If it is an 8-bit character, the 3333 result is a number. Use nr2char() to convert it to a String. 3334 Otherwise a String is returned with the encoded character. 3335 For a special key it's a sequence of bytes starting with 0x80 3336 (decimal: 128). This is the same value as the string 3337 "\<Key>", e.g., "\<Left>". The returned value is also a 3338 String when a modifier (shift, control, alt) was used that is 3339 not included in the character. 3340 3341 When [expr] is 0 and Esc is typed, there will be a short delay 3342 while Vim waits to see if this is the start of an escape 3343 sequence. 3344 3345 When [expr] is 1 only the first byte is returned. For a 3346 one-byte character it is the character itself as a number. 3347 Use nr2char() to convert it to a String. 3348 3349 Use getcharmod() to obtain any additional modifiers. 3350 3351 When the user clicks a mouse button, the mouse event will be 3352 returned. The position can then be found in |v:mouse_col|, 3353 |v:mouse_lnum| and |v:mouse_win|. This example positions the 3354 mouse as it would normally happen: > 3355 let c = getchar() 3356 if c == "\<LeftMouse>" && v:mouse_win > 0 3357 exe v:mouse_win . "wincmd w" 3358 exe v:mouse_lnum 3359 exe "normal " . v:mouse_col . "|" 3360 endif 3361< 3362 There is no prompt, you will somehow have to make clear to the 3363 user that a character has to be typed. 3364 There is no mapping for the character. 3365 Key codes are replaced, thus when the user presses the <Del> 3366 key you get the code for the <Del> key, not the raw character 3367 sequence. Examples: > 3368 getchar() == "\<Del>" 3369 getchar() == "\<S-Left>" 3370< This example redefines "f" to ignore case: > 3371 :nmap f :call FindChar()<CR> 3372 :function FindChar() 3373 : let c = nr2char(getchar()) 3374 : while col('.') < col('$') - 1 3375 : normal l 3376 : if getline('.')[col('.') - 1] ==? c 3377 : break 3378 : endif 3379 : endwhile 3380 :endfunction 3381< 3382 You may also receive synthetic characters, such as 3383 |<CursorHold>|. Often you will want to ignore this and get 3384 another character: > 3385 :function GetKey() 3386 : let c = getchar() 3387 : while c == "\<CursorHold>" 3388 : let c = getchar() 3389 : endwhile 3390 : return c 3391 :endfunction 3392 3393getcharmod() *getcharmod()* 3394 The result is a Number which is the state of the modifiers for 3395 the last obtained character with getchar() or in another way. 3396 These values are added together: 3397 2 shift 3398 4 control 3399 8 alt (meta) 3400 16 meta (when it's different from ALT) 3401 32 mouse double click 3402 64 mouse triple click 3403 96 mouse quadruple click (== 32 + 64) 3404 128 command (Macintosh only) 3405 Only the modifiers that have not been included in the 3406 character itself are obtained. Thus Shift-a results in "A" 3407 without a modifier. 3408 3409getcharsearch() *getcharsearch()* 3410 Return the current character search information as a {dict} 3411 with the following entries: 3412 3413 char character previously used for a character 3414 search (|t|, |f|, |T|, or |F|); empty string 3415 if no character search has been performed 3416 forward direction of character search; 1 for forward, 3417 0 for backward 3418 until type of character search; 1 for a |t| or |T| 3419 character search, 0 for an |f| or |F| 3420 character search 3421 3422 This can be useful to always have |;| and |,| search 3423 forward/backward regardless of the direction of the previous 3424 character search: > 3425 :nnoremap <expr> ; getcharsearch().forward ? ';' : ',' 3426 :nnoremap <expr> , getcharsearch().forward ? ',' : ';' 3427< Also see |setcharsearch()|. 3428 3429getcmdline() *getcmdline()* 3430 Return the current command-line. Only works when the command 3431 line is being edited, thus requires use of |c_CTRL-\_e| or 3432 |c_CTRL-R_=|. 3433 Example: > 3434 :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR> 3435< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|. 3436 3437getcmdpos() *getcmdpos()* 3438 Return the position of the cursor in the command line as a 3439 byte count. The first column is 1. 3440 Only works when editing the command line, thus requires use of 3441 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 3442 Returns 0 otherwise. 3443 Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|. 3444 3445getcmdtype() *getcmdtype()* 3446 Return the current command-line type. Possible return values 3447 are: 3448 : normal Ex command 3449 > debug mode command |debug-mode| 3450 / forward search command 3451 ? backward search command 3452 @ |input()| command 3453 - |:insert| or |:append| command 3454 = |i_CTRL-R_=| 3455 Only works when editing the command line, thus requires use of 3456 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 3457 Returns an empty string otherwise. 3458 Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|. 3459 3460getcmdwintype() *getcmdwintype()* 3461 Return the current |command-line-window| type. Possible return 3462 values are the same as |getcmdtype()|. Returns an empty string 3463 when not in the command-line window. 3464 3465 *getcurpos()* 3466getcurpos() Get the position of the cursor. This is like getpos('.'), but 3467 includes an extra item in the list: 3468 [bufnum, lnum, col, off, curswant] 3469 The "curswant" number is the preferred column when moving the 3470 cursor vertically. 3471 This can be used to save and restore the cursor position: > 3472 let save_cursor = getcurpos() 3473 MoveTheCursorAround 3474 call setpos('.', save_cursor) 3475< 3476 *getcwd()* 3477getcwd() The result is a String, which is the name of the current 3478 working directory. 3479 3480getfsize({fname}) *getfsize()* 3481 The result is a Number, which is the size in bytes of the 3482 given file {fname}. 3483 If {fname} is a directory, 0 is returned. 3484 If the file {fname} can't be found, -1 is returned. 3485 If the size of {fname} is too big to fit in a Number then -2 3486 is returned. 3487 3488getfontname([{name}]) *getfontname()* 3489 Without an argument returns the name of the normal font being 3490 used. Like what is used for the Normal highlight group 3491 |hl-Normal|. 3492 With an argument a check is done whether {name} is a valid 3493 font name. If not then an empty string is returned. 3494 Otherwise the actual font name is returned, or {name} if the 3495 GUI does not support obtaining the real name. 3496 Only works when the GUI is running, thus not in your vimrc or 3497 gvimrc file. Use the |GUIEnter| autocommand to use this 3498 function just after the GUI has started. 3499 Note that the GTK 2 GUI accepts any font name, thus checking 3500 for a valid name does not work. 3501 3502getfperm({fname}) *getfperm()* 3503 The result is a String, which is the read, write, and execute 3504 permissions of the given file {fname}. 3505 If {fname} does not exist or its directory cannot be read, an 3506 empty string is returned. 3507 The result is of the form "rwxrwxrwx", where each group of 3508 "rwx" flags represent, in turn, the permissions of the owner 3509 of the file, the group the file belongs to, and other users. 3510 If a user does not have a given permission the flag for this 3511 is replaced with the string "-". Examples: > 3512 :echo getfperm("/etc/passwd") 3513 :echo getfperm(expand("~/.vimrc")) 3514< This will hopefully (from a security point of view) display 3515 the string "rw-r--r--" or even "rw-------". 3516 3517getftime({fname}) *getftime()* 3518 The result is a Number, which is the last modification time of 3519 the given file {fname}. The value is measured as seconds 3520 since 1st Jan 1970, and may be passed to strftime(). See also 3521 |localtime()| and |strftime()|. 3522 If the file {fname} can't be found -1 is returned. 3523 3524getftype({fname}) *getftype()* 3525 The result is a String, which is a description of the kind of 3526 file of the given file {fname}. 3527 If {fname} does not exist an empty string is returned. 3528 Here is a table over different kinds of files and their 3529 results: 3530 Normal file "file" 3531 Directory "dir" 3532 Symbolic link "link" 3533 Block device "bdev" 3534 Character device "cdev" 3535 Socket "socket" 3536 FIFO "fifo" 3537 All other "other" 3538 Example: > 3539 getftype("/home") 3540< Note that a type such as "link" will only be returned on 3541 systems that support it. On some systems only "dir" and 3542 "file" are returned. 3543 3544 *getline()* 3545getline({lnum} [, {end}]) 3546 Without {end} the result is a String, which is line {lnum} 3547 from the current buffer. Example: > 3548 getline(1) 3549< When {lnum} is a String that doesn't start with a 3550 digit, line() is called to translate the String into a Number. 3551 To get the line under the cursor: > 3552 getline(".") 3553< When {lnum} is smaller than 1 or bigger than the number of 3554 lines in the buffer, an empty string is returned. 3555 3556 When {end} is given the result is a |List| where each item is 3557 a line from the current buffer in the range {lnum} to {end}, 3558 including line {end}. 3559 {end} is used in the same way as {lnum}. 3560 Non-existing lines are silently omitted. 3561 When {end} is before {lnum} an empty |List| is returned. 3562 Example: > 3563 :let start = line('.') 3564 :let end = search("^$") - 1 3565 :let lines = getline(start, end) 3566 3567< To get lines from another buffer see |getbufline()| 3568 3569getloclist({nr}) *getloclist()* 3570 Returns a list with all the entries in the location list for 3571 window {nr}. When {nr} is zero the current window is used. 3572 For a location list window, the displayed location list is 3573 returned. For an invalid window number {nr}, an empty list is 3574 returned. Otherwise, same as |getqflist()|. 3575 3576getmatches() *getmatches()* 3577 Returns a |List| with all matches previously defined by 3578 |matchadd()| and the |:match| commands. |getmatches()| is 3579 useful in combination with |setmatches()|, as |setmatches()| 3580 can restore a list of matches saved by |getmatches()|. 3581 Example: > 3582 :echo getmatches() 3583< [{'group': 'MyGroup1', 'pattern': 'TODO', 3584 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 3585 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 3586 :let m = getmatches() 3587 :call clearmatches() 3588 :echo getmatches() 3589< [] > 3590 :call setmatches(m) 3591 :echo getmatches() 3592< [{'group': 'MyGroup1', 'pattern': 'TODO', 3593 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 3594 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 3595 :unlet m 3596< 3597 *getpid()* 3598getpid() Return a Number which is the process ID of the Vim process. 3599 On Unix and MS-Windows this is a unique number, until Vim 3600 exits. On MS-DOS it's always zero. 3601 3602 *getpos()* 3603getpos({expr}) Get the position for {expr}. For possible values of {expr} 3604 see |line()|. For getting the cursor position see 3605 |getcurpos()|. 3606 The result is a |List| with four numbers: 3607 [bufnum, lnum, col, off] 3608 "bufnum" is zero, unless a mark like '0 or 'A is used, then it 3609 is the buffer number of the mark. 3610 "lnum" and "col" are the position in the buffer. The first 3611 column is 1. 3612 The "off" number is zero, unless 'virtualedit' is used. Then 3613 it is the offset in screen columns from the start of the 3614 character. E.g., a position within a <Tab> or after the last 3615 character. 3616 Note that for '< and '> Visual mode matters: when it is "V" 3617 (visual line mode) the column of '< is zero and the column of 3618 '> is a large number. 3619 This can be used to save and restore the position of a mark: > 3620 let save_a_mark = getpos("'a") 3621 ... 3622 call setpos("'a", save_a_mark) 3623< Also see |getcurpos()| and |setpos()|. 3624 3625 3626getqflist() *getqflist()* 3627 Returns a list with all the current quickfix errors. Each 3628 list item is a dictionary with these entries: 3629 bufnr number of buffer that has the file name, use 3630 bufname() to get the name 3631 lnum line number in the buffer (first line is 1) 3632 col column number (first column is 1) 3633 vcol non-zero: "col" is visual column 3634 zero: "col" is byte index 3635 nr error number 3636 pattern search pattern used to locate the error 3637 text description of the error 3638 type type of the error, 'E', '1', etc. 3639 valid non-zero: recognized error message 3640 3641 When there is no error list or it's empty an empty list is 3642 returned. Quickfix list entries with non-existing buffer 3643 number are returned with "bufnr" set to zero. 3644 3645 Useful application: Find pattern matches in multiple files and 3646 do something with them: > 3647 :vimgrep /theword/jg *.c 3648 :for d in getqflist() 3649 : echo bufname(d.bufnr) ':' d.lnum '=' d.text 3650 :endfor 3651 3652 3653getreg([{regname} [, 1 [, {list}]]]) *getreg()* 3654 The result is a String, which is the contents of register 3655 {regname}. Example: > 3656 :let cliptext = getreg('*') 3657< getreg('=') returns the last evaluated value of the expression 3658 register. (For use in maps.) 3659 getreg('=', 1) returns the expression itself, so that it can 3660 be restored with |setreg()|. For other registers the extra 3661 argument is ignored, thus you can always give it. 3662 If {list} is present and non-zero result type is changed to 3663 |List|. Each list item is one text line. Use it if you care 3664 about zero bytes possibly present inside register: without 3665 third argument both NLs and zero bytes are represented as NLs 3666 (see |NL-used-for-Nul|). 3667 If {regname} is not specified, |v:register| is used. 3668 3669 3670getregtype([{regname}]) *getregtype()* 3671 The result is a String, which is type of register {regname}. 3672 The value will be one of: 3673 "v" for |characterwise| text 3674 "V" for |linewise| text 3675 "<CTRL-V>{width}" for |blockwise-visual| text 3676 "" for an empty or unknown register 3677 <CTRL-V> is one character with value 0x16. 3678 If {regname} is not specified, |v:register| is used. 3679 3680gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()* 3681 Get the value of a tab-local variable {varname} in tab page 3682 {tabnr}. |t:var| 3683 Tabs are numbered starting with one. 3684 When {varname} is empty a dictionary with all tab-local 3685 variables is returned. 3686 Note that the name without "t:" must be used. 3687 When the tab or variable doesn't exist {def} or an empty 3688 string is returned, there is no error message. 3689 3690gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()* 3691 Get the value of window-local variable {varname} in window 3692 {winnr} in tab page {tabnr}. 3693 When {varname} starts with "&" get the value of a window-local 3694 option. 3695 When {varname} is empty a dictionary with all window-local 3696 variables is returned. 3697 Note that {varname} must be the name without "w:". 3698 Tabs are numbered starting with one. For the current tabpage 3699 use |getwinvar()|. 3700 When {winnr} is zero the current window is used. 3701 This also works for a global option, buffer-local option and 3702 window-local option, but it doesn't work for a global variable 3703 or buffer-local variable. 3704 When the tab, window or variable doesn't exist {def} or an 3705 empty string is returned, there is no error message. 3706 Examples: > 3707 :let list_is_on = gettabwinvar(1, 2, '&list') 3708 :echo "myvar = " . gettabwinvar(3, 1, 'myvar') 3709< 3710 *getwinposx()* 3711getwinposx() The result is a Number, which is the X coordinate in pixels of 3712 the left hand side of the GUI Vim window. The result will be 3713 -1 if the information is not available. 3714 3715 *getwinposy()* 3716getwinposy() The result is a Number, which is the Y coordinate in pixels of 3717 the top of the GUI Vim window. The result will be -1 if the 3718 information is not available. 3719 3720getwinvar({winnr}, {varname} [, {def}]) *getwinvar()* 3721 Like |gettabwinvar()| for the current tabpage. 3722 Examples: > 3723 :let list_is_on = getwinvar(2, '&list') 3724 :echo "myvar = " . getwinvar(1, 'myvar') 3725< 3726glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()* 3727 Expand the file wildcards in {expr}. See |wildcards| for the 3728 use of special characters. 3729 3730 Unless the optional {nosuf} argument is given and is non-zero, 3731 the 'suffixes' and 'wildignore' options apply: Names matching 3732 one of the patterns in 'wildignore' will be skipped and 3733 'suffixes' affect the ordering of matches. 3734 'wildignorecase' always applies. 3735 3736 When {list} is present and it is non-zero the result is a List 3737 with all matching files. The advantage of using a List is, 3738 you also get filenames containing newlines correctly. 3739 Otherwise the result is a String and when there are several 3740 matches, they are separated by <NL> characters. 3741 3742 If the expansion fails, the result is an empty String or List. 3743 3744 A name for a non-existing file is not included. A symbolic 3745 link is only included if it points to an existing file. 3746 However, when the {alllinks} argument is present and it is 3747 non-zero then all symbolic links are included. 3748 3749 For most systems backticks can be used to get files names from 3750 any external command. Example: > 3751 :let tagfiles = glob("`find . -name tags -print`") 3752 :let &tags = substitute(tagfiles, "\n", ",", "g") 3753< The result of the program inside the backticks should be one 3754 item per line. Spaces inside an item are allowed. 3755 3756 See |expand()| for expanding special Vim variables. See 3757 |system()| for getting the raw output of an external command. 3758 3759glob2regpat({expr}) *glob2regpat()* 3760 Convert a file pattern, as used by glob(), into a search 3761 pattern. The result can be used to match with a string that 3762 is a file name. E.g. > 3763 if filename =~ glob2regpat('Make*.mak') 3764< This is equivalent to: > 3765 if filename =~ '^Make.*\.mak$' 3766< 3767 *globpath()* 3768globpath({path}, {expr} [, {nosuf} [, {list} [, {allinks}]]]) 3769 Perform glob() on all directories in {path} and concatenate 3770 the results. Example: > 3771 :echo globpath(&rtp, "syntax/c.vim") 3772< 3773 {path} is a comma-separated list of directory names. Each 3774 directory name is prepended to {expr} and expanded like with 3775 |glob()|. A path separator is inserted when needed. 3776 To add a comma inside a directory name escape it with a 3777 backslash. Note that on MS-Windows a directory may have a 3778 trailing backslash, remove it if you put a comma after it. 3779 If the expansion fails for one of the directories, there is no 3780 error message. 3781 3782 Unless the optional {nosuf} argument is given and is non-zero, 3783 the 'suffixes' and 'wildignore' options apply: Names matching 3784 one of the patterns in 'wildignore' will be skipped and 3785 'suffixes' affect the ordering of matches. 3786 3787 When {list} is present and it is non-zero the result is a List 3788 with all matching files. The advantage of using a List is, you 3789 also get filenames containing newlines correctly. Otherwise 3790 the result is a String and when there are several matches, 3791 they are separated by <NL> characters. Example: > 3792 :echo globpath(&rtp, "syntax/c.vim", 0, 1) 3793< 3794 {allinks} is used as with |glob()|. 3795 3796 The "**" item can be used to search in a directory tree. 3797 For example, to find all "README.txt" files in the directories 3798 in 'runtimepath' and below: > 3799 :echo globpath(&rtp, "**/README.txt") 3800< Upwards search and limiting the depth of "**" is not 3801 supported, thus using 'path' will not always work properly. 3802 3803 *has()* 3804has({feature}) The result is a Number, which is 1 if the feature {feature} is 3805 supported, zero otherwise. The {feature} argument is a 3806 string. See |feature-list| below. 3807 Also see |exists()|. 3808 3809 3810has_key({dict}, {key}) *has_key()* 3811 The result is a Number, which is 1 if |Dictionary| {dict} has 3812 an entry with key {key}. Zero otherwise. 3813 3814haslocaldir() *haslocaldir()* 3815 The result is a Number, which is 1 when the current 3816 window has set a local path via |:lcd|, and 0 otherwise. 3817 3818hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()* 3819 The result is a Number, which is 1 if there is a mapping that 3820 contains {what} in somewhere in the rhs (what it is mapped to) 3821 and this mapping exists in one of the modes indicated by 3822 {mode}. 3823 When {abbr} is there and it is non-zero use abbreviations 3824 instead of mappings. Don't forget to specify Insert and/or 3825 Command-line mode. 3826 Both the global mappings and the mappings local to the current 3827 buffer are checked for a match. 3828 If no matching mapping is found 0 is returned. 3829 The following characters are recognized in {mode}: 3830 n Normal mode 3831 v Visual mode 3832 o Operator-pending mode 3833 i Insert mode 3834 l Language-Argument ("r", "f", "t", etc.) 3835 c Command-line mode 3836 When {mode} is omitted, "nvo" is used. 3837 3838 This function is useful to check if a mapping already exists 3839 to a function in a Vim script. Example: > 3840 :if !hasmapto('\ABCdoit') 3841 : map <Leader>d \ABCdoit 3842 :endif 3843< This installs the mapping to "\ABCdoit" only if there isn't 3844 already a mapping to "\ABCdoit". 3845 3846histadd({history}, {item}) *histadd()* 3847 Add the String {item} to the history {history} which can be 3848 one of: *hist-names* 3849 "cmd" or ":" command line history 3850 "search" or "/" search pattern history 3851 "expr" or "=" typed expression history 3852 "input" or "@" input line history 3853 "debug" or ">" debug command history 3854 The {history} string does not need to be the whole name, one 3855 character is sufficient. 3856 If {item} does already exist in the history, it will be 3857 shifted to become the newest entry. 3858 The result is a Number: 1 if the operation was successful, 3859 otherwise 0 is returned. 3860 3861 Example: > 3862 :call histadd("input", strftime("%Y %b %d")) 3863 :let date=input("Enter date: ") 3864< This function is not available in the |sandbox|. 3865 3866histdel({history} [, {item}]) *histdel()* 3867 Clear {history}, i.e. delete all its entries. See |hist-names| 3868 for the possible values of {history}. 3869 3870 If the parameter {item} evaluates to a String, it is used as a 3871 regular expression. All entries matching that expression will 3872 be removed from the history (if there are any). 3873 Upper/lowercase must match, unless "\c" is used |/\c|. 3874 If {item} evaluates to a Number, it will be interpreted as 3875 an index, see |:history-indexing|. The respective entry will 3876 be removed if it exists. 3877 3878 The result is a Number: 1 for a successful operation, 3879 otherwise 0 is returned. 3880 3881 Examples: 3882 Clear expression register history: > 3883 :call histdel("expr") 3884< 3885 Remove all entries starting with "*" from the search history: > 3886 :call histdel("/", '^\*') 3887< 3888 The following three are equivalent: > 3889 :call histdel("search", histnr("search")) 3890 :call histdel("search", -1) 3891 :call histdel("search", '^'.histget("search", -1).'$') 3892< 3893 To delete the last search pattern and use the last-but-one for 3894 the "n" command and 'hlsearch': > 3895 :call histdel("search", -1) 3896 :let @/ = histget("search", -1) 3897 3898histget({history} [, {index}]) *histget()* 3899 The result is a String, the entry with Number {index} from 3900 {history}. See |hist-names| for the possible values of 3901 {history}, and |:history-indexing| for {index}. If there is 3902 no such entry, an empty String is returned. When {index} is 3903 omitted, the most recent item from the history is used. 3904 3905 Examples: 3906 Redo the second last search from history. > 3907 :execute '/' . histget("search", -2) 3908 3909< Define an Ex command ":H {num}" that supports re-execution of 3910 the {num}th entry from the output of |:history|. > 3911 :command -nargs=1 H execute histget("cmd", 0+<args>) 3912< 3913histnr({history}) *histnr()* 3914 The result is the Number of the current entry in {history}. 3915 See |hist-names| for the possible values of {history}. 3916 If an error occurred, -1 is returned. 3917 3918 Example: > 3919 :let inp_index = histnr("expr") 3920< 3921hlexists({name}) *hlexists()* 3922 The result is a Number, which is non-zero if a highlight group 3923 called {name} exists. This is when the group has been 3924 defined in some way. Not necessarily when highlighting has 3925 been defined for it, it may also have been used for a syntax 3926 item. 3927 *highlight_exists()* 3928 Obsolete name: highlight_exists(). 3929 3930 *hlID()* 3931hlID({name}) The result is a Number, which is the ID of the highlight group 3932 with name {name}. When the highlight group doesn't exist, 3933 zero is returned. 3934 This can be used to retrieve information about the highlight 3935 group. For example, to get the background color of the 3936 "Comment" group: > 3937 :echo synIDattr(synIDtrans(hlID("Comment")), "bg") 3938< *highlightID()* 3939 Obsolete name: highlightID(). 3940 3941hostname() *hostname()* 3942 The result is a String, which is the name of the machine on 3943 which Vim is currently running. Machine names greater than 3944 256 characters long are truncated. 3945 3946iconv({expr}, {from}, {to}) *iconv()* 3947 The result is a String, which is the text {expr} converted 3948 from encoding {from} to encoding {to}. 3949 When the conversion completely fails an empty string is 3950 returned. When some characters could not be converted they 3951 are replaced with "?". 3952 The encoding names are whatever the iconv() library function 3953 can accept, see ":!man 3 iconv". 3954 Most conversions require Vim to be compiled with the |+iconv| 3955 feature. Otherwise only UTF-8 to latin1 conversion and back 3956 can be done. 3957 This can be used to display messages with special characters, 3958 no matter what 'encoding' is set to. Write the message in 3959 UTF-8 and use: > 3960 echo iconv(utf8_str, "utf-8", &enc) 3961< Note that Vim uses UTF-8 for all Unicode encodings, conversion 3962 from/to UCS-2 is automatically changed to use UTF-8. You 3963 cannot use UCS-2 in a string anyway, because of the NUL bytes. 3964 {only available when compiled with the |+multi_byte| feature} 3965 3966 *indent()* 3967indent({lnum}) The result is a Number, which is indent of line {lnum} in the 3968 current buffer. The indent is counted in spaces, the value 3969 of 'tabstop' is relevant. {lnum} is used just like in 3970 |getline()|. 3971 When {lnum} is invalid -1 is returned. 3972 3973 3974index({list}, {expr} [, {start} [, {ic}]]) *index()* 3975 Return the lowest index in |List| {list} where the item has a 3976 value equal to {expr}. There is no automatic conversion, so 3977 the String "4" is different from the Number 4. And the number 3978 4 is different from the Float 4.0. The value of 'ignorecase' 3979 is not used here, case always matters. 3980 If {start} is given then start looking at the item with index 3981 {start} (may be negative for an item relative to the end). 3982 When {ic} is given and it is non-zero, ignore case. Otherwise 3983 case must match. 3984 -1 is returned when {expr} is not found in {list}. 3985 Example: > 3986 :let idx = index(words, "the") 3987 :if index(numbers, 123) >= 0 3988 3989 3990input({prompt} [, {text} [, {completion}]]) *input()* 3991 The result is a String, which is whatever the user typed on 3992 the command-line. The {prompt} argument is either a prompt 3993 string, or a blank string (for no prompt). A '\n' can be used 3994 in the prompt to start a new line. 3995 The highlighting set with |:echohl| is used for the prompt. 3996 The input is entered just like a command-line, with the same 3997 editing commands and mappings. There is a separate history 3998 for lines typed for input(). 3999 Example: > 4000 :if input("Coffee or beer? ") == "beer" 4001 : echo "Cheers!" 4002 :endif 4003< 4004 If the optional {text} argument is present and not empty, this 4005 is used for the default reply, as if the user typed this. 4006 Example: > 4007 :let color = input("Color? ", "white") 4008 4009< The optional {completion} argument specifies the type of 4010 completion supported for the input. Without it completion is 4011 not performed. The supported completion types are the same as 4012 that can be supplied to a user-defined command using the 4013 "-complete=" argument. Refer to |:command-completion| for 4014 more information. Example: > 4015 let fname = input("File: ", "", "file") 4016< 4017 NOTE: This function must not be used in a startup file, for 4018 the versions that only run in GUI mode (e.g., the Win32 GUI). 4019 Note: When input() is called from within a mapping it will 4020 consume remaining characters from that mapping, because a 4021 mapping is handled like the characters were typed. 4022 Use |inputsave()| before input() and |inputrestore()| 4023 after input() to avoid that. Another solution is to avoid 4024 that further characters follow in the mapping, e.g., by using 4025 |:execute| or |:normal|. 4026 4027 Example with a mapping: > 4028 :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR> 4029 :function GetFoo() 4030 : call inputsave() 4031 : let g:Foo = input("enter search pattern: ") 4032 : call inputrestore() 4033 :endfunction 4034 4035inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()* 4036 Like |input()|, but when the GUI is running and text dialogs 4037 are supported, a dialog window pops up to input the text. 4038 Example: > 4039 :let n = inputdialog("value for shiftwidth", shiftwidth()) 4040 :if n != "" 4041 : let &sw = n 4042 :endif 4043< When the dialog is cancelled {cancelreturn} is returned. When 4044 omitted an empty string is returned. 4045 Hitting <Enter> works like pressing the OK button. Hitting 4046 <Esc> works like pressing the Cancel button. 4047 NOTE: Command-line completion is not supported. 4048 4049inputlist({textlist}) *inputlist()* 4050 {textlist} must be a |List| of strings. This |List| is 4051 displayed, one string per line. The user will be prompted to 4052 enter a number, which is returned. 4053 The user can also select an item by clicking on it with the 4054 mouse. For the first string 0 is returned. When clicking 4055 above the first item a negative number is returned. When 4056 clicking on the prompt one more than the length of {textlist} 4057 is returned. 4058 Make sure {textlist} has less than 'lines' entries, otherwise 4059 it won't work. It's a good idea to put the entry number at 4060 the start of the string. And put a prompt in the first item. 4061 Example: > 4062 let color = inputlist(['Select color:', '1. red', 4063 \ '2. green', '3. blue']) 4064 4065inputrestore() *inputrestore()* 4066 Restore typeahead that was saved with a previous |inputsave()|. 4067 Should be called the same number of times inputsave() is 4068 called. Calling it more often is harmless though. 4069 Returns 1 when there is nothing to restore, 0 otherwise. 4070 4071inputsave() *inputsave()* 4072 Preserve typeahead (also from mappings) and clear it, so that 4073 a following prompt gets input from the user. Should be 4074 followed by a matching inputrestore() after the prompt. Can 4075 be used several times, in which case there must be just as 4076 many inputrestore() calls. 4077 Returns 1 when out of memory, 0 otherwise. 4078 4079inputsecret({prompt} [, {text}]) *inputsecret()* 4080 This function acts much like the |input()| function with but 4081 two exceptions: 4082 a) the user's response will be displayed as a sequence of 4083 asterisks ("*") thereby keeping the entry secret, and 4084 b) the user's response will not be recorded on the input 4085 |history| stack. 4086 The result is a String, which is whatever the user actually 4087 typed on the command-line in response to the issued prompt. 4088 NOTE: Command-line completion is not supported. 4089 4090insert({list}, {item} [, {idx}]) *insert()* 4091 Insert {item} at the start of |List| {list}. 4092 If {idx} is specified insert {item} before the item with index 4093 {idx}. If {idx} is zero it goes before the first item, just 4094 like omitting {idx}. A negative {idx} is also possible, see 4095 |list-index|. -1 inserts just before the last item. 4096 Returns the resulting |List|. Examples: > 4097 :let mylist = insert([2, 3, 5], 1) 4098 :call insert(mylist, 4, -1) 4099 :call insert(mylist, 6, len(mylist)) 4100< The last example can be done simpler with |add()|. 4101 Note that when {item} is a |List| it is inserted as a single 4102 item. Use |extend()| to concatenate |Lists|. 4103 4104invert({expr}) *invert()* 4105 Bitwise invert. The argument is converted to a number. A 4106 List, Dict or Float argument causes an error. Example: > 4107 :let bits = invert(bits) 4108 4109isdirectory({directory}) *isdirectory()* 4110 The result is a Number, which is non-zero when a directory 4111 with the name {directory} exists. If {directory} doesn't 4112 exist, or isn't a directory, the result is FALSE. {directory} 4113 is any expression, which is used as a String. 4114 4115islocked({expr}) *islocked()* *E786* 4116 The result is a Number, which is non-zero when {expr} is the 4117 name of a locked variable. 4118 {expr} must be the name of a variable, |List| item or 4119 |Dictionary| entry, not the variable itself! Example: > 4120 :let alist = [0, ['a', 'b'], 2, 3] 4121 :lockvar 1 alist 4122 :echo islocked('alist') " 1 4123 :echo islocked('alist[1]') " 0 4124 4125< When {expr} is a variable that does not exist you get an error 4126 message. Use |exists()| to check for existence. 4127 4128items({dict}) *items()* 4129 Return a |List| with all the key-value pairs of {dict}. Each 4130 |List| item is a list with two items: the key of a {dict} 4131 entry and the value of this entry. The |List| is in arbitrary 4132 order. 4133 4134 4135join({list} [, {sep}]) *join()* 4136 Join the items in {list} together into one String. 4137 When {sep} is specified it is put in between the items. If 4138 {sep} is omitted a single space is used. 4139 Note that {sep} is not added at the end. You might want to 4140 add it there too: > 4141 let lines = join(mylist, "\n") . "\n" 4142< String items are used as-is. |Lists| and |Dictionaries| are 4143 converted into a string like with |string()|. 4144 The opposite function is |split()|. 4145 4146keys({dict}) *keys()* 4147 Return a |List| with all the keys of {dict}. The |List| is in 4148 arbitrary order. 4149 4150 *len()* *E701* 4151len({expr}) The result is a Number, which is the length of the argument. 4152 When {expr} is a String or a Number the length in bytes is 4153 used, as with |strlen()|. 4154 When {expr} is a |List| the number of items in the |List| is 4155 returned. 4156 When {expr} is a |Dictionary| the number of entries in the 4157 |Dictionary| is returned. 4158 Otherwise an error is given. 4159 4160 *libcall()* *E364* *E368* 4161libcall({libname}, {funcname}, {argument}) 4162 Call function {funcname} in the run-time library {libname} 4163 with single argument {argument}. 4164 This is useful to call functions in a library that you 4165 especially made to be used with Vim. Since only one argument 4166 is possible, calling standard library functions is rather 4167 limited. 4168 The result is the String returned by the function. If the 4169 function returns NULL, this will appear as an empty string "" 4170 to Vim. 4171 If the function returns a number, use libcallnr()! 4172 If {argument} is a number, it is passed to the function as an 4173 int; if {argument} is a string, it is passed as a 4174 null-terminated string. 4175 This function will fail in |restricted-mode|. 4176 4177 libcall() allows you to write your own 'plug-in' extensions to 4178 Vim without having to recompile the program. It is NOT a 4179 means to call system functions! If you try to do so Vim will 4180 very probably crash. 4181 4182 For Win32, the functions you write must be placed in a DLL 4183 and use the normal C calling convention (NOT Pascal which is 4184 used in Windows System DLLs). The function must take exactly 4185 one parameter, either a character pointer or a long integer, 4186 and must return a character pointer or NULL. The character 4187 pointer returned must point to memory that will remain valid 4188 after the function has returned (e.g. in static data in the 4189 DLL). If it points to allocated memory, that memory will 4190 leak away. Using a static buffer in the function should work, 4191 it's then freed when the DLL is unloaded. 4192 4193 WARNING: If the function returns a non-valid pointer, Vim may 4194 crash! This also happens if the function returns a number, 4195 because Vim thinks it's a pointer. 4196 For Win32 systems, {libname} should be the filename of the DLL 4197 without the ".DLL" suffix. A full path is only required if 4198 the DLL is not in the usual places. 4199 For Unix: When compiling your own plugins, remember that the 4200 object code must be compiled as position-independent ('PIC'). 4201 {only in Win32 and some Unix versions, when the |+libcall| 4202 feature is present} 4203 Examples: > 4204 :echo libcall("libc.so", "getenv", "HOME") 4205< 4206 *libcallnr()* 4207libcallnr({libname}, {funcname}, {argument}) 4208 Just like |libcall()|, but used for a function that returns an 4209 int instead of a string. 4210 {only in Win32 on some Unix versions, when the |+libcall| 4211 feature is present} 4212 Examples: > 4213 :echo libcallnr("/usr/lib/libc.so", "getpid", "") 4214 :call libcallnr("libc.so", "printf", "Hello World!\n") 4215 :call libcallnr("libc.so", "sleep", 10) 4216< 4217 *line()* 4218line({expr}) The result is a Number, which is the line number of the file 4219 position given with {expr}. The accepted positions are: 4220 . the cursor position 4221 $ the last line in the current buffer 4222 'x position of mark x (if the mark is not set, 0 is 4223 returned) 4224 w0 first line visible in current window 4225 w$ last line visible in current window 4226 v In Visual mode: the start of the Visual area (the 4227 cursor is the end). When not in Visual mode 4228 returns the cursor position. Differs from |'<| in 4229 that it's updated right away. 4230 Note that a mark in another file can be used. The line number 4231 then applies to another buffer. 4232 To get the column number use |col()|. To get both use 4233 |getpos()|. 4234 Examples: > 4235 line(".") line number of the cursor 4236 line("'t") line number of mark t 4237 line("'" . marker) line number of mark marker 4238< *last-position-jump* 4239 This autocommand jumps to the last known position in a file 4240 just after opening it, if the '" mark is set: > 4241 :au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif 4242 4243line2byte({lnum}) *line2byte()* 4244 Return the byte count from the start of the buffer for line 4245 {lnum}. This includes the end-of-line character, depending on 4246 the 'fileformat' option for the current buffer. The first 4247 line returns 1. 'encoding' matters, 'fileencoding' is ignored. 4248 This can also be used to get the byte count for the line just 4249 below the last line: > 4250 line2byte(line("$") + 1) 4251< This is the buffer size plus one. If 'fileencoding' is empty 4252 it is the file size plus one. 4253 When {lnum} is invalid, or the |+byte_offset| feature has been 4254 disabled at compile time, -1 is returned. 4255 Also see |byte2line()|, |go| and |:goto|. 4256 4257lispindent({lnum}) *lispindent()* 4258 Get the amount of indent for line {lnum} according the lisp 4259 indenting rules, as with 'lisp'. 4260 The indent is counted in spaces, the value of 'tabstop' is 4261 relevant. {lnum} is used just like in |getline()|. 4262 When {lnum} is invalid or Vim was not compiled the 4263 |+lispindent| feature, -1 is returned. 4264 4265localtime() *localtime()* 4266 Return the current time, measured as seconds since 1st Jan 4267 1970. See also |strftime()| and |getftime()|. 4268 4269 4270log({expr}) *log()* 4271 Return the natural logarithm (base e) of {expr} as a |Float|. 4272 {expr} must evaluate to a |Float| or a |Number| in the range 4273 (0, inf]. 4274 Examples: > 4275 :echo log(10) 4276< 2.302585 > 4277 :echo log(exp(5)) 4278< 5.0 4279 {only available when compiled with the |+float| feature} 4280 4281 4282log10({expr}) *log10()* 4283 Return the logarithm of Float {expr} to base 10 as a |Float|. 4284 {expr} must evaluate to a |Float| or a |Number|. 4285 Examples: > 4286 :echo log10(1000) 4287< 3.0 > 4288 :echo log10(0.01) 4289< -2.0 4290 {only available when compiled with the |+float| feature} 4291 4292luaeval({expr}[, {expr}]) *luaeval()* 4293 Evaluate Lua expression {expr} and return its result converted 4294 to Vim data structures. Second {expr} may hold additional 4295 argument accessible as _A inside first {expr}. 4296 Strings are returned as they are. 4297 Boolean objects are converted to numbers. 4298 Numbers are converted to |Float| values if vim was compiled 4299 with |+float| and to numbers otherwise. 4300 Dictionaries and lists obtained by vim.eval() are returned 4301 as-is. 4302 Other objects are returned as zero without any errors. 4303 See |lua-luaeval| for more details. 4304 {only available when compiled with the |+lua| feature} 4305 4306map({expr}, {string}) *map()* 4307 {expr} must be a |List| or a |Dictionary|. 4308 Replace each item in {expr} with the result of evaluating 4309 {string}. 4310 Inside {string} |v:val| has the value of the current item. 4311 For a |Dictionary| |v:key| has the key of the current item 4312 and for a |List| |v:key| has the index of the current item. 4313 Example: > 4314 :call map(mylist, '"> " . v:val . " <"') 4315< This puts "> " before and " <" after each item in "mylist". 4316 4317 Note that {string} is the result of an expression and is then 4318 used as an expression again. Often it is good to use a 4319 |literal-string| to avoid having to double backslashes. You 4320 still have to double ' quotes 4321 4322 The operation is done in-place. If you want a |List| or 4323 |Dictionary| to remain unmodified make a copy first: > 4324 :let tlist = map(copy(mylist), ' v:val . "\t"') 4325 4326< Returns {expr}, the |List| or |Dictionary| that was filtered. 4327 When an error is encountered while evaluating {string} no 4328 further items in {expr} are processed. 4329 4330 4331maparg({name}[, {mode} [, {abbr} [, {dict}]]]) *maparg()* 4332 When {dict} is omitted or zero: Return the rhs of mapping 4333 {name} in mode {mode}. The returned String has special 4334 characters translated like in the output of the ":map" command 4335 listing. 4336 4337 When there is no mapping for {name}, an empty String is 4338 returned. 4339 4340 The {name} can have special key names, like in the ":map" 4341 command. 4342 4343 {mode} can be one of these strings: 4344 "n" Normal 4345 "v" Visual (including Select) 4346 "o" Operator-pending 4347 "i" Insert 4348 "c" Cmd-line 4349 "s" Select 4350 "x" Visual 4351 "l" langmap |language-mapping| 4352 "" Normal, Visual and Operator-pending 4353 When {mode} is omitted, the modes for "" are used. 4354 4355 When {abbr} is there and it is non-zero use abbreviations 4356 instead of mappings. 4357 4358 When {dict} is there and it is non-zero return a dictionary 4359 containing all the information of the mapping with the 4360 following items: 4361 "lhs" The {lhs} of the mapping. 4362 "rhs" The {rhs} of the mapping as typed. 4363 "silent" 1 for a |:map-silent| mapping, else 0. 4364 "noremap" 1 if the {rhs} of the mapping is not remappable. 4365 "expr" 1 for an expression mapping (|:map-<expr>|). 4366 "buffer" 1 for a buffer local mapping (|:map-local|). 4367 "mode" Modes for which the mapping is defined. In 4368 addition to the modes mentioned above, these 4369 characters will be used: 4370 " " Normal, Visual and Operator-pending 4371 "!" Insert and Commandline mode 4372 (|mapmode-ic|) 4373 "sid" The script local ID, used for <sid> mappings 4374 (|<SID>|). 4375 "nowait" Do not wait for other, longer mappings. 4376 (|:map-<nowait>|). 4377 4378 The mappings local to the current buffer are checked first, 4379 then the global mappings. 4380 This function can be used to map a key even when it's already 4381 mapped, and have it do the original mapping too. Sketch: > 4382 exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n') 4383 4384 4385mapcheck({name}[, {mode} [, {abbr}]]) *mapcheck()* 4386 Check if there is a mapping that matches with {name} in mode 4387 {mode}. See |maparg()| for {mode} and special names in 4388 {name}. 4389 When {abbr} is there and it is non-zero use abbreviations 4390 instead of mappings. 4391 A match happens with a mapping that starts with {name} and 4392 with a mapping which is equal to the start of {name}. 4393 4394 matches mapping "a" "ab" "abc" ~ 4395 mapcheck("a") yes yes yes 4396 mapcheck("abc") yes yes yes 4397 mapcheck("ax") yes no no 4398 mapcheck("b") no no no 4399 4400 The difference with maparg() is that mapcheck() finds a 4401 mapping that matches with {name}, while maparg() only finds a 4402 mapping for {name} exactly. 4403 When there is no mapping that starts with {name}, an empty 4404 String is returned. If there is one, the rhs of that mapping 4405 is returned. If there are several mappings that start with 4406 {name}, the rhs of one of them is returned. 4407 The mappings local to the current buffer are checked first, 4408 then the global mappings. 4409 This function can be used to check if a mapping can be added 4410 without being ambiguous. Example: > 4411 :if mapcheck("_vv") == "" 4412 : map _vv :set guifont=7x13<CR> 4413 :endif 4414< This avoids adding the "_vv" mapping when there already is a 4415 mapping for "_v" or for "_vvv". 4416 4417match({expr}, {pat}[, {start}[, {count}]]) *match()* 4418 When {expr} is a |List| then this returns the index of the 4419 first item where {pat} matches. Each item is used as a 4420 String, |Lists| and |Dictionaries| are used as echoed. 4421 Otherwise, {expr} is used as a String. The result is a 4422 Number, which gives the index (byte offset) in {expr} where 4423 {pat} matches. 4424 A match at the first character or |List| item returns zero. 4425 If there is no match -1 is returned. 4426 For getting submatches see |matchlist()|. 4427 Example: > 4428 :echo match("testing", "ing") " results in 4 4429 :echo match([1, 'x'], '\a') " results in 1 4430< See |string-match| for how {pat} is used. 4431 *strpbrk()* 4432 Vim doesn't have a strpbrk() function. But you can do: > 4433 :let sepidx = match(line, '[.,;: \t]') 4434< *strcasestr()* 4435 Vim doesn't have a strcasestr() function. But you can add 4436 "\c" to the pattern to ignore case: > 4437 :let idx = match(haystack, '\cneedle') 4438< 4439 If {start} is given, the search starts from byte index 4440 {start} in a String or item {start} in a |List|. 4441 The result, however, is still the index counted from the 4442 first character/item. Example: > 4443 :echo match("testing", "ing", 2) 4444< result is again "4". > 4445 :echo match("testing", "ing", 4) 4446< result is again "4". > 4447 :echo match("testing", "t", 2) 4448< result is "3". 4449 For a String, if {start} > 0 then it is like the string starts 4450 {start} bytes later, thus "^" will match at {start}. Except 4451 when {count} is given, then it's like matches before the 4452 {start} byte are ignored (this is a bit complicated to keep it 4453 backwards compatible). 4454 For a String, if {start} < 0, it will be set to 0. For a list 4455 the index is counted from the end. 4456 If {start} is out of range ({start} > strlen({expr}) for a 4457 String or {start} > len({expr}) for a |List|) -1 is returned. 4458 4459 When {count} is given use the {count}'th match. When a match 4460 is found in a String the search for the next one starts one 4461 character further. Thus this example results in 1: > 4462 echo match("testing", "..", 0, 2) 4463< In a |List| the search continues in the next item. 4464 Note that when {count} is added the way {start} works changes, 4465 see above. 4466 4467 See |pattern| for the patterns that are accepted. 4468 The 'ignorecase' option is used to set the ignore-caseness of 4469 the pattern. 'smartcase' is NOT used. The matching is always 4470 done like 'magic' is set and 'cpoptions' is empty. 4471 4472 *matchadd()* *E798* *E799* *E801* 4473matchadd({group}, {pattern}[, {priority}[, {id} [, {dict}]]]) 4474 Defines a pattern to be highlighted in the current window (a 4475 "match"). It will be highlighted with {group}. Returns an 4476 identification number (ID), which can be used to delete the 4477 match using |matchdelete()|. 4478 Matching is case sensitive and magic, unless case sensitivity 4479 or magicness are explicitly overridden in {pattern}. The 4480 'magic', 'smartcase' and 'ignorecase' options are not used. 4481 The "Conceal" value is special, it causes the match to be 4482 concealed. 4483 4484 The optional {priority} argument assigns a priority to the 4485 match. A match with a high priority will have its 4486 highlighting overrule that of a match with a lower priority. 4487 A priority is specified as an integer (negative numbers are no 4488 exception). If the {priority} argument is not specified, the 4489 default priority is 10. The priority of 'hlsearch' is zero, 4490 hence all matches with a priority greater than zero will 4491 overrule it. Syntax highlighting (see 'syntax') is a separate 4492 mechanism, and regardless of the chosen priority a match will 4493 always overrule syntax highlighting. 4494 4495 The optional {id} argument allows the request for a specific 4496 match ID. If a specified ID is already taken, an error 4497 message will appear and the match will not be added. An ID 4498 is specified as a positive integer (zero excluded). IDs 1, 2 4499 and 3 are reserved for |:match|, |:2match| and |:3match|, 4500 respectively. If the {id} argument is not specified or -1, 4501 |matchadd()| automatically chooses a free ID. 4502 4503 The optional {dict} argmument allows for further custom 4504 values. Currently this is used to specify a match specifc 4505 conceal character that will be shown for |hl-Conceal| 4506 highlighted matches. The dict can have the following members: 4507 4508 conceal Special character to show instead of the 4509 match (only for |hl-Conceal| highlighed 4510 matches, see |:syn-cchar|) 4511 4512 The number of matches is not limited, as it is the case with 4513 the |:match| commands. 4514 4515 Example: > 4516 :highlight MyGroup ctermbg=green guibg=green 4517 :let m = matchadd("MyGroup", "TODO") 4518< Deletion of the pattern: > 4519 :call matchdelete(m) 4520 4521< A list of matches defined by |matchadd()| and |:match| are 4522 available from |getmatches()|. All matches can be deleted in 4523 one operation by |clearmatches()|. 4524 4525matchaddpos({group}, {pos}[, {priority}[, {id}[, {dict}]]]) *matchaddpos()* 4526 Same as |matchadd()|, but requires a list of positions {pos} 4527 instead of a pattern. This command is faster than |matchadd()| 4528 because it does not require to handle regular expressions and 4529 sets buffer line boundaries to redraw screen. It is supposed 4530 to be used when fast match additions and deletions are 4531 required, for example to highlight matching parentheses. 4532 4533 The list {pos} can contain one of these items: 4534 - A number. This whole line will be highlighted. The first 4535 line has number 1. 4536 - A list with one number, e.g., [23]. The whole line with this 4537 number will be highlighted. 4538 - A list with two numbers, e.g., [23, 11]. The first number is 4539 the line number, the second one is the column number (first 4540 column is 1, the value must correspond to the byte index as 4541 |col()| would return). The character at this position will 4542 be highlighted. 4543 - A list with three numbers, e.g., [23, 11, 3]. As above, but 4544 the third number gives the length of the highlight in bytes. 4545 4546 The maximum number of positions is 8. 4547 4548 Example: > 4549 :highlight MyGroup ctermbg=green guibg=green 4550 :let m = matchaddpos("MyGroup", [[23, 24], 34]) 4551< Deletion of the pattern: > 4552 :call matchdelete(m) 4553 4554< Matches added by |matchaddpos()| are returned by 4555 |getmatches()| with an entry "pos1", "pos2", etc., with the 4556 value a list like the {pos} item. 4557 These matches cannot be set via |setmatches()|, however they 4558 can still be deleted by |clearmatches()|. 4559 4560matcharg({nr}) *matcharg()* 4561 Selects the {nr} match item, as set with a |:match|, 4562 |:2match| or |:3match| command. 4563 Return a |List| with two elements: 4564 The name of the highlight group used 4565 The pattern used. 4566 When {nr} is not 1, 2 or 3 returns an empty |List|. 4567 When there is no match item set returns ['', '']. 4568 This is useful to save and restore a |:match|. 4569 Highlighting matches using the |:match| commands are limited 4570 to three matches. |matchadd()| does not have this limitation. 4571 4572matchdelete({id}) *matchdelete()* *E802* *E803* 4573 Deletes a match with ID {id} previously defined by |matchadd()| 4574 or one of the |:match| commands. Returns 0 if successful, 4575 otherwise -1. See example for |matchadd()|. All matches can 4576 be deleted in one operation by |clearmatches()|. 4577 4578matchend({expr}, {pat}[, {start}[, {count}]]) *matchend()* 4579 Same as |match()|, but return the index of first character 4580 after the match. Example: > 4581 :echo matchend("testing", "ing") 4582< results in "7". 4583 *strspn()* *strcspn()* 4584 Vim doesn't have a strspn() or strcspn() function, but you can 4585 do it with matchend(): > 4586 :let span = matchend(line, '[a-zA-Z]') 4587 :let span = matchend(line, '[^a-zA-Z]') 4588< Except that -1 is returned when there are no matches. 4589 4590 The {start}, if given, has the same meaning as for |match()|. > 4591 :echo matchend("testing", "ing", 2) 4592< results in "7". > 4593 :echo matchend("testing", "ing", 5) 4594< result is "-1". 4595 When {expr} is a |List| the result is equal to |match()|. 4596 4597matchlist({expr}, {pat}[, {start}[, {count}]]) *matchlist()* 4598 Same as |match()|, but return a |List|. The first item in the 4599 list is the matched string, same as what matchstr() would 4600 return. Following items are submatches, like "\1", "\2", etc. 4601 in |:substitute|. When an optional submatch didn't match an 4602 empty string is used. Example: > 4603 echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)') 4604< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', ''] 4605 When there is no match an empty list is returned. 4606 4607matchstr({expr}, {pat}[, {start}[, {count}]]) *matchstr()* 4608 Same as |match()|, but return the matched string. Example: > 4609 :echo matchstr("testing", "ing") 4610< results in "ing". 4611 When there is no match "" is returned. 4612 The {start}, if given, has the same meaning as for |match()|. > 4613 :echo matchstr("testing", "ing", 2) 4614< results in "ing". > 4615 :echo matchstr("testing", "ing", 5) 4616< result is "". 4617 When {expr} is a |List| then the matching item is returned. 4618 The type isn't changed, it's not necessarily a String. 4619 4620 *max()* 4621max({list}) Return the maximum value of all items in {list}. 4622 If {list} is not a list or one of the items in {list} cannot 4623 be used as a Number this results in an error. 4624 An empty |List| results in zero. 4625 4626 *min()* 4627min({list}) Return the minimum value of all items in {list}. 4628 If {list} is not a list or one of the items in {list} cannot 4629 be used as a Number this results in an error. 4630 An empty |List| results in zero. 4631 4632 *mkdir()* *E739* 4633mkdir({name} [, {path} [, {prot}]]) 4634 Create directory {name}. 4635 If {path} is "p" then intermediate directories are created as 4636 necessary. Otherwise it must be "". 4637 If {prot} is given it is used to set the protection bits of 4638 the new directory. The default is 0755 (rwxr-xr-x: r/w for 4639 the user readable for others). Use 0700 to make it unreadable 4640 for others. This is only used for the last part of {name}. 4641 Thus if you create /tmp/foo/bar then /tmp/foo will be created 4642 with 0755. 4643 Example: > 4644 :call mkdir($HOME . "/tmp/foo/bar", "p", 0700) 4645< This function is not available in the |sandbox|. 4646 Not available on all systems. To check use: > 4647 :if exists("*mkdir") 4648< 4649 *mode()* 4650mode([expr]) Return a string that indicates the current mode. 4651 If [expr] is supplied and it evaluates to a non-zero Number or 4652 a non-empty String (|non-zero-arg|), then the full mode is 4653 returned, otherwise only the first letter is returned. Note 4654 that " " and "0" are also non-empty strings. 4655 4656 n Normal 4657 no Operator-pending 4658 v Visual by character 4659 V Visual by line 4660 CTRL-V Visual blockwise 4661 s Select by character 4662 S Select by line 4663 CTRL-S Select blockwise 4664 i Insert 4665 R Replace |R| 4666 Rv Virtual Replace |gR| 4667 c Command-line 4668 cv Vim Ex mode |gQ| 4669 ce Normal Ex mode |Q| 4670 r Hit-enter prompt 4671 rm The -- more -- prompt 4672 r? A |:confirm| query of some sort 4673 ! Shell or external command is executing 4674 This is useful in the 'statusline' option or when used 4675 with |remote_expr()| In most other places it always returns 4676 "c" or "n". 4677 Also see |visualmode()|. 4678 4679mzeval({expr}) *mzeval()* 4680 Evaluate MzScheme expression {expr} and return its result 4681 converted to Vim data structures. 4682 Numbers and strings are returned as they are. 4683 Pairs (including lists and improper lists) and vectors are 4684 returned as Vim |Lists|. 4685 Hash tables are represented as Vim |Dictionary| type with keys 4686 converted to strings. 4687 All other types are converted to string with display function. 4688 Examples: > 4689 :mz (define l (list 1 2 3)) 4690 :mz (define h (make-hash)) (hash-set! h "list" l) 4691 :echo mzeval("l") 4692 :echo mzeval("h") 4693< 4694 {only available when compiled with the |+mzscheme| feature} 4695 4696nextnonblank({lnum}) *nextnonblank()* 4697 Return the line number of the first line at or below {lnum} 4698 that is not blank. Example: > 4699 if getline(nextnonblank(1)) =~ "Java" 4700< When {lnum} is invalid or there is no non-blank line at or 4701 below it, zero is returned. 4702 See also |prevnonblank()|. 4703 4704nr2char({expr}[, {utf8}]) *nr2char()* 4705 Return a string with a single character, which has the number 4706 value {expr}. Examples: > 4707 nr2char(64) returns "@" 4708 nr2char(32) returns " " 4709< When {utf8} is omitted or zero, the current 'encoding' is used. 4710 Example for "utf-8": > 4711 nr2char(300) returns I with bow character 4712< With {utf8} set to 1, always return utf-8 characters. 4713 Note that a NUL character in the file is specified with 4714 nr2char(10), because NULs are represented with newline 4715 characters. nr2char(0) is a real NUL and terminates the 4716 string, thus results in an empty string. 4717 4718or({expr}, {expr}) *or()* 4719 Bitwise OR on the two arguments. The arguments are converted 4720 to a number. A List, Dict or Float argument causes an error. 4721 Example: > 4722 :let bits = or(bits, 0x80) 4723 4724 4725pathshorten({expr}) *pathshorten()* 4726 Shorten directory names in the path {expr} and return the 4727 result. The tail, the file name, is kept as-is. The other 4728 components in the path are reduced to single letters. Leading 4729 '~' and '.' characters are kept. Example: > 4730 :echo pathshorten('~/.vim/autoload/myfile.vim') 4731< ~/.v/a/myfile.vim ~ 4732 It doesn't matter if the path exists or not. 4733 4734pow({x}, {y}) *pow()* 4735 Return the power of {x} to the exponent {y} as a |Float|. 4736 {x} and {y} must evaluate to a |Float| or a |Number|. 4737 Examples: > 4738 :echo pow(3, 3) 4739< 27.0 > 4740 :echo pow(2, 16) 4741< 65536.0 > 4742 :echo pow(32, 0.20) 4743< 2.0 4744 {only available when compiled with the |+float| feature} 4745 4746prevnonblank({lnum}) *prevnonblank()* 4747 Return the line number of the first line at or above {lnum} 4748 that is not blank. Example: > 4749 let ind = indent(prevnonblank(v:lnum - 1)) 4750< When {lnum} is invalid or there is no non-blank line at or 4751 above it, zero is returned. 4752 Also see |nextnonblank()|. 4753 4754 4755printf({fmt}, {expr1} ...) *printf()* 4756 Return a String with {fmt}, where "%" items are replaced by 4757 the formatted form of their respective arguments. Example: > 4758 printf("%4d: E%d %.30s", lnum, errno, msg) 4759< May result in: 4760 " 99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~ 4761 4762 Often used items are: 4763 %s string 4764 %6S string right-aligned in 6 display cells 4765 %6s string right-aligned in 6 bytes 4766 %.9s string truncated to 9 bytes 4767 %c single byte 4768 %d decimal number 4769 %5d decimal number padded with spaces to 5 characters 4770 %x hex number 4771 %04x hex number padded with zeros to at least 4 characters 4772 %X hex number using upper case letters 4773 %o octal number 4774 %f floating point number in the form 123.456 4775 %e floating point number in the form 1.234e3 4776 %E floating point number in the form 1.234E3 4777 %g floating point number, as %f or %e depending on value 4778 %G floating point number, as %f or %E depending on value 4779 %% the % character itself 4780 4781 Conversion specifications start with '%' and end with the 4782 conversion type. All other characters are copied unchanged to 4783 the result. 4784 4785 The "%" starts a conversion specification. The following 4786 arguments appear in sequence: 4787 4788 % [flags] [field-width] [.precision] type 4789 4790 flags 4791 Zero or more of the following flags: 4792 4793 # The value should be converted to an "alternate 4794 form". For c, d, and s conversions, this option 4795 has no effect. For o conversions, the precision 4796 of the number is increased to force the first 4797 character of the output string to a zero (except 4798 if a zero value is printed with an explicit 4799 precision of zero). 4800 For x and X conversions, a non-zero result has 4801 the string "0x" (or "0X" for X conversions) 4802 prepended to it. 4803 4804 0 (zero) Zero padding. For all conversions the converted 4805 value is padded on the left with zeros rather 4806 than blanks. If a precision is given with a 4807 numeric conversion (d, o, x, and X), the 0 flag 4808 is ignored. 4809 4810 - A negative field width flag; the converted value 4811 is to be left adjusted on the field boundary. 4812 The converted value is padded on the right with 4813 blanks, rather than on the left with blanks or 4814 zeros. A - overrides a 0 if both are given. 4815 4816 ' ' (space) A blank should be left before a positive 4817 number produced by a signed conversion (d). 4818 4819 + A sign must always be placed before a number 4820 produced by a signed conversion. A + overrides 4821 a space if both are used. 4822 4823 field-width 4824 An optional decimal digit string specifying a minimum 4825 field width. If the converted value has fewer bytes 4826 than the field width, it will be padded with spaces on 4827 the left (or right, if the left-adjustment flag has 4828 been given) to fill out the field width. 4829 4830 .precision 4831 An optional precision, in the form of a period '.' 4832 followed by an optional digit string. If the digit 4833 string is omitted, the precision is taken as zero. 4834 This gives the minimum number of digits to appear for 4835 d, o, x, and X conversions, or the maximum number of 4836 bytes to be printed from a string for s conversions. 4837 For floating point it is the number of digits after 4838 the decimal point. 4839 4840 type 4841 A character that specifies the type of conversion to 4842 be applied, see below. 4843 4844 A field width or precision, or both, may be indicated by an 4845 asterisk '*' instead of a digit string. In this case, a 4846 Number argument supplies the field width or precision. A 4847 negative field width is treated as a left adjustment flag 4848 followed by a positive field width; a negative precision is 4849 treated as though it were missing. Example: > 4850 :echo printf("%d: %.*s", nr, width, line) 4851< This limits the length of the text used from "line" to 4852 "width" bytes. 4853 4854 The conversion specifiers and their meanings are: 4855 4856 *printf-d* *printf-o* *printf-x* *printf-X* 4857 doxX The Number argument is converted to signed decimal 4858 (d), unsigned octal (o), or unsigned hexadecimal (x 4859 and X) notation. The letters "abcdef" are used for 4860 x conversions; the letters "ABCDEF" are used for X 4861 conversions. 4862 The precision, if any, gives the minimum number of 4863 digits that must appear; if the converted value 4864 requires fewer digits, it is padded on the left with 4865 zeros. 4866 In no case does a non-existent or small field width 4867 cause truncation of a numeric field; if the result of 4868 a conversion is wider than the field width, the field 4869 is expanded to contain the conversion result. 4870 4871 *printf-c* 4872 c The Number argument is converted to a byte, and the 4873 resulting character is written. 4874 4875 *printf-s* 4876 s The text of the String argument is used. If a 4877 precision is specified, no more bytes than the number 4878 specified are used. 4879 *printf-S* 4880 S The text of the String argument is used. If a 4881 precision is specified, no more display cells than the 4882 number specified are used. Without the |+multi_byte| 4883 feature works just like 's'. 4884 4885 *printf-f* *E807* 4886 f The Float argument is converted into a string of the 4887 form 123.456. The precision specifies the number of 4888 digits after the decimal point. When the precision is 4889 zero the decimal point is omitted. When the precision 4890 is not specified 6 is used. A really big number 4891 (out of range or dividing by zero) results in "inf". 4892 "0.0 / 0.0" results in "nan". 4893 Example: > 4894 echo printf("%.2f", 12.115) 4895< 12.12 4896 Note that roundoff depends on the system libraries. 4897 Use |round()| when in doubt. 4898 4899 *printf-e* *printf-E* 4900 e E The Float argument is converted into a string of the 4901 form 1.234e+03 or 1.234E+03 when using 'E'. The 4902 precision specifies the number of digits after the 4903 decimal point, like with 'f'. 4904 4905 *printf-g* *printf-G* 4906 g G The Float argument is converted like with 'f' if the 4907 value is between 0.001 (inclusive) and 10000000.0 4908 (exclusive). Otherwise 'e' is used for 'g' and 'E' 4909 for 'G'. When no precision is specified superfluous 4910 zeroes and '+' signs are removed, except for the zero 4911 immediately after the decimal point. Thus 10000000.0 4912 results in 1.0e7. 4913 4914 *printf-%* 4915 % A '%' is written. No argument is converted. The 4916 complete conversion specification is "%%". 4917 4918 When a Number argument is expected a String argument is also 4919 accepted and automatically converted. 4920 When a Float or String argument is expected a Number argument 4921 is also accepted and automatically converted. 4922 Any other argument type results in an error message. 4923 4924 *E766* *E767* 4925 The number of {exprN} arguments must exactly match the number 4926 of "%" items. If there are not sufficient or too many 4927 arguments an error is given. Up to 18 arguments can be used. 4928 4929 4930pumvisible() *pumvisible()* 4931 Returns non-zero when the popup menu is visible, zero 4932 otherwise. See |ins-completion-menu|. 4933 This can be used to avoid some things that would remove the 4934 popup menu. 4935 4936 *E860* 4937py3eval({expr}) *py3eval()* 4938 Evaluate Python expression {expr} and return its result 4939 converted to Vim data structures. 4940 Numbers and strings are returned as they are (strings are 4941 copied though, Unicode strings are additionally converted to 4942 'encoding'). 4943 Lists are represented as Vim |List| type. 4944 Dictionaries are represented as Vim |Dictionary| type with 4945 keys converted to strings. 4946 {only available when compiled with the |+python3| feature} 4947 4948 *E858* *E859* 4949pyeval({expr}) *pyeval()* 4950 Evaluate Python expression {expr} and return its result 4951 converted to Vim data structures. 4952 Numbers and strings are returned as they are (strings are 4953 copied though). 4954 Lists are represented as Vim |List| type. 4955 Dictionaries are represented as Vim |Dictionary| type, 4956 non-string keys result in error. 4957 {only available when compiled with the |+python| feature} 4958 4959 *E726* *E727* 4960range({expr} [, {max} [, {stride}]]) *range()* 4961 Returns a |List| with Numbers: 4962 - If only {expr} is specified: [0, 1, ..., {expr} - 1] 4963 - If {max} is specified: [{expr}, {expr} + 1, ..., {max}] 4964 - If {stride} is specified: [{expr}, {expr} + {stride}, ..., 4965 {max}] (increasing {expr} with {stride} each time, not 4966 producing a value past {max}). 4967 When the maximum is one before the start the result is an 4968 empty list. When the maximum is more than one before the 4969 start this is an error. 4970 Examples: > 4971 range(4) " [0, 1, 2, 3] 4972 range(2, 4) " [2, 3, 4] 4973 range(2, 9, 3) " [2, 5, 8] 4974 range(2, -2, -1) " [2, 1, 0, -1, -2] 4975 range(0) " [] 4976 range(2, 0) " error! 4977< 4978 *readfile()* 4979readfile({fname} [, {binary} [, {max}]]) 4980 Read file {fname} and return a |List|, each line of the file 4981 as an item. Lines broken at NL characters. Macintosh files 4982 separated with CR will result in a single long line (unless a 4983 NL appears somewhere). 4984 All NUL characters are replaced with a NL character. 4985 When {binary} contains "b" binary mode is used: 4986 - When the last line ends in a NL an extra empty list item is 4987 added. 4988 - No CR characters are removed. 4989 Otherwise: 4990 - CR characters that appear before a NL are removed. 4991 - Whether the last line ends in a NL or not does not matter. 4992 - When 'encoding' is Unicode any UTF-8 byte order mark is 4993 removed from the text. 4994 When {max} is given this specifies the maximum number of lines 4995 to be read. Useful if you only want to check the first ten 4996 lines of a file: > 4997 :for line in readfile(fname, '', 10) 4998 : if line =~ 'Date' | echo line | endif 4999 :endfor 5000< When {max} is negative -{max} lines from the end of the file 5001 are returned, or as many as there are. 5002 When {max} is zero the result is an empty list. 5003 Note that without {max} the whole file is read into memory. 5004 Also note that there is no recognition of encoding. Read a 5005 file into a buffer if you need to. 5006 When the file can't be opened an error message is given and 5007 the result is an empty list. 5008 Also see |writefile()|. 5009 5010reltime([{start} [, {end}]]) *reltime()* 5011 Return an item that represents a time value. The format of 5012 the item depends on the system. It can be passed to 5013 |reltimestr()| to convert it to a string. 5014 Without an argument it returns the current time. 5015 With one argument is returns the time passed since the time 5016 specified in the argument. 5017 With two arguments it returns the time passed between {start} 5018 and {end}. 5019 The {start} and {end} arguments must be values returned by 5020 reltime(). 5021 {only available when compiled with the |+reltime| feature} 5022 5023reltimestr({time}) *reltimestr()* 5024 Return a String that represents the time value of {time}. 5025 This is the number of seconds, a dot and the number of 5026 microseconds. Example: > 5027 let start = reltime() 5028 call MyFunction() 5029 echo reltimestr(reltime(start)) 5030< Note that overhead for the commands will be added to the time. 5031 The accuracy depends on the system. 5032 Leading spaces are used to make the string align nicely. You 5033 can use split() to remove it. > 5034 echo split(reltimestr(reltime(start)))[0] 5035< Also see |profiling|. 5036 {only available when compiled with the |+reltime| feature} 5037 5038 *remote_expr()* *E449* 5039remote_expr({server}, {string} [, {idvar}]) 5040 Send the {string} to {server}. The string is sent as an 5041 expression and the result is returned after evaluation. 5042 The result must be a String or a |List|. A |List| is turned 5043 into a String by joining the items with a line break in 5044 between (not at the end), like with join(expr, "\n"). 5045 If {idvar} is present, it is taken as the name of a 5046 variable and a {serverid} for later use with 5047 remote_read() is stored there. 5048 See also |clientserver| |RemoteReply|. 5049 This function is not available in the |sandbox|. 5050 {only available when compiled with the |+clientserver| feature} 5051 Note: Any errors will cause a local error message to be issued 5052 and the result will be the empty string. 5053 Examples: > 5054 :echo remote_expr("gvim", "2+2") 5055 :echo remote_expr("gvim1", "b:current_syntax") 5056< 5057 5058remote_foreground({server}) *remote_foreground()* 5059 Move the Vim server with the name {server} to the foreground. 5060 This works like: > 5061 remote_expr({server}, "foreground()") 5062< Except that on Win32 systems the client does the work, to work 5063 around the problem that the OS doesn't always allow the server 5064 to bring itself to the foreground. 5065 Note: This does not restore the window if it was minimized, 5066 like foreground() does. 5067 This function is not available in the |sandbox|. 5068 {only in the Win32, Athena, Motif and GTK GUI versions and the 5069 Win32 console version} 5070 5071 5072remote_peek({serverid} [, {retvar}]) *remote_peek()* 5073 Returns a positive number if there are available strings 5074 from {serverid}. Copies any reply string into the variable 5075 {retvar} if specified. {retvar} must be a string with the 5076 name of a variable. 5077 Returns zero if none are available. 5078 Returns -1 if something is wrong. 5079 See also |clientserver|. 5080 This function is not available in the |sandbox|. 5081 {only available when compiled with the |+clientserver| feature} 5082 Examples: > 5083 :let repl = "" 5084 :echo "PEEK: ".remote_peek(id, "repl").": ".repl 5085 5086remote_read({serverid}) *remote_read()* 5087 Return the oldest available reply from {serverid} and consume 5088 it. It blocks until a reply is available. 5089 See also |clientserver|. 5090 This function is not available in the |sandbox|. 5091 {only available when compiled with the |+clientserver| feature} 5092 Example: > 5093 :echo remote_read(id) 5094< 5095 *remote_send()* *E241* 5096remote_send({server}, {string} [, {idvar}]) 5097 Send the {string} to {server}. The string is sent as input 5098 keys and the function returns immediately. At the Vim server 5099 the keys are not mapped |:map|. 5100 If {idvar} is present, it is taken as the name of a variable 5101 and a {serverid} for later use with remote_read() is stored 5102 there. 5103 See also |clientserver| |RemoteReply|. 5104 This function is not available in the |sandbox|. 5105 {only available when compiled with the |+clientserver| feature} 5106 Note: Any errors will be reported in the server and may mess 5107 up the display. 5108 Examples: > 5109 :echo remote_send("gvim", ":DropAndReply ".file, "serverid"). 5110 \ remote_read(serverid) 5111 5112 :autocmd NONE RemoteReply * 5113 \ echo remote_read(expand("<amatch>")) 5114 :echo remote_send("gvim", ":sleep 10 | echo ". 5115 \ 'server2client(expand("<client>"), "HELLO")<CR>') 5116< 5117remove({list}, {idx} [, {end}]) *remove()* 5118 Without {end}: Remove the item at {idx} from |List| {list} and 5119 return the item. 5120 With {end}: Remove items from {idx} to {end} (inclusive) and 5121 return a List with these items. When {idx} points to the same 5122 item as {end} a list with one item is returned. When {end} 5123 points to an item before {idx} this is an error. 5124 See |list-index| for possible values of {idx} and {end}. 5125 Example: > 5126 :echo "last item: " . remove(mylist, -1) 5127 :call remove(mylist, 0, 9) 5128remove({dict}, {key}) 5129 Remove the entry from {dict} with key {key}. Example: > 5130 :echo "removed " . remove(dict, "one") 5131< If there is no {key} in {dict} this is an error. 5132 5133 Use |delete()| to remove a file. 5134 5135rename({from}, {to}) *rename()* 5136 Rename the file by the name {from} to the name {to}. This 5137 should also work to move files across file systems. The 5138 result is a Number, which is 0 if the file was renamed 5139 successfully, and non-zero when the renaming failed. 5140 NOTE: If {to} exists it is overwritten without warning. 5141 This function is not available in the |sandbox|. 5142 5143repeat({expr}, {count}) *repeat()* 5144 Repeat {expr} {count} times and return the concatenated 5145 result. Example: > 5146 :let separator = repeat('-', 80) 5147< When {count} is zero or negative the result is empty. 5148 When {expr} is a |List| the result is {expr} concatenated 5149 {count} times. Example: > 5150 :let longlist = repeat(['a', 'b'], 3) 5151< Results in ['a', 'b', 'a', 'b', 'a', 'b']. 5152 5153 5154resolve({filename}) *resolve()* *E655* 5155 On MS-Windows, when {filename} is a shortcut (a .lnk file), 5156 returns the path the shortcut points to in a simplified form. 5157 On Unix, repeat resolving symbolic links in all path 5158 components of {filename} and return the simplified result. 5159 To cope with link cycles, resolving of symbolic links is 5160 stopped after 100 iterations. 5161 On other systems, return the simplified {filename}. 5162 The simplification step is done as by |simplify()|. 5163 resolve() keeps a leading path component specifying the 5164 current directory (provided the result is still a relative 5165 path name) and also keeps a trailing path separator. 5166 5167 *reverse()* 5168reverse({list}) Reverse the order of items in {list} in-place. Returns 5169 {list}. 5170 If you want a list to remain unmodified make a copy first: > 5171 :let revlist = reverse(copy(mylist)) 5172 5173round({expr}) *round()* 5174 Round off {expr} to the nearest integral value and return it 5175 as a |Float|. If {expr} lies halfway between two integral 5176 values, then use the larger one (away from zero). 5177 {expr} must evaluate to a |Float| or a |Number|. 5178 Examples: > 5179 echo round(0.456) 5180< 0.0 > 5181 echo round(4.5) 5182< 5.0 > 5183 echo round(-4.5) 5184< -5.0 5185 {only available when compiled with the |+float| feature} 5186 5187screenattr(row, col) *screenattr()* 5188 Like screenchar(), but return the attribute. This is a rather 5189 arbitrary number that can only be used to compare to the 5190 attribute at other positions. 5191 5192screenchar(row, col) *screenchar()* 5193 The result is a Number, which is the character at position 5194 [row, col] on the screen. This works for every possible 5195 screen position, also status lines, window separators and the 5196 command line. The top left position is row one, column one 5197 The character excludes composing characters. For double-byte 5198 encodings it may only be the first byte. 5199 This is mainly to be used for testing. 5200 Returns -1 when row or col is out of range. 5201 5202screencol() *screencol()* 5203 The result is a Number, which is the current screen column of 5204 the cursor. The leftmost column has number 1. 5205 This function is mainly used for testing. 5206 5207 Note: Always returns the current screen column, thus if used 5208 in a command (e.g. ":echo screencol()") it will return the 5209 column inside the command line, which is 1 when the command is 5210 executed. To get the cursor position in the file use one of 5211 the following mappings: > 5212 nnoremap <expr> GG ":echom ".screencol()."\n" 5213 nnoremap <silent> GG :echom screencol()<CR> 5214< 5215screenrow() *screenrow()* 5216 The result is a Number, which is the current screen row of the 5217 cursor. The top line has number one. 5218 This function is mainly used for testing. 5219 5220 Note: Same restrictions as with |screencol()|. 5221 5222search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()* 5223 Search for regexp pattern {pattern}. The search starts at the 5224 cursor position (you can use |cursor()| to set it). 5225 5226 When a match has been found its line number is returned. 5227 If there is no match a 0 is returned and the cursor doesn't 5228 move. No error message is given. 5229 5230 {flags} is a String, which can contain these character flags: 5231 'b' search Backward instead of forward 5232 'c' accept a match at the Cursor position 5233 'e' move to the End of the match 5234 'n' do Not move the cursor 5235 'p' return number of matching sub-Pattern (see below) 5236 's' Set the ' mark at the previous location of the cursor 5237 'w' Wrap around the end of the file 5238 'W' don't Wrap around the end of the file 5239 'z' start searching at the cursor column instead of zero 5240 If neither 'w' or 'W' is given, the 'wrapscan' option applies. 5241 5242 If the 's' flag is supplied, the ' mark is set, only if the 5243 cursor is moved. The 's' flag cannot be combined with the 'n' 5244 flag. 5245 5246 'ignorecase', 'smartcase' and 'magic' are used. 5247 5248 When the 'z' flag is not given seaching always starts in 5249 column zero and then matches before the cursor are skipped. 5250 When the 'c' flag is present in 'cpo' the next search starts 5251 after the match. Without the 'c' flag the next search starts 5252 one column further. 5253 5254 When the {stopline} argument is given then the search stops 5255 after searching this line. This is useful to restrict the 5256 search to a range of lines. Examples: > 5257 let match = search('(', 'b', line("w0")) 5258 let end = search('END', '', line("w$")) 5259< When {stopline} is used and it is not zero this also implies 5260 that the search does not wrap around the end of the file. 5261 A zero value is equal to not giving the argument. 5262 5263 When the {timeout} argument is given the search stops when 5264 more than this many milliseconds have passed. Thus when 5265 {timeout} is 500 the search stops after half a second. 5266 The value must not be negative. A zero value is like not 5267 giving the argument. 5268 {only available when compiled with the |+reltime| feature} 5269 5270 *search()-sub-match* 5271 With the 'p' flag the returned value is one more than the 5272 first sub-match in \(\). One if none of them matched but the 5273 whole pattern did match. 5274 To get the column number too use |searchpos()|. 5275 5276 The cursor will be positioned at the match, unless the 'n' 5277 flag is used. 5278 5279 Example (goes over all files in the argument list): > 5280 :let n = 1 5281 :while n <= argc() " loop over all files in arglist 5282 : exe "argument " . n 5283 : " start at the last char in the file and wrap for the 5284 : " first search to find match at start of file 5285 : normal G$ 5286 : let flags = "w" 5287 : while search("foo", flags) > 0 5288 : s/foo/bar/g 5289 : let flags = "W" 5290 : endwhile 5291 : update " write the file if modified 5292 : let n = n + 1 5293 :endwhile 5294< 5295 Example for using some flags: > 5296 :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe') 5297< This will search for the keywords "if", "else", and "endif" 5298 under or after the cursor. Because of the 'p' flag, it 5299 returns 1, 2, or 3 depending on which keyword is found, or 0 5300 if the search fails. With the cursor on the first word of the 5301 line: 5302 if (foo == 0) | let foo = foo + 1 | endif ~ 5303 the function returns 1. Without the 'c' flag, the function 5304 finds the "endif" and returns 3. The same thing happens 5305 without the 'e' flag if the cursor is on the "f" of "if". 5306 The 'n' flag tells the function not to move the cursor. 5307 5308 5309searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()* 5310 Search for the declaration of {name}. 5311 5312 With a non-zero {global} argument it works like |gD|, find 5313 first match in the file. Otherwise it works like |gd|, find 5314 first match in the function. 5315 5316 With a non-zero {thisblock} argument matches in a {} block 5317 that ends before the cursor position are ignored. Avoids 5318 finding variable declarations only valid in another scope. 5319 5320 Moves the cursor to the found match. 5321 Returns zero for success, non-zero for failure. 5322 Example: > 5323 if searchdecl('myvar') == 0 5324 echo getline('.') 5325 endif 5326< 5327 *searchpair()* 5328searchpair({start}, {middle}, {end} [, {flags} [, {skip} 5329 [, {stopline} [, {timeout}]]]]) 5330 Search for the match of a nested start-end pair. This can be 5331 used to find the "endif" that matches an "if", while other 5332 if/endif pairs in between are ignored. 5333 The search starts at the cursor. The default is to search 5334 forward, include 'b' in {flags} to search backward. 5335 If a match is found, the cursor is positioned at it and the 5336 line number is returned. If no match is found 0 or -1 is 5337 returned and the cursor doesn't move. No error message is 5338 given. 5339 5340 {start}, {middle} and {end} are patterns, see |pattern|. They 5341 must not contain \( \) pairs. Use of \%( \) is allowed. When 5342 {middle} is not empty, it is found when searching from either 5343 direction, but only when not in a nested start-end pair. A 5344 typical use is: > 5345 searchpair('\<if\>', '\<else\>', '\<endif\>') 5346< By leaving {middle} empty the "else" is skipped. 5347 5348 {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with 5349 |search()|. Additionally: 5350 'r' Repeat until no more matches found; will find the 5351 outer pair. Implies the 'W' flag. 5352 'm' Return number of matches instead of line number with 5353 the match; will be > 1 when 'r' is used. 5354 Note: it's nearly always a good idea to use the 'W' flag, to 5355 avoid wrapping around the end of the file. 5356 5357 When a match for {start}, {middle} or {end} is found, the 5358 {skip} expression is evaluated with the cursor positioned on 5359 the start of the match. It should return non-zero if this 5360 match is to be skipped. E.g., because it is inside a comment 5361 or a string. 5362 When {skip} is omitted or empty, every match is accepted. 5363 When evaluating {skip} causes an error the search is aborted 5364 and -1 returned. 5365 5366 For {stopline} and {timeout} see |search()|. 5367 5368 The value of 'ignorecase' is used. 'magic' is ignored, the 5369 patterns are used like it's on. 5370 5371 The search starts exactly at the cursor. A match with 5372 {start}, {middle} or {end} at the next character, in the 5373 direction of searching, is the first one found. Example: > 5374 if 1 5375 if 2 5376 endif 2 5377 endif 1 5378< When starting at the "if 2", with the cursor on the "i", and 5379 searching forwards, the "endif 2" is found. When starting on 5380 the character just before the "if 2", the "endif 1" will be 5381 found. That's because the "if 2" will be found first, and 5382 then this is considered to be a nested if/endif from "if 2" to 5383 "endif 2". 5384 When searching backwards and {end} is more than one character, 5385 it may be useful to put "\zs" at the end of the pattern, so 5386 that when the cursor is inside a match with the end it finds 5387 the matching start. 5388 5389 Example, to find the "endif" command in a Vim script: > 5390 5391 :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W', 5392 \ 'getline(".") =~ "^\\s*\""') 5393 5394< The cursor must be at or after the "if" for which a match is 5395 to be found. Note that single-quote strings are used to avoid 5396 having to double the backslashes. The skip expression only 5397 catches comments at the start of a line, not after a command. 5398 Also, a word "en" or "if" halfway a line is considered a 5399 match. 5400 Another example, to search for the matching "{" of a "}": > 5401 5402 :echo searchpair('{', '', '}', 'bW') 5403 5404< This works when the cursor is at or before the "}" for which a 5405 match is to be found. To reject matches that syntax 5406 highlighting recognized as strings: > 5407 5408 :echo searchpair('{', '', '}', 'bW', 5409 \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"') 5410< 5411 *searchpairpos()* 5412searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} 5413 [, {stopline} [, {timeout}]]]]) 5414 Same as |searchpair()|, but returns a |List| with the line and 5415 column position of the match. The first element of the |List| 5416 is the line number and the second element is the byte index of 5417 the column position of the match. If no match is found, 5418 returns [0, 0]. > 5419 5420 :let [lnum,col] = searchpairpos('{', '', '}', 'n') 5421< 5422 See |match-parens| for a bigger and more useful example. 5423 5424searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()* 5425 Same as |search()|, but returns a |List| with the line and 5426 column position of the match. The first element of the |List| 5427 is the line number and the second element is the byte index of 5428 the column position of the match. If no match is found, 5429 returns [0, 0]. 5430 Example: > 5431 :let [lnum, col] = searchpos('mypattern', 'n') 5432 5433< When the 'p' flag is given then there is an extra item with 5434 the sub-pattern match number |search()-sub-match|. Example: > 5435 :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np') 5436< In this example "submatch" is 2 when a lowercase letter is 5437 found |/\l|, 3 when an uppercase letter is found |/\u|. 5438 5439server2client( {clientid}, {string}) *server2client()* 5440 Send a reply string to {clientid}. The most recent {clientid} 5441 that sent a string can be retrieved with expand("<client>"). 5442 {only available when compiled with the |+clientserver| feature} 5443 Note: 5444 This id has to be stored before the next command can be 5445 received. I.e. before returning from the received command and 5446 before calling any commands that waits for input. 5447 See also |clientserver|. 5448 Example: > 5449 :echo server2client(expand("<client>"), "HELLO") 5450< 5451serverlist() *serverlist()* 5452 Return a list of available server names, one per line. 5453 When there are no servers or the information is not available 5454 an empty string is returned. See also |clientserver|. 5455 {only available when compiled with the |+clientserver| feature} 5456 Example: > 5457 :echo serverlist() 5458< 5459setbufvar({expr}, {varname}, {val}) *setbufvar()* 5460 Set option or local variable {varname} in buffer {expr} to 5461 {val}. 5462 This also works for a global or local window option, but it 5463 doesn't work for a global or local window variable. 5464 For a local window option the global value is unchanged. 5465 For the use of {expr}, see |bufname()| above. 5466 Note that the variable name without "b:" must be used. 5467 Examples: > 5468 :call setbufvar(1, "&mod", 1) 5469 :call setbufvar("todo", "myvar", "foobar") 5470< This function is not available in the |sandbox|. 5471 5472setcharsearch({dict}) *setcharsearch()* 5473 Set the current character search information to {dict}, 5474 which contains one or more of the following entries: 5475 5476 char character which will be used for a subsequent 5477 |,| or |;| command; an empty string clears the 5478 character search 5479 forward direction of character search; 1 for forward, 5480 0 for backward 5481 until type of character search; 1 for a |t| or |T| 5482 character search, 0 for an |f| or |F| 5483 character search 5484 5485 This can be useful to save/restore a user's character search 5486 from a script: > 5487 :let prevsearch = getcharsearch() 5488 :" Perform a command which clobbers user's search 5489 :call setcharsearch(prevsearch) 5490< Also see |getcharsearch()|. 5491 5492setcmdpos({pos}) *setcmdpos()* 5493 Set the cursor position in the command line to byte position 5494 {pos}. The first position is 1. 5495 Use |getcmdpos()| to obtain the current position. 5496 Only works while editing the command line, thus you must use 5497 |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='. For 5498 |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is 5499 set after the command line is set to the expression. For 5500 |c_CTRL-R_=| it is set after evaluating the expression but 5501 before inserting the resulting text. 5502 When the number is too big the cursor is put at the end of the 5503 line. A number smaller than one has undefined results. 5504 Returns 0 when successful, 1 when not editing the command 5505 line. 5506 5507setline({lnum}, {text}) *setline()* 5508 Set line {lnum} of the current buffer to {text}. To insert 5509 lines use |append()|. 5510 {lnum} is used like with |getline()|. 5511 When {lnum} is just below the last line the {text} will be 5512 added as a new line. 5513 If this succeeds, 0 is returned. If this fails (most likely 5514 because {lnum} is invalid) 1 is returned. Example: > 5515 :call setline(5, strftime("%c")) 5516< When {text} is a |List| then line {lnum} and following lines 5517 will be set to the items in the list. Example: > 5518 :call setline(5, ['aaa', 'bbb', 'ccc']) 5519< This is equivalent to: > 5520 :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']] 5521 : call setline(n, l) 5522 :endfor 5523< Note: The '[ and '] marks are not set. 5524 5525setloclist({nr}, {list} [, {action}]) *setloclist()* 5526 Create or replace or add to the location list for window {nr}. 5527 When {nr} is zero the current window is used. For a location 5528 list window, the displayed location list is modified. For an 5529 invalid window number {nr}, -1 is returned. 5530 Otherwise, same as |setqflist()|. 5531 Also see |location-list|. 5532 5533setmatches({list}) *setmatches()* 5534 Restores a list of matches saved by |getmatches()|. Returns 0 5535 if successful, otherwise -1. All current matches are cleared 5536 before the list is restored. See example for |getmatches()|. 5537 5538 *setpos()* 5539setpos({expr}, {list}) 5540 Set the position for {expr}. Possible values: 5541 . the cursor 5542 'x mark x 5543 5544 {list} must be a |List| with four or five numbers: 5545 [bufnum, lnum, col, off] 5546 [bufnum, lnum, col, off, curswant] 5547 5548 "bufnum" is the buffer number. Zero can be used for the 5549 current buffer. Setting the cursor is only possible for 5550 the current buffer. To set a mark in another buffer you can 5551 use the |bufnr()| function to turn a file name into a buffer 5552 number. 5553 Does not change the jumplist. 5554 5555 "lnum" and "col" are the position in the buffer. The first 5556 column is 1. Use a zero "lnum" to delete a mark. If "col" is 5557 smaller than 1 then 1 is used. 5558 5559 The "off" number is only used when 'virtualedit' is set. Then 5560 it is the offset in screen columns from the start of the 5561 character. E.g., a position within a <Tab> or after the last 5562 character. 5563 5564 The "curswant" number is only used when setting the cursor 5565 position. It sets the preferred column for when moving the 5566 cursor vertically. When the "curswant" number is missing the 5567 preferred column is not set. When it is present and setting a 5568 mark position it is not used. 5569 5570 Note that for '< and '> changing the line number may result in 5571 the marks to be effectively be swapped, so that '< is always 5572 before '>. 5573 5574 Returns 0 when the position could be set, -1 otherwise. 5575 An error message is given if {expr} is invalid. 5576 5577 Also see |getpos()| and |getcurpos()|. 5578 5579 This does not restore the preferred column for moving 5580 vertically; if you set the cursor position with this, |j| and 5581 |k| motions will jump to previous columns! Use |cursor()| to 5582 also set the preferred column. Also see the "curswant" key in 5583 |winrestview()|. 5584 5585 5586setqflist({list} [, {action}]) *setqflist()* 5587 Create or replace or add to the quickfix list using the items 5588 in {list}. Each item in {list} is a dictionary. 5589 Non-dictionary items in {list} are ignored. Each dictionary 5590 item can contain the following entries: 5591 5592 bufnr buffer number; must be the number of a valid 5593 buffer 5594 filename name of a file; only used when "bufnr" is not 5595 present or it is invalid. 5596 lnum line number in the file 5597 pattern search pattern used to locate the error 5598 col column number 5599 vcol when non-zero: "col" is visual column 5600 when zero: "col" is byte index 5601 nr error number 5602 text description of the error 5603 type single-character error type, 'E', 'W', etc. 5604 5605 The "col", "vcol", "nr", "type" and "text" entries are 5606 optional. Either "lnum" or "pattern" entry can be used to 5607 locate a matching error line. 5608 If the "filename" and "bufnr" entries are not present or 5609 neither the "lnum" or "pattern" entries are present, then the 5610 item will not be handled as an error line. 5611 If both "pattern" and "lnum" are present then "pattern" will 5612 be used. 5613 If you supply an empty {list}, the quickfix list will be 5614 cleared. 5615 Note that the list is not exactly the same as what 5616 |getqflist()| returns. 5617 5618 If {action} is set to 'a', then the items from {list} are 5619 added to the existing quickfix list. If there is no existing 5620 list, then a new list is created. If {action} is set to 'r', 5621 then the items from the current quickfix list are replaced 5622 with the items from {list}. If {action} is not present or is 5623 set to ' ', then a new list is created. 5624 5625 Returns zero for success, -1 for failure. 5626 5627 This function can be used to create a quickfix list 5628 independent of the 'errorformat' setting. Use a command like 5629 ":cc 1" to jump to the first position. 5630 5631 5632 *setreg()* 5633setreg({regname}, {value} [,{options}]) 5634 Set the register {regname} to {value}. 5635 {value} may be any value returned by |getreg()|, including 5636 a |List|. 5637 If {options} contains "a" or {regname} is upper case, 5638 then the value is appended. 5639 {options} can also contain a register type specification: 5640 "c" or "v" |characterwise| mode 5641 "l" or "V" |linewise| mode 5642 "b" or "<CTRL-V>" |blockwise-visual| mode 5643 If a number immediately follows "b" or "<CTRL-V>" then this is 5644 used as the width of the selection - if it is not specified 5645 then the width of the block is set to the number of characters 5646 in the longest line (counting a <Tab> as 1 character). 5647 5648 If {options} contains no register settings, then the default 5649 is to use character mode unless {value} ends in a <NL> for 5650 string {value} and linewise mode for list {value}. Blockwise 5651 mode is never selected automatically. 5652 Returns zero for success, non-zero for failure. 5653 5654 *E883* 5655 Note: you may not use |List| containing more than one item to 5656 set search and expression registers. Lists containing no 5657 items act like empty strings. 5658 5659 Examples: > 5660 :call setreg(v:register, @*) 5661 :call setreg('*', @%, 'ac') 5662 :call setreg('a', "1\n2\n3", 'b5') 5663 5664< This example shows using the functions to save and restore a 5665 register (note: you may not reliably restore register value 5666 without using the third argument to |getreg()| as without it 5667 newlines are represented as newlines AND Nul bytes are 5668 represented as newlines as well, see |NL-used-for-Nul|). > 5669 :let var_a = getreg('a', 1, 1) 5670 :let var_amode = getregtype('a') 5671 .... 5672 :call setreg('a', var_a, var_amode) 5673 5674< You can also change the type of a register by appending 5675 nothing: > 5676 :call setreg('a', '', 'al') 5677 5678settabvar({tabnr}, {varname}, {val}) *settabvar()* 5679 Set tab-local variable {varname} to {val} in tab page {tabnr}. 5680 |t:var| 5681 Note that the variable name without "t:" must be used. 5682 Tabs are numbered starting with one. 5683 This function is not available in the |sandbox|. 5684 5685settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()* 5686 Set option or local variable {varname} in window {winnr} to 5687 {val}. 5688 Tabs are numbered starting with one. For the current tabpage 5689 use |setwinvar()|. 5690 When {winnr} is zero the current window is used. 5691 This also works for a global or local buffer option, but it 5692 doesn't work for a global or local buffer variable. 5693 For a local buffer option the global value is unchanged. 5694 Note that the variable name without "w:" must be used. 5695 Examples: > 5696 :call settabwinvar(1, 1, "&list", 0) 5697 :call settabwinvar(3, 2, "myvar", "foobar") 5698< This function is not available in the |sandbox|. 5699 5700setwinvar({nr}, {varname}, {val}) *setwinvar()* 5701 Like |settabwinvar()| for the current tab page. 5702 Examples: > 5703 :call setwinvar(1, "&list", 0) 5704 :call setwinvar(2, "myvar", "foobar") 5705 5706sha256({string}) *sha256()* 5707 Returns a String with 64 hex characters, which is the SHA256 5708 checksum of {string}. 5709 {only available when compiled with the |+cryptv| feature} 5710 5711shellescape({string} [, {special}]) *shellescape()* 5712 Escape {string} for use as a shell command argument. 5713 On MS-Windows and MS-DOS, when 'shellslash' is not set, it 5714 will enclose {string} in double quotes and double all double 5715 quotes within {string}. 5716 For other systems, it will enclose {string} in single quotes 5717 and replace all "'" with "'\''". 5718 When the {special} argument is present and it's a non-zero 5719 Number or a non-empty String (|non-zero-arg|), then special 5720 items such as "!", "%", "#" and "<cword>" will be preceded by 5721 a backslash. This backslash will be removed again by the |:!| 5722 command. 5723 The "!" character will be escaped (again with a |non-zero-arg| 5724 {special}) when 'shell' contains "csh" in the tail. That is 5725 because for csh and tcsh "!" is used for history replacement 5726 even when inside single quotes. 5727 The <NL> character is also escaped. With a |non-zero-arg| 5728 {special} and 'shell' containing "csh" in the tail it's 5729 escaped a second time. 5730 Example of use with a |:!| command: > 5731 :exe '!dir ' . shellescape(expand('<cfile>'), 1) 5732< This results in a directory listing for the file under the 5733 cursor. Example of use with |system()|: > 5734 :call system("chmod +w -- " . shellescape(expand("%"))) 5735< See also |::S|. 5736 5737 5738shiftwidth() *shiftwidth()* 5739 Returns the effective value of 'shiftwidth'. This is the 5740 'shiftwidth' value unless it is zero, in which case it is the 5741 'tabstop' value. To be backwards compatible in indent 5742 plugins, use this: > 5743 if exists('*shiftwidth') 5744 func s:sw() 5745 return shiftwidth() 5746 endfunc 5747 else 5748 func s:sw() 5749 return &sw 5750 endfunc 5751 endif 5752< And then use s:sw() instead of &sw. 5753 5754 5755simplify({filename}) *simplify()* 5756 Simplify the file name as much as possible without changing 5757 the meaning. Shortcuts (on MS-Windows) or symbolic links (on 5758 Unix) are not resolved. If the first path component in 5759 {filename} designates the current directory, this will be 5760 valid for the result as well. A trailing path separator is 5761 not removed either. 5762 Example: > 5763 simplify("./dir/.././/file/") == "./file/" 5764< Note: The combination "dir/.." is only removed if "dir" is 5765 a searchable directory or does not exist. On Unix, it is also 5766 removed when "dir" is a symbolic link within the same 5767 directory. In order to resolve all the involved symbolic 5768 links before simplifying the path name, use |resolve()|. 5769 5770 5771sin({expr}) *sin()* 5772 Return the sine of {expr}, measured in radians, as a |Float|. 5773 {expr} must evaluate to a |Float| or a |Number|. 5774 Examples: > 5775 :echo sin(100) 5776< -0.506366 > 5777 :echo sin(-4.01) 5778< 0.763301 5779 {only available when compiled with the |+float| feature} 5780 5781 5782sinh({expr}) *sinh()* 5783 Return the hyperbolic sine of {expr} as a |Float| in the range 5784 [-inf, inf]. 5785 {expr} must evaluate to a |Float| or a |Number|. 5786 Examples: > 5787 :echo sinh(0.5) 5788< 0.521095 > 5789 :echo sinh(-0.9) 5790< -1.026517 5791 {only available when compiled with the |+float| feature} 5792 5793 5794sort({list} [, {func} [, {dict}]]) *sort()* *E702* 5795 Sort the items in {list} in-place. Returns {list}. 5796 5797 If you want a list to remain unmodified make a copy first: > 5798 :let sortedlist = sort(copy(mylist)) 5799 5800< When {func} is omitted, is empty or zero, then sort() uses the 5801 string representation of each item to sort on. Numbers sort 5802 after Strings, |Lists| after Numbers. For sorting text in the 5803 current buffer use |:sort|. 5804 5805 When {func} is given and it is '1' or 'i' then case is 5806 ignored. 5807 5808 When {func} is given and it is 'n' then all items will be 5809 sorted numerical (Implementation detail: This uses the 5810 strtod() function to parse numbers, Strings, Lists, Dicts and 5811 Funcrefs will be considered as being 0). 5812 5813 When {func} is given and it is 'N' then all items will be 5814 sorted numerical. This is like 'n' but a string containing 5815 digits will be used as the number they represent. 5816 5817 When {func} is a |Funcref| or a function name, this function 5818 is called to compare items. The function is invoked with two 5819 items as argument and must return zero if they are equal, 1 or 5820 bigger if the first one sorts after the second one, -1 or 5821 smaller if the first one sorts before the second one. 5822 5823 {dict} is for functions with the "dict" attribute. It will be 5824 used to set the local variable "self". |Dictionary-function| 5825 5826 The sort is stable, items which compare equal (as number or as 5827 string) will keep their relative position. E.g., when sorting 5828 on numbers, text strings will sort next to each other, in the 5829 same order as they were originally. 5830 5831 Also see |uniq()|. 5832 5833 Example: > 5834 func MyCompare(i1, i2) 5835 return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1 5836 endfunc 5837 let sortedlist = sort(mylist, "MyCompare") 5838< A shorter compare version for this specific simple case, which 5839 ignores overflow: > 5840 func MyCompare(i1, i2) 5841 return a:i1 - a:i2 5842 endfunc 5843< 5844 *soundfold()* 5845soundfold({word}) 5846 Return the sound-folded equivalent of {word}. Uses the first 5847 language in 'spelllang' for the current window that supports 5848 soundfolding. 'spell' must be set. When no sound folding is 5849 possible the {word} is returned unmodified. 5850 This can be used for making spelling suggestions. Note that 5851 the method can be quite slow. 5852 5853 *spellbadword()* 5854spellbadword([{sentence}]) 5855 Without argument: The result is the badly spelled word under 5856 or after the cursor. The cursor is moved to the start of the 5857 bad word. When no bad word is found in the cursor line the 5858 result is an empty string and the cursor doesn't move. 5859 5860 With argument: The result is the first word in {sentence} that 5861 is badly spelled. If there are no spelling mistakes the 5862 result is an empty string. 5863 5864 The return value is a list with two items: 5865 - The badly spelled word or an empty string. 5866 - The type of the spelling error: 5867 "bad" spelling mistake 5868 "rare" rare word 5869 "local" word only valid in another region 5870 "caps" word should start with Capital 5871 Example: > 5872 echo spellbadword("the quik brown fox") 5873< ['quik', 'bad'] ~ 5874 5875 The spelling information for the current window is used. The 5876 'spell' option must be set and the value of 'spelllang' is 5877 used. 5878 5879 *spellsuggest()* 5880spellsuggest({word} [, {max} [, {capital}]]) 5881 Return a |List| with spelling suggestions to replace {word}. 5882 When {max} is given up to this number of suggestions are 5883 returned. Otherwise up to 25 suggestions are returned. 5884 5885 When the {capital} argument is given and it's non-zero only 5886 suggestions with a leading capital will be given. Use this 5887 after a match with 'spellcapcheck'. 5888 5889 {word} can be a badly spelled word followed by other text. 5890 This allows for joining two words that were split. The 5891 suggestions also include the following text, thus you can 5892 replace a line. 5893 5894 {word} may also be a good word. Similar words will then be 5895 returned. {word} itself is not included in the suggestions, 5896 although it may appear capitalized. 5897 5898 The spelling information for the current window is used. The 5899 'spell' option must be set and the values of 'spelllang' and 5900 'spellsuggest' are used. 5901 5902 5903split({expr} [, {pattern} [, {keepempty}]]) *split()* 5904 Make a |List| out of {expr}. When {pattern} is omitted or 5905 empty each white-separated sequence of characters becomes an 5906 item. 5907 Otherwise the string is split where {pattern} matches, 5908 removing the matched characters. 'ignorecase' is not used 5909 here, add \c to ignore case. |/\c| 5910 When the first or last item is empty it is omitted, unless the 5911 {keepempty} argument is given and it's non-zero. 5912 Other empty items are kept when {pattern} matches at least one 5913 character or when {keepempty} is non-zero. 5914 Example: > 5915 :let words = split(getline('.'), '\W\+') 5916< To split a string in individual characters: > 5917 :for c in split(mystring, '\zs') 5918< If you want to keep the separator you can also use '\zs' at 5919 the end of the pattern: > 5920 :echo split('abc:def:ghi', ':\zs') 5921< ['abc:', 'def:', 'ghi'] ~ 5922 Splitting a table where the first element can be empty: > 5923 :let items = split(line, ':', 1) 5924< The opposite function is |join()|. 5925 5926 5927sqrt({expr}) *sqrt()* 5928 Return the non-negative square root of Float {expr} as a 5929 |Float|. 5930 {expr} must evaluate to a |Float| or a |Number|. When {expr} 5931 is negative the result is NaN (Not a Number). 5932 Examples: > 5933 :echo sqrt(100) 5934< 10.0 > 5935 :echo sqrt(-4.01) 5936< nan 5937 "nan" may be different, it depends on system libraries. 5938 {only available when compiled with the |+float| feature} 5939 5940 5941str2float( {expr}) *str2float()* 5942 Convert String {expr} to a Float. This mostly works the same 5943 as when using a floating point number in an expression, see 5944 |floating-point-format|. But it's a bit more permissive. 5945 E.g., "1e40" is accepted, while in an expression you need to 5946 write "1.0e40". 5947 Text after the number is silently ignored. 5948 The decimal point is always '.', no matter what the locale is 5949 set to. A comma ends the number: "12,345.67" is converted to 5950 12.0. You can strip out thousands separators with 5951 |substitute()|: > 5952 let f = str2float(substitute(text, ',', '', 'g')) 5953< {only available when compiled with the |+float| feature} 5954 5955 5956str2nr( {expr} [, {base}]) *str2nr()* 5957 Convert string {expr} to a number. 5958 {base} is the conversion base, it can be 8, 10 or 16. 5959 When {base} is omitted base 10 is used. This also means that 5960 a leading zero doesn't cause octal conversion to be used, as 5961 with the default String to Number conversion. 5962 When {base} is 16 a leading "0x" or "0X" is ignored. With a 5963 different base the result will be zero. 5964 Text after the number is silently ignored. 5965 5966 5967strchars({expr} [, {skipcc}]) *strchars()* 5968 The result is a Number, which is the number of characters 5969 in String {expr}. 5970 When {skipcc} is omitted or zero, composing characters are 5971 counted separately. 5972 When {skipcc} set to 1, Composing characters are ignored. 5973 Also see |strlen()|, |strdisplaywidth()| and |strwidth()|. 5974 5975 5976 {skipcc} is only available after 7.4.755. For backward 5977 compatibility, you can define a wrapper function: > 5978 if has("patch-7.4.755") 5979 function s:strchars(str, skipcc) 5980 return strchars(a:str, a:skipcc) 5981 endfunction 5982 else 5983 function s:strchars(str, skipcc) 5984 if a:skipcc 5985 return strlen(substitute(a:str, ".", "x", "g")) 5986 else 5987 return strchars(a:str) 5988 endif 5989 endfunction 5990 endif 5991< 5992 5993strdisplaywidth({expr}[, {col}]) *strdisplaywidth()* 5994 The result is a Number, which is the number of display cells 5995 String {expr} occupies on the screen when it starts at {col}. 5996 When {col} is omitted zero is used. Otherwise it is the 5997 screen column where to start. This matters for Tab 5998 characters. 5999 The option settings of the current window are used. This 6000 matters for anything that's displayed differently, such as 6001 'tabstop' and 'display'. 6002 When {expr} contains characters with East Asian Width Class 6003 Ambiguous, this function's return value depends on 'ambiwidth'. 6004 Also see |strlen()|, |strwidth()| and |strchars()|. 6005 6006strftime({format} [, {time}]) *strftime()* 6007 The result is a String, which is a formatted date and time, as 6008 specified by the {format} string. The given {time} is used, 6009 or the current time if no time is given. The accepted 6010 {format} depends on your system, thus this is not portable! 6011 See the manual page of the C function strftime() for the 6012 format. The maximum length of the result is 80 characters. 6013 See also |localtime()| and |getftime()|. 6014 The language can be changed with the |:language| command. 6015 Examples: > 6016 :echo strftime("%c") Sun Apr 27 11:49:23 1997 6017 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25 6018 :echo strftime("%y%m%d %T") 970427 11:53:55 6019 :echo strftime("%H:%M") 11:55 6020 :echo strftime("%c", getftime("file.c")) 6021 Show mod time of file.c. 6022< Not available on all systems. To check use: > 6023 :if exists("*strftime") 6024 6025stridx({haystack}, {needle} [, {start}]) *stridx()* 6026 The result is a Number, which gives the byte index in 6027 {haystack} of the first occurrence of the String {needle}. 6028 If {start} is specified, the search starts at index {start}. 6029 This can be used to find a second match: > 6030 :let colon1 = stridx(line, ":") 6031 :let colon2 = stridx(line, ":", colon1 + 1) 6032< The search is done case-sensitive. 6033 For pattern searches use |match()|. 6034 -1 is returned if the {needle} does not occur in {haystack}. 6035 See also |strridx()|. 6036 Examples: > 6037 :echo stridx("An Example", "Example") 3 6038 :echo stridx("Starting point", "Start") 0 6039 :echo stridx("Starting point", "start") -1 6040< *strstr()* *strchr()* 6041 stridx() works similar to the C function strstr(). When used 6042 with a single character it works similar to strchr(). 6043 6044 *string()* 6045string({expr}) Return {expr} converted to a String. If {expr} is a Number, 6046 Float, String or a composition of them, then the result can be 6047 parsed back with |eval()|. 6048 {expr} type result ~ 6049 String 'string' 6050 Number 123 6051 Float 123.123456 or 1.123456e8 6052 Funcref function('name') 6053 List [item, item] 6054 Dictionary {key: value, key: value} 6055 Note that in String values the ' character is doubled. 6056 Also see |strtrans()|. 6057 6058 *strlen()* 6059strlen({expr}) The result is a Number, which is the length of the String 6060 {expr} in bytes. 6061 If the argument is a Number it is first converted to a String. 6062 For other types an error is given. 6063 If you want to count the number of multi-byte characters use 6064 |strchars()|. 6065 Also see |len()|, |strdisplaywidth()| and |strwidth()|. 6066 6067strpart({src}, {start}[, {len}]) *strpart()* 6068 The result is a String, which is part of {src}, starting from 6069 byte {start}, with the byte length {len}. 6070 When non-existing bytes are included, this doesn't result in 6071 an error, the bytes are simply omitted. 6072 If {len} is missing, the copy continues from {start} till the 6073 end of the {src}. > 6074 strpart("abcdefg", 3, 2) == "de" 6075 strpart("abcdefg", -2, 4) == "ab" 6076 strpart("abcdefg", 5, 4) == "fg" 6077 strpart("abcdefg", 3) == "defg" 6078< Note: To get the first character, {start} must be 0. For 6079 example, to get three bytes under and after the cursor: > 6080 strpart(getline("."), col(".") - 1, 3) 6081< 6082strridx({haystack}, {needle} [, {start}]) *strridx()* 6083 The result is a Number, which gives the byte index in 6084 {haystack} of the last occurrence of the String {needle}. 6085 When {start} is specified, matches beyond this index are 6086 ignored. This can be used to find a match before a previous 6087 match: > 6088 :let lastcomma = strridx(line, ",") 6089 :let comma2 = strridx(line, ",", lastcomma - 1) 6090< The search is done case-sensitive. 6091 For pattern searches use |match()|. 6092 -1 is returned if the {needle} does not occur in {haystack}. 6093 If the {needle} is empty the length of {haystack} is returned. 6094 See also |stridx()|. Examples: > 6095 :echo strridx("an angry armadillo", "an") 3 6096< *strrchr()* 6097 When used with a single character it works similar to the C 6098 function strrchr(). 6099 6100strtrans({expr}) *strtrans()* 6101 The result is a String, which is {expr} with all unprintable 6102 characters translated into printable characters |'isprint'|. 6103 Like they are shown in a window. Example: > 6104 echo strtrans(@a) 6105< This displays a newline in register a as "^@" instead of 6106 starting a new line. 6107 6108strwidth({expr}) *strwidth()* 6109 The result is a Number, which is the number of display cells 6110 String {expr} occupies. A Tab character is counted as one 6111 cell, alternatively use |strdisplaywidth()|. 6112 When {expr} contains characters with East Asian Width Class 6113 Ambiguous, this function's return value depends on 'ambiwidth'. 6114 Also see |strlen()|, |strdisplaywidth()| and |strchars()|. 6115 6116submatch({nr}[, {list}]) *submatch()* 6117 Only for an expression in a |:substitute| command or 6118 substitute() function. 6119 Returns the {nr}'th submatch of the matched text. When {nr} 6120 is 0 the whole matched text is returned. 6121 Note that a NL in the string can stand for a line break of a 6122 multi-line match or a NUL character in the text. 6123 Also see |sub-replace-expression|. 6124 6125 If {list} is present and non-zero then submatch() returns 6126 a list of strings, similar to |getline()| with two arguments. 6127 NL characters in the text represent NUL characters in the 6128 text. 6129 Only returns more than one item for |:substitute|, inside 6130 |substitute()| this list will always contain one or zero 6131 items, since there are no real line breaks. 6132 6133 Example: > 6134 :s/\d\+/\=submatch(0) + 1/ 6135< This finds the first number in the line and adds one to it. 6136 A line break is included as a newline character. 6137 6138substitute({expr}, {pat}, {sub}, {flags}) *substitute()* 6139 The result is a String, which is a copy of {expr}, in which 6140 the first match of {pat} is replaced with {sub}. 6141 When {flags} is "g", all matches of {pat} in {expr} are 6142 replaced. Otherwise {flags} should be "". 6143 6144 This works like the ":substitute" command (without any flags). 6145 But the matching with {pat} is always done like the 'magic' 6146 option is set and 'cpoptions' is empty (to make scripts 6147 portable). 'ignorecase' is still relevant, use |/\c| or |/\C| 6148 if you want to ignore or match case and ignore 'ignorecase'. 6149 'smartcase' is not used. See |string-match| for how {pat} is 6150 used. 6151 6152 A "~" in {sub} is not replaced with the previous {sub}. 6153 Note that some codes in {sub} have a special meaning 6154 |sub-replace-special|. For example, to replace something with 6155 "\n" (two characters), use "\\\\n" or '\\n'. 6156 6157 When {pat} does not match in {expr}, {expr} is returned 6158 unmodified. 6159 6160 Example: > 6161 :let &path = substitute(&path, ",\\=[^,]*$", "", "") 6162< This removes the last component of the 'path' option. > 6163 :echo substitute("testing", ".*", "\\U\\0", "") 6164< results in "TESTING". 6165 6166 When {sub} starts with "\=", the remainder is interpreted as 6167 an expression. See |sub-replace-expression|. Example: > 6168 :echo substitute(s, '%\(\x\x\)', 6169 \ '\=nr2char("0x" . submatch(1))', 'g') 6170 6171synID({lnum}, {col}, {trans}) *synID()* 6172 The result is a Number, which is the syntax ID at the position 6173 {lnum} and {col} in the current window. 6174 The syntax ID can be used with |synIDattr()| and 6175 |synIDtrans()| to obtain syntax information about text. 6176 6177 {col} is 1 for the leftmost column, {lnum} is 1 for the first 6178 line. 'synmaxcol' applies, in a longer line zero is returned. 6179 Note that when the position is after the last character, 6180 that's where the cursor can be in Insert mode, synID() returns 6181 zero. 6182 6183 When {trans} is non-zero, transparent items are reduced to the 6184 item that they reveal. This is useful when wanting to know 6185 the effective color. When {trans} is zero, the transparent 6186 item is returned. This is useful when wanting to know which 6187 syntax item is effective (e.g. inside parens). 6188 Warning: This function can be very slow. Best speed is 6189 obtained by going through the file in forward direction. 6190 6191 Example (echoes the name of the syntax item under the cursor): > 6192 :echo synIDattr(synID(line("."), col("."), 1), "name") 6193< 6194 6195synIDattr({synID}, {what} [, {mode}]) *synIDattr()* 6196 The result is a String, which is the {what} attribute of 6197 syntax ID {synID}. This can be used to obtain information 6198 about a syntax item. 6199 {mode} can be "gui", "cterm" or "term", to get the attributes 6200 for that mode. When {mode} is omitted, or an invalid value is 6201 used, the attributes for the currently active highlighting are 6202 used (GUI, cterm or term). 6203 Use synIDtrans() to follow linked highlight groups. 6204 {what} result 6205 "name" the name of the syntax item 6206 "fg" foreground color (GUI: color name used to set 6207 the color, cterm: color number as a string, 6208 term: empty string) 6209 "bg" background color (as with "fg") 6210 "font" font name (only available in the GUI) 6211 |highlight-font| 6212 "sp" special color (as with "fg") |highlight-guisp| 6213 "fg#" like "fg", but for the GUI and the GUI is 6214 running the name in "#RRGGBB" form 6215 "bg#" like "fg#" for "bg" 6216 "sp#" like "fg#" for "sp" 6217 "bold" "1" if bold 6218 "italic" "1" if italic 6219 "reverse" "1" if reverse 6220 "inverse" "1" if inverse (= reverse) 6221 "standout" "1" if standout 6222 "underline" "1" if underlined 6223 "undercurl" "1" if undercurled 6224 6225 Example (echoes the color of the syntax item under the 6226 cursor): > 6227 :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg") 6228< 6229synIDtrans({synID}) *synIDtrans()* 6230 The result is a Number, which is the translated syntax ID of 6231 {synID}. This is the syntax group ID of what is being used to 6232 highlight the character. Highlight links given with 6233 ":highlight link" are followed. 6234 6235synconcealed({lnum}, {col}) *synconcealed()* 6236 The result is a List. The first item in the list is 0 if the 6237 character at the position {lnum} and {col} is not part of a 6238 concealable region, 1 if it is. The second item in the list is 6239 a string. If the first item is 1, the second item contains the 6240 text which will be displayed in place of the concealed text, 6241 depending on the current setting of 'conceallevel'. The third 6242 and final item in the list is a unique number representing the 6243 specific syntax region matched. This allows detection of the 6244 beginning of a new concealable region if there are two 6245 consecutive regions with the same replacement character. 6246 For an example use see $VIMRUNTIME/syntax/2html.vim . 6247 6248 6249synstack({lnum}, {col}) *synstack()* 6250 Return a |List|, which is the stack of syntax items at the 6251 position {lnum} and {col} in the current window. Each item in 6252 the List is an ID like what |synID()| returns. 6253 The first item in the List is the outer region, following are 6254 items contained in that one. The last one is what |synID()| 6255 returns, unless not the whole item is highlighted or it is a 6256 transparent item. 6257 This function is useful for debugging a syntax file. 6258 Example that shows the syntax stack under the cursor: > 6259 for id in synstack(line("."), col(".")) 6260 echo synIDattr(id, "name") 6261 endfor 6262< When the position specified with {lnum} and {col} is invalid 6263 nothing is returned. The position just after the last 6264 character in a line and the first column in an empty line are 6265 valid positions. 6266 6267system({expr} [, {input}]) *system()* *E677* 6268 Get the output of the shell command {expr} as a string. See 6269 |systemlist()| to get the output as a List. 6270 6271 When {input} is given and is a string this string is written 6272 to a file and passed as stdin to the command. The string is 6273 written as-is, you need to take care of using the correct line 6274 separators yourself. 6275 If {input} is given and is a |List| it is written to the file 6276 in a way |writefile()| does with {binary} set to "b" (i.e. 6277 with a newline between each list item with newlines inside 6278 list items converted to NULs). 6279 Pipes are not used. 6280 6281 When prepended by |:silent| the shell will not be set to 6282 cooked mode. This is meant to be used for commands that do 6283 not need the user to type. It avoids stray characters showing 6284 up on the screen which require |CTRL-L| to remove. > 6285 :silent let f = system('ls *.vim') 6286< 6287 Note: Use |shellescape()| or |::S| with |expand()| or 6288 |fnamemodify()| to escape special characters in a command 6289 argument. Newlines in {expr} may cause the command to fail. 6290 The characters in 'shellquote' and 'shellxquote' may also 6291 cause trouble. 6292 This is not to be used for interactive commands. 6293 6294 The result is a String. Example: > 6295 :let files = system("ls " . shellescape(expand('%:h'))) 6296 :let files = system('ls ' . expand('%:h:S')) 6297 6298< To make the result more system-independent, the shell output 6299 is filtered to replace <CR> with <NL> for Macintosh, and 6300 <CR><NL> with <NL> for DOS-like systems. 6301 To avoid the string being truncated at a NUL, all NUL 6302 characters are replaced with SOH (0x01). 6303 6304 The command executed is constructed using several options: 6305 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote' 6306 ({tmp} is an automatically generated file name). 6307 For Unix and OS/2 braces are put around {expr} to allow for 6308 concatenated commands. 6309 6310 The command will be executed in "cooked" mode, so that a 6311 CTRL-C will interrupt the command (on Unix at least). 6312 6313 The resulting error code can be found in |v:shell_error|. 6314 This function will fail in |restricted-mode|. 6315 6316 Note that any wrong value in the options mentioned above may 6317 make the function fail. It has also been reported to fail 6318 when using a security agent application. 6319 Unlike ":!cmd" there is no automatic check for changed files. 6320 Use |:checktime| to force a check. 6321 6322 6323systemlist({expr} [, {input}]) *systemlist()* 6324 Same as |system()|, but returns a |List| with lines (parts of 6325 output separated by NL) with NULs transformed into NLs. Output 6326 is the same as |readfile()| will output with {binary} argument 6327 set to "b". 6328 6329 Returns an empty string on error, so be careful not to run 6330 into |E706|. 6331 6332 6333tabpagebuflist([{arg}]) *tabpagebuflist()* 6334 The result is a |List|, where each item is the number of the 6335 buffer associated with each window in the current tab page. 6336 {arg} specifies the number of tab page to be used. When 6337 omitted the current tab page is used. 6338 When {arg} is invalid the number zero is returned. 6339 To get a list of all buffers in all tabs use this: > 6340 let buflist = [] 6341 for i in range(tabpagenr('$')) 6342 call extend(buflist, tabpagebuflist(i + 1)) 6343 endfor 6344< Note that a buffer may appear in more than one window. 6345 6346 6347tabpagenr([{arg}]) *tabpagenr()* 6348 The result is a Number, which is the number of the current 6349 tab page. The first tab page has number 1. 6350 When the optional argument is "$", the number of the last tab 6351 page is returned (the tab page count). 6352 The number can be used with the |:tab| command. 6353 6354 6355tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()* 6356 Like |winnr()| but for tab page {tabarg}. 6357 {tabarg} specifies the number of tab page to be used. 6358 {arg} is used like with |winnr()|: 6359 - When omitted the current window number is returned. This is 6360 the window which will be used when going to this tab page. 6361 - When "$" the number of windows is returned. 6362 - When "#" the previous window nr is returned. 6363 Useful examples: > 6364 tabpagewinnr(1) " current window of tab page 1 6365 tabpagewinnr(4, '$') " number of windows in tab page 4 6366< When {tabarg} is invalid zero is returned. 6367 6368 *tagfiles()* 6369tagfiles() Returns a |List| with the file names used to search for tags 6370 for the current buffer. This is the 'tags' option expanded. 6371 6372 6373taglist({expr}) *taglist()* 6374 Returns a list of tags matching the regular expression {expr}. 6375 Each list item is a dictionary with at least the following 6376 entries: 6377 name Name of the tag. 6378 filename Name of the file where the tag is 6379 defined. It is either relative to the 6380 current directory or a full path. 6381 cmd Ex command used to locate the tag in 6382 the file. 6383 kind Type of the tag. The value for this 6384 entry depends on the language specific 6385 kind values. Only available when 6386 using a tags file generated by 6387 Exuberant ctags or hdrtag. 6388 static A file specific tag. Refer to 6389 |static-tag| for more information. 6390 More entries may be present, depending on the content of the 6391 tags file: access, implementation, inherits and signature. 6392 Refer to the ctags documentation for information about these 6393 fields. For C code the fields "struct", "class" and "enum" 6394 may appear, they give the name of the entity the tag is 6395 contained in. 6396 6397 The ex-command 'cmd' can be either an ex search pattern, a 6398 line number or a line number followed by a byte number. 6399 6400 If there are no matching tags, then an empty list is returned. 6401 6402 To get an exact tag match, the anchors '^' and '$' should be 6403 used in {expr}. This also make the function work faster. 6404 Refer to |tag-regexp| for more information about the tag 6405 search regular expression pattern. 6406 6407 Refer to |'tags'| for information about how the tags file is 6408 located by Vim. Refer to |tags-file-format| for the format of 6409 the tags file generated by the different ctags tools. 6410 6411tempname() *tempname()* *temp-file-name* 6412 The result is a String, which is the name of a file that 6413 doesn't exist. It can be used for a temporary file. The name 6414 is different for at least 26 consecutive calls. Example: > 6415 :let tmpfile = tempname() 6416 :exe "redir > " . tmpfile 6417< For Unix, the file will be in a private directory |tempfile|. 6418 For MS-Windows forward slashes are used when the 'shellslash' 6419 option is set or when 'shellcmdflag' starts with '-'. 6420 6421 6422tan({expr}) *tan()* 6423 Return the tangent of {expr}, measured in radians, as a |Float| 6424 in the range [-inf, inf]. 6425 {expr} must evaluate to a |Float| or a |Number|. 6426 Examples: > 6427 :echo tan(10) 6428< 0.648361 > 6429 :echo tan(-4.01) 6430< -1.181502 6431 {only available when compiled with the |+float| feature} 6432 6433 6434tanh({expr}) *tanh()* 6435 Return the hyperbolic tangent of {expr} as a |Float| in the 6436 range [-1, 1]. 6437 {expr} must evaluate to a |Float| or a |Number|. 6438 Examples: > 6439 :echo tanh(0.5) 6440< 0.462117 > 6441 :echo tanh(-1) 6442< -0.761594 6443 {only available when compiled with the |+float| feature} 6444 6445 6446tolower({expr}) *tolower()* 6447 The result is a copy of the String given, with all uppercase 6448 characters turned into lowercase (just like applying |gu| to 6449 the string). 6450 6451toupper({expr}) *toupper()* 6452 The result is a copy of the String given, with all lowercase 6453 characters turned into uppercase (just like applying |gU| to 6454 the string). 6455 6456tr({src}, {fromstr}, {tostr}) *tr()* 6457 The result is a copy of the {src} string with all characters 6458 which appear in {fromstr} replaced by the character in that 6459 position in the {tostr} string. Thus the first character in 6460 {fromstr} is translated into the first character in {tostr} 6461 and so on. Exactly like the unix "tr" command. 6462 This code also deals with multibyte characters properly. 6463 6464 Examples: > 6465 echo tr("hello there", "ht", "HT") 6466< returns "Hello THere" > 6467 echo tr("<blob>", "<>", "{}") 6468< returns "{blob}" 6469 6470trunc({expr}) *trunc()* 6471 Return the largest integral value with magnitude less than or 6472 equal to {expr} as a |Float| (truncate towards zero). 6473 {expr} must evaluate to a |Float| or a |Number|. 6474 Examples: > 6475 echo trunc(1.456) 6476< 1.0 > 6477 echo trunc(-5.456) 6478< -5.0 > 6479 echo trunc(4.0) 6480< 4.0 6481 {only available when compiled with the |+float| feature} 6482 6483 *type()* 6484type({expr}) The result is a Number, depending on the type of {expr}: 6485 Number: 0 6486 String: 1 6487 Funcref: 2 6488 List: 3 6489 Dictionary: 4 6490 Float: 5 6491 To avoid the magic numbers it should be used this way: > 6492 :if type(myvar) == type(0) 6493 :if type(myvar) == type("") 6494 :if type(myvar) == type(function("tr")) 6495 :if type(myvar) == type([]) 6496 :if type(myvar) == type({}) 6497 :if type(myvar) == type(0.0) 6498 6499undofile({name}) *undofile()* 6500 Return the name of the undo file that would be used for a file 6501 with name {name} when writing. This uses the 'undodir' 6502 option, finding directories that exist. It does not check if 6503 the undo file exists. 6504 {name} is always expanded to the full path, since that is what 6505 is used internally. 6506 If {name} is empty undofile() returns an empty string, since a 6507 buffer without a file name will not write an undo file. 6508 Useful in combination with |:wundo| and |:rundo|. 6509 When compiled without the +persistent_undo option this always 6510 returns an empty string. 6511 6512undotree() *undotree()* 6513 Return the current state of the undo tree in a dictionary with 6514 the following items: 6515 "seq_last" The highest undo sequence number used. 6516 "seq_cur" The sequence number of the current position in 6517 the undo tree. This differs from "seq_last" 6518 when some changes were undone. 6519 "time_cur" Time last used for |:earlier| and related 6520 commands. Use |strftime()| to convert to 6521 something readable. 6522 "save_last" Number of the last file write. Zero when no 6523 write yet. 6524 "save_cur" Number of the current position in the undo 6525 tree. 6526 "synced" Non-zero when the last undo block was synced. 6527 This happens when waiting from input from the 6528 user. See |undo-blocks|. 6529 "entries" A list of dictionaries with information about 6530 undo blocks. 6531 6532 The first item in the "entries" list is the oldest undo item. 6533 Each List item is a Dictionary with these items: 6534 "seq" Undo sequence number. Same as what appears in 6535 |:undolist|. 6536 "time" Timestamp when the change happened. Use 6537 |strftime()| to convert to something readable. 6538 "newhead" Only appears in the item that is the last one 6539 that was added. This marks the last change 6540 and where further changes will be added. 6541 "curhead" Only appears in the item that is the last one 6542 that was undone. This marks the current 6543 position in the undo tree, the block that will 6544 be used by a redo command. When nothing was 6545 undone after the last change this item will 6546 not appear anywhere. 6547 "save" Only appears on the last block before a file 6548 write. The number is the write count. The 6549 first write has number 1, the last one the 6550 "save_last" mentioned above. 6551 "alt" Alternate entry. This is again a List of undo 6552 blocks. Each item may again have an "alt" 6553 item. 6554 6555uniq({list} [, {func} [, {dict}]]) *uniq()* *E882* 6556 Remove second and succeeding copies of repeated adjacent 6557 {list} items in-place. Returns {list}. If you want a list 6558 to remain unmodified make a copy first: > 6559 :let newlist = uniq(copy(mylist)) 6560< The default compare function uses the string representation of 6561 each item. For the use of {func} and {dict} see |sort()|. 6562 6563values({dict}) *values()* 6564 Return a |List| with all the values of {dict}. The |List| is 6565 in arbitrary order. 6566 6567 6568virtcol({expr}) *virtcol()* 6569 The result is a Number, which is the screen column of the file 6570 position given with {expr}. That is, the last screen position 6571 occupied by the character at that position, when the screen 6572 would be of unlimited width. When there is a <Tab> at the 6573 position, the returned Number will be the column at the end of 6574 the <Tab>. For example, for a <Tab> in column 1, with 'ts' 6575 set to 8, it returns 8. |conceal| is ignored. 6576 For the byte position use |col()|. 6577 For the use of {expr} see |col()|. 6578 When 'virtualedit' is used {expr} can be [lnum, col, off], where 6579 "off" is the offset in screen columns from the start of the 6580 character. E.g., a position within a <Tab> or after the last 6581 character. When "off" is omitted zero is used. 6582 When Virtual editing is active in the current mode, a position 6583 beyond the end of the line can be returned. |'virtualedit'| 6584 The accepted positions are: 6585 . the cursor position 6586 $ the end of the cursor line (the result is the 6587 number of displayed characters in the cursor line 6588 plus one) 6589 'x position of mark x (if the mark is not set, 0 is 6590 returned) 6591 v In Visual mode: the start of the Visual area (the 6592 cursor is the end). When not in Visual mode 6593 returns the cursor position. Differs from |'<| in 6594 that it's updated right away. 6595 Note that only marks in the current file can be used. 6596 Examples: > 6597 virtcol(".") with text "foo^Lbar", with cursor on the "^L", returns 5 6598 virtcol("$") with text "foo^Lbar", returns 9 6599 virtcol("'t") with text " there", with 't at 'h', returns 6 6600< The first column is 1. 0 is returned for an error. 6601 A more advanced example that echoes the maximum length of 6602 all lines: > 6603 echo max(map(range(1, line('$')), "virtcol([v:val, '$'])")) 6604 6605 6606visualmode([expr]) *visualmode()* 6607 The result is a String, which describes the last Visual mode 6608 used in the current buffer. Initially it returns an empty 6609 string, but once Visual mode has been used, it returns "v", 6610 "V", or "<CTRL-V>" (a single CTRL-V character) for 6611 character-wise, line-wise, or block-wise Visual mode 6612 respectively. 6613 Example: > 6614 :exe "normal " . visualmode() 6615< This enters the same Visual mode as before. It is also useful 6616 in scripts if you wish to act differently depending on the 6617 Visual mode that was used. 6618 If Visual mode is active, use |mode()| to get the Visual mode 6619 (e.g., in a |:vmap|). 6620 *non-zero-arg* 6621 If [expr] is supplied and it evaluates to a non-zero Number or 6622 a non-empty String, then the Visual mode will be cleared and 6623 the old value is returned. Note that " " and "0" are also 6624 non-empty strings, thus cause the mode to be cleared. A List, 6625 Dictionary or Float is not a Number or String, thus does not 6626 cause the mode to be cleared. 6627 6628wildmenumode() *wildmenumode()* 6629 Returns non-zero when the wildmenu is active and zero 6630 otherwise. See 'wildmenu' and 'wildmode'. 6631 This can be used in mappings to handle the 'wildcharm' option 6632 gracefully. (Makes only sense with |mapmode-c| mappings). 6633 6634 For example to make <c-j> work like <down> in wildmode, use: > 6635 :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>" 6636< 6637 (Note, this needs the 'wildcharm' option set appropriately). 6638 6639 6640 *winbufnr()* 6641winbufnr({nr}) The result is a Number, which is the number of the buffer 6642 associated with window {nr}. When {nr} is zero, the number of 6643 the buffer in the current window is returned. When window 6644 {nr} doesn't exist, -1 is returned. 6645 Example: > 6646 :echo "The file in the current window is " . bufname(winbufnr(0)) 6647< 6648 *wincol()* 6649wincol() The result is a Number, which is the virtual column of the 6650 cursor in the window. This is counting screen cells from the 6651 left side of the window. The leftmost column is one. 6652 6653winheight({nr}) *winheight()* 6654 The result is a Number, which is the height of window {nr}. 6655 When {nr} is zero, the height of the current window is 6656 returned. When window {nr} doesn't exist, -1 is returned. 6657 An existing window always has a height of zero or more. 6658 Examples: > 6659 :echo "The current window has " . winheight(0) . " lines." 6660< 6661 *winline()* 6662winline() The result is a Number, which is the screen line of the cursor 6663 in the window. This is counting screen lines from the top of 6664 the window. The first line is one. 6665 If the cursor was moved the view on the file will be updated 6666 first, this may cause a scroll. 6667 6668 *winnr()* 6669winnr([{arg}]) The result is a Number, which is the number of the current 6670 window. The top window has number 1. 6671 When the optional argument is "$", the number of the 6672 last window is returned (the window count). > 6673 let window_count = winnr('$') 6674< When the optional argument is "#", the number of the last 6675 accessed window is returned (where |CTRL-W_p| goes to). 6676 If there is no previous window or it is in another tab page 0 6677 is returned. 6678 The number can be used with |CTRL-W_w| and ":wincmd w" 6679 |:wincmd|. 6680 Also see |tabpagewinnr()|. 6681 6682 *winrestcmd()* 6683winrestcmd() Returns a sequence of |:resize| commands that should restore 6684 the current window sizes. Only works properly when no windows 6685 are opened or closed and the current window and tab page is 6686 unchanged. 6687 Example: > 6688 :let cmd = winrestcmd() 6689 :call MessWithWindowSizes() 6690 :exe cmd 6691< 6692 *winrestview()* 6693winrestview({dict}) 6694 Uses the |Dictionary| returned by |winsaveview()| to restore 6695 the view of the current window. 6696 Note: The {dict} does not have to contain all values, that are 6697 returned by |winsaveview()|. If values are missing, those 6698 settings won't be restored. So you can use: > 6699 :call winrestview({'curswant': 4}) 6700< 6701 This will only set the curswant value (the column the cursor 6702 wants to move on vertical movements) of the cursor to column 5 6703 (yes, that is 5), while all other settings will remain the 6704 same. This is useful, if you set the cursor position manually. 6705 6706 If you have changed the values the result is unpredictable. 6707 If the window size changed the result won't be the same. 6708 6709 *winsaveview()* 6710winsaveview() Returns a |Dictionary| that contains information to restore 6711 the view of the current window. Use |winrestview()| to 6712 restore the view. 6713 This is useful if you have a mapping that jumps around in the 6714 buffer and you want to go back to the original view. 6715 This does not save fold information. Use the 'foldenable' 6716 option to temporarily switch off folding, so that folds are 6717 not opened when moving around. This may have side effects. 6718 The return value includes: 6719 lnum cursor line number 6720 col cursor column (Note: the first column 6721 zero, as opposed to what getpos() 6722 returns) 6723 coladd cursor column offset for 'virtualedit' 6724 curswant column for vertical movement 6725 topline first line in the window 6726 topfill filler lines, only in diff mode 6727 leftcol first column displayed 6728 skipcol columns skipped 6729 Note that no option values are saved. 6730 6731 6732winwidth({nr}) *winwidth()* 6733 The result is a Number, which is the width of window {nr}. 6734 When {nr} is zero, the width of the current window is 6735 returned. When window {nr} doesn't exist, -1 is returned. 6736 An existing window always has a width of zero or more. 6737 Examples: > 6738 :echo "The current window has " . winwidth(0) . " columns." 6739 :if winwidth(0) <= 50 6740 : exe "normal 50\<C-W>|" 6741 :endif 6742< 6743 *writefile()* 6744writefile({list}, {fname} [, {flags}]) 6745 Write |List| {list} to file {fname}. Each list item is 6746 separated with a NL. Each list item must be a String or 6747 Number. 6748 When {flags} contains "b" then binary mode is used: There will 6749 not be a NL after the last list item. An empty item at the 6750 end does cause the last line in the file to end in a NL. 6751 6752 When {flags} contains "a" then append mode is used, lines are 6753 append to the file: > 6754 :call writefile(["foo"], "event.log", "a") 6755 :call writefile(["bar"], "event.log", "a") 6756> 6757< All NL characters are replaced with a NUL character. 6758 Inserting CR characters needs to be done before passing {list} 6759 to writefile(). 6760 An existing file is overwritten, if possible. 6761 When the write fails -1 is returned, otherwise 0. There is an 6762 error message if the file can't be created or when writing 6763 fails. 6764 Also see |readfile()|. 6765 To copy a file byte for byte: > 6766 :let fl = readfile("foo", "b") 6767 :call writefile(fl, "foocopy", "b") 6768 6769 6770xor({expr}, {expr}) *xor()* 6771 Bitwise XOR on the two arguments. The arguments are converted 6772 to a number. A List, Dict or Float argument causes an error. 6773 Example: > 6774 :let bits = xor(bits, 0x80) 6775< 6776 6777 6778 *feature-list* 6779There are four types of features: 67801. Features that are only supported when they have been enabled when Vim 6781 was compiled |+feature-list|. Example: > 6782 :if has("cindent") 67832. Features that are only supported when certain conditions have been met. 6784 Example: > 6785 :if has("gui_running") 6786< *has-patch* 67873. Included patches. The "patch123" feature means that patch 123 has been 6788 included. Note that this form does not check the version of Vim, you need 6789 to inspect |v:version| for that. 6790 Example (checking version 6.2.148 or later): > 6791 :if v:version > 602 || v:version == 602 && has("patch148") 6792< Note that it's possible for patch 147 to be omitted even though 148 is 6793 included. 6794 67954. Beyond a certain version or at a certain version and including a specific 6796 patch. The "patch-7.4.237" feature means that the Vim version is 7.5 or 6797 later, or it is version 7.4 and patch 237 was included. 6798 Note that this only works for patch 7.4.237 and later, before that you 6799 need to use the example above that checks v:version. Example: > 6800 :if has("patch-7.4.248") 6801< Note that it's possible for patch 147 to be omitted even though 148 is 6802 included. 6803 6804acl Compiled with |ACL| support. 6805all_builtin_terms Compiled with all builtin terminals enabled. 6806amiga Amiga version of Vim. 6807arabic Compiled with Arabic support |Arabic|. 6808arp Compiled with ARP support (Amiga). 6809autocmd Compiled with autocommand support. |autocommand| 6810balloon_eval Compiled with |balloon-eval| support. 6811balloon_multiline GUI supports multiline balloons. 6812beos BeOS version of Vim. 6813browse Compiled with |:browse| support, and browse() will 6814 work. 6815browsefilter Compiled with support for |browsefilter|. 6816builtin_terms Compiled with some builtin terminals. 6817byte_offset Compiled with support for 'o' in 'statusline' 6818cindent Compiled with 'cindent' support. 6819clientserver Compiled with remote invocation support |clientserver|. 6820clipboard Compiled with 'clipboard' support. 6821cmdline_compl Compiled with |cmdline-completion| support. 6822cmdline_hist Compiled with |cmdline-history| support. 6823cmdline_info Compiled with 'showcmd' and 'ruler' support. 6824comments Compiled with |'comments'| support. 6825compatible Compiled to be very Vi compatible. 6826cryptv Compiled with encryption support |encryption|. 6827cscope Compiled with |cscope| support. 6828debug Compiled with "DEBUG" defined. 6829dialog_con Compiled with console dialog support. 6830dialog_gui Compiled with GUI dialog support. 6831diff Compiled with |vimdiff| and 'diff' support. 6832digraphs Compiled with support for digraphs. 6833directx Compiled with support for Direct-X and 'renderoptions'. 6834dnd Compiled with support for the "~ register |quote_~|. 6835dos16 16 bits DOS version of Vim. 6836dos32 32 bits DOS (DJGPP) version of Vim. 6837ebcdic Compiled on a machine with ebcdic character set. 6838emacs_tags Compiled with support for Emacs tags. 6839eval Compiled with expression evaluation support. Always 6840 true, of course! 6841ex_extra Compiled with extra Ex commands |+ex_extra|. 6842extra_search Compiled with support for |'incsearch'| and 6843 |'hlsearch'| 6844farsi Compiled with Farsi support |farsi|. 6845file_in_path Compiled with support for |gf| and |<cfile>| 6846filterpipe When 'shelltemp' is off pipes are used for shell 6847 read/write/filter commands 6848find_in_path Compiled with support for include file searches 6849 |+find_in_path|. 6850float Compiled with support for |Float|. 6851fname_case Case in file names matters (for Amiga, MS-DOS, and 6852 Windows this is not present). 6853folding Compiled with |folding| support. 6854footer Compiled with GUI footer support. |gui-footer| 6855fork Compiled to use fork()/exec() instead of system(). 6856gettext Compiled with message translation |multi-lang| 6857gui Compiled with GUI enabled. 6858gui_athena Compiled with Athena GUI. 6859gui_gnome Compiled with Gnome support (gui_gtk is also defined). 6860gui_gtk Compiled with GTK+ GUI (any version). 6861gui_gtk2 Compiled with GTK+ 2 GUI (gui_gtk is also defined). 6862gui_mac Compiled with Macintosh GUI. 6863gui_motif Compiled with Motif GUI. 6864gui_photon Compiled with Photon GUI. 6865gui_running Vim is running in the GUI, or it will start soon. 6866gui_win32 Compiled with MS Windows Win32 GUI. 6867gui_win32s idem, and Win32s system being used (Windows 3.1) 6868hangul_input Compiled with Hangul input support. |hangul| 6869iconv Can use iconv() for conversion. 6870insert_expand Compiled with support for CTRL-X expansion commands in 6871 Insert mode. 6872jumplist Compiled with |jumplist| support. 6873keymap Compiled with 'keymap' support. 6874langmap Compiled with 'langmap' support. 6875libcall Compiled with |libcall()| support. 6876linebreak Compiled with 'linebreak', 'breakat', 'showbreak' and 6877 'breakindent' support. 6878lispindent Compiled with support for lisp indenting. 6879listcmds Compiled with commands for the buffer list |:files| 6880 and the argument list |arglist|. 6881localmap Compiled with local mappings and abbr. |:map-local| 6882lua Compiled with Lua interface |Lua|. 6883mac Macintosh version of Vim. 6884macunix Macintosh version of Vim, using Unix files (OS-X). 6885menu Compiled with support for |:menu|. 6886mksession Compiled with support for |:mksession|. 6887modify_fname Compiled with file name modifiers. |filename-modifiers| 6888mouse Compiled with support mouse. 6889mouse_dec Compiled with support for Dec terminal mouse. 6890mouse_gpm Compiled with support for gpm (Linux console mouse) 6891mouse_netterm Compiled with support for netterm mouse. 6892mouse_pterm Compiled with support for qnx pterm mouse. 6893mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) 6894mouse_sgr Compiled with support for sgr mouse. 6895mouse_urxvt Compiled with support for urxvt mouse. 6896mouse_xterm Compiled with support for xterm mouse. 6897mouseshape Compiled with support for 'mouseshape'. 6898multi_byte Compiled with support for 'encoding' 6899multi_byte_encoding 'encoding' is set to a multi-byte encoding. 6900multi_byte_ime Compiled with support for IME input method. 6901multi_lang Compiled with support for multiple languages. 6902mzscheme Compiled with MzScheme interface |mzscheme|. 6903netbeans_enabled Compiled with support for |netbeans| and connected. 6904netbeans_intg Compiled with support for |netbeans|. 6905ole Compiled with OLE automation support for Win32. 6906os2 OS/2 version of Vim. 6907path_extra Compiled with up/downwards search in 'path' and 'tags' 6908perl Compiled with Perl interface. 6909persistent_undo Compiled with support for persistent undo history. 6910postscript Compiled with PostScript file printing. 6911printer Compiled with |:hardcopy| support. 6912profile Compiled with |:profile| support. 6913python Compiled with Python 2.x interface. |has-python| 6914python3 Compiled with Python 3.x interface. |has-python| 6915qnx QNX version of Vim. 6916quickfix Compiled with |quickfix| support. 6917reltime Compiled with |reltime()| support. 6918rightleft Compiled with 'rightleft' support. 6919ruby Compiled with Ruby interface |ruby|. 6920scrollbind Compiled with 'scrollbind' support. 6921showcmd Compiled with 'showcmd' support. 6922signs Compiled with |:sign| support. 6923smartindent Compiled with 'smartindent' support. 6924sniff Compiled with SNiFF interface support. 6925spell Compiled with spell checking support |spell|. 6926startuptime Compiled with |--startuptime| support. 6927statusline Compiled with support for 'statusline', 'rulerformat' 6928 and special formats of 'titlestring' and 'iconstring'. 6929sun_workshop Compiled with support for Sun |workshop|. 6930syntax Compiled with syntax highlighting support |syntax|. 6931syntax_items There are active syntax highlighting items for the 6932 current buffer. 6933system Compiled to use system() instead of fork()/exec(). 6934tag_binary Compiled with binary searching in tags files 6935 |tag-binary-search|. 6936tag_old_static Compiled with support for old static tags 6937 |tag-old-static|. 6938tag_any_white Compiled with support for any white characters in tags 6939 files |tag-any-white|. 6940tcl Compiled with Tcl interface. 6941terminfo Compiled with terminfo instead of termcap. 6942termresponse Compiled with support for |t_RV| and |v:termresponse|. 6943textobjects Compiled with support for |text-objects|. 6944tgetent Compiled with tgetent support, able to use a termcap 6945 or terminfo file. 6946title Compiled with window title support |'title'|. 6947toolbar Compiled with support for |gui-toolbar|. 6948unix Unix version of Vim. 6949user_commands User-defined commands. 6950vertsplit Compiled with vertically split windows |:vsplit|. 6951vim_starting True while initial source'ing takes place. |startup| 6952viminfo Compiled with viminfo support. 6953virtualedit Compiled with 'virtualedit' option. 6954visual Compiled with Visual mode. 6955visualextra Compiled with extra Visual mode commands. 6956 |blockwise-operators|. 6957vms VMS version of Vim. 6958vreplace Compiled with |gR| and |gr| commands. 6959wildignore Compiled with 'wildignore' option. 6960wildmenu Compiled with 'wildmenu' option. 6961win16 Win16 version of Vim (MS-Windows 3.1). 6962win32 Win32 version of Vim (MS-Windows 95 and later, 32 or 6963 64 bits) 6964win32unix Win32 version of Vim, using Unix files (Cygwin) 6965win64 Win64 version of Vim (MS-Windows 64 bit). 6966win95 Win32 version for MS-Windows 95/98/ME. 6967winaltkeys Compiled with 'winaltkeys' option. 6968windows Compiled with support for more than one window. 6969writebackup Compiled with 'writebackup' default on. 6970xfontset Compiled with X fontset support |xfontset|. 6971xim Compiled with X input method support |xim|. 6972xpm Compiled with pixmap support. 6973xpm_w32 Compiled with pixmap support for Win32. (Only for 6974 backward compatibility. Use "xpm" instead.) 6975xsmp Compiled with X session management support. 6976xsmp_interact Compiled with interactive X session management support. 6977xterm_clipboard Compiled with support for xterm clipboard. 6978xterm_save Compiled with support for saving and restoring the 6979 xterm screen. 6980x11 Compiled with X11 support. 6981 6982 *string-match* 6983Matching a pattern in a String 6984 6985A regexp pattern as explained at |pattern| is normally used to find a match in 6986the buffer lines. When a pattern is used to find a match in a String, almost 6987everything works in the same way. The difference is that a String is handled 6988like it is one line. When it contains a "\n" character, this is not seen as a 6989line break for the pattern. It can be matched with a "\n" in the pattern, or 6990with ".". Example: > 6991 :let a = "aaaa\nxxxx" 6992 :echo matchstr(a, "..\n..") 6993 aa 6994 xx 6995 :echo matchstr(a, "a.x") 6996 a 6997 x 6998 6999Don't forget that "^" will only match at the first character of the String and 7000"$" at the last character of the string. They don't match after or before a 7001"\n". 7002 7003============================================================================== 70045. Defining functions *user-functions* 7005 7006New functions can be defined. These can be called just like builtin 7007functions. The function executes a sequence of Ex commands. Normal mode 7008commands can be executed with the |:normal| command. 7009 7010The function name must start with an uppercase letter, to avoid confusion with 7011builtin functions. To prevent from using the same name in different scripts 7012avoid obvious, short names. A good habit is to start the function name with 7013the name of the script, e.g., "HTMLcolor()". 7014 7015It's also possible to use curly braces, see |curly-braces-names|. And the 7016|autoload| facility is useful to define a function only when it's called. 7017 7018 *local-function* 7019A function local to a script must start with "s:". A local script function 7020can only be called from within the script and from functions, user commands 7021and autocommands defined in the script. It is also possible to call the 7022function from a mapping defined in the script, but then |<SID>| must be used 7023instead of "s:" when the mapping is expanded outside of the script. 7024There are only script-local functions, no buffer-local or window-local 7025functions. 7026 7027 *:fu* *:function* *E128* *E129* *E123* 7028:fu[nction] List all functions and their arguments. 7029 7030:fu[nction] {name} List function {name}. 7031 {name} can also be a |Dictionary| entry that is a 7032 |Funcref|: > 7033 :function dict.init 7034 7035:fu[nction] /{pattern} List functions with a name matching {pattern}. 7036 Example that lists all functions ending with "File": > 7037 :function /File$ 7038< 7039 *:function-verbose* 7040When 'verbose' is non-zero, listing a function will also display where it was 7041last defined. Example: > 7042 7043 :verbose function SetFileTypeSH 7044 function SetFileTypeSH(name) 7045 Last set from /usr/share/vim/vim-7.0/filetype.vim 7046< 7047See |:verbose-cmd| for more information. 7048 7049 *E124* *E125* *E853* *E884* 7050:fu[nction][!] {name}([arguments]) [range] [abort] [dict] 7051 Define a new function by the name {name}. The name 7052 must be made of alphanumeric characters and '_', and 7053 must start with a capital or "s:" (see above). Note 7054 that using "b:" or "g:" is not allowed. (since patch 7055 7.4.260 E884 is given if the function name has a colon 7056 in the name, e.g. for "foo:bar()". Before that patch 7057 no error was given). 7058 7059 {name} can also be a |Dictionary| entry that is a 7060 |Funcref|: > 7061 :function dict.init(arg) 7062< "dict" must be an existing dictionary. The entry 7063 "init" is added if it didn't exist yet. Otherwise [!] 7064 is required to overwrite an existing function. The 7065 result is a |Funcref| to a numbered function. The 7066 function can only be used with a |Funcref| and will be 7067 deleted if there are no more references to it. 7068 *E127* *E122* 7069 When a function by this name already exists and [!] is 7070 not used an error message is given. When [!] is used, 7071 an existing function is silently replaced. Unless it 7072 is currently being executed, that is an error. 7073 7074 For the {arguments} see |function-argument|. 7075 7076 *:func-range* *a:firstline* *a:lastline* 7077 When the [range] argument is added, the function is 7078 expected to take care of a range itself. The range is 7079 passed as "a:firstline" and "a:lastline". If [range] 7080 is excluded, ":{range}call" will call the function for 7081 each line in the range, with the cursor on the start 7082 of each line. See |function-range-example|. 7083 The cursor is still moved to the first line of the 7084 range, as is the case with all Ex commands. 7085 *:func-abort* 7086 When the [abort] argument is added, the function will 7087 abort as soon as an error is detected. 7088 *:func-dict* 7089 When the [dict] argument is added, the function must 7090 be invoked through an entry in a |Dictionary|. The 7091 local variable "self" will then be set to the 7092 dictionary. See |Dictionary-function|. 7093 7094 *function-search-undo* 7095 The last used search pattern and the redo command "." 7096 will not be changed by the function. This also 7097 implies that the effect of |:nohlsearch| is undone 7098 when the function returns. 7099 7100 *:endf* *:endfunction* *E126* *E193* 7101:endf[unction] The end of a function definition. Must be on a line 7102 by its own, without other commands. 7103 7104 *:delf* *:delfunction* *E130* *E131* 7105:delf[unction] {name} Delete function {name}. 7106 {name} can also be a |Dictionary| entry that is a 7107 |Funcref|: > 7108 :delfunc dict.init 7109< This will remove the "init" entry from "dict". The 7110 function is deleted if there are no more references to 7111 it. 7112 *:retu* *:return* *E133* 7113:retu[rn] [expr] Return from a function. When "[expr]" is given, it is 7114 evaluated and returned as the result of the function. 7115 If "[expr]" is not given, the number 0 is returned. 7116 When a function ends without an explicit ":return", 7117 the number 0 is returned. 7118 Note that there is no check for unreachable lines, 7119 thus there is no warning if commands follow ":return". 7120 7121 If the ":return" is used after a |:try| but before the 7122 matching |:finally| (if present), the commands 7123 following the ":finally" up to the matching |:endtry| 7124 are executed first. This process applies to all 7125 nested ":try"s inside the function. The function 7126 returns at the outermost ":endtry". 7127 7128 *function-argument* *a:var* 7129An argument can be defined by giving its name. In the function this can then 7130be used as "a:name" ("a:" for argument). 7131 *a:0* *a:1* *a:000* *E740* *...* 7132Up to 20 arguments can be given, separated by commas. After the named 7133arguments an argument "..." can be specified, which means that more arguments 7134may optionally be following. In the function the extra arguments can be used 7135as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which 7136can be 0). "a:000" is set to a |List| that contains these arguments. Note 7137that "a:1" is the same as "a:000[0]". 7138 *E742* 7139The a: scope and the variables in it cannot be changed, they are fixed. 7140However, if a |List| or |Dictionary| is used, you can change their contents. 7141Thus you can pass a |List| to a function and have the function add an item to 7142it. If you want to make sure the function cannot change a |List| or 7143|Dictionary| use |:lockvar|. 7144 7145When not using "...", the number of arguments in a function call must be equal 7146to the number of named arguments. When using "...", the number of arguments 7147may be larger. 7148 7149It is also possible to define a function without any arguments. You must 7150still supply the () then. The body of the function follows in the next lines, 7151until the matching |:endfunction|. It is allowed to define another function 7152inside a function body. 7153 7154 *local-variables* 7155Inside a function variables can be used. These are local variables, which 7156will disappear when the function returns. Global variables need to be 7157accessed with "g:". 7158 7159Example: > 7160 :function Table(title, ...) 7161 : echohl Title 7162 : echo a:title 7163 : echohl None 7164 : echo a:0 . " items:" 7165 : for s in a:000 7166 : echon ' ' . s 7167 : endfor 7168 :endfunction 7169 7170This function can then be called with: > 7171 call Table("Table", "line1", "line2") 7172 call Table("Empty Table") 7173 7174To return more than one value, return a |List|: > 7175 :function Compute(n1, n2) 7176 : if a:n2 == 0 7177 : return ["fail", 0] 7178 : endif 7179 : return ["ok", a:n1 / a:n2] 7180 :endfunction 7181 7182This function can then be called with: > 7183 :let [success, div] = Compute(102, 6) 7184 :if success == "ok" 7185 : echo div 7186 :endif 7187< 7188 *:cal* *:call* *E107* *E117* 7189:[range]cal[l] {name}([arguments]) 7190 Call a function. The name of the function and its arguments 7191 are as specified with |:function|. Up to 20 arguments can be 7192 used. The returned value is discarded. 7193 Without a range and for functions that accept a range, the 7194 function is called once. When a range is given the cursor is 7195 positioned at the start of the first line before executing the 7196 function. 7197 When a range is given and the function doesn't handle it 7198 itself, the function is executed for each line in the range, 7199 with the cursor in the first column of that line. The cursor 7200 is left at the last line (possibly moved by the last function 7201 call). The arguments are re-evaluated for each line. Thus 7202 this works: 7203 *function-range-example* > 7204 :function Mynumber(arg) 7205 : echo line(".") . " " . a:arg 7206 :endfunction 7207 :1,5call Mynumber(getline(".")) 7208< 7209 The "a:firstline" and "a:lastline" are defined anyway, they 7210 can be used to do something different at the start or end of 7211 the range. 7212 7213 Example of a function that handles the range itself: > 7214 7215 :function Cont() range 7216 : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ ' 7217 :endfunction 7218 :4,8call Cont() 7219< 7220 This function inserts the continuation character "\" in front 7221 of all the lines in the range, except the first one. 7222 7223 When the function returns a composite value it can be further 7224 dereferenced, but the range will not be used then. Example: > 7225 :4,8call GetDict().method() 7226< Here GetDict() gets the range but method() does not. 7227 7228 *E132* 7229The recursiveness of user functions is restricted with the |'maxfuncdepth'| 7230option. 7231 7232 7233AUTOMATICALLY LOADING FUNCTIONS ~ 7234 *autoload-functions* 7235When using many or large functions, it's possible to automatically define them 7236only when they are used. There are two methods: with an autocommand and with 7237the "autoload" directory in 'runtimepath'. 7238 7239 7240Using an autocommand ~ 7241 7242This is introduced in the user manual, section |41.14|. 7243 7244The autocommand is useful if you have a plugin that is a long Vim script file. 7245You can define the autocommand and quickly quit the script with |:finish|. 7246That makes Vim startup faster. The autocommand should then load the same file 7247again, setting a variable to skip the |:finish| command. 7248 7249Use the FuncUndefined autocommand event with a pattern that matches the 7250function(s) to be defined. Example: > 7251 7252 :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim 7253 7254The file "~/vim/bufnetfuncs.vim" should then define functions that start with 7255"BufNet". Also see |FuncUndefined|. 7256 7257 7258Using an autoload script ~ 7259 *autoload* *E746* 7260This is introduced in the user manual, section |41.15|. 7261 7262Using a script in the "autoload" directory is simpler, but requires using 7263exactly the right file name. A function that can be autoloaded has a name 7264like this: > 7265 7266 :call filename#funcname() 7267 7268When such a function is called, and it is not defined yet, Vim will search the 7269"autoload" directories in 'runtimepath' for a script file called 7270"filename.vim". For example "~/.vim/autoload/filename.vim". That file should 7271then define the function like this: > 7272 7273 function filename#funcname() 7274 echo "Done!" 7275 endfunction 7276 7277The file name and the name used before the # in the function must match 7278exactly, and the defined function must have the name exactly as it will be 7279called. 7280 7281It is possible to use subdirectories. Every # in the function name works like 7282a path separator. Thus when calling a function: > 7283 7284 :call foo#bar#func() 7285 7286Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'. 7287 7288This also works when reading a variable that has not been set yet: > 7289 7290 :let l = foo#bar#lvar 7291 7292However, when the autoload script was already loaded it won't be loaded again 7293for an unknown variable. 7294 7295When assigning a value to such a variable nothing special happens. This can 7296be used to pass settings to the autoload script before it's loaded: > 7297 7298 :let foo#bar#toggle = 1 7299 :call foo#bar#func() 7300 7301Note that when you make a mistake and call a function that is supposed to be 7302defined in an autoload script, but the script doesn't actually define the 7303function, the script will be sourced every time you try to call the function. 7304And you will get an error message every time. 7305 7306Also note that if you have two script files, and one calls a function in the 7307other and vice versa, before the used function is defined, it won't work. 7308Avoid using the autoload functionality at the toplevel. 7309 7310Hint: If you distribute a bunch of scripts you can pack them together with the 7311|vimball| utility. Also read the user manual |distribute-script|. 7312 7313============================================================================== 73146. Curly braces names *curly-braces-names* 7315 7316In most places where you can use a variable, you can use a "curly braces name" 7317variable. This is a regular variable name with one or more expressions 7318wrapped in braces {} like this: > 7319 my_{adjective}_variable 7320 7321When Vim encounters this, it evaluates the expression inside the braces, puts 7322that in place of the expression, and re-interprets the whole as a variable 7323name. So in the above example, if the variable "adjective" was set to 7324"noisy", then the reference would be to "my_noisy_variable", whereas if 7325"adjective" was set to "quiet", then it would be to "my_quiet_variable". 7326 7327One application for this is to create a set of variables governed by an option 7328value. For example, the statement > 7329 echo my_{&background}_message 7330 7331would output the contents of "my_dark_message" or "my_light_message" depending 7332on the current value of 'background'. 7333 7334You can use multiple brace pairs: > 7335 echo my_{adverb}_{adjective}_message 7336..or even nest them: > 7337 echo my_{ad{end_of_word}}_message 7338where "end_of_word" is either "verb" or "jective". 7339 7340However, the expression inside the braces must evaluate to a valid single 7341variable name, e.g. this is invalid: > 7342 :let foo='a + b' 7343 :echo c{foo}d 7344.. since the result of expansion is "ca + bd", which is not a variable name. 7345 7346 *curly-braces-function-names* 7347You can call and define functions by an evaluated name in a similar way. 7348Example: > 7349 :let func_end='whizz' 7350 :call my_func_{func_end}(parameter) 7351 7352This would call the function "my_func_whizz(parameter)". 7353 7354This does NOT work: > 7355 :let i = 3 7356 :let @{i} = '' " error 7357 :echo @{i} " error 7358 7359============================================================================== 73607. Commands *expression-commands* 7361 7362:let {var-name} = {expr1} *:let* *E18* 7363 Set internal variable {var-name} to the result of the 7364 expression {expr1}. The variable will get the type 7365 from the {expr}. If {var-name} didn't exist yet, it 7366 is created. 7367 7368:let {var-name}[{idx}] = {expr1} *E689* 7369 Set a list item to the result of the expression 7370 {expr1}. {var-name} must refer to a list and {idx} 7371 must be a valid index in that list. For nested list 7372 the index can be repeated. 7373 This cannot be used to add an item to a |List|. 7374 This cannot be used to set a byte in a String. You 7375 can do that like this: > 7376 :let var = var[0:2] . 'X' . var[4:] 7377< 7378 *E711* *E719* 7379:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710* 7380 Set a sequence of items in a |List| to the result of 7381 the expression {expr1}, which must be a list with the 7382 correct number of items. 7383 {idx1} can be omitted, zero is used instead. 7384 {idx2} can be omitted, meaning the end of the list. 7385 When the selected range of items is partly past the 7386 end of the list, items will be added. 7387 7388 *:let+=* *:let-=* *:let.=* *E734* 7389:let {var} += {expr1} Like ":let {var} = {var} + {expr1}". 7390:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}". 7391:let {var} .= {expr1} Like ":let {var} = {var} . {expr1}". 7392 These fail if {var} was not set yet and when the type 7393 of {var} and {expr1} don't fit the operator. 7394 7395 7396:let ${env-name} = {expr1} *:let-environment* *:let-$* 7397 Set environment variable {env-name} to the result of 7398 the expression {expr1}. The type is always String. 7399:let ${env-name} .= {expr1} 7400 Append {expr1} to the environment variable {env-name}. 7401 If the environment variable didn't exist yet this 7402 works like "=". 7403 7404:let @{reg-name} = {expr1} *:let-register* *:let-@* 7405 Write the result of the expression {expr1} in register 7406 {reg-name}. {reg-name} must be a single letter, and 7407 must be the name of a writable register (see 7408 |registers|). "@@" can be used for the unnamed 7409 register, "@/" for the search pattern. 7410 If the result of {expr1} ends in a <CR> or <NL>, the 7411 register will be linewise, otherwise it will be set to 7412 characterwise. 7413 This can be used to clear the last search pattern: > 7414 :let @/ = "" 7415< This is different from searching for an empty string, 7416 that would match everywhere. 7417 7418:let @{reg-name} .= {expr1} 7419 Append {expr1} to register {reg-name}. If the 7420 register was empty it's like setting it to {expr1}. 7421 7422:let &{option-name} = {expr1} *:let-option* *:let-&* 7423 Set option {option-name} to the result of the 7424 expression {expr1}. A String or Number value is 7425 always converted to the type of the option. 7426 For an option local to a window or buffer the effect 7427 is just like using the |:set| command: both the local 7428 value and the global value are changed. 7429 Example: > 7430 :let &path = &path . ',/usr/local/include' 7431 7432:let &{option-name} .= {expr1} 7433 For a string option: Append {expr1} to the value. 7434 Does not insert a comma like |:set+=|. 7435 7436:let &{option-name} += {expr1} 7437:let &{option-name} -= {expr1} 7438 For a number or boolean option: Add or subtract 7439 {expr1}. 7440 7441:let &l:{option-name} = {expr1} 7442:let &l:{option-name} .= {expr1} 7443:let &l:{option-name} += {expr1} 7444:let &l:{option-name} -= {expr1} 7445 Like above, but only set the local value of an option 7446 (if there is one). Works like |:setlocal|. 7447 7448:let &g:{option-name} = {expr1} 7449:let &g:{option-name} .= {expr1} 7450:let &g:{option-name} += {expr1} 7451:let &g:{option-name} -= {expr1} 7452 Like above, but only set the global value of an option 7453 (if there is one). Works like |:setglobal|. 7454 7455:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688* 7456 {expr1} must evaluate to a |List|. The first item in 7457 the list is assigned to {name1}, the second item to 7458 {name2}, etc. 7459 The number of names must match the number of items in 7460 the |List|. 7461 Each name can be one of the items of the ":let" 7462 command as mentioned above. 7463 Example: > 7464 :let [s, item] = GetItem(s) 7465< Detail: {expr1} is evaluated first, then the 7466 assignments are done in sequence. This matters if 7467 {name2} depends on {name1}. Example: > 7468 :let x = [0, 1] 7469 :let i = 0 7470 :let [i, x[i]] = [1, 2] 7471 :echo x 7472< The result is [0, 2]. 7473 7474:let [{name1}, {name2}, ...] .= {expr1} 7475:let [{name1}, {name2}, ...] += {expr1} 7476:let [{name1}, {name2}, ...] -= {expr1} 7477 Like above, but append/add/subtract the value for each 7478 |List| item. 7479 7480:let [{name}, ..., ; {lastname}] = {expr1} 7481 Like |:let-unpack| above, but the |List| may have more 7482 items than there are names. A list of the remaining 7483 items is assigned to {lastname}. If there are no 7484 remaining items {lastname} is set to an empty list. 7485 Example: > 7486 :let [a, b; rest] = ["aval", "bval", 3, 4] 7487< 7488:let [{name}, ..., ; {lastname}] .= {expr1} 7489:let [{name}, ..., ; {lastname}] += {expr1} 7490:let [{name}, ..., ; {lastname}] -= {expr1} 7491 Like above, but append/add/subtract the value for each 7492 |List| item. 7493 7494 *E121* 7495:let {var-name} .. List the value of variable {var-name}. Multiple 7496 variable names may be given. Special names recognized 7497 here: *E738* 7498 g: global variables 7499 b: local buffer variables 7500 w: local window variables 7501 t: local tab page variables 7502 s: script-local variables 7503 l: local function variables 7504 v: Vim variables. 7505 7506:let List the values of all variables. The type of the 7507 variable is indicated before the value: 7508 <nothing> String 7509 # Number 7510 * Funcref 7511 7512 7513:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795* 7514 Remove the internal variable {name}. Several variable 7515 names can be given, they are all removed. The name 7516 may also be a |List| or |Dictionary| item. 7517 With [!] no error message is given for non-existing 7518 variables. 7519 One or more items from a |List| can be removed: > 7520 :unlet list[3] " remove fourth item 7521 :unlet list[3:] " remove fourth item to last 7522< One item from a |Dictionary| can be removed at a time: > 7523 :unlet dict['two'] 7524 :unlet dict.two 7525< This is especially useful to clean up used global 7526 variables and script-local variables (these are not 7527 deleted when the script ends). Function-local 7528 variables are automatically deleted when the function 7529 ends. 7530 7531:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv* 7532 Lock the internal variable {name}. Locking means that 7533 it can no longer be changed (until it is unlocked). 7534 A locked variable can be deleted: > 7535 :lockvar v 7536 :let v = 'asdf' " fails! 7537 :unlet v 7538< *E741* 7539 If you try to change a locked variable you get an 7540 error message: "E741: Value is locked: {name}" 7541 7542 [depth] is relevant when locking a |List| or 7543 |Dictionary|. It specifies how deep the locking goes: 7544 1 Lock the |List| or |Dictionary| itself, 7545 cannot add or remove items, but can 7546 still change their values. 7547 2 Also lock the values, cannot change 7548 the items. If an item is a |List| or 7549 |Dictionary|, cannot add or remove 7550 items, but can still change the 7551 values. 7552 3 Like 2 but for the |List| / 7553 |Dictionary| in the |List| / 7554 |Dictionary|, one level deeper. 7555 The default [depth] is 2, thus when {name} is a |List| 7556 or |Dictionary| the values cannot be changed. 7557 *E743* 7558 For unlimited depth use [!] and omit [depth]. 7559 However, there is a maximum depth of 100 to catch 7560 loops. 7561 7562 Note that when two variables refer to the same |List| 7563 and you lock one of them, the |List| will also be 7564 locked when used through the other variable. 7565 Example: > 7566 :let l = [0, 1, 2, 3] 7567 :let cl = l 7568 :lockvar l 7569 :let cl[1] = 99 " won't work! 7570< You may want to make a copy of a list to avoid this. 7571 See |deepcopy()|. 7572 7573 7574:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo* 7575 Unlock the internal variable {name}. Does the 7576 opposite of |:lockvar|. 7577 7578 7579:if {expr1} *:if* *:endif* *:en* *E171* *E579* *E580* 7580:en[dif] Execute the commands until the next matching ":else" 7581 or ":endif" if {expr1} evaluates to non-zero. 7582 7583 From Vim version 4.5 until 5.0, every Ex command in 7584 between the ":if" and ":endif" is ignored. These two 7585 commands were just to allow for future expansions in a 7586 backwards compatible way. Nesting was allowed. Note 7587 that any ":else" or ":elseif" was ignored, the "else" 7588 part was not executed either. 7589 7590 You can use this to remain compatible with older 7591 versions: > 7592 :if version >= 500 7593 : version-5-specific-commands 7594 :endif 7595< The commands still need to be parsed to find the 7596 "endif". Sometimes an older Vim has a problem with a 7597 new command. For example, ":silent" is recognized as 7598 a ":substitute" command. In that case ":execute" can 7599 avoid problems: > 7600 :if version >= 600 7601 : execute "silent 1,$delete" 7602 :endif 7603< 7604 NOTE: The ":append" and ":insert" commands don't work 7605 properly in between ":if" and ":endif". 7606 7607 *:else* *:el* *E581* *E583* 7608:el[se] Execute the commands until the next matching ":else" 7609 or ":endif" if they previously were not being 7610 executed. 7611 7612 *:elseif* *:elsei* *E582* *E584* 7613:elsei[f] {expr1} Short for ":else" ":if", with the addition that there 7614 is no extra ":endif". 7615 7616:wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw* 7617 *E170* *E585* *E588* *E733* 7618:endw[hile] Repeat the commands between ":while" and ":endwhile", 7619 as long as {expr1} evaluates to non-zero. 7620 When an error is detected from a command inside the 7621 loop, execution continues after the "endwhile". 7622 Example: > 7623 :let lnum = 1 7624 :while lnum <= line("$") 7625 :call FixLine(lnum) 7626 :let lnum = lnum + 1 7627 :endwhile 7628< 7629 NOTE: The ":append" and ":insert" commands don't work 7630 properly inside a ":while" and ":for" loop. 7631 7632:for {var} in {list} *:for* *E690* *E732* 7633:endfo[r] *:endfo* *:endfor* 7634 Repeat the commands between ":for" and ":endfor" for 7635 each item in {list}. Variable {var} is set to the 7636 value of each item. 7637 When an error is detected for a command inside the 7638 loop, execution continues after the "endfor". 7639 Changing {list} inside the loop affects what items are 7640 used. Make a copy if this is unwanted: > 7641 :for item in copy(mylist) 7642< When not making a copy, Vim stores a reference to the 7643 next item in the list, before executing the commands 7644 with the current item. Thus the current item can be 7645 removed without effect. Removing any later item means 7646 it will not be found. Thus the following example 7647 works (an inefficient way to make a list empty): > 7648 for item in mylist 7649 call remove(mylist, 0) 7650 endfor 7651< Note that reordering the list (e.g., with sort() or 7652 reverse()) may have unexpected effects. 7653 Note that the type of each list item should be 7654 identical to avoid errors for the type of {var} 7655 changing. Unlet the variable at the end of the loop 7656 to allow multiple item types: > 7657 for item in ["foo", ["bar"]] 7658 echo item 7659 unlet item " E706 without this 7660 endfor 7661 7662:for [{var1}, {var2}, ...] in {listlist} 7663:endfo[r] 7664 Like ":for" above, but each item in {listlist} must be 7665 a list, of which each item is assigned to {var1}, 7666 {var2}, etc. Example: > 7667 :for [lnum, col] in [[1, 3], [2, 5], [3, 8]] 7668 :echo getline(lnum)[col] 7669 :endfor 7670< 7671 *:continue* *:con* *E586* 7672:con[tinue] When used inside a ":while" or ":for" loop, jumps back 7673 to the start of the loop. 7674 If it is used after a |:try| inside the loop but 7675 before the matching |:finally| (if present), the 7676 commands following the ":finally" up to the matching 7677 |:endtry| are executed first. This process applies to 7678 all nested ":try"s inside the loop. The outermost 7679 ":endtry" then jumps back to the start of the loop. 7680 7681 *:break* *:brea* *E587* 7682:brea[k] When used inside a ":while" or ":for" loop, skips to 7683 the command after the matching ":endwhile" or 7684 ":endfor". 7685 If it is used after a |:try| inside the loop but 7686 before the matching |:finally| (if present), the 7687 commands following the ":finally" up to the matching 7688 |:endtry| are executed first. This process applies to 7689 all nested ":try"s inside the loop. The outermost 7690 ":endtry" then jumps to the command after the loop. 7691 7692:try *:try* *:endt* *:endtry* *E600* *E601* *E602* 7693:endt[ry] Change the error handling for the commands between 7694 ":try" and ":endtry" including everything being 7695 executed across ":source" commands, function calls, 7696 or autocommand invocations. 7697 7698 When an error or interrupt is detected and there is 7699 a |:finally| command following, execution continues 7700 after the ":finally". Otherwise, or when the 7701 ":endtry" is reached thereafter, the next 7702 (dynamically) surrounding ":try" is checked for 7703 a corresponding ":finally" etc. Then the script 7704 processing is terminated. (Whether a function 7705 definition has an "abort" argument does not matter.) 7706 Example: > 7707 :try | edit too much | finally | echo "cleanup" | endtry 7708 :echo "impossible" " not reached, script terminated above 7709< 7710 Moreover, an error or interrupt (dynamically) inside 7711 ":try" and ":endtry" is converted to an exception. It 7712 can be caught as if it were thrown by a |:throw| 7713 command (see |:catch|). In this case, the script 7714 processing is not terminated. 7715 7716 The value "Vim:Interrupt" is used for an interrupt 7717 exception. An error in a Vim command is converted 7718 to a value of the form "Vim({command}):{errmsg}", 7719 other errors are converted to a value of the form 7720 "Vim:{errmsg}". {command} is the full command name, 7721 and {errmsg} is the message that is displayed if the 7722 error exception is not caught, always beginning with 7723 the error number. 7724 Examples: > 7725 :try | sleep 100 | catch /^Vim:Interrupt$/ | endtry 7726 :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry 7727< 7728 *:cat* *:catch* *E603* *E604* *E605* 7729:cat[ch] /{pattern}/ The following commands until the next |:catch|, 7730 |:finally|, or |:endtry| that belongs to the same 7731 |:try| as the ":catch" are executed when an exception 7732 matching {pattern} is being thrown and has not yet 7733 been caught by a previous ":catch". Otherwise, these 7734 commands are skipped. 7735 When {pattern} is omitted all errors are caught. 7736 Examples: > 7737 :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C) 7738 :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors 7739 :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts 7740 :catch /^Vim(write):/ " catch all errors in :write 7741 :catch /^Vim\%((\a\+)\)\=:E123/ " catch error E123 7742 :catch /my-exception/ " catch user exception 7743 :catch /.*/ " catch everything 7744 :catch " same as /.*/ 7745< 7746 Another character can be used instead of / around the 7747 {pattern}, so long as it does not have a special 7748 meaning (e.g., '|' or '"') and doesn't occur inside 7749 {pattern}. 7750 Information about the exception is available in 7751 |v:exception|. Also see |throw-variables|. 7752 NOTE: It is not reliable to ":catch" the TEXT of 7753 an error message because it may vary in different 7754 locales. 7755 7756 *:fina* *:finally* *E606* *E607* 7757:fina[lly] The following commands until the matching |:endtry| 7758 are executed whenever the part between the matching 7759 |:try| and the ":finally" is left: either by falling 7760 through to the ":finally" or by a |:continue|, 7761 |:break|, |:finish|, or |:return|, or by an error or 7762 interrupt or exception (see |:throw|). 7763 7764 *:th* *:throw* *E608* 7765:th[row] {expr1} The {expr1} is evaluated and thrown as an exception. 7766 If the ":throw" is used after a |:try| but before the 7767 first corresponding |:catch|, commands are skipped 7768 until the first ":catch" matching {expr1} is reached. 7769 If there is no such ":catch" or if the ":throw" is 7770 used after a ":catch" but before the |:finally|, the 7771 commands following the ":finally" (if present) up to 7772 the matching |:endtry| are executed. If the ":throw" 7773 is after the ":finally", commands up to the ":endtry" 7774 are skipped. At the ":endtry", this process applies 7775 again for the next dynamically surrounding ":try" 7776 (which may be found in a calling function or sourcing 7777 script), until a matching ":catch" has been found. 7778 If the exception is not caught, the command processing 7779 is terminated. 7780 Example: > 7781 :try | throw "oops" | catch /^oo/ | echo "caught" | endtry 7782< Note that "catch" may need to be on a separate line 7783 for when an error causes the parsing to skip the whole 7784 line and not see the "|" that separates the commands. 7785 7786 *:ec* *:echo* 7787:ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The 7788 first {expr1} starts on a new line. 7789 Also see |:comment|. 7790 Use "\n" to start a new line. Use "\r" to move the 7791 cursor to the first column. 7792 Uses the highlighting set by the |:echohl| command. 7793 Cannot be followed by a comment. 7794 Example: > 7795 :echo "the value of 'shell' is" &shell 7796< *:echo-redraw* 7797 A later redraw may make the message disappear again. 7798 And since Vim mostly postpones redrawing until it's 7799 finished with a sequence of commands this happens 7800 quite often. To avoid that a command from before the 7801 ":echo" causes a redraw afterwards (redraws are often 7802 postponed until you type something), force a redraw 7803 with the |:redraw| command. Example: > 7804 :new | redraw | echo "there is a new window" 7805< 7806 *:echon* 7807:echon {expr1} .. Echoes each {expr1}, without anything added. Also see 7808 |:comment|. 7809 Uses the highlighting set by the |:echohl| command. 7810 Cannot be followed by a comment. 7811 Example: > 7812 :echon "the value of 'shell' is " &shell 7813< 7814 Note the difference between using ":echo", which is a 7815 Vim command, and ":!echo", which is an external shell 7816 command: > 7817 :!echo % --> filename 7818< The arguments of ":!" are expanded, see |:_%|. > 7819 :!echo "%" --> filename or "filename" 7820< Like the previous example. Whether you see the double 7821 quotes or not depends on your 'shell'. > 7822 :echo % --> nothing 7823< The '%' is an illegal character in an expression. > 7824 :echo "%" --> % 7825< This just echoes the '%' character. > 7826 :echo expand("%") --> filename 7827< This calls the expand() function to expand the '%'. 7828 7829 *:echoh* *:echohl* 7830:echoh[l] {name} Use the highlight group {name} for the following 7831 |:echo|, |:echon| and |:echomsg| commands. Also used 7832 for the |input()| prompt. Example: > 7833 :echohl WarningMsg | echo "Don't panic!" | echohl None 7834< Don't forget to set the group back to "None", 7835 otherwise all following echo's will be highlighted. 7836 7837 *:echom* *:echomsg* 7838:echom[sg] {expr1} .. Echo the expression(s) as a true message, saving the 7839 message in the |message-history|. 7840 Spaces are placed between the arguments as with the 7841 |:echo| command. But unprintable characters are 7842 displayed, not interpreted. 7843 The parsing works slightly different from |:echo|, 7844 more like |:execute|. All the expressions are first 7845 evaluated and concatenated before echoing anything. 7846 The expressions must evaluate to a Number or String, a 7847 Dictionary or List causes an error. 7848 Uses the highlighting set by the |:echohl| command. 7849 Example: > 7850 :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see." 7851< See |:echo-redraw| to avoid the message disappearing 7852 when the screen is redrawn. 7853 *:echoe* *:echoerr* 7854:echoe[rr] {expr1} .. Echo the expression(s) as an error message, saving the 7855 message in the |message-history|. When used in a 7856 script or function the line number will be added. 7857 Spaces are placed between the arguments as with the 7858 :echo command. When used inside a try conditional, 7859 the message is raised as an error exception instead 7860 (see |try-echoerr|). 7861 Example: > 7862 :echoerr "This script just failed!" 7863< If you just want a highlighted message use |:echohl|. 7864 And to get a beep: > 7865 :exe "normal \<Esc>" 7866< 7867 *:exe* *:execute* 7868:exe[cute] {expr1} .. Executes the string that results from the evaluation 7869 of {expr1} as an Ex command. 7870 Multiple arguments are concatenated, with a space in 7871 between. To avoid the extra space use the "." 7872 operator to concatenate strings into one argument. 7873 {expr1} is used as the processed command, command line 7874 editing keys are not recognized. 7875 Cannot be followed by a comment. 7876 Examples: > 7877 :execute "buffer" nextbuf 7878 :execute "normal" count . "w" 7879< 7880 ":execute" can be used to append a command to commands 7881 that don't accept a '|'. Example: > 7882 :execute '!ls' | echo "theend" 7883 7884< ":execute" is also a nice way to avoid having to type 7885 control characters in a Vim script for a ":normal" 7886 command: > 7887 :execute "normal ixxx\<Esc>" 7888< This has an <Esc> character, see |expr-string|. 7889 7890 Be careful to correctly escape special characters in 7891 file names. The |fnameescape()| function can be used 7892 for Vim commands, |shellescape()| for |:!| commands. 7893 Examples: > 7894 :execute "e " . fnameescape(filename) 7895 :execute "!ls " . shellescape(filename, 1) 7896< 7897 Note: The executed string may be any command-line, but 7898 starting or ending "if", "while" and "for" does not 7899 always work, because when commands are skipped the 7900 ":execute" is not evaluated and Vim loses track of 7901 where blocks start and end. Also "break" and 7902 "continue" should not be inside ":execute". 7903 This example does not work, because the ":execute" is 7904 not evaluated and Vim does not see the "while", and 7905 gives an error for finding an ":endwhile": > 7906 :if 0 7907 : execute 'while i > 5' 7908 : echo "test" 7909 : endwhile 7910 :endif 7911< 7912 It is allowed to have a "while" or "if" command 7913 completely in the executed string: > 7914 :execute 'while i < 5 | echo i | let i = i + 1 | endwhile' 7915< 7916 7917 *:exe-comment* 7918 ":execute", ":echo" and ":echon" cannot be followed by 7919 a comment directly, because they see the '"' as the 7920 start of a string. But, you can use '|' followed by a 7921 comment. Example: > 7922 :echo "foo" | "this is a comment 7923 7924============================================================================== 79258. Exception handling *exception-handling* 7926 7927The Vim script language comprises an exception handling feature. This section 7928explains how it can be used in a Vim script. 7929 7930Exceptions may be raised by Vim on an error or on interrupt, see 7931|catch-errors| and |catch-interrupt|. You can also explicitly throw an 7932exception by using the ":throw" command, see |throw-catch|. 7933 7934 7935TRY CONDITIONALS *try-conditionals* 7936 7937Exceptions can be caught or can cause cleanup code to be executed. You can 7938use a try conditional to specify catch clauses (that catch exceptions) and/or 7939a finally clause (to be executed for cleanup). 7940 A try conditional begins with a |:try| command and ends at the matching 7941|:endtry| command. In between, you can use a |:catch| command to start 7942a catch clause, or a |:finally| command to start a finally clause. There may 7943be none or multiple catch clauses, but there is at most one finally clause, 7944which must not be followed by any catch clauses. The lines before the catch 7945clauses and the finally clause is called a try block. > 7946 7947 :try 7948 : ... 7949 : ... TRY BLOCK 7950 : ... 7951 :catch /{pattern}/ 7952 : ... 7953 : ... CATCH CLAUSE 7954 : ... 7955 :catch /{pattern}/ 7956 : ... 7957 : ... CATCH CLAUSE 7958 : ... 7959 :finally 7960 : ... 7961 : ... FINALLY CLAUSE 7962 : ... 7963 :endtry 7964 7965The try conditional allows to watch code for exceptions and to take the 7966appropriate actions. Exceptions from the try block may be caught. Exceptions 7967from the try block and also the catch clauses may cause cleanup actions. 7968 When no exception is thrown during execution of the try block, the control 7969is transferred to the finally clause, if present. After its execution, the 7970script continues with the line following the ":endtry". 7971 When an exception occurs during execution of the try block, the remaining 7972lines in the try block are skipped. The exception is matched against the 7973patterns specified as arguments to the ":catch" commands. The catch clause 7974after the first matching ":catch" is taken, other catch clauses are not 7975executed. The catch clause ends when the next ":catch", ":finally", or 7976":endtry" command is reached - whatever is first. Then, the finally clause 7977(if present) is executed. When the ":endtry" is reached, the script execution 7978continues in the following line as usual. 7979 When an exception that does not match any of the patterns specified by the 7980":catch" commands is thrown in the try block, the exception is not caught by 7981that try conditional and none of the catch clauses is executed. Only the 7982finally clause, if present, is taken. The exception pends during execution of 7983the finally clause. It is resumed at the ":endtry", so that commands after 7984the ":endtry" are not executed and the exception might be caught elsewhere, 7985see |try-nesting|. 7986 When during execution of a catch clause another exception is thrown, the 7987remaining lines in that catch clause are not executed. The new exception is 7988not matched against the patterns in any of the ":catch" commands of the same 7989try conditional and none of its catch clauses is taken. If there is, however, 7990a finally clause, it is executed, and the exception pends during its 7991execution. The commands following the ":endtry" are not executed. The new 7992exception might, however, be caught elsewhere, see |try-nesting|. 7993 When during execution of the finally clause (if present) an exception is 7994thrown, the remaining lines in the finally clause are skipped. If the finally 7995clause has been taken because of an exception from the try block or one of the 7996catch clauses, the original (pending) exception is discarded. The commands 7997following the ":endtry" are not executed, and the exception from the finally 7998clause is propagated and can be caught elsewhere, see |try-nesting|. 7999 8000The finally clause is also executed, when a ":break" or ":continue" for 8001a ":while" loop enclosing the complete try conditional is executed from the 8002try block or a catch clause. Or when a ":return" or ":finish" is executed 8003from the try block or a catch clause of a try conditional in a function or 8004sourced script, respectively. The ":break", ":continue", ":return", or 8005":finish" pends during execution of the finally clause and is resumed when the 8006":endtry" is reached. It is, however, discarded when an exception is thrown 8007from the finally clause. 8008 When a ":break" or ":continue" for a ":while" loop enclosing the complete 8009try conditional or when a ":return" or ":finish" is encountered in the finally 8010clause, the rest of the finally clause is skipped, and the ":break", 8011":continue", ":return" or ":finish" is executed as usual. If the finally 8012clause has been taken because of an exception or an earlier ":break", 8013":continue", ":return", or ":finish" from the try block or a catch clause, 8014this pending exception or command is discarded. 8015 8016For examples see |throw-catch| and |try-finally|. 8017 8018 8019NESTING OF TRY CONDITIONALS *try-nesting* 8020 8021Try conditionals can be nested arbitrarily. That is, a complete try 8022conditional can be put into the try block, a catch clause, or the finally 8023clause of another try conditional. If the inner try conditional does not 8024catch an exception thrown in its try block or throws a new exception from one 8025of its catch clauses or its finally clause, the outer try conditional is 8026checked according to the rules above. If the inner try conditional is in the 8027try block of the outer try conditional, its catch clauses are checked, but 8028otherwise only the finally clause is executed. It does not matter for 8029nesting, whether the inner try conditional is directly contained in the outer 8030one, or whether the outer one sources a script or calls a function containing 8031the inner try conditional. 8032 8033When none of the active try conditionals catches an exception, just their 8034finally clauses are executed. Thereafter, the script processing terminates. 8035An error message is displayed in case of an uncaught exception explicitly 8036thrown by a ":throw" command. For uncaught error and interrupt exceptions 8037implicitly raised by Vim, the error message(s) or interrupt message are shown 8038as usual. 8039 8040For examples see |throw-catch|. 8041 8042 8043EXAMINING EXCEPTION HANDLING CODE *except-examine* 8044 8045Exception handling code can get tricky. If you are in doubt what happens, set 8046'verbose' to 13 or use the ":13verbose" command modifier when sourcing your 8047script file. Then you see when an exception is thrown, discarded, caught, or 8048finished. When using a verbosity level of at least 14, things pending in 8049a finally clause are also shown. This information is also given in debug mode 8050(see |debug-scripts|). 8051 8052 8053THROWING AND CATCHING EXCEPTIONS *throw-catch* 8054 8055You can throw any number or string as an exception. Use the |:throw| command 8056and pass the value to be thrown as argument: > 8057 :throw 4711 8058 :throw "string" 8059< *throw-expression* 8060You can also specify an expression argument. The expression is then evaluated 8061first, and the result is thrown: > 8062 :throw 4705 + strlen("string") 8063 :throw strpart("strings", 0, 6) 8064 8065An exception might be thrown during evaluation of the argument of the ":throw" 8066command. Unless it is caught there, the expression evaluation is abandoned. 8067The ":throw" command then does not throw a new exception. 8068 Example: > 8069 8070 :function! Foo(arg) 8071 : try 8072 : throw a:arg 8073 : catch /foo/ 8074 : endtry 8075 : return 1 8076 :endfunction 8077 : 8078 :function! Bar() 8079 : echo "in Bar" 8080 : return 4710 8081 :endfunction 8082 : 8083 :throw Foo("arrgh") + Bar() 8084 8085This throws "arrgh", and "in Bar" is not displayed since Bar() is not 8086executed. > 8087 :throw Foo("foo") + Bar() 8088however displays "in Bar" and throws 4711. 8089 8090Any other command that takes an expression as argument might also be 8091abandoned by an (uncaught) exception during the expression evaluation. The 8092exception is then propagated to the caller of the command. 8093 Example: > 8094 8095 :if Foo("arrgh") 8096 : echo "then" 8097 :else 8098 : echo "else" 8099 :endif 8100 8101Here neither of "then" or "else" is displayed. 8102 8103 *catch-order* 8104Exceptions can be caught by a try conditional with one or more |:catch| 8105commands, see |try-conditionals|. The values to be caught by each ":catch" 8106command can be specified as a pattern argument. The subsequent catch clause 8107gets executed when a matching exception is caught. 8108 Example: > 8109 8110 :function! Foo(value) 8111 : try 8112 : throw a:value 8113 : catch /^\d\+$/ 8114 : echo "Number thrown" 8115 : catch /.*/ 8116 : echo "String thrown" 8117 : endtry 8118 :endfunction 8119 : 8120 :call Foo(0x1267) 8121 :call Foo('string') 8122 8123The first call to Foo() displays "Number thrown", the second "String thrown". 8124An exception is matched against the ":catch" commands in the order they are 8125specified. Only the first match counts. So you should place the more 8126specific ":catch" first. The following order does not make sense: > 8127 8128 : catch /.*/ 8129 : echo "String thrown" 8130 : catch /^\d\+$/ 8131 : echo "Number thrown" 8132 8133The first ":catch" here matches always, so that the second catch clause is 8134never taken. 8135 8136 *throw-variables* 8137If you catch an exception by a general pattern, you may access the exact value 8138in the variable |v:exception|: > 8139 8140 : catch /^\d\+$/ 8141 : echo "Number thrown. Value is" v:exception 8142 8143You may also be interested where an exception was thrown. This is stored in 8144|v:throwpoint|. Note that "v:exception" and "v:throwpoint" are valid for the 8145exception most recently caught as long it is not finished. 8146 Example: > 8147 8148 :function! Caught() 8149 : if v:exception != "" 8150 : echo 'Caught "' . v:exception . '" in ' . v:throwpoint 8151 : else 8152 : echo 'Nothing caught' 8153 : endif 8154 :endfunction 8155 : 8156 :function! Foo() 8157 : try 8158 : try 8159 : try 8160 : throw 4711 8161 : finally 8162 : call Caught() 8163 : endtry 8164 : catch /.*/ 8165 : call Caught() 8166 : throw "oops" 8167 : endtry 8168 : catch /.*/ 8169 : call Caught() 8170 : finally 8171 : call Caught() 8172 : endtry 8173 :endfunction 8174 : 8175 :call Foo() 8176 8177This displays > 8178 8179 Nothing caught 8180 Caught "4711" in function Foo, line 4 8181 Caught "oops" in function Foo, line 10 8182 Nothing caught 8183 8184A practical example: The following command ":LineNumber" displays the line 8185number in the script or function where it has been used: > 8186 8187 :function! LineNumber() 8188 : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "") 8189 :endfunction 8190 :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry 8191< 8192 *try-nested* 8193An exception that is not caught by a try conditional can be caught by 8194a surrounding try conditional: > 8195 8196 :try 8197 : try 8198 : throw "foo" 8199 : catch /foobar/ 8200 : echo "foobar" 8201 : finally 8202 : echo "inner finally" 8203 : endtry 8204 :catch /foo/ 8205 : echo "foo" 8206 :endtry 8207 8208The inner try conditional does not catch the exception, just its finally 8209clause is executed. The exception is then caught by the outer try 8210conditional. The example displays "inner finally" and then "foo". 8211 8212 *throw-from-catch* 8213You can catch an exception and throw a new one to be caught elsewhere from the 8214catch clause: > 8215 8216 :function! Foo() 8217 : throw "foo" 8218 :endfunction 8219 : 8220 :function! Bar() 8221 : try 8222 : call Foo() 8223 : catch /foo/ 8224 : echo "Caught foo, throw bar" 8225 : throw "bar" 8226 : endtry 8227 :endfunction 8228 : 8229 :try 8230 : call Bar() 8231 :catch /.*/ 8232 : echo "Caught" v:exception 8233 :endtry 8234 8235This displays "Caught foo, throw bar" and then "Caught bar". 8236 8237 *rethrow* 8238There is no real rethrow in the Vim script language, but you may throw 8239"v:exception" instead: > 8240 8241 :function! Bar() 8242 : try 8243 : call Foo() 8244 : catch /.*/ 8245 : echo "Rethrow" v:exception 8246 : throw v:exception 8247 : endtry 8248 :endfunction 8249< *try-echoerr* 8250Note that this method cannot be used to "rethrow" Vim error or interrupt 8251exceptions, because it is not possible to fake Vim internal exceptions. 8252Trying so causes an error exception. You should throw your own exception 8253denoting the situation. If you want to cause a Vim error exception containing 8254the original error exception value, you can use the |:echoerr| command: > 8255 8256 :try 8257 : try 8258 : asdf 8259 : catch /.*/ 8260 : echoerr v:exception 8261 : endtry 8262 :catch /.*/ 8263 : echo v:exception 8264 :endtry 8265 8266This code displays 8267 8268 Vim(echoerr):Vim:E492: Not an editor command: asdf ~ 8269 8270 8271CLEANUP CODE *try-finally* 8272 8273Scripts often change global settings and restore them at their end. If the 8274user however interrupts the script by pressing CTRL-C, the settings remain in 8275an inconsistent state. The same may happen to you in the development phase of 8276a script when an error occurs or you explicitly throw an exception without 8277catching it. You can solve these problems by using a try conditional with 8278a finally clause for restoring the settings. Its execution is guaranteed on 8279normal control flow, on error, on an explicit ":throw", and on interrupt. 8280(Note that errors and interrupts from inside the try conditional are converted 8281to exceptions. When not caught, they terminate the script after the finally 8282clause has been executed.) 8283Example: > 8284 8285 :try 8286 : let s:saved_ts = &ts 8287 : set ts=17 8288 : 8289 : " Do the hard work here. 8290 : 8291 :finally 8292 : let &ts = s:saved_ts 8293 : unlet s:saved_ts 8294 :endtry 8295 8296This method should be used locally whenever a function or part of a script 8297changes global settings which need to be restored on failure or normal exit of 8298that function or script part. 8299 8300 *break-finally* 8301Cleanup code works also when the try block or a catch clause is left by 8302a ":continue", ":break", ":return", or ":finish". 8303 Example: > 8304 8305 :let first = 1 8306 :while 1 8307 : try 8308 : if first 8309 : echo "first" 8310 : let first = 0 8311 : continue 8312 : else 8313 : throw "second" 8314 : endif 8315 : catch /.*/ 8316 : echo v:exception 8317 : break 8318 : finally 8319 : echo "cleanup" 8320 : endtry 8321 : echo "still in while" 8322 :endwhile 8323 :echo "end" 8324 8325This displays "first", "cleanup", "second", "cleanup", and "end". > 8326 8327 :function! Foo() 8328 : try 8329 : return 4711 8330 : finally 8331 : echo "cleanup\n" 8332 : endtry 8333 : echo "Foo still active" 8334 :endfunction 8335 : 8336 :echo Foo() "returned by Foo" 8337 8338This displays "cleanup" and "4711 returned by Foo". You don't need to add an 8339extra ":return" in the finally clause. (Above all, this would override the 8340return value.) 8341 8342 *except-from-finally* 8343Using either of ":continue", ":break", ":return", ":finish", or ":throw" in 8344a finally clause is possible, but not recommended since it abandons the 8345cleanup actions for the try conditional. But, of course, interrupt and error 8346exceptions might get raised from a finally clause. 8347 Example where an error in the finally clause stops an interrupt from 8348working correctly: > 8349 8350 :try 8351 : try 8352 : echo "Press CTRL-C for interrupt" 8353 : while 1 8354 : endwhile 8355 : finally 8356 : unlet novar 8357 : endtry 8358 :catch /novar/ 8359 :endtry 8360 :echo "Script still running" 8361 :sleep 1 8362 8363If you need to put commands that could fail into a finally clause, you should 8364think about catching or ignoring the errors in these commands, see 8365|catch-errors| and |ignore-errors|. 8366 8367 8368CATCHING ERRORS *catch-errors* 8369 8370If you want to catch specific errors, you just have to put the code to be 8371watched in a try block and add a catch clause for the error message. The 8372presence of the try conditional causes all errors to be converted to an 8373exception. No message is displayed and |v:errmsg| is not set then. To find 8374the right pattern for the ":catch" command, you have to know how the format of 8375the error exception is. 8376 Error exceptions have the following format: > 8377 8378 Vim({cmdname}):{errmsg} 8379or > 8380 Vim:{errmsg} 8381 8382{cmdname} is the name of the command that failed; the second form is used when 8383the command name is not known. {errmsg} is the error message usually produced 8384when the error occurs outside try conditionals. It always begins with 8385a capital "E", followed by a two or three-digit error number, a colon, and 8386a space. 8387 8388Examples: 8389 8390The command > 8391 :unlet novar 8392normally produces the error message > 8393 E108: No such variable: "novar" 8394which is converted inside try conditionals to an exception > 8395 Vim(unlet):E108: No such variable: "novar" 8396 8397The command > 8398 :dwim 8399normally produces the error message > 8400 E492: Not an editor command: dwim 8401which is converted inside try conditionals to an exception > 8402 Vim:E492: Not an editor command: dwim 8403 8404You can catch all ":unlet" errors by a > 8405 :catch /^Vim(unlet):/ 8406or all errors for misspelled command names by a > 8407 :catch /^Vim:E492:/ 8408 8409Some error messages may be produced by different commands: > 8410 :function nofunc 8411and > 8412 :delfunction nofunc 8413both produce the error message > 8414 E128: Function name must start with a capital: nofunc 8415which is converted inside try conditionals to an exception > 8416 Vim(function):E128: Function name must start with a capital: nofunc 8417or > 8418 Vim(delfunction):E128: Function name must start with a capital: nofunc 8419respectively. You can catch the error by its number independently on the 8420command that caused it if you use the following pattern: > 8421 :catch /^Vim(\a\+):E128:/ 8422 8423Some commands like > 8424 :let x = novar 8425produce multiple error messages, here: > 8426 E121: Undefined variable: novar 8427 E15: Invalid expression: novar 8428Only the first is used for the exception value, since it is the most specific 8429one (see |except-several-errors|). So you can catch it by > 8430 :catch /^Vim(\a\+):E121:/ 8431 8432You can catch all errors related to the name "nofunc" by > 8433 :catch /\<nofunc\>/ 8434 8435You can catch all Vim errors in the ":write" and ":read" commands by > 8436 :catch /^Vim(\(write\|read\)):E\d\+:/ 8437 8438You can catch all Vim errors by the pattern > 8439 :catch /^Vim\((\a\+)\)\=:E\d\+:/ 8440< 8441 *catch-text* 8442NOTE: You should never catch the error message text itself: > 8443 :catch /No such variable/ 8444only works in the English locale, but not when the user has selected 8445a different language by the |:language| command. It is however helpful to 8446cite the message text in a comment: > 8447 :catch /^Vim(\a\+):E108:/ " No such variable 8448 8449 8450IGNORING ERRORS *ignore-errors* 8451 8452You can ignore errors in a specific Vim command by catching them locally: > 8453 8454 :try 8455 : write 8456 :catch 8457 :endtry 8458 8459But you are strongly recommended NOT to use this simple form, since it could 8460catch more than you want. With the ":write" command, some autocommands could 8461be executed and cause errors not related to writing, for instance: > 8462 8463 :au BufWritePre * unlet novar 8464 8465There could even be such errors you are not responsible for as a script 8466writer: a user of your script might have defined such autocommands. You would 8467then hide the error from the user. 8468 It is much better to use > 8469 8470 :try 8471 : write 8472 :catch /^Vim(write):/ 8473 :endtry 8474 8475which only catches real write errors. So catch only what you'd like to ignore 8476intentionally. 8477 8478For a single command that does not cause execution of autocommands, you could 8479even suppress the conversion of errors to exceptions by the ":silent!" 8480command: > 8481 :silent! nunmap k 8482This works also when a try conditional is active. 8483 8484 8485CATCHING INTERRUPTS *catch-interrupt* 8486 8487When there are active try conditionals, an interrupt (CTRL-C) is converted to 8488the exception "Vim:Interrupt". You can catch it like every exception. The 8489script is not terminated, then. 8490 Example: > 8491 8492 :function! TASK1() 8493 : sleep 10 8494 :endfunction 8495 8496 :function! TASK2() 8497 : sleep 20 8498 :endfunction 8499 8500 :while 1 8501 : let command = input("Type a command: ") 8502 : try 8503 : if command == "" 8504 : continue 8505 : elseif command == "END" 8506 : break 8507 : elseif command == "TASK1" 8508 : call TASK1() 8509 : elseif command == "TASK2" 8510 : call TASK2() 8511 : else 8512 : echo "\nIllegal command:" command 8513 : continue 8514 : endif 8515 : catch /^Vim:Interrupt$/ 8516 : echo "\nCommand interrupted" 8517 : " Caught the interrupt. Continue with next prompt. 8518 : endtry 8519 :endwhile 8520 8521You can interrupt a task here by pressing CTRL-C; the script then asks for 8522a new command. If you press CTRL-C at the prompt, the script is terminated. 8523 8524For testing what happens when CTRL-C would be pressed on a specific line in 8525your script, use the debug mode and execute the |>quit| or |>interrupt| 8526command on that line. See |debug-scripts|. 8527 8528 8529CATCHING ALL *catch-all* 8530 8531The commands > 8532 8533 :catch /.*/ 8534 :catch // 8535 :catch 8536 8537catch everything, error exceptions, interrupt exceptions and exceptions 8538explicitly thrown by the |:throw| command. This is useful at the top level of 8539a script in order to catch unexpected things. 8540 Example: > 8541 8542 :try 8543 : 8544 : " do the hard work here 8545 : 8546 :catch /MyException/ 8547 : 8548 : " handle known problem 8549 : 8550 :catch /^Vim:Interrupt$/ 8551 : echo "Script interrupted" 8552 :catch /.*/ 8553 : echo "Internal error (" . v:exception . ")" 8554 : echo " - occurred at " . v:throwpoint 8555 :endtry 8556 :" end of script 8557 8558Note: Catching all might catch more things than you want. Thus, you are 8559strongly encouraged to catch only for problems that you can really handle by 8560specifying a pattern argument to the ":catch". 8561 Example: Catching all could make it nearly impossible to interrupt a script 8562by pressing CTRL-C: > 8563 8564 :while 1 8565 : try 8566 : sleep 1 8567 : catch 8568 : endtry 8569 :endwhile 8570 8571 8572EXCEPTIONS AND AUTOCOMMANDS *except-autocmd* 8573 8574Exceptions may be used during execution of autocommands. Example: > 8575 8576 :autocmd User x try 8577 :autocmd User x throw "Oops!" 8578 :autocmd User x catch 8579 :autocmd User x echo v:exception 8580 :autocmd User x endtry 8581 :autocmd User x throw "Arrgh!" 8582 :autocmd User x echo "Should not be displayed" 8583 : 8584 :try 8585 : doautocmd User x 8586 :catch 8587 : echo v:exception 8588 :endtry 8589 8590This displays "Oops!" and "Arrgh!". 8591 8592 *except-autocmd-Pre* 8593For some commands, autocommands get executed before the main action of the 8594command takes place. If an exception is thrown and not caught in the sequence 8595of autocommands, the sequence and the command that caused its execution are 8596abandoned and the exception is propagated to the caller of the command. 8597 Example: > 8598 8599 :autocmd BufWritePre * throw "FAIL" 8600 :autocmd BufWritePre * echo "Should not be displayed" 8601 : 8602 :try 8603 : write 8604 :catch 8605 : echo "Caught:" v:exception "from" v:throwpoint 8606 :endtry 8607 8608Here, the ":write" command does not write the file currently being edited (as 8609you can see by checking 'modified'), since the exception from the BufWritePre 8610autocommand abandons the ":write". The exception is then caught and the 8611script displays: > 8612 8613 Caught: FAIL from BufWrite Auto commands for "*" 8614< 8615 *except-autocmd-Post* 8616For some commands, autocommands get executed after the main action of the 8617command has taken place. If this main action fails and the command is inside 8618an active try conditional, the autocommands are skipped and an error exception 8619is thrown that can be caught by the caller of the command. 8620 Example: > 8621 8622 :autocmd BufWritePost * echo "File successfully written!" 8623 : 8624 :try 8625 : write /i/m/p/o/s/s/i/b/l/e 8626 :catch 8627 : echo v:exception 8628 :endtry 8629 8630This just displays: > 8631 8632 Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e) 8633 8634If you really need to execute the autocommands even when the main action 8635fails, trigger the event from the catch clause. 8636 Example: > 8637 8638 :autocmd BufWritePre * set noreadonly 8639 :autocmd BufWritePost * set readonly 8640 : 8641 :try 8642 : write /i/m/p/o/s/s/i/b/l/e 8643 :catch 8644 : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e 8645 :endtry 8646< 8647You can also use ":silent!": > 8648 8649 :let x = "ok" 8650 :let v:errmsg = "" 8651 :autocmd BufWritePost * if v:errmsg != "" 8652 :autocmd BufWritePost * let x = "after fail" 8653 :autocmd BufWritePost * endif 8654 :try 8655 : silent! write /i/m/p/o/s/s/i/b/l/e 8656 :catch 8657 :endtry 8658 :echo x 8659 8660This displays "after fail". 8661 8662If the main action of the command does not fail, exceptions from the 8663autocommands will be catchable by the caller of the command: > 8664 8665 :autocmd BufWritePost * throw ":-(" 8666 :autocmd BufWritePost * echo "Should not be displayed" 8667 : 8668 :try 8669 : write 8670 :catch 8671 : echo v:exception 8672 :endtry 8673< 8674 *except-autocmd-Cmd* 8675For some commands, the normal action can be replaced by a sequence of 8676autocommands. Exceptions from that sequence will be catchable by the caller 8677of the command. 8678 Example: For the ":write" command, the caller cannot know whether the file 8679had actually been written when the exception occurred. You need to tell it in 8680some way. > 8681 8682 :if !exists("cnt") 8683 : let cnt = 0 8684 : 8685 : autocmd BufWriteCmd * if &modified 8686 : autocmd BufWriteCmd * let cnt = cnt + 1 8687 : autocmd BufWriteCmd * if cnt % 3 == 2 8688 : autocmd BufWriteCmd * throw "BufWriteCmdError" 8689 : autocmd BufWriteCmd * endif 8690 : autocmd BufWriteCmd * write | set nomodified 8691 : autocmd BufWriteCmd * if cnt % 3 == 0 8692 : autocmd BufWriteCmd * throw "BufWriteCmdError" 8693 : autocmd BufWriteCmd * endif 8694 : autocmd BufWriteCmd * echo "File successfully written!" 8695 : autocmd BufWriteCmd * endif 8696 :endif 8697 : 8698 :try 8699 : write 8700 :catch /^BufWriteCmdError$/ 8701 : if &modified 8702 : echo "Error on writing (file contents not changed)" 8703 : else 8704 : echo "Error after writing" 8705 : endif 8706 :catch /^Vim(write):/ 8707 : echo "Error on writing" 8708 :endtry 8709 8710When this script is sourced several times after making changes, it displays 8711first > 8712 File successfully written! 8713then > 8714 Error on writing (file contents not changed) 8715then > 8716 Error after writing 8717etc. 8718 8719 *except-autocmd-ill* 8720You cannot spread a try conditional over autocommands for different events. 8721The following code is ill-formed: > 8722 8723 :autocmd BufWritePre * try 8724 : 8725 :autocmd BufWritePost * catch 8726 :autocmd BufWritePost * echo v:exception 8727 :autocmd BufWritePost * endtry 8728 : 8729 :write 8730 8731 8732EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS *except-hier-param* 8733 8734Some programming languages allow to use hierarchies of exception classes or to 8735pass additional information with the object of an exception class. You can do 8736similar things in Vim. 8737 In order to throw an exception from a hierarchy, just throw the complete 8738class name with the components separated by a colon, for instance throw the 8739string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library. 8740 When you want to pass additional information with your exception class, add 8741it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)" 8742for an error when writing "myfile". 8743 With the appropriate patterns in the ":catch" command, you can catch for 8744base classes or derived classes of your hierarchy. Additional information in 8745parentheses can be cut out from |v:exception| with the ":substitute" command. 8746 Example: > 8747 8748 :function! CheckRange(a, func) 8749 : if a:a < 0 8750 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")" 8751 : endif 8752 :endfunction 8753 : 8754 :function! Add(a, b) 8755 : call CheckRange(a:a, "Add") 8756 : call CheckRange(a:b, "Add") 8757 : let c = a:a + a:b 8758 : if c < 0 8759 : throw "EXCEPT:MATHERR:OVERFLOW" 8760 : endif 8761 : return c 8762 :endfunction 8763 : 8764 :function! Div(a, b) 8765 : call CheckRange(a:a, "Div") 8766 : call CheckRange(a:b, "Div") 8767 : if (a:b == 0) 8768 : throw "EXCEPT:MATHERR:ZERODIV" 8769 : endif 8770 : return a:a / a:b 8771 :endfunction 8772 : 8773 :function! Write(file) 8774 : try 8775 : execute "write" fnameescape(a:file) 8776 : catch /^Vim(write):/ 8777 : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR" 8778 : endtry 8779 :endfunction 8780 : 8781 :try 8782 : 8783 : " something with arithmetics and I/O 8784 : 8785 :catch /^EXCEPT:MATHERR:RANGE/ 8786 : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "") 8787 : echo "Range error in" function 8788 : 8789 :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV 8790 : echo "Math error" 8791 : 8792 :catch /^EXCEPT:IO/ 8793 : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "") 8794 : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "") 8795 : if file !~ '^/' 8796 : let file = dir . "/" . file 8797 : endif 8798 : echo 'I/O error for "' . file . '"' 8799 : 8800 :catch /^EXCEPT/ 8801 : echo "Unspecified error" 8802 : 8803 :endtry 8804 8805The exceptions raised by Vim itself (on error or when pressing CTRL-C) use 8806a flat hierarchy: they are all in the "Vim" class. You cannot throw yourself 8807exceptions with the "Vim" prefix; they are reserved for Vim. 8808 Vim error exceptions are parameterized with the name of the command that 8809failed, if known. See |catch-errors|. 8810 8811 8812PECULIARITIES 8813 *except-compat* 8814The exception handling concept requires that the command sequence causing the 8815exception is aborted immediately and control is transferred to finally clauses 8816and/or a catch clause. 8817 8818In the Vim script language there are cases where scripts and functions 8819continue after an error: in functions without the "abort" flag or in a command 8820after ":silent!", control flow goes to the following line, and outside 8821functions, control flow goes to the line following the outermost ":endwhile" 8822or ":endif". On the other hand, errors should be catchable as exceptions 8823(thus, requiring the immediate abortion). 8824 8825This problem has been solved by converting errors to exceptions and using 8826immediate abortion (if not suppressed by ":silent!") only when a try 8827conditional is active. This is no restriction since an (error) exception can 8828be caught only from an active try conditional. If you want an immediate 8829termination without catching the error, just use a try conditional without 8830catch clause. (You can cause cleanup code being executed before termination 8831by specifying a finally clause.) 8832 8833When no try conditional is active, the usual abortion and continuation 8834behavior is used instead of immediate abortion. This ensures compatibility of 8835scripts written for Vim 6.1 and earlier. 8836 8837However, when sourcing an existing script that does not use exception handling 8838commands (or when calling one of its functions) from inside an active try 8839conditional of a new script, you might change the control flow of the existing 8840script on error. You get the immediate abortion on error and can catch the 8841error in the new script. If however the sourced script suppresses error 8842messages by using the ":silent!" command (checking for errors by testing 8843|v:errmsg| if appropriate), its execution path is not changed. The error is 8844not converted to an exception. (See |:silent|.) So the only remaining cause 8845where this happens is for scripts that don't care about errors and produce 8846error messages. You probably won't want to use such code from your new 8847scripts. 8848 8849 *except-syntax-err* 8850Syntax errors in the exception handling commands are never caught by any of 8851the ":catch" commands of the try conditional they belong to. Its finally 8852clauses, however, is executed. 8853 Example: > 8854 8855 :try 8856 : try 8857 : throw 4711 8858 : catch /\(/ 8859 : echo "in catch with syntax error" 8860 : catch 8861 : echo "inner catch-all" 8862 : finally 8863 : echo "inner finally" 8864 : endtry 8865 :catch 8866 : echo 'outer catch-all caught "' . v:exception . '"' 8867 : finally 8868 : echo "outer finally" 8869 :endtry 8870 8871This displays: > 8872 inner finally 8873 outer catch-all caught "Vim(catch):E54: Unmatched \(" 8874 outer finally 8875The original exception is discarded and an error exception is raised, instead. 8876 8877 *except-single-line* 8878The ":try", ":catch", ":finally", and ":endtry" commands can be put on 8879a single line, but then syntax errors may make it difficult to recognize the 8880"catch" line, thus you better avoid this. 8881 Example: > 8882 :try | unlet! foo # | catch | endtry 8883raises an error exception for the trailing characters after the ":unlet!" 8884argument, but does not see the ":catch" and ":endtry" commands, so that the 8885error exception is discarded and the "E488: Trailing characters" message gets 8886displayed. 8887 8888 *except-several-errors* 8889When several errors appear in a single command, the first error message is 8890usually the most specific one and therefor converted to the error exception. 8891 Example: > 8892 echo novar 8893causes > 8894 E121: Undefined variable: novar 8895 E15: Invalid expression: novar 8896The value of the error exception inside try conditionals is: > 8897 Vim(echo):E121: Undefined variable: novar 8898< *except-syntax-error* 8899But when a syntax error is detected after a normal error in the same command, 8900the syntax error is used for the exception being thrown. 8901 Example: > 8902 unlet novar # 8903causes > 8904 E108: No such variable: "novar" 8905 E488: Trailing characters 8906The value of the error exception inside try conditionals is: > 8907 Vim(unlet):E488: Trailing characters 8908This is done because the syntax error might change the execution path in a way 8909not intended by the user. Example: > 8910 try 8911 try | unlet novar # | catch | echo v:exception | endtry 8912 catch /.*/ 8913 echo "outer catch:" v:exception 8914 endtry 8915This displays "outer catch: Vim(unlet):E488: Trailing characters", and then 8916a "E600: Missing :endtry" error message is given, see |except-single-line|. 8917 8918============================================================================== 89199. Examples *eval-examples* 8920 8921Printing in Binary ~ 8922> 8923 :" The function Nr2Bin() returns the binary string representation of a number. 8924 :func Nr2Bin(nr) 8925 : let n = a:nr 8926 : let r = "" 8927 : while n 8928 : let r = '01'[n % 2] . r 8929 : let n = n / 2 8930 : endwhile 8931 : return r 8932 :endfunc 8933 8934 :" The function String2Bin() converts each character in a string to a 8935 :" binary string, separated with dashes. 8936 :func String2Bin(str) 8937 : let out = '' 8938 : for ix in range(strlen(a:str)) 8939 : let out = out . '-' . Nr2Bin(char2nr(a:str[ix])) 8940 : endfor 8941 : return out[1:] 8942 :endfunc 8943 8944Example of its use: > 8945 :echo Nr2Bin(32) 8946result: "100000" > 8947 :echo String2Bin("32") 8948result: "110011-110010" 8949 8950 8951Sorting lines ~ 8952 8953This example sorts lines with a specific compare function. > 8954 8955 :func SortBuffer() 8956 : let lines = getline(1, '$') 8957 : call sort(lines, function("Strcmp")) 8958 : call setline(1, lines) 8959 :endfunction 8960 8961As a one-liner: > 8962 :call setline(1, sort(getline(1, '$'), function("Strcmp"))) 8963 8964 8965scanf() replacement ~ 8966 *sscanf* 8967There is no sscanf() function in Vim. If you need to extract parts from a 8968line, you can use matchstr() and substitute() to do it. This example shows 8969how to get the file name, line number and column number out of a line like 8970"foobar.txt, 123, 45". > 8971 :" Set up the match bit 8972 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)' 8973 :"get the part matching the whole expression 8974 :let l = matchstr(line, mx) 8975 :"get each item out of the match 8976 :let file = substitute(l, mx, '\1', '') 8977 :let lnum = substitute(l, mx, '\2', '') 8978 :let col = substitute(l, mx, '\3', '') 8979 8980The input is in the variable "line", the results in the variables "file", 8981"lnum" and "col". (idea from Michael Geddes) 8982 8983 8984getting the scriptnames in a Dictionary ~ 8985 *scriptnames-dictionary* 8986The |:scriptnames| command can be used to get a list of all script files that 8987have been sourced. There is no equivalent function or variable for this 8988(because it's rarely needed). In case you need to manipulate the list this 8989code can be used: > 8990 " Get the output of ":scriptnames" in the scriptnames_output variable. 8991 let scriptnames_output = '' 8992 redir => scriptnames_output 8993 silent scriptnames 8994 redir END 8995 8996 " Split the output into lines and parse each line. Add an entry to the 8997 " "scripts" dictionary. 8998 let scripts = {} 8999 for line in split(scriptnames_output, "\n") 9000 " Only do non-blank lines. 9001 if line =~ '\S' 9002 " Get the first number in the line. 9003 let nr = matchstr(line, '\d\+') 9004 " Get the file name, remove the script number " 123: ". 9005 let name = substitute(line, '.\+:\s*', '', '') 9006 " Add an item to the Dictionary 9007 let scripts[nr] = name 9008 endif 9009 endfor 9010 unlet scriptnames_output 9011 9012============================================================================== 901310. No +eval feature *no-eval-feature* 9014 9015When the |+eval| feature was disabled at compile time, none of the expression 9016evaluation commands are available. To prevent this from causing Vim scripts 9017to generate all kinds of errors, the ":if" and ":endif" commands are still 9018recognized, though the argument of the ":if" and everything between the ":if" 9019and the matching ":endif" is ignored. Nesting of ":if" blocks is allowed, but 9020only if the commands are at the start of the line. The ":else" command is not 9021recognized. 9022 9023Example of how to avoid executing commands when the |+eval| feature is 9024missing: > 9025 9026 :if 1 9027 : echo "Expression evaluation is compiled in" 9028 :else 9029 : echo "You will _never_ see this message" 9030 :endif 9031 9032============================================================================== 903311. The sandbox *eval-sandbox* *sandbox* *E48* 9034 9035The 'foldexpr', 'formatexpr', 'includeexpr', 'indentexpr', 'statusline' and 9036'foldtext' options may be evaluated in a sandbox. This means that you are 9037protected from these expressions having nasty side effects. This gives some 9038safety for when these options are set from a modeline. It is also used when 9039the command from a tags file is executed and for CTRL-R = in the command line. 9040The sandbox is also used for the |:sandbox| command. 9041 9042These items are not allowed in the sandbox: 9043 - changing the buffer text 9044 - defining or changing mapping, autocommands, functions, user commands 9045 - setting certain options (see |option-summary|) 9046 - setting certain v: variables (see |v:var|) *E794* 9047 - executing a shell command 9048 - reading or writing a file 9049 - jumping to another buffer or editing a file 9050 - executing Python, Perl, etc. commands 9051This is not guaranteed 100% secure, but it should block most attacks. 9052 9053 *:san* *:sandbox* 9054:san[dbox] {cmd} Execute {cmd} in the sandbox. Useful to evaluate an 9055 option that may have been set from a modeline, e.g. 9056 'foldexpr'. 9057 9058 *sandbox-option* 9059A few options contain an expression. When this expression is evaluated it may 9060have to be done in the sandbox to avoid a security risk. But the sandbox is 9061restrictive, thus this only happens when the option was set from an insecure 9062location. Insecure in this context are: 9063- sourcing a .vimrc or .exrc in the current directory 9064- while executing in the sandbox 9065- value coming from a modeline 9066 9067Note that when in the sandbox and saving an option value and restoring it, the 9068option will still be marked as it was set in the sandbox. 9069 9070============================================================================== 907112. Textlock *textlock* 9072 9073In a few situations it is not allowed to change the text in the buffer, jump 9074to another window and some other things that might confuse or break what Vim 9075is currently doing. This mostly applies to things that happen when Vim is 9076actually doing something else. For example, evaluating the 'balloonexpr' may 9077happen any moment the mouse cursor is resting at some position. 9078 9079This is not allowed when the textlock is active: 9080 - changing the buffer text 9081 - jumping to another buffer or window 9082 - editing another file 9083 - closing a window or quitting Vim 9084 - etc. 9085 9086 9087 vim:tw=78:ts=8:ft=help:norl: 9088