1*eval.txt* For Vim version 8.0. Last change: 2017 Aug 05 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| 3213. Testing |testing| 33 34{Vi does not have any of these commands} 35 36============================================================================== 371. Variables *variables* 38 391.1 Variable types ~ 40 *E712* 41There are nine types of variables: 42 43Number A 32 or 64 bit signed number. |expr-number| *Number* 44 64-bit Numbers are available only when compiled with the 45 |+num64| feature. 46 Examples: -123 0x10 0177 0b1011 47 48Float A floating point number. |floating-point-format| *Float* 49 {only when compiled with the |+float| feature} 50 Examples: 123.456 1.15e-6 -1.1e3 51 52 *E928* 53String A NUL terminated string of 8-bit unsigned characters (bytes). 54 |expr-string| Examples: "ab\txx\"--" 'x-z''a,c' 55 56List An ordered sequence of items |List|. 57 Example: [1, 2, ['a', 'b']] 58 59Dictionary An associative, unordered array: Each entry has a key and a 60 value. |Dictionary| 61 Example: {'blue': "#0000ff", 'red': "#ff0000"} 62 63Funcref A reference to a function |Funcref|. 64 Example: function("strlen") 65 It can be bound to a dictionary and arguments, it then works 66 like a Partial. 67 Example: function("Callback", [arg], myDict) 68 69Special |v:false|, |v:true|, |v:none| and |v:null|. *Special* 70 71Job Used for a job, see |job_start()|. *Job* *Jobs* 72 73Channel Used for a channel, see |ch_open()|. *Channel* *Channels* 74 75The Number and String types are converted automatically, depending on how they 76are used. 77 78Conversion from a Number to a String is by making the ASCII representation of 79the Number. Examples: 80 Number 123 --> String "123" ~ 81 Number 0 --> String "0" ~ 82 Number -1 --> String "-1" ~ 83 *octal* 84Conversion from a String to a Number is done by converting the first digits to 85a number. Hexadecimal "0xf9", Octal "017", and Binary "0b10" numbers are 86recognized. If the String doesn't start with digits, the result is zero. 87Examples: 88 String "456" --> Number 456 ~ 89 String "6bar" --> Number 6 ~ 90 String "foo" --> Number 0 ~ 91 String "0xf1" --> Number 241 ~ 92 String "0100" --> Number 64 ~ 93 String "0b101" --> Number 5 ~ 94 String "-8" --> Number -8 ~ 95 String "+8" --> Number 0 ~ 96 97To force conversion from String to Number, add zero to it: > 98 :echo "0100" + 0 99< 64 ~ 100 101To avoid a leading zero to cause octal conversion, or for using a different 102base, use |str2nr()|. 103 104 *TRUE* *FALSE* 105For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE. 106You can also use |v:false| and |v:true|. When TRUE is returned from a 107function it is the Number one, FALSE is the number zero. 108 109Note that in the command: > 110 :if "foo" 111 :" NOT executed 112"foo" is converted to 0, which means FALSE. If the string starts with a 113non-zero number it means TRUE: > 114 :if "8foo" 115 :" executed 116To test for a non-empty string, use empty(): > 117 :if !empty("foo") 118< 119 *non-zero-arg* 120Function arguments often behave slightly different from |TRUE|: If the 121argument is present and it evaluates to a non-zero Number, |v:true| or a 122non-empty String, then the value is considered to be TRUE. 123Note that " " and "0" are also non-empty strings, thus cause the mode to be 124cleared. A List, Dictionary or Float is not a Number or String, thus 125evaluates to FALSE. 126 127 *E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910* *E913* 128List, Dictionary, Funcref, Job and Channel types are not automatically 129converted. 130 131 *E805* *E806* *E808* 132When mixing Number and Float the Number is converted to Float. Otherwise 133there is no automatic conversion of Float. You can use str2float() for String 134to Float, printf() for Float to String and float2nr() for Float to Number. 135 136 *E891* *E892* *E893* *E894* *E907* *E911* *E914* 137When expecting a Float a Number can also be used, but nothing else. 138 139 *no-type-checking* 140You will not get an error if you try to change the type of a variable. 141 142 1431.2 Function references ~ 144 *Funcref* *E695* *E718* 145A Funcref variable is obtained with the |function()| function, the |funcref()| 146function or created with the lambda expression |expr-lambda|. It can be used 147in an expression in the place of a function name, before the parenthesis 148around the arguments, to invoke the function it refers to. Example: > 149 150 :let Fn = function("MyFunc") 151 :echo Fn() 152< *E704* *E705* *E707* 153A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:". You 154can use "g:" but the following name must still start with a capital. You 155cannot have both a Funcref variable and a function with the same name. 156 157A special case is defining a function and directly assigning its Funcref to a 158Dictionary entry. Example: > 159 :function dict.init() dict 160 : let self.val = 0 161 :endfunction 162 163The key of the Dictionary can start with a lower case letter. The actual 164function name is not used here. Also see |numbered-function|. 165 166A Funcref can also be used with the |:call| command: > 167 :call Fn() 168 :call dict.init() 169 170The name of the referenced function can be obtained with |string()|. > 171 :let func = string(Fn) 172 173You can use |call()| to invoke a Funcref and use a list variable for the 174arguments: > 175 :let r = call(Fn, mylist) 176< 177 *Partial* 178A Funcref optionally binds a Dictionary and/or arguments. This is also called 179a Partial. This is created by passing the Dictionary and/or arguments to 180function() or funcref(). When calling the function the Dictionary and/or 181arguments will be passed to the function. Example: > 182 183 let Cb = function('Callback', ['foo'], myDict) 184 call Cb() 185 186This will invoke the function as if using: > 187 call myDict.Callback('foo') 188 189This is very useful when passing a function around, e.g. in the arguments of 190|ch_open()|. 191 192Note that binding a function to a Dictionary also happens when the function is 193a member of the Dictionary: > 194 195 let myDict.myFunction = MyFunction 196 call myDict.myFunction() 197 198Here MyFunction() will get myDict passed as "self". This happens when the 199"myFunction" member is accessed. When making assigning "myFunction" to 200otherDict and calling it, it will be bound to otherDict: > 201 202 let otherDict.myFunction = myDict.myFunction 203 call otherDict.myFunction() 204 205Now "self" will be "otherDict". But when the dictionary was bound explicitly 206this won't happen: > 207 208 let myDict.myFunction = function(MyFunction, myDict) 209 let otherDict.myFunction = myDict.myFunction 210 call otherDict.myFunction() 211 212Here "self" will be "myDict", because it was bound explicitly. 213 214 2151.3 Lists ~ 216 *list* *List* *Lists* *E686* 217A List is an ordered sequence of items. An item can be of any type. Items 218can be accessed by their index number. Items can be added and removed at any 219position in the sequence. 220 221 222List creation ~ 223 *E696* *E697* 224A List is created with a comma separated list of items in square brackets. 225Examples: > 226 :let mylist = [1, two, 3, "four"] 227 :let emptylist = [] 228 229An item can be any expression. Using a List for an item creates a 230List of Lists: > 231 :let nestlist = [[11, 12], [21, 22], [31, 32]] 232 233An extra comma after the last item is ignored. 234 235 236List index ~ 237 *list-index* *E684* 238An item in the List can be accessed by putting the index in square brackets 239after the List. Indexes are zero-based, thus the first item has index zero. > 240 :let item = mylist[0] " get the first item: 1 241 :let item = mylist[2] " get the third item: 3 242 243When the resulting item is a list this can be repeated: > 244 :let item = nestlist[0][1] " get the first list, second item: 12 245< 246A negative index is counted from the end. Index -1 refers to the last item in 247the List, -2 to the last but one item, etc. > 248 :let last = mylist[-1] " get the last item: "four" 249 250To avoid an error for an invalid index use the |get()| function. When an item 251is not available it returns zero or the default value you specify: > 252 :echo get(mylist, idx) 253 :echo get(mylist, idx, "NONE") 254 255 256List concatenation ~ 257 258Two lists can be concatenated with the "+" operator: > 259 :let longlist = mylist + [5, 6] 260 :let mylist += [7, 8] 261 262To prepend or append an item turn the item into a list by putting [] around 263it. To change a list in-place see |list-modification| below. 264 265 266Sublist ~ 267 *sublist* 268A part of the List can be obtained by specifying the first and last index, 269separated by a colon in square brackets: > 270 :let shortlist = mylist[2:-1] " get List [3, "four"] 271 272Omitting the first index is similar to zero. Omitting the last index is 273similar to -1. > 274 :let endlist = mylist[2:] " from item 2 to the end: [3, "four"] 275 :let shortlist = mylist[2:2] " List with one item: [3] 276 :let otherlist = mylist[:] " make a copy of the List 277 278If the first index is beyond the last item of the List or the second item is 279before the first item, the result is an empty list. There is no error 280message. 281 282If the second index is equal to or greater than the length of the list the 283length minus one is used: > 284 :let mylist = [0, 1, 2, 3] 285 :echo mylist[2:8] " result: [2, 3] 286 287NOTE: mylist[s:e] means using the variable "s:e" as index. Watch out for 288using a single letter variable before the ":". Insert a space when needed: 289mylist[s : e]. 290 291 292List identity ~ 293 *list-identity* 294When variable "aa" is a list and you assign it to another variable "bb", both 295variables refer to the same list. Thus changing the list "aa" will also 296change "bb": > 297 :let aa = [1, 2, 3] 298 :let bb = aa 299 :call add(aa, 4) 300 :echo bb 301< [1, 2, 3, 4] 302 303Making a copy of a list is done with the |copy()| function. Using [:] also 304works, as explained above. This creates a shallow copy of the list: Changing 305a list item in the list will also change the item in the copied list: > 306 :let aa = [[1, 'a'], 2, 3] 307 :let bb = copy(aa) 308 :call add(aa, 4) 309 :let aa[0][1] = 'aaa' 310 :echo aa 311< [[1, aaa], 2, 3, 4] > 312 :echo bb 313< [[1, aaa], 2, 3] 314 315To make a completely independent list use |deepcopy()|. This also makes a 316copy of the values in the list, recursively. Up to a hundred levels deep. 317 318The operator "is" can be used to check if two variables refer to the same 319List. "isnot" does the opposite. In contrast "==" compares if two lists have 320the same value. > 321 :let alist = [1, 2, 3] 322 :let blist = [1, 2, 3] 323 :echo alist is blist 324< 0 > 325 :echo alist == blist 326< 1 327 328Note about comparing lists: Two lists are considered equal if they have the 329same length and all items compare equal, as with using "==". There is one 330exception: When comparing a number with a string they are considered 331different. There is no automatic type conversion, as with using "==" on 332variables. Example: > 333 echo 4 == "4" 334< 1 > 335 echo [4] == ["4"] 336< 0 337 338Thus comparing Lists is more strict than comparing numbers and strings. You 339can compare simple values this way too by putting them in a list: > 340 341 :let a = 5 342 :let b = "5" 343 :echo a == b 344< 1 > 345 :echo [a] == [b] 346< 0 347 348 349List unpack ~ 350 351To unpack the items in a list to individual variables, put the variables in 352square brackets, like list items: > 353 :let [var1, var2] = mylist 354 355When the number of variables does not match the number of items in the list 356this produces an error. To handle any extra items from the list append ";" 357and a variable name: > 358 :let [var1, var2; rest] = mylist 359 360This works like: > 361 :let var1 = mylist[0] 362 :let var2 = mylist[1] 363 :let rest = mylist[2:] 364 365Except that there is no error if there are only two items. "rest" will be an 366empty list then. 367 368 369List modification ~ 370 *list-modification* 371To change a specific item of a list use |:let| this way: > 372 :let list[4] = "four" 373 :let listlist[0][3] = item 374 375To change part of a list you can specify the first and last item to be 376modified. The value must at least have the number of items in the range: > 377 :let list[3:5] = [3, 4, 5] 378 379Adding and removing items from a list is done with functions. Here are a few 380examples: > 381 :call insert(list, 'a') " prepend item 'a' 382 :call insert(list, 'a', 3) " insert item 'a' before list[3] 383 :call add(list, "new") " append String item 384 :call add(list, [1, 2]) " append a List as one new item 385 :call extend(list, [1, 2]) " extend the list with two more items 386 :let i = remove(list, 3) " remove item 3 387 :unlet list[3] " idem 388 :let l = remove(list, 3, -1) " remove items 3 to last item 389 :unlet list[3 : ] " idem 390 :call filter(list, 'v:val !~ "x"') " remove items with an 'x' 391 392Changing the order of items in a list: > 393 :call sort(list) " sort a list alphabetically 394 :call reverse(list) " reverse the order of items 395 :call uniq(sort(list)) " sort and remove duplicates 396 397 398For loop ~ 399 400The |:for| loop executes commands for each item in a list. A variable is set 401to each item in the list in sequence. Example: > 402 :for item in mylist 403 : call Doit(item) 404 :endfor 405 406This works like: > 407 :let index = 0 408 :while index < len(mylist) 409 : let item = mylist[index] 410 : :call Doit(item) 411 : let index = index + 1 412 :endwhile 413 414If all you want to do is modify each item in the list then the |map()| 415function will be a simpler method than a for loop. 416 417Just like the |:let| command, |:for| also accepts a list of variables. This 418requires the argument to be a list of lists. > 419 :for [lnum, col] in [[1, 3], [2, 8], [3, 0]] 420 : call Doit(lnum, col) 421 :endfor 422 423This works like a |:let| command is done for each list item. Again, the types 424must remain the same to avoid an error. 425 426It is also possible to put remaining items in a List variable: > 427 :for [i, j; rest] in listlist 428 : call Doit(i, j) 429 : if !empty(rest) 430 : echo "remainder: " . string(rest) 431 : endif 432 :endfor 433 434 435List functions ~ 436 *E714* 437Functions that are useful with a List: > 438 :let r = call(funcname, list) " call a function with an argument list 439 :if empty(list) " check if list is empty 440 :let l = len(list) " number of items in list 441 :let big = max(list) " maximum value in list 442 :let small = min(list) " minimum value in list 443 :let xs = count(list, 'x') " count nr of times 'x' appears in list 444 :let i = index(list, 'x') " index of first 'x' in list 445 :let lines = getline(1, 10) " get ten text lines from buffer 446 :call append('$', lines) " append text lines in buffer 447 :let list = split("a b c") " create list from items in a string 448 :let string = join(list, ', ') " create string from list items 449 :let s = string(list) " String representation of list 450 :call map(list, '">> " . v:val') " prepend ">> " to each item 451 452Don't forget that a combination of features can make things simple. For 453example, to add up all the numbers in a list: > 454 :exe 'let sum = ' . join(nrlist, '+') 455 456 4571.4 Dictionaries ~ 458 *dict* *Dictionaries* *Dictionary* 459A Dictionary is an associative array: Each entry has a key and a value. The 460entry can be located with the key. The entries are stored without a specific 461ordering. 462 463 464Dictionary creation ~ 465 *E720* *E721* *E722* *E723* 466A Dictionary is created with a comma separated list of entries in curly 467braces. Each entry has a key and a value, separated by a colon. Each key can 468only appear once. Examples: > 469 :let mydict = {1: 'one', 2: 'two', 3: 'three'} 470 :let emptydict = {} 471< *E713* *E716* *E717* 472A key is always a String. You can use a Number, it will be converted to a 473String automatically. Thus the String '4' and the number 4 will find the same 474entry. Note that the String '04' and the Number 04 are different, since the 475Number will be converted to the String '4'. The empty string can be used as a 476key. 477 478A value can be any expression. Using a Dictionary for a value creates a 479nested Dictionary: > 480 :let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}} 481 482An extra comma after the last entry is ignored. 483 484 485Accessing entries ~ 486 487The normal way to access an entry is by putting the key in square brackets: > 488 :let val = mydict["one"] 489 :let mydict["four"] = 4 490 491You can add new entries to an existing Dictionary this way, unlike Lists. 492 493For keys that consist entirely of letters, digits and underscore the following 494form can be used |expr-entry|: > 495 :let val = mydict.one 496 :let mydict.four = 4 497 498Since an entry can be any type, also a List and a Dictionary, the indexing and 499key lookup can be repeated: > 500 :echo dict.key[idx].key 501 502 503Dictionary to List conversion ~ 504 505You may want to loop over the entries in a dictionary. For this you need to 506turn the Dictionary into a List and pass it to |:for|. 507 508Most often you want to loop over the keys, using the |keys()| function: > 509 :for key in keys(mydict) 510 : echo key . ': ' . mydict[key] 511 :endfor 512 513The List of keys is unsorted. You may want to sort them first: > 514 :for key in sort(keys(mydict)) 515 516To loop over the values use the |values()| function: > 517 :for v in values(mydict) 518 : echo "value: " . v 519 :endfor 520 521If you want both the key and the value use the |items()| function. It returns 522a List in which each item is a List with two items, the key and the value: > 523 :for [key, value] in items(mydict) 524 : echo key . ': ' . value 525 :endfor 526 527 528Dictionary identity ~ 529 *dict-identity* 530Just like Lists you need to use |copy()| and |deepcopy()| to make a copy of a 531Dictionary. Otherwise, assignment results in referring to the same 532Dictionary: > 533 :let onedict = {'a': 1, 'b': 2} 534 :let adict = onedict 535 :let adict['a'] = 11 536 :echo onedict['a'] 537 11 538 539Two Dictionaries compare equal if all the key-value pairs compare equal. For 540more info see |list-identity|. 541 542 543Dictionary modification ~ 544 *dict-modification* 545To change an already existing entry of a Dictionary, or to add a new entry, 546use |:let| this way: > 547 :let dict[4] = "four" 548 :let dict['one'] = item 549 550Removing an entry from a Dictionary is done with |remove()| or |:unlet|. 551Three ways to remove the entry with key "aaa" from dict: > 552 :let i = remove(dict, 'aaa') 553 :unlet dict.aaa 554 :unlet dict['aaa'] 555 556Merging a Dictionary with another is done with |extend()|: > 557 :call extend(adict, bdict) 558This extends adict with all entries from bdict. Duplicate keys cause entries 559in adict to be overwritten. An optional third argument can change this. 560Note that the order of entries in a Dictionary is irrelevant, thus don't 561expect ":echo adict" to show the items from bdict after the older entries in 562adict. 563 564Weeding out entries from a Dictionary can be done with |filter()|: > 565 :call filter(dict, 'v:val =~ "x"') 566This removes all entries from "dict" with a value not matching 'x'. 567 568 569Dictionary function ~ 570 *Dictionary-function* *self* *E725* *E862* 571When a function is defined with the "dict" attribute it can be used in a 572special way with a dictionary. Example: > 573 :function Mylen() dict 574 : return len(self.data) 575 :endfunction 576 :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")} 577 :echo mydict.len() 578 579This is like a method in object oriented programming. The entry in the 580Dictionary is a |Funcref|. The local variable "self" refers to the dictionary 581the function was invoked from. 582 583It is also possible to add a function without the "dict" attribute as a 584Funcref to a Dictionary, but the "self" variable is not available then. 585 586 *numbered-function* *anonymous-function* 587To avoid the extra name for the function it can be defined and directly 588assigned to a Dictionary in this way: > 589 :let mydict = {'data': [0, 1, 2, 3]} 590 :function mydict.len() 591 : return len(self.data) 592 :endfunction 593 :echo mydict.len() 594 595The function will then get a number and the value of dict.len is a |Funcref| 596that references this function. The function can only be used through a 597|Funcref|. It will automatically be deleted when there is no |Funcref| 598remaining that refers to it. 599 600It is not necessary to use the "dict" attribute for a numbered function. 601 602If you get an error for a numbered function, you can find out what it is with 603a trick. Assuming the function is 42, the command is: > 604 :function {42} 605 606 607Functions for Dictionaries ~ 608 *E715* 609Functions that can be used with a Dictionary: > 610 :if has_key(dict, 'foo') " TRUE if dict has entry with key "foo" 611 :if empty(dict) " TRUE if dict is empty 612 :let l = len(dict) " number of items in dict 613 :let big = max(dict) " maximum value in dict 614 :let small = min(dict) " minimum value in dict 615 :let xs = count(dict, 'x') " count nr of times 'x' appears in dict 616 :let s = string(dict) " String representation of dict 617 :call map(dict, '">> " . v:val') " prepend ">> " to each item 618 619 6201.5 More about variables ~ 621 *more-variables* 622If you need to know the type of a variable or expression, use the |type()| 623function. 624 625When the '!' flag is included in the 'viminfo' option, global variables that 626start with an uppercase letter, and don't contain a lowercase letter, are 627stored in the viminfo file |viminfo-file|. 628 629When the 'sessionoptions' option contains "global", global variables that 630start with an uppercase letter and contain at least one lowercase letter are 631stored in the session file |session-file|. 632 633variable name can be stored where ~ 634my_var_6 not 635My_Var_6 session file 636MY_VAR_6 viminfo file 637 638 639It's possible to form a variable name with curly braces, see 640|curly-braces-names|. 641 642============================================================================== 6432. Expression syntax *expression-syntax* 644 645Expression syntax summary, from least to most significant: 646 647|expr1| expr2 648 expr2 ? expr1 : expr1 if-then-else 649 650|expr2| expr3 651 expr3 || expr3 .. logical OR 652 653|expr3| expr4 654 expr4 && expr4 .. logical AND 655 656|expr4| expr5 657 expr5 == expr5 equal 658 expr5 != expr5 not equal 659 expr5 > expr5 greater than 660 expr5 >= expr5 greater than or equal 661 expr5 < expr5 smaller than 662 expr5 <= expr5 smaller than or equal 663 expr5 =~ expr5 regexp matches 664 expr5 !~ expr5 regexp doesn't match 665 666 expr5 ==? expr5 equal, ignoring case 667 expr5 ==# expr5 equal, match case 668 etc. As above, append ? for ignoring case, # for 669 matching case 670 671 expr5 is expr5 same |List| instance 672 expr5 isnot expr5 different |List| instance 673 674|expr5| expr6 675 expr6 + expr6 .. number addition or list concatenation 676 expr6 - expr6 .. number subtraction 677 expr6 . expr6 .. string concatenation 678 679|expr6| expr7 680 expr7 * expr7 .. number multiplication 681 expr7 / expr7 .. number division 682 expr7 % expr7 .. number modulo 683 684|expr7| expr8 685 ! expr7 logical NOT 686 - expr7 unary minus 687 + expr7 unary plus 688 689|expr8| expr9 690 expr8[expr1] byte of a String or item of a |List| 691 expr8[expr1 : expr1] substring of a String or sublist of a |List| 692 expr8.name entry in a |Dictionary| 693 expr8(expr1, ...) function call with |Funcref| variable 694 695|expr9| number number constant 696 "string" string constant, backslash is special 697 'string' string constant, ' is doubled 698 [expr1, ...] |List| 699 {expr1: expr1, ...} |Dictionary| 700 &option option value 701 (expr1) nested expression 702 variable internal variable 703 va{ria}ble internal variable with curly braces 704 $VAR environment variable 705 @r contents of register 'r' 706 function(expr1, ...) function call 707 func{ti}on(expr1, ...) function call with curly braces 708 {args -> expr1} lambda expression 709 710 711".." indicates that the operations in this level can be concatenated. 712Example: > 713 &nu || &list && &shell == "csh" 714 715All expressions within one level are parsed from left to right. 716 717 718expr1 *expr1* *E109* 719----- 720 721expr2 ? expr1 : expr1 722 723The expression before the '?' is evaluated to a number. If it evaluates to 724|TRUE|, the result is the value of the expression between the '?' and ':', 725otherwise the result is the value of the expression after the ':'. 726Example: > 727 :echo lnum == 1 ? "top" : lnum 728 729Since the first expression is an "expr2", it cannot contain another ?:. The 730other two expressions can, thus allow for recursive use of ?:. 731Example: > 732 :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum 733 734To keep this readable, using |line-continuation| is suggested: > 735 :echo lnum == 1 736 :\ ? "top" 737 :\ : lnum == 1000 738 :\ ? "last" 739 :\ : lnum 740 741You should always put a space before the ':', otherwise it can be mistaken for 742use in a variable such as "a:1". 743 744 745expr2 and expr3 *expr2* *expr3* 746--------------- 747 748expr3 || expr3 .. logical OR *expr-barbar* 749expr4 && expr4 .. logical AND *expr-&&* 750 751The "||" and "&&" operators take one argument on each side. The arguments 752are (converted to) Numbers. The result is: 753 754 input output ~ 755n1 n2 n1 || n2 n1 && n2 ~ 756|FALSE| |FALSE| |FALSE| |FALSE| 757|FALSE| |TRUE| |TRUE| |FALSE| 758|TRUE| |FALSE| |TRUE| |FALSE| 759|TRUE| |TRUE| |TRUE| |TRUE| 760 761The operators can be concatenated, for example: > 762 763 &nu || &list && &shell == "csh" 764 765Note that "&&" takes precedence over "||", so this has the meaning of: > 766 767 &nu || (&list && &shell == "csh") 768 769Once the result is known, the expression "short-circuits", that is, further 770arguments are not evaluated. This is like what happens in C. For example: > 771 772 let a = 1 773 echo a || b 774 775This is valid even if there is no variable called "b" because "a" is |TRUE|, 776so the result must be |TRUE|. Similarly below: > 777 778 echo exists("b") && b == "yes" 779 780This is valid whether "b" has been defined or not. The second clause will 781only be evaluated if "b" has been defined. 782 783 784expr4 *expr4* 785----- 786 787expr5 {cmp} expr5 788 789Compare two expr5 expressions, resulting in a 0 if it evaluates to false, or 1 790if it evaluates to true. 791 792 *expr-==* *expr-!=* *expr->* *expr->=* 793 *expr-<* *expr-<=* *expr-=~* *expr-!~* 794 *expr-==#* *expr-!=#* *expr->#* *expr->=#* 795 *expr-<#* *expr-<=#* *expr-=~#* *expr-!~#* 796 *expr-==?* *expr-!=?* *expr->?* *expr->=?* 797 *expr-<?* *expr-<=?* *expr-=~?* *expr-!~?* 798 *expr-is* *expr-isnot* *expr-is#* *expr-isnot#* 799 *expr-is?* *expr-isnot?* 800 use 'ignorecase' match case ignore case ~ 801equal == ==# ==? 802not equal != !=# !=? 803greater than > ># >? 804greater than or equal >= >=# >=? 805smaller than < <# <? 806smaller than or equal <= <=# <=? 807regexp matches =~ =~# =~? 808regexp doesn't match !~ !~# !~? 809same instance is is# is? 810different instance isnot isnot# isnot? 811 812Examples: 813"abc" ==# "Abc" evaluates to 0 814"abc" ==? "Abc" evaluates to 1 815"abc" == "Abc" evaluates to 1 if 'ignorecase' is set, 0 otherwise 816 817 *E691* *E692* 818A |List| can only be compared with a |List| and only "equal", "not equal" and 819"is" can be used. This compares the values of the list, recursively. 820Ignoring case means case is ignored when comparing item values. 821 822 *E735* *E736* 823A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not 824equal" and "is" can be used. This compares the key/values of the |Dictionary| 825recursively. Ignoring case means case is ignored when comparing item values. 826 827 *E694* 828A |Funcref| can only be compared with a |Funcref| and only "equal", "not 829equal", "is" and "isnot" can be used. Case is never ignored. Whether 830arguments or a Dictionary are bound (with a partial) matters. The 831Dictionaries must also be equal (or the same, in case of "is") and the 832arguments must be equal (or the same). 833 834To compare Funcrefs to see if they refer to the same function, ignoring bound 835Dictionary and arguments, use |get()| to get the function name: > 836 if get(Part1, 'name') == get(Part2, 'name') 837 " Part1 and Part2 refer to the same function 838 839When using "is" or "isnot" with a |List| or a |Dictionary| this checks if the 840expressions are referring to the same |List| or |Dictionary| instance. A copy 841of a |List| is different from the original |List|. When using "is" without 842a |List| or a |Dictionary| it is equivalent to using "equal", using "isnot" 843equivalent to using "not equal". Except that a different type means the 844values are different: > 845 echo 4 == '4' 846 1 847 echo 4 is '4' 848 0 849 echo 0 is [] 850 0 851"is#"/"isnot#" and "is?"/"isnot?" can be used to match and ignore case. 852 853When comparing a String with a Number, the String is converted to a Number, 854and the comparison is done on Numbers. This means that: > 855 echo 0 == 'x' 856 1 857because 'x' converted to a Number is zero. However: > 858 echo [0] == ['x'] 859 0 860Inside a List or Dictionary this conversion is not used. 861 862When comparing two Strings, this is done with strcmp() or stricmp(). This 863results in the mathematical difference (comparing byte values), not 864necessarily the alphabetical difference in the local language. 865 866When using the operators with a trailing '#', or the short version and 867'ignorecase' is off, the comparing is done with strcmp(): case matters. 868 869When using the operators with a trailing '?', or the short version and 870'ignorecase' is set, the comparing is done with stricmp(): case is ignored. 871 872'smartcase' is not used. 873 874The "=~" and "!~" operators match the lefthand argument with the righthand 875argument, which is used as a pattern. See |pattern| for what a pattern is. 876This matching is always done like 'magic' was set and 'cpoptions' is empty, no 877matter what the actual value of 'magic' or 'cpoptions' is. This makes scripts 878portable. To avoid backslashes in the regexp pattern to be doubled, use a 879single-quote string, see |literal-string|. 880Since a string is considered to be a single line, a multi-line pattern 881(containing \n, backslash-n) will not match. However, a literal NL character 882can be matched like an ordinary character. Examples: 883 "foo\nbar" =~ "\n" evaluates to 1 884 "foo\nbar" =~ "\\n" evaluates to 0 885 886 887expr5 and expr6 *expr5* *expr6* 888--------------- 889expr6 + expr6 .. Number addition or |List| concatenation *expr-+* 890expr6 - expr6 .. Number subtraction *expr--* 891expr6 . expr6 .. String concatenation *expr-.* 892 893For |Lists| only "+" is possible and then both expr6 must be a list. The 894result is a new list with the two lists Concatenated. 895 896expr7 * expr7 .. Number multiplication *expr-star* 897expr7 / expr7 .. Number division *expr-/* 898expr7 % expr7 .. Number modulo *expr-%* 899 900For all, except ".", Strings are converted to Numbers. 901For bitwise operators see |and()|, |or()| and |xor()|. 902 903Note the difference between "+" and ".": 904 "123" + "456" = 579 905 "123" . "456" = "123456" 906 907Since '.' has the same precedence as '+' and '-', you need to read: > 908 1 . 90 + 90.0 909As: > 910 (1 . 90) + 90.0 911That works, since the String "190" is automatically converted to the Number 912190, which can be added to the Float 90.0. However: > 913 1 . 90 * 90.0 914Should be read as: > 915 1 . (90 * 90.0) 916Since '.' has lower precedence than '*'. This does NOT work, since this 917attempts to concatenate a Float and a String. 918 919When dividing a Number by zero the result depends on the value: 920 0 / 0 = -0x80000000 (like NaN for Float) 921 >0 / 0 = 0x7fffffff (like positive infinity) 922 <0 / 0 = -0x7fffffff (like negative infinity) 923 (before Vim 7.2 it was always 0x7fffffff) 924 925When 64-bit Number support is enabled: 926 0 / 0 = -0x8000000000000000 (like NaN for Float) 927 >0 / 0 = 0x7fffffffffffffff (like positive infinity) 928 <0 / 0 = -0x7fffffffffffffff (like negative infinity) 929 930When the righthand side of '%' is zero, the result is 0. 931 932None of these work for |Funcref|s. 933 934. and % do not work for Float. *E804* 935 936 937expr7 *expr7* 938----- 939! expr7 logical NOT *expr-!* 940- expr7 unary minus *expr-unary--* 941+ expr7 unary plus *expr-unary-+* 942 943For '!' |TRUE| becomes |FALSE|, |FALSE| becomes |TRUE| (one). 944For '-' the sign of the number is changed. 945For '+' the number is unchanged. 946 947A String will be converted to a Number first. 948 949These three can be repeated and mixed. Examples: 950 !-1 == 0 951 !!8 == 1 952 --9 == 9 953 954 955expr8 *expr8* 956----- 957expr8[expr1] item of String or |List| *expr-[]* *E111* 958 *E909* *subscript* 959If expr8 is a Number or String this results in a String that contains the 960expr1'th single byte from expr8. expr8 is used as a String, expr1 as a 961Number. This doesn't recognize multi-byte encodings, see `byteidx()` for 962an alternative, or use `split()` to turn the string into a list of characters. 963 964Index zero gives the first byte. This is like it works in C. Careful: 965text column numbers start with one! Example, to get the byte under the 966cursor: > 967 :let c = getline(".")[col(".") - 1] 968 969If the length of the String is less than the index, the result is an empty 970String. A negative index always results in an empty string (reason: backward 971compatibility). Use [-1:] to get the last byte. 972 973If expr8 is a |List| then it results the item at index expr1. See |list-index| 974for possible index values. If the index is out of range this results in an 975error. Example: > 976 :let item = mylist[-1] " get last item 977 978Generally, if a |List| index is equal to or higher than the length of the 979|List|, or more negative than the length of the |List|, this results in an 980error. 981 982 983expr8[expr1a : expr1b] substring or sublist *expr-[:]* 984 985If expr8 is a Number or String this results in the substring with the bytes 986from expr1a to and including expr1b. expr8 is used as a String, expr1a and 987expr1b are used as a Number. This doesn't recognize multi-byte encodings, see 988|byteidx()| for computing the indexes. 989 990If expr1a is omitted zero is used. If expr1b is omitted the length of the 991string minus one is used. 992 993A negative number can be used to measure from the end of the string. -1 is 994the last character, -2 the last but one, etc. 995 996If an index goes out of range for the string characters are omitted. If 997expr1b is smaller than expr1a the result is an empty string. 998 999Examples: > 1000 :let c = name[-1:] " last byte of a string 1001 :let c = name[-2:-2] " last but one byte of a string 1002 :let s = line(".")[4:] " from the fifth byte to the end 1003 :let s = s[:-3] " remove last two bytes 1004< 1005 *slice* 1006If expr8 is a |List| this results in a new |List| with the items indicated by 1007the indexes expr1a and expr1b. This works like with a String, as explained 1008just above. Also see |sublist| below. Examples: > 1009 :let l = mylist[:3] " first four items 1010 :let l = mylist[4:4] " List with one item 1011 :let l = mylist[:] " shallow copy of a List 1012 1013Using expr8[expr1] or expr8[expr1a : expr1b] on a |Funcref| results in an 1014error. 1015 1016Watch out for confusion between a namespace and a variable followed by a colon 1017for a sublist: > 1018 mylist[n:] " uses variable n 1019 mylist[s:] " uses namespace s:, error! 1020 1021 1022expr8.name entry in a |Dictionary| *expr-entry* 1023 1024If expr8 is a |Dictionary| and it is followed by a dot, then the following 1025name will be used as a key in the |Dictionary|. This is just like: 1026expr8[name]. 1027 1028The name must consist of alphanumeric characters, just like a variable name, 1029but it may start with a number. Curly braces cannot be used. 1030 1031There must not be white space before or after the dot. 1032 1033Examples: > 1034 :let dict = {"one": 1, 2: "two"} 1035 :echo dict.one 1036 :echo dict .2 1037 1038Note that the dot is also used for String concatenation. To avoid confusion 1039always put spaces around the dot for String concatenation. 1040 1041 1042expr8(expr1, ...) |Funcref| function call 1043 1044When expr8 is a |Funcref| type variable, invoke the function it refers to. 1045 1046 1047 1048 *expr9* 1049number 1050------ 1051number number constant *expr-number* 1052 *hex-number* *octal-number* *binary-number* 1053 1054Decimal, Hexadecimal (starting with 0x or 0X), Binary (starting with 0b or 0B) 1055and Octal (starting with 0). 1056 1057 *floating-point-format* 1058Floating point numbers can be written in two forms: 1059 1060 [-+]{N}.{M} 1061 [-+]{N}.{M}[eE][-+]{exp} 1062 1063{N} and {M} are numbers. Both {N} and {M} must be present and can only 1064contain digits. 1065[-+] means there is an optional plus or minus sign. 1066{exp} is the exponent, power of 10. 1067Only a decimal point is accepted, not a comma. No matter what the current 1068locale is. 1069{only when compiled with the |+float| feature} 1070 1071Examples: 1072 123.456 1073 +0.0001 1074 55.0 1075 -0.123 1076 1.234e03 1077 1.0E-6 1078 -3.1416e+88 1079 1080These are INVALID: 1081 3. empty {M} 1082 1e40 missing .{M} 1083 1084 *float-pi* *float-e* 1085A few useful values to copy&paste: > 1086 :let pi = 3.14159265359 1087 :let e = 2.71828182846 1088 1089Rationale: 1090Before floating point was introduced, the text "123.456" was interpreted as 1091the two numbers "123" and "456", both converted to a string and concatenated, 1092resulting in the string "123456". Since this was considered pointless, and we 1093could not find it intentionally being used in Vim scripts, this backwards 1094incompatibility was accepted in favor of being able to use the normal notation 1095for floating point numbers. 1096 1097 *floating-point-precision* 1098The precision and range of floating points numbers depends on what "double" 1099means in the library Vim was compiled with. There is no way to change this at 1100runtime. 1101 1102The default for displaying a |Float| is to use 6 decimal places, like using 1103printf("%g", f). You can select something else when using the |printf()| 1104function. Example: > 1105 :echo printf('%.15e', atan(1)) 1106< 7.853981633974483e-01 1107 1108 1109 1110string *string* *String* *expr-string* *E114* 1111------ 1112"string" string constant *expr-quote* 1113 1114Note that double quotes are used. 1115 1116A string constant accepts these special characters: 1117\... three-digit octal number (e.g., "\316") 1118\.. two-digit octal number (must be followed by non-digit) 1119\. one-digit octal number (must be followed by non-digit) 1120\x.. byte specified with two hex numbers (e.g., "\x1f") 1121\x. byte specified with one hex number (must be followed by non-hex char) 1122\X.. same as \x.. 1123\X. same as \x. 1124\u.... character specified with up to 4 hex numbers, stored according to the 1125 current value of 'encoding' (e.g., "\u02a4") 1126\U.... same as \u but allows up to 8 hex numbers. 1127\b backspace <BS> 1128\e escape <Esc> 1129\f formfeed <FF> 1130\n newline <NL> 1131\r return <CR> 1132\t tab <Tab> 1133\\ backslash 1134\" double quote 1135\<xxx> Special key named "xxx". e.g. "\<C-W>" for CTRL-W. This is for use 1136 in mappings, the 0x80 byte is escaped. 1137 To use the double quote character it must be escaped: "<M-\">". 1138 Don't use <Char-xxxx> to get a utf-8 character, use \uxxxx as 1139 mentioned above. 1140 1141Note that "\xff" is stored as the byte 255, which may be invalid in some 1142encodings. Use "\u00ff" to store character 255 according to the current value 1143of 'encoding'. 1144 1145Note that "\000" and "\x00" force the end of the string. 1146 1147 1148literal-string *literal-string* *E115* 1149--------------- 1150'string' string constant *expr-'* 1151 1152Note that single quotes are used. 1153 1154This string is taken as it is. No backslashes are removed or have a special 1155meaning. The only exception is that two quotes stand for one quote. 1156 1157Single quoted strings are useful for patterns, so that backslashes do not need 1158to be doubled. These two commands are equivalent: > 1159 if a =~ "\\s*" 1160 if a =~ '\s*' 1161 1162 1163option *expr-option* *E112* *E113* 1164------ 1165&option option value, local value if possible 1166&g:option global option value 1167&l:option local option value 1168 1169Examples: > 1170 echo "tabstop is " . &tabstop 1171 if &insertmode 1172 1173Any option name can be used here. See |options|. When using the local value 1174and there is no buffer-local or window-local value, the global value is used 1175anyway. 1176 1177 1178register *expr-register* *@r* 1179-------- 1180@r contents of register 'r' 1181 1182The result is the contents of the named register, as a single string. 1183Newlines are inserted where required. To get the contents of the unnamed 1184register use @" or @@. See |registers| for an explanation of the available 1185registers. 1186 1187When using the '=' register you get the expression itself, not what it 1188evaluates to. Use |eval()| to evaluate it. 1189 1190 1191nesting *expr-nesting* *E110* 1192------- 1193(expr1) nested expression 1194 1195 1196environment variable *expr-env* 1197-------------------- 1198$VAR environment variable 1199 1200The String value of any environment variable. When it is not defined, the 1201result is an empty string. 1202 *expr-env-expand* 1203Note that there is a difference between using $VAR directly and using 1204expand("$VAR"). Using it directly will only expand environment variables that 1205are known inside the current Vim session. Using expand() will first try using 1206the environment variables known inside the current Vim session. If that 1207fails, a shell will be used to expand the variable. This can be slow, but it 1208does expand all variables that the shell knows about. Example: > 1209 :echo $shell 1210 :echo expand("$shell") 1211The first one probably doesn't echo anything, the second echoes the $shell 1212variable (if your shell supports it). 1213 1214 1215internal variable *expr-variable* 1216----------------- 1217variable internal variable 1218See below |internal-variables|. 1219 1220 1221function call *expr-function* *E116* *E118* *E119* *E120* 1222------------- 1223function(expr1, ...) function call 1224See below |functions|. 1225 1226 1227lambda expression *expr-lambda* *lambda* 1228----------------- 1229{args -> expr1} lambda expression 1230 1231A lambda expression creates a new unnamed function which returns the result of 1232evaluating |expr1|. Lambda expressions differ from |user-functions| in 1233the following ways: 1234 12351. The body of the lambda expression is an |expr1| and not a sequence of |Ex| 1236 commands. 12372. The prefix "a:" should not be used for arguments. E.g.: > 1238 :let F = {arg1, arg2 -> arg1 - arg2} 1239 :echo F(5, 2) 1240< 3 1241 1242The arguments are optional. Example: > 1243 :let F = {-> 'error function'} 1244 :echo F() 1245< error function 1246 *closure* 1247Lambda expressions can access outer scope variables and arguments. This is 1248often called a closure. Example where "i" and "a:arg" are used in a lambda 1249while they exist in the function scope. They remain valid even after the 1250function returns: > 1251 :function Foo(arg) 1252 : let i = 3 1253 : return {x -> x + i - a:arg} 1254 :endfunction 1255 :let Bar = Foo(4) 1256 :echo Bar(6) 1257< 5 1258 1259See also |:func-closure|. Lambda and closure support can be checked with: > 1260 if has('lambda') 1261 1262Examples for using a lambda expression with |sort()|, |map()| and |filter()|: > 1263 :echo map([1, 2, 3], {idx, val -> val + 1}) 1264< [2, 3, 4] > 1265 :echo sort([3,7,2,1,4], {a, b -> a - b}) 1266< [1, 2, 3, 4, 7] 1267 1268The lambda expression is also useful for Channel, Job and timer: > 1269 :let timer = timer_start(500, 1270 \ {-> execute("echo 'Handler called'", "")}, 1271 \ {'repeat': 3}) 1272< Handler called 1273 Handler called 1274 Handler called 1275 1276Note how execute() is used to execute an Ex command. That's ugly though. 1277 1278 1279Lambda expressions have internal names like '<lambda>42'. If you get an error 1280for a lambda expression, you can find what it is with the following command: > 1281 :function {'<lambda>42'} 1282See also: |numbered-function| 1283 1284============================================================================== 12853. Internal variable *internal-variables* *E461* 1286 1287An internal variable name can be made up of letters, digits and '_'. But it 1288cannot start with a digit. It's also possible to use curly braces, see 1289|curly-braces-names|. 1290 1291An internal variable is created with the ":let" command |:let|. 1292An internal variable is explicitly destroyed with the ":unlet" command 1293|:unlet|. 1294Using a name that is not an internal variable or refers to a variable that has 1295been destroyed results in an error. 1296 1297There are several name spaces for variables. Which one is to be used is 1298specified by what is prepended: 1299 1300 (nothing) In a function: local to a function; otherwise: global 1301|buffer-variable| b: Local to the current buffer. 1302|window-variable| w: Local to the current window. 1303|tabpage-variable| t: Local to the current tab page. 1304|global-variable| g: Global. 1305|local-variable| l: Local to a function. 1306|script-variable| s: Local to a |:source|'ed Vim script. 1307|function-argument| a: Function argument (only inside a function). 1308|vim-variable| v: Global, predefined by Vim. 1309 1310The scope name by itself can be used as a |Dictionary|. For example, to 1311delete all script-local variables: > 1312 :for k in keys(s:) 1313 : unlet s:[k] 1314 :endfor 1315< 1316 *buffer-variable* *b:var* *b:* 1317A variable name that is preceded with "b:" is local to the current buffer. 1318Thus you can have several "b:foo" variables, one for each buffer. 1319This kind of variable is deleted when the buffer is wiped out or deleted with 1320|:bdelete|. 1321 1322One local buffer variable is predefined: 1323 *b:changedtick* *changetick* 1324b:changedtick The total number of changes to the current buffer. It is 1325 incremented for each change. An undo command is also a change 1326 in this case. This can be used to perform an action only when 1327 the buffer has changed. Example: > 1328 :if my_changedtick != b:changedtick 1329 : let my_changedtick = b:changedtick 1330 : call My_Update() 1331 :endif 1332< You cannot change or delete the b:changedtick variable. 1333 1334 *window-variable* *w:var* *w:* 1335A variable name that is preceded with "w:" is local to the current window. It 1336is deleted when the window is closed. 1337 1338 *tabpage-variable* *t:var* *t:* 1339A variable name that is preceded with "t:" is local to the current tab page, 1340It is deleted when the tab page is closed. {not available when compiled 1341without the |+windows| feature} 1342 1343 *global-variable* *g:var* *g:* 1344Inside functions global variables are accessed with "g:". Omitting this will 1345access a variable local to a function. But "g:" can also be used in any other 1346place if you like. 1347 1348 *local-variable* *l:var* *l:* 1349Inside functions local variables are accessed without prepending anything. 1350But you can also prepend "l:" if you like. However, without prepending "l:" 1351you may run into reserved variable names. For example "count". By itself it 1352refers to "v:count". Using "l:count" you can have a local variable with the 1353same name. 1354 1355 *script-variable* *s:var* 1356In a Vim script variables starting with "s:" can be used. They cannot be 1357accessed from outside of the scripts, thus are local to the script. 1358 1359They can be used in: 1360- commands executed while the script is sourced 1361- functions defined in the script 1362- autocommands defined in the script 1363- functions and autocommands defined in functions and autocommands which were 1364 defined in the script (recursively) 1365- user defined commands defined in the script 1366Thus not in: 1367- other scripts sourced from this one 1368- mappings 1369- menus 1370- etc. 1371 1372Script variables can be used to avoid conflicts with global variable names. 1373Take this example: > 1374 1375 let s:counter = 0 1376 function MyCounter() 1377 let s:counter = s:counter + 1 1378 echo s:counter 1379 endfunction 1380 command Tick call MyCounter() 1381 1382You can now invoke "Tick" from any script, and the "s:counter" variable in 1383that script will not be changed, only the "s:counter" in the script where 1384"Tick" was defined is used. 1385 1386Another example that does the same: > 1387 1388 let s:counter = 0 1389 command Tick let s:counter = s:counter + 1 | echo s:counter 1390 1391When calling a function and invoking a user-defined command, the context for 1392script variables is set to the script where the function or command was 1393defined. 1394 1395The script variables are also available when a function is defined inside a 1396function that is defined in a script. Example: > 1397 1398 let s:counter = 0 1399 function StartCounting(incr) 1400 if a:incr 1401 function MyCounter() 1402 let s:counter = s:counter + 1 1403 endfunction 1404 else 1405 function MyCounter() 1406 let s:counter = s:counter - 1 1407 endfunction 1408 endif 1409 endfunction 1410 1411This defines the MyCounter() function either for counting up or counting down 1412when calling StartCounting(). It doesn't matter from where StartCounting() is 1413called, the s:counter variable will be accessible in MyCounter(). 1414 1415When the same script is sourced again it will use the same script variables. 1416They will remain valid as long as Vim is running. This can be used to 1417maintain a counter: > 1418 1419 if !exists("s:counter") 1420 let s:counter = 1 1421 echo "script executed for the first time" 1422 else 1423 let s:counter = s:counter + 1 1424 echo "script executed " . s:counter . " times now" 1425 endif 1426 1427Note that this means that filetype plugins don't get a different set of script 1428variables for each buffer. Use local buffer variables instead |b:var|. 1429 1430 1431Predefined Vim variables: *vim-variable* *v:var* *v:* 1432 1433 *v:beval_col* *beval_col-variable* 1434v:beval_col The number of the column, over which the mouse pointer is. 1435 This is the byte index in the |v:beval_lnum| line. 1436 Only valid while evaluating the 'balloonexpr' option. 1437 1438 *v:beval_bufnr* *beval_bufnr-variable* 1439v:beval_bufnr The number of the buffer, over which the mouse pointer is. Only 1440 valid while evaluating the 'balloonexpr' option. 1441 1442 *v:beval_lnum* *beval_lnum-variable* 1443v:beval_lnum The number of the line, over which the mouse pointer is. Only 1444 valid while evaluating the 'balloonexpr' option. 1445 1446 *v:beval_text* *beval_text-variable* 1447v:beval_text The text under or after the mouse pointer. Usually a word as 1448 it is useful for debugging a C program. 'iskeyword' applies, 1449 but a dot and "->" before the position is included. When on a 1450 ']' the text before it is used, including the matching '[' and 1451 word before it. When on a Visual area within one line the 1452 highlighted text is used. 1453 Only valid while evaluating the 'balloonexpr' option. 1454 1455 *v:beval_winnr* *beval_winnr-variable* 1456v:beval_winnr The number of the window, over which the mouse pointer is. Only 1457 valid while evaluating the 'balloonexpr' option. The first 1458 window has number zero (unlike most other places where a 1459 window gets a number). 1460 1461 *v:beval_winid* *beval_winid-variable* 1462v:beval_winid The |window-ID| of the window, over which the mouse pointer 1463 is. Otherwise like v:beval_winnr. 1464 1465 *v:char* *char-variable* 1466v:char Argument for evaluating 'formatexpr' and used for the typed 1467 character when using <expr> in an abbreviation |:map-<expr>|. 1468 It is also used by the |InsertCharPre| and |InsertEnter| events. 1469 1470 *v:charconvert_from* *charconvert_from-variable* 1471v:charconvert_from 1472 The name of the character encoding of a file to be converted. 1473 Only valid while evaluating the 'charconvert' option. 1474 1475 *v:charconvert_to* *charconvert_to-variable* 1476v:charconvert_to 1477 The name of the character encoding of a file after conversion. 1478 Only valid while evaluating the 'charconvert' option. 1479 1480 *v:cmdarg* *cmdarg-variable* 1481v:cmdarg This variable is used for two purposes: 1482 1. The extra arguments given to a file read/write command. 1483 Currently these are "++enc=" and "++ff=". This variable is 1484 set before an autocommand event for a file read/write 1485 command is triggered. There is a leading space to make it 1486 possible to append this variable directly after the 1487 read/write command. Note: The "+cmd" argument isn't 1488 included here, because it will be executed anyway. 1489 2. When printing a PostScript file with ":hardcopy" this is 1490 the argument for the ":hardcopy" command. This can be used 1491 in 'printexpr'. 1492 1493 *v:cmdbang* *cmdbang-variable* 1494v:cmdbang Set like v:cmdarg for a file read/write command. When a "!" 1495 was used the value is 1, otherwise it is 0. Note that this 1496 can only be used in autocommands. For user commands |<bang>| 1497 can be used. 1498 1499 *v:completed_item* *completed_item-variable* 1500v:completed_item 1501 |Dictionary| containing the |complete-items| for the most 1502 recently completed word after |CompleteDone|. The 1503 |Dictionary| is empty if the completion failed. 1504 1505 *v:count* *count-variable* 1506v:count The count given for the last Normal mode command. Can be used 1507 to get the count before a mapping. Read-only. Example: > 1508 :map _x :<C-U>echo "the count is " . v:count<CR> 1509< Note: The <C-U> is required to remove the line range that you 1510 get when typing ':' after a count. 1511 When there are two counts, as in "3d2w", they are multiplied, 1512 just like what happens in the command, "d6w" for the example. 1513 Also used for evaluating the 'formatexpr' option. 1514 "count" also works, for backwards compatibility. 1515 1516 *v:count1* *count1-variable* 1517v:count1 Just like "v:count", but defaults to one when no count is 1518 used. 1519 1520 *v:ctype* *ctype-variable* 1521v:ctype The current locale setting for characters of the runtime 1522 environment. This allows Vim scripts to be aware of the 1523 current locale encoding. Technical: it's the value of 1524 LC_CTYPE. When not using a locale the value is "C". 1525 This variable can not be set directly, use the |:language| 1526 command. 1527 See |multi-lang|. 1528 1529 *v:dying* *dying-variable* 1530v:dying Normally zero. When a deadly signal is caught it's set to 1531 one. When multiple signals are caught the number increases. 1532 Can be used in an autocommand to check if Vim didn't 1533 terminate normally. {only works on Unix} 1534 Example: > 1535 :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif 1536< Note: if another deadly signal is caught when v:dying is one, 1537 VimLeave autocommands will not be executed. 1538 1539 *v:errmsg* *errmsg-variable* 1540v:errmsg Last given error message. It's allowed to set this variable. 1541 Example: > 1542 :let v:errmsg = "" 1543 :silent! next 1544 :if v:errmsg != "" 1545 : ... handle error 1546< "errmsg" also works, for backwards compatibility. 1547 1548 *v:errors* *errors-variable* 1549v:errors Errors found by assert functions, such as |assert_true()|. 1550 This is a list of strings. 1551 The assert functions append an item when an assert fails. 1552 To remove old results make it empty: > 1553 :let v:errors = [] 1554< If v:errors is set to anything but a list it is made an empty 1555 list by the assert function. 1556 1557 *v:exception* *exception-variable* 1558v:exception The value of the exception most recently caught and not 1559 finished. See also |v:throwpoint| and |throw-variables|. 1560 Example: > 1561 :try 1562 : throw "oops" 1563 :catch /.*/ 1564 : echo "caught" v:exception 1565 :endtry 1566< Output: "caught oops". 1567 1568 *v:false* *false-variable* 1569v:false A Number with value zero. Used to put "false" in JSON. See 1570 |json_encode()|. 1571 When used as a string this evaluates to "v:false". > 1572 echo v:false 1573< v:false ~ 1574 That is so that eval() can parse the string back to the same 1575 value. Read-only. 1576 1577 *v:fcs_reason* *fcs_reason-variable* 1578v:fcs_reason The reason why the |FileChangedShell| event was triggered. 1579 Can be used in an autocommand to decide what to do and/or what 1580 to set v:fcs_choice to. Possible values: 1581 deleted file no longer exists 1582 conflict file contents, mode or timestamp was 1583 changed and buffer is modified 1584 changed file contents has changed 1585 mode mode of file changed 1586 time only file timestamp changed 1587 1588 *v:fcs_choice* *fcs_choice-variable* 1589v:fcs_choice What should happen after a |FileChangedShell| event was 1590 triggered. Can be used in an autocommand to tell Vim what to 1591 do with the affected buffer: 1592 reload Reload the buffer (does not work if 1593 the file was deleted). 1594 ask Ask the user what to do, as if there 1595 was no autocommand. Except that when 1596 only the timestamp changed nothing 1597 will happen. 1598 <empty> Nothing, the autocommand should do 1599 everything that needs to be done. 1600 The default is empty. If another (invalid) value is used then 1601 Vim behaves like it is empty, there is no warning message. 1602 1603 *v:fname_in* *fname_in-variable* 1604v:fname_in The name of the input file. Valid while evaluating: 1605 option used for ~ 1606 'charconvert' file to be converted 1607 'diffexpr' original file 1608 'patchexpr' original file 1609 'printexpr' file to be printed 1610 And set to the swap file name for |SwapExists|. 1611 1612 *v:fname_out* *fname_out-variable* 1613v:fname_out The name of the output file. Only valid while 1614 evaluating: 1615 option used for ~ 1616 'charconvert' resulting converted file (*) 1617 'diffexpr' output of diff 1618 'patchexpr' resulting patched file 1619 (*) When doing conversion for a write command (e.g., ":w 1620 file") it will be equal to v:fname_in. When doing conversion 1621 for a read command (e.g., ":e file") it will be a temporary 1622 file and different from v:fname_in. 1623 1624 *v:fname_new* *fname_new-variable* 1625v:fname_new The name of the new version of the file. Only valid while 1626 evaluating 'diffexpr'. 1627 1628 *v:fname_diff* *fname_diff-variable* 1629v:fname_diff The name of the diff (patch) file. Only valid while 1630 evaluating 'patchexpr'. 1631 1632 *v:folddashes* *folddashes-variable* 1633v:folddashes Used for 'foldtext': dashes representing foldlevel of a closed 1634 fold. 1635 Read-only in the |sandbox|. |fold-foldtext| 1636 1637 *v:foldlevel* *foldlevel-variable* 1638v:foldlevel Used for 'foldtext': foldlevel of closed fold. 1639 Read-only in the |sandbox|. |fold-foldtext| 1640 1641 *v:foldend* *foldend-variable* 1642v:foldend Used for 'foldtext': last line of closed fold. 1643 Read-only in the |sandbox|. |fold-foldtext| 1644 1645 *v:foldstart* *foldstart-variable* 1646v:foldstart Used for 'foldtext': first line of closed fold. 1647 Read-only in the |sandbox|. |fold-foldtext| 1648 1649 *v:hlsearch* *hlsearch-variable* 1650v:hlsearch Variable that indicates whether search highlighting is on. 1651 Setting it makes sense only if 'hlsearch' is enabled which 1652 requires |+extra_search|. Setting this variable to zero acts 1653 like the |:nohlsearch| command, setting it to one acts like > 1654 let &hlsearch = &hlsearch 1655< Note that the value is restored when returning from a 1656 function. |function-search-undo|. 1657 1658 *v:insertmode* *insertmode-variable* 1659v:insertmode Used for the |InsertEnter| and |InsertChange| autocommand 1660 events. Values: 1661 i Insert mode 1662 r Replace mode 1663 v Virtual Replace mode 1664 1665 *v:key* *key-variable* 1666v:key Key of the current item of a |Dictionary|. Only valid while 1667 evaluating the expression used with |map()| and |filter()|. 1668 Read-only. 1669 1670 *v:lang* *lang-variable* 1671v:lang The current locale setting for messages of the runtime 1672 environment. This allows Vim scripts to be aware of the 1673 current language. Technical: it's the value of LC_MESSAGES. 1674 The value is system dependent. 1675 This variable can not be set directly, use the |:language| 1676 command. 1677 It can be different from |v:ctype| when messages are desired 1678 in a different language than what is used for character 1679 encoding. See |multi-lang|. 1680 1681 *v:lc_time* *lc_time-variable* 1682v:lc_time The current locale setting for time messages of the runtime 1683 environment. This allows Vim scripts to be aware of the 1684 current language. Technical: it's the value of LC_TIME. 1685 This variable can not be set directly, use the |:language| 1686 command. See |multi-lang|. 1687 1688 *v:lnum* *lnum-variable* 1689v:lnum Line number for the 'foldexpr' |fold-expr|, 'formatexpr' and 1690 'indentexpr' expressions, tab page number for 'guitablabel' 1691 and 'guitabtooltip'. Only valid while one of these 1692 expressions is being evaluated. Read-only when in the 1693 |sandbox|. 1694 1695 *v:mouse_win* *mouse_win-variable* 1696v:mouse_win Window number for a mouse click obtained with |getchar()|. 1697 First window has number 1, like with |winnr()|. The value is 1698 zero when there was no mouse button click. 1699 1700 *v:mouse_winid* *mouse_winid-variable* 1701v:mouse_winid Window ID for a mouse click obtained with |getchar()|. 1702 The value is zero when there was no mouse button click. 1703 1704 *v:mouse_lnum* *mouse_lnum-variable* 1705v:mouse_lnum Line number for a mouse click obtained with |getchar()|. 1706 This is the text line number, not the screen line number. The 1707 value is zero when there was no mouse button click. 1708 1709 *v:mouse_col* *mouse_col-variable* 1710v:mouse_col Column number for a mouse click obtained with |getchar()|. 1711 This is the screen column number, like with |virtcol()|. The 1712 value is zero when there was no mouse button click. 1713 1714 *v:none* *none-variable* 1715v:none An empty String. Used to put an empty item in JSON. See 1716 |json_encode()|. 1717 When used as a number this evaluates to zero. 1718 When used as a string this evaluates to "v:none". > 1719 echo v:none 1720< v:none ~ 1721 That is so that eval() can parse the string back to the same 1722 value. Read-only. 1723 1724 *v:null* *null-variable* 1725v:null An empty String. Used to put "null" in JSON. See 1726 |json_encode()|. 1727 When used as a number this evaluates to zero. 1728 When used as a string this evaluates to "v:null". > 1729 echo v:null 1730< v:null ~ 1731 That is so that eval() can parse the string back to the same 1732 value. Read-only. 1733 1734 *v:oldfiles* *oldfiles-variable* 1735v:oldfiles List of file names that is loaded from the |viminfo| file on 1736 startup. These are the files that Vim remembers marks for. 1737 The length of the List is limited by the ' argument of the 1738 'viminfo' option (default is 100). 1739 When the |viminfo| file is not used the List is empty. 1740 Also see |:oldfiles| and |c_#<|. 1741 The List can be modified, but this has no effect on what is 1742 stored in the |viminfo| file later. If you use values other 1743 than String this will cause trouble. 1744 {only when compiled with the |+viminfo| feature} 1745 1746 *v:option_new* 1747v:option_new New value of the option. Valid while executing an |OptionSet| 1748 autocommand. 1749 *v:option_old* 1750v:option_old Old value of the option. Valid while executing an |OptionSet| 1751 autocommand. 1752 *v:option_type* 1753v:option_type Scope of the set command. Valid while executing an 1754 |OptionSet| autocommand. Can be either "global" or "local" 1755 *v:operator* *operator-variable* 1756v:operator The last operator given in Normal mode. This is a single 1757 character except for commands starting with <g> or <z>, 1758 in which case it is two characters. Best used alongside 1759 |v:prevcount| and |v:register|. Useful if you want to cancel 1760 Operator-pending mode and then use the operator, e.g.: > 1761 :omap O <Esc>:call MyMotion(v:operator)<CR> 1762< The value remains set until another operator is entered, thus 1763 don't expect it to be empty. 1764 v:operator is not set for |:delete|, |:yank| or other Ex 1765 commands. 1766 Read-only. 1767 1768 *v:prevcount* *prevcount-variable* 1769v:prevcount The count given for the last but one Normal mode command. 1770 This is the v:count value of the previous command. Useful if 1771 you want to cancel Visual or Operator-pending mode and then 1772 use the count, e.g.: > 1773 :vmap % <Esc>:call MyFilter(v:prevcount)<CR> 1774< Read-only. 1775 1776 *v:profiling* *profiling-variable* 1777v:profiling Normally zero. Set to one after using ":profile start". 1778 See |profiling|. 1779 1780 *v:progname* *progname-variable* 1781v:progname Contains the name (with path removed) with which Vim was 1782 invoked. Allows you to do special initialisations for |view|, 1783 |evim| etc., or any other name you might symlink to Vim. 1784 Read-only. 1785 1786 *v:progpath* *progpath-variable* 1787v:progpath Contains the command with which Vim was invoked, including the 1788 path. Useful if you want to message a Vim server using a 1789 |--remote-expr|. 1790 To get the full path use: > 1791 echo exepath(v:progpath) 1792< If the path is relative it will be expanded to the full path, 1793 so that it still works after `:cd`. Thus starting "./vim" 1794 results in "/home/user/path/to/vim/src/vim". 1795 On MS-Windows the executable may be called "vim.exe", but the 1796 ".exe" is not added to v:progpath. 1797 Read-only. 1798 1799 *v:register* *register-variable* 1800v:register The name of the register in effect for the current normal mode 1801 command (regardless of whether that command actually used a 1802 register). Or for the currently executing normal mode mapping 1803 (use this in custom commands that take a register). 1804 If none is supplied it is the default register '"', unless 1805 'clipboard' contains "unnamed" or "unnamedplus", then it is 1806 '*' or '+'. 1807 Also see |getreg()| and |setreg()| 1808 1809 *v:scrollstart* *scrollstart-variable* 1810v:scrollstart String describing the script or function that caused the 1811 screen to scroll up. It's only set when it is empty, thus the 1812 first reason is remembered. It is set to "Unknown" for a 1813 typed command. 1814 This can be used to find out why your script causes the 1815 hit-enter prompt. 1816 1817 *v:servername* *servername-variable* 1818v:servername The resulting registered |client-server-name| if any. 1819 Read-only. 1820 1821 1822v:searchforward *v:searchforward* *searchforward-variable* 1823 Search direction: 1 after a forward search, 0 after a 1824 backward search. It is reset to forward when directly setting 1825 the last search pattern, see |quote/|. 1826 Note that the value is restored when returning from a 1827 function. |function-search-undo|. 1828 Read-write. 1829 1830 *v:shell_error* *shell_error-variable* 1831v:shell_error Result of the last shell command. When non-zero, the last 1832 shell command had an error. When zero, there was no problem. 1833 This only works when the shell returns the error code to Vim. 1834 The value -1 is often used when the command could not be 1835 executed. Read-only. 1836 Example: > 1837 :!mv foo bar 1838 :if v:shell_error 1839 : echo 'could not rename "foo" to "bar"!' 1840 :endif 1841< "shell_error" also works, for backwards compatibility. 1842 1843 *v:statusmsg* *statusmsg-variable* 1844v:statusmsg Last given status message. It's allowed to set this variable. 1845 1846 *v:swapname* *swapname-variable* 1847v:swapname Only valid when executing |SwapExists| autocommands: Name of 1848 the swap file found. Read-only. 1849 1850 *v:swapchoice* *swapchoice-variable* 1851v:swapchoice |SwapExists| autocommands can set this to the selected choice 1852 for handling an existing swap file: 1853 'o' Open read-only 1854 'e' Edit anyway 1855 'r' Recover 1856 'd' Delete swapfile 1857 'q' Quit 1858 'a' Abort 1859 The value should be a single-character string. An empty value 1860 results in the user being asked, as would happen when there is 1861 no SwapExists autocommand. The default is empty. 1862 1863 *v:swapcommand* *swapcommand-variable* 1864v:swapcommand Normal mode command to be executed after a file has been 1865 opened. Can be used for a |SwapExists| autocommand to have 1866 another Vim open the file and jump to the right place. For 1867 example, when jumping to a tag the value is ":tag tagname\r". 1868 For ":edit +cmd file" the value is ":cmd\r". 1869 1870 *v:t_TYPE* *v:t_bool* *t_bool-variable* 1871v:t_bool Value of Boolean type. Read-only. See: |type()| 1872 *v:t_channel* *t_channel-variable* 1873v:t_channel Value of Channel type. Read-only. See: |type()| 1874 *v:t_dict* *t_dict-variable* 1875v:t_dict Value of Dictionary type. Read-only. See: |type()| 1876 *v:t_float* *t_float-variable* 1877v:t_float Value of Float type. Read-only. See: |type()| 1878 *v:t_func* *t_func-variable* 1879v:t_func Value of Funcref type. Read-only. See: |type()| 1880 *v:t_job* *t_job-variable* 1881v:t_job Value of Job type. Read-only. See: |type()| 1882 *v:t_list* *t_list-variable* 1883v:t_list Value of List type. Read-only. See: |type()| 1884 *v:t_none* *t_none-variable* 1885v:t_none Value of None type. Read-only. See: |type()| 1886 *v:t_number* *t_number-variable* 1887v:t_number Value of Number type. Read-only. See: |type()| 1888 *v:t_string* *t_string-variable* 1889v:t_string Value of String type. Read-only. See: |type()| 1890 1891 *v:termresponse* *termresponse-variable* 1892v:termresponse The escape sequence returned by the terminal for the |t_RV| 1893 termcap entry. It is set when Vim receives an escape sequence 1894 that starts with ESC [ or CSI and ends in a 'c', with only 1895 digits, ';' and '.' in between. 1896 When this option is set, the TermResponse autocommand event is 1897 fired, so that you can react to the response from the 1898 terminal. 1899 The response from a new xterm is: "<Esc>[ Pp ; Pv ; Pc c". Pp 1900 is the terminal type: 0 for vt100 and 1 for vt220. Pv is the 1901 patch level (since this was introduced in patch 95, it's 1902 always 95 or bigger). Pc is always zero. 1903 {only when compiled with |+termresponse| feature} 1904 1905 *v:testing* *testing-variable* 1906v:testing Must be set before using `test_garbagecollect_now()`. 1907 Also, when set certain error messages won't be shown for 2 1908 seconds. (e.g. "'dictionary' option is empty") 1909 1910 *v:this_session* *this_session-variable* 1911v:this_session Full filename of the last loaded or saved session file. See 1912 |:mksession|. It is allowed to set this variable. When no 1913 session file has been saved, this variable is empty. 1914 "this_session" also works, for backwards compatibility. 1915 1916 *v:throwpoint* *throwpoint-variable* 1917v:throwpoint The point where the exception most recently caught and not 1918 finished was thrown. Not set when commands are typed. See 1919 also |v:exception| and |throw-variables|. 1920 Example: > 1921 :try 1922 : throw "oops" 1923 :catch /.*/ 1924 : echo "Exception from" v:throwpoint 1925 :endtry 1926< Output: "Exception from test.vim, line 2" 1927 1928 *v:true* *true-variable* 1929v:true A Number with value one. Used to put "true" in JSON. See 1930 |json_encode()|. 1931 When used as a string this evaluates to "v:true". > 1932 echo v:true 1933< v:true ~ 1934 That is so that eval() can parse the string back to the same 1935 value. Read-only. 1936 *v:val* *val-variable* 1937v:val Value of the current item of a |List| or |Dictionary|. Only 1938 valid while evaluating the expression used with |map()| and 1939 |filter()|. Read-only. 1940 1941 *v:version* *version-variable* 1942v:version Version number of Vim: Major version number times 100 plus 1943 minor version number. Version 5.0 is 500. Version 5.1 (5.01) 1944 is 501. Read-only. "version" also works, for backwards 1945 compatibility. 1946 Use |has()| to check if a certain patch was included, e.g.: > 1947 if has("patch-7.4.123") 1948< Note that patch numbers are specific to the version, thus both 1949 version 5.0 and 5.1 may have a patch 123, but these are 1950 completely different. 1951 1952 *v:vim_did_enter* *vim_did_enter-variable* 1953v:vim_did_enter Zero until most of startup is done. It is set to one just 1954 before |VimEnter| autocommands are triggered. 1955 1956 *v:warningmsg* *warningmsg-variable* 1957v:warningmsg Last given warning message. It's allowed to set this variable. 1958 1959 *v:windowid* *windowid-variable* 1960v:windowid When any X11 based GUI is running or when running in a 1961 terminal and Vim connects to the X server (|-X|) this will be 1962 set to the window ID. 1963 When an MS-Windows GUI is running this will be set to the 1964 window handle. 1965 Otherwise the value is zero. 1966 Note: for windows inside Vim use |winnr()| or |win_getid()|, 1967 see |window-ID|. 1968 1969============================================================================== 19704. Builtin Functions *functions* 1971 1972See |function-list| for a list grouped by what the function is used for. 1973 1974(Use CTRL-] on the function name to jump to the full explanation.) 1975 1976USAGE RESULT DESCRIPTION ~ 1977 1978abs({expr}) Float or Number absolute value of {expr} 1979acos({expr}) Float arc cosine of {expr} 1980add({list}, {item}) List append {item} to |List| {list} 1981and({expr}, {expr}) Number bitwise AND 1982append({lnum}, {string}) Number append {string} below line {lnum} 1983append({lnum}, {list}) Number append lines {list} below line {lnum} 1984argc() Number number of files in the argument list 1985argidx() Number current index in the argument list 1986arglistid([{winnr} [, {tabnr}]]) Number argument list id 1987argv({nr}) String {nr} entry of the argument list 1988argv() List the argument list 1989assert_equal({exp}, {act} [, {msg}]) 1990 none assert {exp} is equal to {act} 1991assert_exception({error} [, {msg}]) 1992 none assert {error} is in v:exception 1993assert_fails({cmd} [, {error}]) none assert {cmd} fails 1994assert_false({actual} [, {msg}]) 1995 none assert {actual} is false 1996assert_inrange({lower}, {upper}, {actual} [, {msg}]) 1997 none assert {actual} is inside the range 1998assert_match({pat}, {text} [, {msg}]) 1999 none assert {pat} matches {text} 2000assert_notequal({exp}, {act} [, {msg}]) 2001 none assert {exp} is not equal {act} 2002assert_notmatch({pat}, {text} [, {msg}]) 2003 none assert {pat} not matches {text} 2004assert_report({msg}) none report a test failure 2005assert_true({actual} [, {msg}]) none assert {actual} is true 2006asin({expr}) Float arc sine of {expr} 2007atan({expr}) Float arc tangent of {expr} 2008atan2({expr1}, {expr2}) Float arc tangent of {expr1} / {expr2} 2009balloon_show({msg}) none show {msg} inside the balloon 2010browse({save}, {title}, {initdir}, {default}) 2011 String put up a file requester 2012browsedir({title}, {initdir}) String put up a directory requester 2013bufexists({expr}) Number |TRUE| if buffer {expr} exists 2014buflisted({expr}) Number |TRUE| if buffer {expr} is listed 2015bufloaded({expr}) Number |TRUE| if buffer {expr} is loaded 2016bufname({expr}) String Name of the buffer {expr} 2017bufnr({expr} [, {create}]) Number Number of the buffer {expr} 2018bufwinid({expr}) Number window ID of buffer {expr} 2019bufwinnr({expr}) Number window number of buffer {expr} 2020byte2line({byte}) Number line number at byte count {byte} 2021byteidx({expr}, {nr}) Number byte index of {nr}'th char in {expr} 2022byteidxcomp({expr}, {nr}) Number byte index of {nr}'th char in {expr} 2023call({func}, {arglist} [, {dict}]) 2024 any call {func} with arguments {arglist} 2025ceil({expr}) Float round {expr} up 2026ch_canread({handle}) Number check if there is something to read 2027ch_close({handle}) none close {handle} 2028ch_close_in({handle}) none close in part of {handle} 2029ch_evalexpr({handle}, {expr} [, {options}]) 2030 any evaluate {expr} on JSON {handle} 2031ch_evalraw({handle}, {string} [, {options}]) 2032 any evaluate {string} on raw {handle} 2033ch_getbufnr({handle}, {what}) Number get buffer number for {handle}/{what} 2034ch_getjob({channel}) Job get the Job of {channel} 2035ch_info({handle}) String info about channel {handle} 2036ch_log({msg} [, {handle}]) none write {msg} in the channel log file 2037ch_logfile({fname} [, {mode}]) none start logging channel activity 2038ch_open({address} [, {options}]) 2039 Channel open a channel to {address} 2040ch_read({handle} [, {options}]) String read from {handle} 2041ch_readraw({handle} [, {options}]) 2042 String read raw from {handle} 2043ch_sendexpr({handle}, {expr} [, {options}]) 2044 any send {expr} over JSON {handle} 2045ch_sendraw({handle}, {string} [, {options}]) 2046 any send {string} over raw {handle} 2047ch_setoptions({handle}, {options}) 2048 none set options for {handle} 2049ch_status({handle} [, {options}]) 2050 String status of channel {handle} 2051changenr() Number current change number 2052char2nr({expr}[, {utf8}]) Number ASCII/UTF8 value of first char in {expr} 2053cindent({lnum}) Number C indent for line {lnum} 2054clearmatches() none clear all matches 2055col({expr}) Number column nr of cursor or mark 2056complete({startcol}, {matches}) none set Insert mode completion 2057complete_add({expr}) Number add completion match 2058complete_check() Number check for key typed during completion 2059confirm({msg} [, {choices} [, {default} [, {type}]]]) 2060 Number number of choice picked by user 2061copy({expr}) any make a shallow copy of {expr} 2062cos({expr}) Float cosine of {expr} 2063cosh({expr}) Float hyperbolic cosine of {expr} 2064count({list}, {expr} [, {ic} [, {start}]]) 2065 Number count how many {expr} are in {list} 2066cscope_connection([{num}, {dbpath} [, {prepend}]]) 2067 Number checks existence of cscope connection 2068cursor({lnum}, {col} [, {off}]) 2069 Number move cursor to {lnum}, {col}, {off} 2070cursor({list}) Number move cursor to position in {list} 2071deepcopy({expr} [, {noref}]) any make a full copy of {expr} 2072delete({fname} [, {flags}]) Number delete the file or directory {fname} 2073did_filetype() Number |TRUE| if FileType autocmd event used 2074diff_filler({lnum}) Number diff filler lines about {lnum} 2075diff_hlID({lnum}, {col}) Number diff highlighting at {lnum}/{col} 2076empty({expr}) Number |TRUE| if {expr} is empty 2077escape({string}, {chars}) String escape {chars} in {string} with '\' 2078eval({string}) any evaluate {string} into its value 2079eventhandler() Number |TRUE| if inside an event handler 2080executable({expr}) Number 1 if executable {expr} exists 2081execute({command}) String execute {command} and get the output 2082exepath({expr}) String full path of the command {expr} 2083exists({expr}) Number |TRUE| if {expr} exists 2084extend({expr1}, {expr2} [, {expr3}]) 2085 List/Dict insert items of {expr2} into {expr1} 2086exp({expr}) Float exponential of {expr} 2087expand({expr} [, {nosuf} [, {list}]]) 2088 any expand special keywords in {expr} 2089feedkeys({string} [, {mode}]) Number add key sequence to typeahead buffer 2090filereadable({file}) Number |TRUE| if {file} is a readable file 2091filewritable({file}) Number |TRUE| if {file} is a writable file 2092filter({expr1}, {expr2}) List/Dict remove items from {expr1} where 2093 {expr2} is 0 2094finddir({name}[, {path}[, {count}]]) 2095 String find directory {name} in {path} 2096findfile({name}[, {path}[, {count}]]) 2097 String find file {name} in {path} 2098float2nr({expr}) Number convert Float {expr} to a Number 2099floor({expr}) Float round {expr} down 2100fmod({expr1}, {expr2}) Float remainder of {expr1} / {expr2} 2101fnameescape({fname}) String escape special characters in {fname} 2102fnamemodify({fname}, {mods}) String modify file name 2103foldclosed({lnum}) Number first line of fold at {lnum} if closed 2104foldclosedend({lnum}) Number last line of fold at {lnum} if closed 2105foldlevel({lnum}) Number fold level at {lnum} 2106foldtext() String line displayed for closed fold 2107foldtextresult({lnum}) String text for closed fold at {lnum} 2108foreground() Number bring the Vim window to the foreground 2109funcref({name} [, {arglist}] [, {dict}]) 2110 Funcref reference to function {name} 2111function({name} [, {arglist}] [, {dict}]) 2112 Funcref named reference to function {name} 2113garbagecollect([{atexit}]) none free memory, breaking cyclic references 2114get({list}, {idx} [, {def}]) any get item {idx} from {list} or {def} 2115get({dict}, {key} [, {def}]) any get item {key} from {dict} or {def} 2116get({func}, {what}) any get property of funcref/partial {func} 2117getbufinfo([{expr}]) List information about buffers 2118getbufline({expr}, {lnum} [, {end}]) 2119 List lines {lnum} to {end} of buffer {expr} 2120getbufvar({expr}, {varname} [, {def}]) 2121 any variable {varname} in buffer {expr} 2122getchar([expr]) Number get one character from the user 2123getcharmod() Number modifiers for the last typed character 2124getcharsearch() Dict last character search 2125getcmdline() String return the current command-line 2126getcmdpos() Number return cursor position in command-line 2127getcmdtype() String return current command-line type 2128getcmdwintype() String return current command-line window type 2129getcompletion({pat}, {type} [, {filtered}]) 2130 List list of cmdline completion matches 2131getcurpos() List position of the cursor 2132getcwd([{winnr} [, {tabnr}]]) String get the current working directory 2133getfontname([{name}]) String name of font being used 2134getfperm({fname}) String file permissions of file {fname} 2135getfsize({fname}) Number size in bytes of file {fname} 2136getftime({fname}) Number last modification time of file 2137getftype({fname}) String description of type of file {fname} 2138getline({lnum}) String line {lnum} of current buffer 2139getline({lnum}, {end}) List lines {lnum} to {end} of current buffer 2140getloclist({nr}[, {what}]) List list of location list items 2141getmatches() List list of current matches 2142getpid() Number process ID of Vim 2143getpos({expr}) List position of cursor, mark, etc. 2144getqflist([{what}]) List list of quickfix items 2145getreg([{regname} [, 1 [, {list}]]]) 2146 String or List contents of register 2147getregtype([{regname}]) String type of register 2148gettabinfo([{expr}]) List list of tab pages 2149gettabvar({nr}, {varname} [, {def}]) 2150 any variable {varname} in tab {nr} or {def} 2151gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) 2152 any {name} in {winnr} in tab page {tabnr} 2153getwininfo([{winid}]) List list of windows 2154getwinposx() Number X coord in pixels of GUI Vim window 2155getwinposy() Number Y coord in pixels of GUI Vim window 2156getwinvar({nr}, {varname} [, {def}]) 2157 any variable {varname} in window {nr} 2158glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) 2159 any expand file wildcards in {expr} 2160glob2regpat({expr}) String convert a glob pat into a search pat 2161globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 2162 String do glob({expr}) for all dirs in {path} 2163has({feature}) Number |TRUE| if feature {feature} supported 2164has_key({dict}, {key}) Number |TRUE| if {dict} has entry {key} 2165haslocaldir([{winnr} [, {tabnr}]]) 2166 Number |TRUE| if the window executed |:lcd| 2167hasmapto({what} [, {mode} [, {abbr}]]) 2168 Number |TRUE| if mapping to {what} exists 2169histadd({history}, {item}) String add an item to a history 2170histdel({history} [, {item}]) String remove an item from a history 2171histget({history} [, {index}]) String get the item {index} from a history 2172histnr({history}) Number highest index of a history 2173hlexists({name}) Number |TRUE| if highlight group {name} exists 2174hlID({name}) Number syntax ID of highlight group {name} 2175hostname() String name of the machine Vim is running on 2176iconv({expr}, {from}, {to}) String convert encoding of {expr} 2177indent({lnum}) Number indent of line {lnum} 2178index({list}, {expr} [, {start} [, {ic}]]) 2179 Number index in {list} where {expr} appears 2180input({prompt} [, {text} [, {completion}]]) 2181 String get input from the user 2182inputdialog({prompt} [, {text} [, {completion}]]) 2183 String like input() but in a GUI dialog 2184inputlist({textlist}) Number let the user pick from a choice list 2185inputrestore() Number restore typeahead 2186inputsave() Number save and clear typeahead 2187inputsecret({prompt} [, {text}]) String like input() but hiding the text 2188insert({list}, {item} [, {idx}]) List insert {item} in {list} [before {idx}] 2189invert({expr}) Number bitwise invert 2190isdirectory({directory}) Number |TRUE| if {directory} is a directory 2191islocked({expr}) Number |TRUE| if {expr} is locked 2192isnan({expr}) Number |TRUE| if {expr} is NaN 2193items({dict}) List key-value pairs in {dict} 2194job_getchannel({job}) Channel get the channel handle for {job} 2195job_info({job}) Dict get information about {job} 2196job_setoptions({job}, {options}) none set options for {job} 2197job_start({command} [, {options}]) 2198 Job start a job 2199job_status({job}) String get the status of {job} 2200job_stop({job} [, {how}]) Number stop {job} 2201join({list} [, {sep}]) String join {list} items into one String 2202js_decode({string}) any decode JS style JSON 2203js_encode({expr}) String encode JS style JSON 2204json_decode({string}) any decode JSON 2205json_encode({expr}) String encode JSON 2206keys({dict}) List keys in {dict} 2207len({expr}) Number the length of {expr} 2208libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg} 2209libcallnr({lib}, {func}, {arg}) Number idem, but return a Number 2210line({expr}) Number line nr of cursor, last line or mark 2211line2byte({lnum}) Number byte count of line {lnum} 2212lispindent({lnum}) Number Lisp indent for line {lnum} 2213localtime() Number current time 2214log({expr}) Float natural logarithm (base e) of {expr} 2215log10({expr}) Float logarithm of Float {expr} to base 10 2216luaeval({expr}[, {expr}]) any evaluate |Lua| expression 2217map({expr1}, {expr2}) List/Dict change each item in {expr1} to {expr} 2218maparg({name}[, {mode} [, {abbr} [, {dict}]]]) 2219 String or Dict 2220 rhs of mapping {name} in mode {mode} 2221mapcheck({name}[, {mode} [, {abbr}]]) 2222 String check for mappings matching {name} 2223match({expr}, {pat}[, {start}[, {count}]]) 2224 Number position where {pat} matches in {expr} 2225matchadd({group}, {pattern}[, {priority}[, {id} [, {dict}]]]) 2226 Number highlight {pattern} with {group} 2227matchaddpos({group}, {pos}[, {priority}[, {id}[, {dict}]]]) 2228 Number highlight positions with {group} 2229matcharg({nr}) List arguments of |:match| 2230matchdelete({id}) Number delete match identified by {id} 2231matchend({expr}, {pat}[, {start}[, {count}]]) 2232 Number position where {pat} ends in {expr} 2233matchlist({expr}, {pat}[, {start}[, {count}]]) 2234 List match and submatches of {pat} in {expr} 2235matchstr({expr}, {pat}[, {start}[, {count}]]) 2236 String {count}'th match of {pat} in {expr} 2237matchstrpos({expr}, {pat}[, {start}[, {count}]]) 2238 List {count}'th match of {pat} in {expr} 2239max({expr}) Number maximum value of items in {expr} 2240min({expr}) Number minimum value of items in {expr} 2241mkdir({name} [, {path} [, {prot}]]) 2242 Number create directory {name} 2243mode([expr]) String current editing mode 2244mzeval({expr}) any evaluate |MzScheme| expression 2245nextnonblank({lnum}) Number line nr of non-blank line >= {lnum} 2246nr2char({expr}[, {utf8}]) String single char with ASCII/UTF8 value {expr} 2247or({expr}, {expr}) Number bitwise OR 2248pathshorten({expr}) String shorten directory names in a path 2249perleval({expr}) any evaluate |Perl| expression 2250pow({x}, {y}) Float {x} to the power of {y} 2251prevnonblank({lnum}) Number line nr of non-blank line <= {lnum} 2252printf({fmt}, {expr1}...) String format text 2253pumvisible() Number whether popup menu is visible 2254pyeval({expr}) any evaluate |Python| expression 2255py3eval({expr}) any evaluate |python3| expression 2256pyxeval({expr}) any evaluate |python_x| expression 2257range({expr} [, {max} [, {stride}]]) 2258 List items from {expr} to {max} 2259readfile({fname} [, {binary} [, {max}]]) 2260 List get list of lines from file {fname} 2261reltime([{start} [, {end}]]) List get time value 2262reltimefloat({time}) Float turn the time value into a Float 2263reltimestr({time}) String turn time value into a String 2264remote_expr({server}, {string} [, {idvar} [, {timeout}]]) 2265 String send expression 2266remote_foreground({server}) Number bring Vim server to the foreground 2267remote_peek({serverid} [, {retvar}]) 2268 Number check for reply string 2269remote_read({serverid} [, {timeout}]) 2270 String read reply string 2271remote_send({server}, {string} [, {idvar}]) 2272 String send key sequence 2273remote_startserver({name}) none become server {name} 2274 String send key sequence 2275remove({list}, {idx} [, {end}]) any remove items {idx}-{end} from {list} 2276remove({dict}, {key}) any remove entry {key} from {dict} 2277rename({from}, {to}) Number rename (move) file from {from} to {to} 2278repeat({expr}, {count}) String repeat {expr} {count} times 2279resolve({filename}) String get filename a shortcut points to 2280reverse({list}) List reverse {list} in-place 2281round({expr}) Float round off {expr} 2282screenattr({row}, {col}) Number attribute at screen position 2283screenchar({row}, {col}) Number character at screen position 2284screencol() Number current cursor column 2285screenrow() Number current cursor row 2286search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) 2287 Number search for {pattern} 2288searchdecl({name} [, {global} [, {thisblock}]]) 2289 Number search for variable declaration 2290searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 2291 Number search for other end of start/end pair 2292searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 2293 List search for other end of start/end pair 2294searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) 2295 List search for {pattern} 2296server2client({clientid}, {string}) 2297 Number send reply string 2298serverlist() String get a list of available servers 2299setbufvar({expr}, {varname}, {val}) 2300 none set {varname} in buffer {expr} to {val} 2301setcharsearch({dict}) Dict set character search from {dict} 2302setcmdpos({pos}) Number set cursor position in command-line 2303setfperm({fname}, {mode}) Number set {fname} file permissions to {mode} 2304setline({lnum}, {line}) Number set line {lnum} to {line} 2305setloclist({nr}, {list}[, {action}[, {what}]]) 2306 Number modify location list using {list} 2307setmatches({list}) Number restore a list of matches 2308setpos({expr}, {list}) Number set the {expr} position to {list} 2309setqflist({list}[, {action}[, {what}]]) 2310 Number modify quickfix list using {list} 2311setreg({n}, {v}[, {opt}]) Number set register to value and type 2312settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val} 2313settabwinvar({tabnr}, {winnr}, {varname}, {val}) 2314 none set {varname} in window {winnr} in tab 2315 page {tabnr} to {val} 2316setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val} 2317sha256({string}) String SHA256 checksum of {string} 2318shellescape({string} [, {special}]) 2319 String escape {string} for use as shell 2320 command argument 2321shiftwidth() Number effective value of 'shiftwidth' 2322simplify({filename}) String simplify filename as much as possible 2323sin({expr}) Float sine of {expr} 2324sinh({expr}) Float hyperbolic sine of {expr} 2325sort({list} [, {func} [, {dict}]]) 2326 List sort {list}, using {func} to compare 2327soundfold({word}) String sound-fold {word} 2328spellbadword() String badly spelled word at cursor 2329spellsuggest({word} [, {max} [, {capital}]]) 2330 List spelling suggestions 2331split({expr} [, {pat} [, {keepempty}]]) 2332 List make |List| from {pat} separated {expr} 2333sqrt({expr}) Float square root of {expr} 2334str2float({expr}) Float convert String to Float 2335str2nr({expr} [, {base}]) Number convert String to Number 2336strchars({expr} [, {skipcc}]) Number character length of the String {expr} 2337strcharpart({str}, {start}[, {len}]) 2338 String {len} characters of {str} at {start} 2339strdisplaywidth({expr} [, {col}]) Number display length of the String {expr} 2340strftime({format}[, {time}]) String time in specified format 2341strgetchar({str}, {index}) Number get char {index} from {str} 2342stridx({haystack}, {needle}[, {start}]) 2343 Number index of {needle} in {haystack} 2344string({expr}) String String representation of {expr} value 2345strlen({expr}) Number length of the String {expr} 2346strpart({str}, {start}[, {len}]) 2347 String {len} characters of {str} at {start} 2348strridx({haystack}, {needle} [, {start}]) 2349 Number last index of {needle} in {haystack} 2350strtrans({expr}) String translate string to make it printable 2351strwidth({expr}) Number display cell length of the String {expr} 2352submatch({nr}[, {list}]) String or List 2353 specific match in ":s" or substitute() 2354substitute({expr}, {pat}, {sub}, {flags}) 2355 String all {pat} in {expr} replaced with {sub} 2356synID({lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col} 2357synIDattr({synID}, {what} [, {mode}]) 2358 String attribute {what} of syntax ID {synID} 2359synIDtrans({synID}) Number translated syntax ID of {synID} 2360synconcealed({lnum}, {col}) List info about concealing 2361synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and {col} 2362system({expr} [, {input}]) String output of shell command/filter {expr} 2363systemlist({expr} [, {input}]) List output of shell command/filter {expr} 2364tabpagebuflist([{arg}]) List list of buffer numbers in tab page 2365tabpagenr([{arg}]) Number number of current or last tab page 2366tabpagewinnr({tabarg}[, {arg}]) Number number of current window in tab page 2367taglist({expr}[, {filename}]) List list of tags matching {expr} 2368tagfiles() List tags files used 2369tan({expr}) Float tangent of {expr} 2370tanh({expr}) Float hyperbolic tangent of {expr} 2371tempname() String name for a temporary file 2372term_getattr({attr}, {what} Number get the value of attribute {what} 2373term_getcursor({buf}) List get the cursor position of a terminal 2374term_getjob({buf}) Job get the job associated with a terminal 2375term_getline({buf}, {row}) String get a line of text from a terminal 2376term_getsize({buf}) List get the size of a terminal 2377term_getstatus({buf}) String get the status of a terminal 2378term_gettitle({buf}) String get the title of a terminal 2379term_gettty({buf}) String get the tty name of a terminal 2380term_list() List get the list of terminal buffers 2381term_scrape({buf}, {row}) List get row of a terminal screen 2382term_sendkeys({buf}, {keys}) none send keystrokes to a terminal 2383term_start({cmd}, {options}) Job open a terminal window and run a job 2384term_wait({buf}) Number wait for screen to be updated 2385test_alloc_fail({id}, {countdown}, {repeat}) 2386 none make memory allocation fail 2387test_autochdir() none enable 'autochdir' during startup 2388test_garbagecollect_now() none free memory right now for testing 2389test_ignore_error({expr}) none ignore a specific error 2390test_null_channel() Channel null value for testing 2391test_null_dict() Dict null value for testing 2392test_null_job() Job null value for testing 2393test_null_list() List null value for testing 2394test_null_partial() Funcref null value for testing 2395test_null_string() String null value for testing 2396test_override({expr}, {val}) none test with Vim internal overrides 2397test_settime({expr}) none set current time for testing 2398timer_info([{id}]) List information about timers 2399timer_pause({id}, {pause}) none pause or unpause a timer 2400timer_start({time}, {callback} [, {options}]) 2401 Number create a timer 2402timer_stop({timer}) none stop a timer 2403timer_stopall() none stop all timers 2404tolower({expr}) String the String {expr} switched to lowercase 2405toupper({expr}) String the String {expr} switched to uppercase 2406tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr} 2407 to chars in {tostr} 2408trunc({expr}) Float truncate Float {expr} 2409type({name}) Number type of variable {name} 2410undofile({name}) String undo file name for {name} 2411undotree() List undo file tree 2412uniq({list} [, {func} [, {dict}]]) 2413 List remove adjacent duplicates from a list 2414values({dict}) List values in {dict} 2415virtcol({expr}) Number screen column of cursor or mark 2416visualmode([expr]) String last visual mode used 2417wildmenumode() Number whether 'wildmenu' mode is active 2418win_findbuf({bufnr}) List find windows containing {bufnr} 2419win_getid([{win} [, {tab}]]) Number get window ID for {win} in {tab} 2420win_gotoid({expr}) Number go to window with ID {expr} 2421win_id2tabwin({expr}) List get tab and window nr from window ID 2422win_id2win({expr}) Number get window nr from window ID 2423winbufnr({nr}) Number buffer number of window {nr} 2424wincol() Number window column of the cursor 2425winheight({nr}) Number height of window {nr} 2426winline() Number window line of the cursor 2427winnr([{expr}]) Number number of current window 2428winrestcmd() String returns command to restore window sizes 2429winrestview({dict}) none restore view of current window 2430winsaveview() Dict save view of current window 2431winwidth({nr}) Number width of window {nr} 2432wordcount() Dict get byte/char/word statistics 2433writefile({list}, {fname} [, {flags}]) 2434 Number write list of lines to file {fname} 2435xor({expr}, {expr}) Number bitwise XOR 2436 2437 2438abs({expr}) *abs()* 2439 Return the absolute value of {expr}. When {expr} evaluates to 2440 a |Float| abs() returns a |Float|. When {expr} can be 2441 converted to a |Number| abs() returns a |Number|. Otherwise 2442 abs() gives an error message and returns -1. 2443 Examples: > 2444 echo abs(1.456) 2445< 1.456 > 2446 echo abs(-5.456) 2447< 5.456 > 2448 echo abs(-4) 2449< 4 2450 {only available when compiled with the |+float| feature} 2451 2452 2453acos({expr}) *acos()* 2454 Return the arc cosine of {expr} measured in radians, as a 2455 |Float| in the range of [0, pi]. 2456 {expr} must evaluate to a |Float| or a |Number| in the range 2457 [-1, 1]. 2458 Examples: > 2459 :echo acos(0) 2460< 1.570796 > 2461 :echo acos(-0.5) 2462< 2.094395 2463 {only available when compiled with the |+float| feature} 2464 2465 2466add({list}, {expr}) *add()* 2467 Append the item {expr} to |List| {list}. Returns the 2468 resulting |List|. Examples: > 2469 :let alist = add([1, 2, 3], item) 2470 :call add(mylist, "woodstock") 2471< Note that when {expr} is a |List| it is appended as a single 2472 item. Use |extend()| to concatenate |Lists|. 2473 Use |insert()| to add an item at another position. 2474 2475 2476and({expr}, {expr}) *and()* 2477 Bitwise AND on the two arguments. The arguments are converted 2478 to a number. A List, Dict or Float argument causes an error. 2479 Example: > 2480 :let flag = and(bits, 0x80) 2481 2482 2483append({lnum}, {expr}) *append()* 2484 When {expr} is a |List|: Append each item of the |List| as a 2485 text line below line {lnum} in the current buffer. 2486 Otherwise append {expr} as one text line below line {lnum} in 2487 the current buffer. 2488 {lnum} can be zero to insert a line before the first one. 2489 Returns 1 for failure ({lnum} out of range or out of memory), 2490 0 for success. Example: > 2491 :let failed = append(line('$'), "# THE END") 2492 :let failed = append(0, ["Chapter 1", "the beginning"]) 2493< 2494 *argc()* 2495argc() The result is the number of files in the argument list of the 2496 current window. See |arglist|. 2497 2498 *argidx()* 2499argidx() The result is the current index in the argument list. 0 is 2500 the first file. argc() - 1 is the last one. See |arglist|. 2501 2502 *arglistid()* 2503arglistid([{winnr} [, {tabnr}]]) 2504 Return the argument list ID. This is a number which 2505 identifies the argument list being used. Zero is used for the 2506 global argument list. See |arglist|. 2507 Return -1 if the arguments are invalid. 2508 2509 Without arguments use the current window. 2510 With {winnr} only use this window in the current tab page. 2511 With {winnr} and {tabnr} use the window in the specified tab 2512 page. 2513 {winnr} can be the window number or the |window-ID|. 2514 2515 *argv()* 2516argv([{nr}]) The result is the {nr}th file in the argument list of the 2517 current window. See |arglist|. "argv(0)" is the first one. 2518 Example: > 2519 :let i = 0 2520 :while i < argc() 2521 : let f = escape(fnameescape(argv(i)), '.') 2522 : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>' 2523 : let i = i + 1 2524 :endwhile 2525< Without the {nr} argument a |List| with the whole |arglist| is 2526 returned. 2527 2528 *assert_equal()* 2529assert_equal({expected}, {actual} [, {msg}]) 2530 When {expected} and {actual} are not equal an error message is 2531 added to |v:errors|. 2532 There is no automatic conversion, the String "4" is different 2533 from the Number 4. And the number 4 is different from the 2534 Float 4.0. The value of 'ignorecase' is not used here, case 2535 always matters. 2536 When {msg} is omitted an error in the form "Expected 2537 {expected} but got {actual}" is produced. 2538 Example: > 2539 assert_equal('foo', 'bar') 2540< Will result in a string to be added to |v:errors|: 2541 test.vim line 12: Expected 'foo' but got 'bar' ~ 2542 2543assert_exception({error} [, {msg}]) *assert_exception()* 2544 When v:exception does not contain the string {error} an error 2545 message is added to |v:errors|. 2546 This can be used to assert that a command throws an exception. 2547 Using the error number, followed by a colon, avoids problems 2548 with translations: > 2549 try 2550 commandthatfails 2551 call assert_false(1, 'command should have failed') 2552 catch 2553 call assert_exception('E492:') 2554 endtry 2555 2556assert_fails({cmd} [, {error}]) *assert_fails()* 2557 Run {cmd} and add an error message to |v:errors| if it does 2558 NOT produce an error. 2559 When {error} is given it must match in |v:errmsg|. 2560 2561assert_false({actual} [, {msg}]) *assert_false()* 2562 When {actual} is not false an error message is added to 2563 |v:errors|, like with |assert_equal()|. 2564 A value is false when it is zero. When {actual} is not a 2565 number the assert fails. 2566 When {msg} is omitted an error in the form 2567 "Expected False but got {actual}" is produced. 2568 2569assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()* 2570 This asserts number values. When {actual} is lower than 2571 {lower} or higher than {upper} an error message is added to 2572 |v:errors|. 2573 When {msg} is omitted an error in the form 2574 "Expected range {lower} - {upper}, but got {actual}" is 2575 produced. 2576 2577 *assert_match()* 2578assert_match({pattern}, {actual} [, {msg}]) 2579 When {pattern} does not match {actual} an error message is 2580 added to |v:errors|. 2581 2582 {pattern} is used as with |=~|: The matching is always done 2583 like 'magic' was set and 'cpoptions' is empty, no matter what 2584 the actual value of 'magic' or 'cpoptions' is. 2585 2586 {actual} is used as a string, automatic conversion applies. 2587 Use "^" and "$" to match with the start and end of the text. 2588 Use both to match the whole text. 2589 2590 When {msg} is omitted an error in the form 2591 "Pattern {pattern} does not match {actual}" is produced. 2592 Example: > 2593 assert_match('^f.*o$', 'foobar') 2594< Will result in a string to be added to |v:errors|: 2595 test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~ 2596 2597 *assert_notequal()* 2598assert_notequal({expected}, {actual} [, {msg}]) 2599 The opposite of `assert_equal()`: add an error message to 2600 |v:errors| when {expected} and {actual} are equal. 2601 2602 *assert_notmatch()* 2603assert_notmatch({pattern}, {actual} [, {msg}]) 2604 The opposite of `assert_match()`: add an error message to 2605 |v:errors| when {pattern} matches {actual}. 2606 2607assert_report({msg}) *assert_report()* 2608 Report a test failure directly, using {msg}. 2609 2610assert_true({actual} [, {msg}]) *assert_true()* 2611 When {actual} is not true an error message is added to 2612 |v:errors|, like with |assert_equal()|. 2613 A value is TRUE when it is a non-zero number. When {actual} 2614 is not a number the assert fails. 2615 When {msg} is omitted an error in the form "Expected True but 2616 got {actual}" is produced. 2617 2618asin({expr}) *asin()* 2619 Return the arc sine of {expr} measured in radians, as a |Float| 2620 in the range of [-pi/2, pi/2]. 2621 {expr} must evaluate to a |Float| or a |Number| in the range 2622 [-1, 1]. 2623 Examples: > 2624 :echo asin(0.8) 2625< 0.927295 > 2626 :echo asin(-0.5) 2627< -0.523599 2628 {only available when compiled with the |+float| feature} 2629 2630 2631atan({expr}) *atan()* 2632 Return the principal value of the arc tangent of {expr}, in 2633 the range [-pi/2, +pi/2] radians, as a |Float|. 2634 {expr} must evaluate to a |Float| or a |Number|. 2635 Examples: > 2636 :echo atan(100) 2637< 1.560797 > 2638 :echo atan(-4.01) 2639< -1.326405 2640 {only available when compiled with the |+float| feature} 2641 2642 2643atan2({expr1}, {expr2}) *atan2()* 2644 Return the arc tangent of {expr1} / {expr2}, measured in 2645 radians, as a |Float| in the range [-pi, pi]. 2646 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 2647 Examples: > 2648 :echo atan2(-1, 1) 2649< -0.785398 > 2650 :echo atan2(1, -1) 2651< 2.356194 2652 {only available when compiled with the |+float| feature} 2653 2654balloon_show({msg}) *balloon_show()* 2655 Show {msg} inside the balloon. 2656 Example: > 2657 func GetBalloonContent() 2658 " initiate getting the content 2659 return '' 2660 endfunc 2661 set balloonexpr=GetBalloonContent() 2662 2663 func BalloonCallback(result) 2664 call balloon_show(a:result) 2665 endfunc 2666< 2667 The intended use is that fetching the content of the balloon 2668 is initiated from 'balloonexpr'. It will invoke an 2669 asynchronous method, in which a callback invokes 2670 balloon_show(). The 'balloonexpr' itself can return an 2671 empty string or a placeholder. 2672 2673 When showing a balloon is not possible nothing happens, no 2674 error message. 2675 {only available when compiled with the +balloon_eval feature} 2676 2677 *browse()* 2678browse({save}, {title}, {initdir}, {default}) 2679 Put up a file requester. This only works when "has("browse")" 2680 returns |TRUE| (only in some GUI versions). 2681 The input fields are: 2682 {save} when |TRUE|, select file to write 2683 {title} title for the requester 2684 {initdir} directory to start browsing in 2685 {default} default file name 2686 When the "Cancel" button is hit, something went wrong, or 2687 browsing is not possible, an empty string is returned. 2688 2689 *browsedir()* 2690browsedir({title}, {initdir}) 2691 Put up a directory requester. This only works when 2692 "has("browse")" returns |TRUE| (only in some GUI versions). 2693 On systems where a directory browser is not supported a file 2694 browser is used. In that case: select a file in the directory 2695 to be used. 2696 The input fields are: 2697 {title} title for the requester 2698 {initdir} directory to start browsing in 2699 When the "Cancel" button is hit, something went wrong, or 2700 browsing is not possible, an empty string is returned. 2701 2702bufexists({expr}) *bufexists()* 2703 The result is a Number, which is |TRUE| if a buffer called 2704 {expr} exists. 2705 If the {expr} argument is a number, buffer numbers are used. 2706 If the {expr} argument is a string it must match a buffer name 2707 exactly. The name can be: 2708 - Relative to the current directory. 2709 - A full path. 2710 - The name of a buffer with 'buftype' set to "nofile". 2711 - A URL name. 2712 Unlisted buffers will be found. 2713 Note that help files are listed by their short name in the 2714 output of |:buffers|, but bufexists() requires using their 2715 long name to be able to find them. 2716 bufexists() may report a buffer exists, but to use the name 2717 with a |:buffer| command you may need to use |expand()|. Esp 2718 for MS-Windows 8.3 names in the form "c:\DOCUME~1" 2719 Use "bufexists(0)" to test for the existence of an alternate 2720 file name. 2721 *buffer_exists()* 2722 Obsolete name: buffer_exists(). 2723 2724buflisted({expr}) *buflisted()* 2725 The result is a Number, which is |TRUE| if a buffer called 2726 {expr} exists and is listed (has the 'buflisted' option set). 2727 The {expr} argument is used like with |bufexists()|. 2728 2729bufloaded({expr}) *bufloaded()* 2730 The result is a Number, which is |TRUE| if a buffer called 2731 {expr} exists and is loaded (shown in a window or hidden). 2732 The {expr} argument is used like with |bufexists()|. 2733 2734bufname({expr}) *bufname()* 2735 The result is the name of a buffer, as it is displayed by the 2736 ":ls" command. 2737 If {expr} is a Number, that buffer number's name is given. 2738 Number zero is the alternate buffer for the current window. 2739 If {expr} is a String, it is used as a |file-pattern| to match 2740 with the buffer names. This is always done like 'magic' is 2741 set and 'cpoptions' is empty. When there is more than one 2742 match an empty string is returned. 2743 "" or "%" can be used for the current buffer, "#" for the 2744 alternate buffer. 2745 A full match is preferred, otherwise a match at the start, end 2746 or middle of the buffer name is accepted. If you only want a 2747 full match then put "^" at the start and "$" at the end of the 2748 pattern. 2749 Listed buffers are found first. If there is a single match 2750 with a listed buffer, that one is returned. Next unlisted 2751 buffers are searched for. 2752 If the {expr} is a String, but you want to use it as a buffer 2753 number, force it to be a Number by adding zero to it: > 2754 :echo bufname("3" + 0) 2755< If the buffer doesn't exist, or doesn't have a name, an empty 2756 string is returned. > 2757 bufname("#") alternate buffer name 2758 bufname(3) name of buffer 3 2759 bufname("%") name of current buffer 2760 bufname("file2") name of buffer where "file2" matches. 2761< *buffer_name()* 2762 Obsolete name: buffer_name(). 2763 2764 *bufnr()* 2765bufnr({expr} [, {create}]) 2766 The result is the number of a buffer, as it is displayed by 2767 the ":ls" command. For the use of {expr}, see |bufname()| 2768 above. 2769 If the buffer doesn't exist, -1 is returned. Or, if the 2770 {create} argument is present and not zero, a new, unlisted, 2771 buffer is created and its number is returned. 2772 bufnr("$") is the last buffer: > 2773 :let last_buffer = bufnr("$") 2774< The result is a Number, which is the highest buffer number 2775 of existing buffers. Note that not all buffers with a smaller 2776 number necessarily exist, because ":bwipeout" may have removed 2777 them. Use bufexists() to test for the existence of a buffer. 2778 *buffer_number()* 2779 Obsolete name: buffer_number(). 2780 *last_buffer_nr()* 2781 Obsolete name for bufnr("$"): last_buffer_nr(). 2782 2783bufwinid({expr}) *bufwinid()* 2784 The result is a Number, which is the |window-ID| of the first 2785 window associated with buffer {expr}. For the use of {expr}, 2786 see |bufname()| above. If buffer {expr} doesn't exist or 2787 there is no such window, -1 is returned. Example: > 2788 2789 echo "A window containing buffer 1 is " . (bufwinid(1)) 2790< 2791 Only deals with the current tab page. 2792 2793bufwinnr({expr}) *bufwinnr()* 2794 The result is a Number, which is the number of the first 2795 window associated with buffer {expr}. For the use of {expr}, 2796 see |bufname()| above. If buffer {expr} doesn't exist or 2797 there is no such window, -1 is returned. Example: > 2798 2799 echo "A window containing buffer 1 is " . (bufwinnr(1)) 2800 2801< The number can be used with |CTRL-W_w| and ":wincmd w" 2802 |:wincmd|. 2803 Only deals with the current tab page. 2804 2805byte2line({byte}) *byte2line()* 2806 Return the line number that contains the character at byte 2807 count {byte} in the current buffer. This includes the 2808 end-of-line character, depending on the 'fileformat' option 2809 for the current buffer. The first character has byte count 2810 one. 2811 Also see |line2byte()|, |go| and |:goto|. 2812 {not available when compiled without the |+byte_offset| 2813 feature} 2814 2815byteidx({expr}, {nr}) *byteidx()* 2816 Return byte index of the {nr}'th character in the string 2817 {expr}. Use zero for the first character, it returns zero. 2818 This function is only useful when there are multibyte 2819 characters, otherwise the returned value is equal to {nr}. 2820 Composing characters are not counted separately, their byte 2821 length is added to the preceding base character. See 2822 |byteidxcomp()| below for counting composing characters 2823 separately. 2824 Example : > 2825 echo matchstr(str, ".", byteidx(str, 3)) 2826< will display the fourth character. Another way to do the 2827 same: > 2828 let s = strpart(str, byteidx(str, 3)) 2829 echo strpart(s, 0, byteidx(s, 1)) 2830< Also see |strgetchar()| and |strcharpart()|. 2831 2832 If there are less than {nr} characters -1 is returned. 2833 If there are exactly {nr} characters the length of the string 2834 in bytes is returned. 2835 2836byteidxcomp({expr}, {nr}) *byteidxcomp()* 2837 Like byteidx(), except that a composing character is counted 2838 as a separate character. Example: > 2839 let s = 'e' . nr2char(0x301) 2840 echo byteidx(s, 1) 2841 echo byteidxcomp(s, 1) 2842 echo byteidxcomp(s, 2) 2843< The first and third echo result in 3 ('e' plus composing 2844 character is 3 bytes), the second echo results in 1 ('e' is 2845 one byte). 2846 Only works different from byteidx() when 'encoding' is set to 2847 a Unicode encoding. 2848 2849call({func}, {arglist} [, {dict}]) *call()* *E699* 2850 Call function {func} with the items in |List| {arglist} as 2851 arguments. 2852 {func} can either be a |Funcref| or the name of a function. 2853 a:firstline and a:lastline are set to the cursor line. 2854 Returns the return value of the called function. 2855 {dict} is for functions with the "dict" attribute. It will be 2856 used to set the local variable "self". |Dictionary-function| 2857 2858ceil({expr}) *ceil()* 2859 Return the smallest integral value greater than or equal to 2860 {expr} as a |Float| (round up). 2861 {expr} must evaluate to a |Float| or a |Number|. 2862 Examples: > 2863 echo ceil(1.456) 2864< 2.0 > 2865 echo ceil(-5.456) 2866< -5.0 > 2867 echo ceil(4.0) 2868< 4.0 2869 {only available when compiled with the |+float| feature} 2870 2871ch_canread({handle}) *ch_canread()* 2872 Return non-zero when there is something to read from {handle}. 2873 {handle} can be a Channel or a Job that has a Channel. 2874 2875 This is useful to read from a channel at a convenient time, 2876 e.g. from a timer. 2877 2878 Note that messages are dropped when the channel does not have 2879 a callback. Add a close callback to avoid that. 2880 2881 {only available when compiled with the |+channel| feature} 2882 2883ch_close({handle}) *ch_close()* 2884 Close {handle}. See |channel-close|. 2885 {handle} can be a Channel or a Job that has a Channel. 2886 A close callback is not invoked. 2887 2888 {only available when compiled with the |+channel| feature} 2889 2890ch_close_in({handle}) *ch_close_in()* 2891 Close the "in" part of {handle}. See |channel-close-in|. 2892 {handle} can be a Channel or a Job that has a Channel. 2893 A close callback is not invoked. 2894 2895 {only available when compiled with the |+channel| feature} 2896 2897ch_evalexpr({handle}, {expr} [, {options}]) *ch_evalexpr()* 2898 Send {expr} over {handle}. The {expr} is encoded 2899 according to the type of channel. The function cannot be used 2900 with a raw channel. See |channel-use|. 2901 {handle} can be a Channel or a Job that has a Channel. 2902 *E917* 2903 {options} must be a Dictionary. It must not have a "callback" 2904 entry. It can have a "timeout" entry to specify the timeout 2905 for this specific request. 2906 2907 ch_evalexpr() waits for a response and returns the decoded 2908 expression. When there is an error or timeout it returns an 2909 empty string. 2910 2911 {only available when compiled with the |+channel| feature} 2912 2913ch_evalraw({handle}, {string} [, {options}]) *ch_evalraw()* 2914 Send {string} over {handle}. 2915 {handle} can be a Channel or a Job that has a Channel. 2916 2917 Works like |ch_evalexpr()|, but does not encode the request or 2918 decode the response. The caller is responsible for the 2919 correct contents. Also does not add a newline for a channel 2920 in NL mode, the caller must do that. The NL in the response 2921 is removed. 2922 See |channel-use|. 2923 2924 {only available when compiled with the |+channel| feature} 2925 2926ch_getbufnr({handle}, {what}) *ch_getbufnr()* 2927 Get the buffer number that {handle} is using for {what}. 2928 {handle} can be a Channel or a Job that has a Channel. 2929 {what} can be "err" for stderr, "out" for stdout or empty for 2930 socket output. 2931 Returns -1 when there is no buffer. 2932 {only available when compiled with the |+channel| feature} 2933 2934ch_getjob({channel}) *ch_getjob()* 2935 Get the Job associated with {channel}. 2936 If there is no job calling |job_status()| on the returned Job 2937 will result in "fail". 2938 2939 {only available when compiled with the |+channel| and 2940 |+job| features} 2941 2942ch_info({handle}) *ch_info()* 2943 Returns a Dictionary with information about {handle}. The 2944 items are: 2945 "id" number of the channel 2946 "status" "open", "buffered" or "closed", like 2947 ch_status() 2948 When opened with ch_open(): 2949 "hostname" the hostname of the address 2950 "port" the port of the address 2951 "sock_status" "open" or "closed" 2952 "sock_mode" "NL", "RAW", "JSON" or "JS" 2953 "sock_io" "socket" 2954 "sock_timeout" timeout in msec 2955 When opened with job_start(): 2956 "out_status" "open", "buffered" or "closed" 2957 "out_mode" "NL", "RAW", "JSON" or "JS" 2958 "out_io" "null", "pipe", "file" or "buffer" 2959 "out_timeout" timeout in msec 2960 "err_status" "open", "buffered" or "closed" 2961 "err_mode" "NL", "RAW", "JSON" or "JS" 2962 "err_io" "out", "null", "pipe", "file" or "buffer" 2963 "err_timeout" timeout in msec 2964 "in_status" "open" or "closed" 2965 "in_mode" "NL", "RAW", "JSON" or "JS" 2966 "in_io" "null", "pipe", "file" or "buffer" 2967 "in_timeout" timeout in msec 2968 2969ch_log({msg} [, {handle}]) *ch_log()* 2970 Write {msg} in the channel log file, if it was opened with 2971 |ch_logfile()|. 2972 When {handle} is passed the channel number is used for the 2973 message. 2974 {handle} can be a Channel or a Job that has a Channel. The 2975 Channel must be open for the channel number to be used. 2976 2977ch_logfile({fname} [, {mode}]) *ch_logfile()* 2978 Start logging channel activity to {fname}. 2979 When {fname} is an empty string: stop logging. 2980 2981 When {mode} is omitted or "a" append to the file. 2982 When {mode} is "w" start with an empty file. 2983 2984 The file is flushed after every message, on Unix you can use 2985 "tail -f" to see what is going on in real time. 2986 2987 2988ch_open({address} [, {options}]) *ch_open()* 2989 Open a channel to {address}. See |channel|. 2990 Returns a Channel. Use |ch_status()| to check for failure. 2991 2992 {address} has the form "hostname:port", e.g., 2993 "localhost:8765". 2994 2995 If {options} is given it must be a |Dictionary|. 2996 See |channel-open-options|. 2997 2998 {only available when compiled with the |+channel| feature} 2999 3000ch_read({handle} [, {options}]) *ch_read()* 3001 Read from {handle} and return the received message. 3002 {handle} can be a Channel or a Job that has a Channel. 3003 See |channel-more|. 3004 {only available when compiled with the |+channel| feature} 3005 3006ch_readraw({handle} [, {options}]) *ch_readraw()* 3007 Like ch_read() but for a JS and JSON channel does not decode 3008 the message. See |channel-more|. 3009 {only available when compiled with the |+channel| feature} 3010 3011ch_sendexpr({handle}, {expr} [, {options}]) *ch_sendexpr()* 3012 Send {expr} over {handle}. The {expr} is encoded 3013 according to the type of channel. The function cannot be used 3014 with a raw channel. 3015 See |channel-use|. *E912* 3016 {handle} can be a Channel or a Job that has a Channel. 3017 3018 {only available when compiled with the |+channel| feature} 3019 3020ch_sendraw({handle}, {string} [, {options}]) *ch_sendraw()* 3021 Send {string} over {handle}. 3022 Works like |ch_sendexpr()|, but does not encode the request or 3023 decode the response. The caller is responsible for the 3024 correct contents. Also does not add a newline for a channel 3025 in NL mode, the caller must do that. The NL in the response 3026 is removed. 3027 See |channel-use|. 3028 3029 {only available when compiled with the |+channel| feature} 3030 3031ch_setoptions({handle}, {options}) *ch_setoptions()* 3032 Set options on {handle}: 3033 "callback" the channel callback 3034 "timeout" default read timeout in msec 3035 "mode" mode for the whole channel 3036 See |ch_open()| for more explanation. 3037 {handle} can be a Channel or a Job that has a Channel. 3038 3039 Note that changing the mode may cause queued messages to be 3040 lost. 3041 3042 These options cannot be changed: 3043 "waittime" only applies to |ch_open()| 3044 3045ch_status({handle} [, {options}]) *ch_status()* 3046 Return the status of {handle}: 3047 "fail" failed to open the channel 3048 "open" channel can be used 3049 "buffered" channel can be read, not written to 3050 "closed" channel can not be used 3051 {handle} can be a Channel or a Job that has a Channel. 3052 "buffered" is used when the channel was closed but there is 3053 still data that can be obtained with |ch_read()|. 3054 3055 If {options} is given it can contain a "part" entry to specify 3056 the part of the channel to return the status for: "out" or 3057 "err". For example, to get the error status: > 3058 ch_status(job, {"part": "err"}) 3059< 3060changenr() *changenr()* 3061 Return the number of the most recent change. This is the same 3062 number as what is displayed with |:undolist| and can be used 3063 with the |:undo| command. 3064 When a change was made it is the number of that change. After 3065 redo it is the number of the redone change. After undo it is 3066 one less than the number of the undone change. 3067 3068char2nr({expr}[, {utf8}]) *char2nr()* 3069 Return number value of the first char in {expr}. Examples: > 3070 char2nr(" ") returns 32 3071 char2nr("ABC") returns 65 3072< When {utf8} is omitted or zero, the current 'encoding' is used. 3073 Example for "utf-8": > 3074 char2nr("�") returns 225 3075 char2nr("�"[0]) returns 195 3076< With {utf8} set to 1, always treat as utf-8 characters. 3077 A combining character is a separate character. 3078 |nr2char()| does the opposite. 3079 3080cindent({lnum}) *cindent()* 3081 Get the amount of indent for line {lnum} according the C 3082 indenting rules, as with 'cindent'. 3083 The indent is counted in spaces, the value of 'tabstop' is 3084 relevant. {lnum} is used just like in |getline()|. 3085 When {lnum} is invalid or Vim was not compiled the |+cindent| 3086 feature, -1 is returned. 3087 See |C-indenting|. 3088 3089clearmatches() *clearmatches()* 3090 Clears all matches previously defined by |matchadd()| and the 3091 |:match| commands. 3092 3093 *col()* 3094col({expr}) The result is a Number, which is the byte index of the column 3095 position given with {expr}. The accepted positions are: 3096 . the cursor position 3097 $ the end of the cursor line (the result is the 3098 number of bytes in the cursor line plus one) 3099 'x position of mark x (if the mark is not set, 0 is 3100 returned) 3101 v In Visual mode: the start of the Visual area (the 3102 cursor is the end). When not in Visual mode 3103 returns the cursor position. Differs from |'<| in 3104 that it's updated right away. 3105 Additionally {expr} can be [lnum, col]: a |List| with the line 3106 and column number. Most useful when the column is "$", to get 3107 the last column of a specific line. When "lnum" or "col" is 3108 out of range then col() returns zero. 3109 To get the line number use |line()|. To get both use 3110 |getpos()|. 3111 For the screen column position use |virtcol()|. 3112 Note that only marks in the current file can be used. 3113 Examples: > 3114 col(".") column of cursor 3115 col("$") length of cursor line plus one 3116 col("'t") column of mark t 3117 col("'" . markname) column of mark markname 3118< The first column is 1. 0 is returned for an error. 3119 For an uppercase mark the column may actually be in another 3120 buffer. 3121 For the cursor position, when 'virtualedit' is active, the 3122 column is one higher if the cursor is after the end of the 3123 line. This can be used to obtain the column in Insert mode: > 3124 :imap <F2> <C-O>:let save_ve = &ve<CR> 3125 \<C-O>:set ve=all<CR> 3126 \<C-O>:echo col(".") . "\n" <Bar> 3127 \let &ve = save_ve<CR> 3128< 3129 3130complete({startcol}, {matches}) *complete()* *E785* 3131 Set the matches for Insert mode completion. 3132 Can only be used in Insert mode. You need to use a mapping 3133 with CTRL-R = (see |i_CTRL-R|). It does not work after CTRL-O 3134 or with an expression mapping. 3135 {startcol} is the byte offset in the line where the completed 3136 text start. The text up to the cursor is the original text 3137 that will be replaced by the matches. Use col('.') for an 3138 empty string. "col('.') - 1" will replace one character by a 3139 match. 3140 {matches} must be a |List|. Each |List| item is one match. 3141 See |complete-items| for the kind of items that are possible. 3142 Note that the after calling this function you need to avoid 3143 inserting anything that would cause completion to stop. 3144 The match can be selected with CTRL-N and CTRL-P as usual with 3145 Insert mode completion. The popup menu will appear if 3146 specified, see |ins-completion-menu|. 3147 Example: > 3148 inoremap <F5> <C-R>=ListMonths()<CR> 3149 3150 func! ListMonths() 3151 call complete(col('.'), ['January', 'February', 'March', 3152 \ 'April', 'May', 'June', 'July', 'August', 'September', 3153 \ 'October', 'November', 'December']) 3154 return '' 3155 endfunc 3156< This isn't very useful, but it shows how it works. Note that 3157 an empty string is returned to avoid a zero being inserted. 3158 3159complete_add({expr}) *complete_add()* 3160 Add {expr} to the list of matches. Only to be used by the 3161 function specified with the 'completefunc' option. 3162 Returns 0 for failure (empty string or out of memory), 3163 1 when the match was added, 2 when the match was already in 3164 the list. 3165 See |complete-functions| for an explanation of {expr}. It is 3166 the same as one item in the list that 'omnifunc' would return. 3167 3168complete_check() *complete_check()* 3169 Check for a key typed while looking for completion matches. 3170 This is to be used when looking for matches takes some time. 3171 Returns |TRUE| when searching for matches is to be aborted, 3172 zero otherwise. 3173 Only to be used by the function specified with the 3174 'completefunc' option. 3175 3176 *confirm()* 3177confirm({msg} [, {choices} [, {default} [, {type}]]]) 3178 Confirm() offers the user a dialog, from which a choice can be 3179 made. It returns the number of the choice. For the first 3180 choice this is 1. 3181 Note: confirm() is only supported when compiled with dialog 3182 support, see |+dialog_con| and |+dialog_gui|. 3183 3184 {msg} is displayed in a |dialog| with {choices} as the 3185 alternatives. When {choices} is missing or empty, "&OK" is 3186 used (and translated). 3187 {msg} is a String, use '\n' to include a newline. Only on 3188 some systems the string is wrapped when it doesn't fit. 3189 3190 {choices} is a String, with the individual choices separated 3191 by '\n', e.g. > 3192 confirm("Save changes?", "&Yes\n&No\n&Cancel") 3193< The letter after the '&' is the shortcut key for that choice. 3194 Thus you can type 'c' to select "Cancel". The shortcut does 3195 not need to be the first letter: > 3196 confirm("file has been modified", "&Save\nSave &All") 3197< For the console, the first letter of each choice is used as 3198 the default shortcut key. 3199 3200 The optional {default} argument is the number of the choice 3201 that is made if the user hits <CR>. Use 1 to make the first 3202 choice the default one. Use 0 to not set a default. If 3203 {default} is omitted, 1 is used. 3204 3205 The optional {type} argument gives the type of dialog. This 3206 is only used for the icon of the GTK, Mac, Motif and Win32 3207 GUI. It can be one of these values: "Error", "Question", 3208 "Info", "Warning" or "Generic". Only the first character is 3209 relevant. When {type} is omitted, "Generic" is used. 3210 3211 If the user aborts the dialog by pressing <Esc>, CTRL-C, 3212 or another valid interrupt key, confirm() returns 0. 3213 3214 An example: > 3215 :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2) 3216 :if choice == 0 3217 : echo "make up your mind!" 3218 :elseif choice == 3 3219 : echo "tasteful" 3220 :else 3221 : echo "I prefer bananas myself." 3222 :endif 3223< In a GUI dialog, buttons are used. The layout of the buttons 3224 depends on the 'v' flag in 'guioptions'. If it is included, 3225 the buttons are always put vertically. Otherwise, confirm() 3226 tries to put the buttons in one horizontal line. If they 3227 don't fit, a vertical layout is used anyway. For some systems 3228 the horizontal layout is always used. 3229 3230 *copy()* 3231copy({expr}) Make a copy of {expr}. For Numbers and Strings this isn't 3232 different from using {expr} directly. 3233 When {expr} is a |List| a shallow copy is created. This means 3234 that the original |List| can be changed without changing the 3235 copy, and vice versa. But the items are identical, thus 3236 changing an item changes the contents of both |Lists|. 3237 A |Dictionary| is copied in a similar way as a |List|. 3238 Also see |deepcopy()|. 3239 3240cos({expr}) *cos()* 3241 Return the cosine of {expr}, measured in radians, as a |Float|. 3242 {expr} must evaluate to a |Float| or a |Number|. 3243 Examples: > 3244 :echo cos(100) 3245< 0.862319 > 3246 :echo cos(-4.01) 3247< -0.646043 3248 {only available when compiled with the |+float| feature} 3249 3250 3251cosh({expr}) *cosh()* 3252 Return the hyperbolic cosine of {expr} as a |Float| in the range 3253 [1, inf]. 3254 {expr} must evaluate to a |Float| or a |Number|. 3255 Examples: > 3256 :echo cosh(0.5) 3257< 1.127626 > 3258 :echo cosh(-0.5) 3259< -1.127626 3260 {only available when compiled with the |+float| feature} 3261 3262 3263count({comp}, {expr} [, {ic} [, {start}]]) *count()* 3264 Return the number of times an item with value {expr} appears 3265 in |String|, |List| or |Dictionary| {comp}. 3266 3267 If {start} is given then start with the item with this index. 3268 {start} can only be used with a |List|. 3269 3270 When {ic} is given and it's |TRUE| then case is ignored. 3271 3272 When {comp} is a string then the number of not overlapping 3273 occurences of {expr} is returned. 3274 3275 3276 *cscope_connection()* 3277cscope_connection([{num} , {dbpath} [, {prepend}]]) 3278 Checks for the existence of a |cscope| connection. If no 3279 parameters are specified, then the function returns: 3280 0, if cscope was not available (not compiled in), or 3281 if there are no cscope connections; 3282 1, if there is at least one cscope connection. 3283 3284 If parameters are specified, then the value of {num} 3285 determines how existence of a cscope connection is checked: 3286 3287 {num} Description of existence check 3288 ----- ------------------------------ 3289 0 Same as no parameters (e.g., "cscope_connection()"). 3290 1 Ignore {prepend}, and use partial string matches for 3291 {dbpath}. 3292 2 Ignore {prepend}, and use exact string matches for 3293 {dbpath}. 3294 3 Use {prepend}, use partial string matches for both 3295 {dbpath} and {prepend}. 3296 4 Use {prepend}, use exact string matches for both 3297 {dbpath} and {prepend}. 3298 3299 Note: All string comparisons are case sensitive! 3300 3301 Examples. Suppose we had the following (from ":cs show"): > 3302 3303 # pid database name prepend path 3304 0 27664 cscope.out /usr/local 3305< 3306 Invocation Return Val ~ 3307 ---------- ---------- > 3308 cscope_connection() 1 3309 cscope_connection(1, "out") 1 3310 cscope_connection(2, "out") 0 3311 cscope_connection(3, "out") 0 3312 cscope_connection(3, "out", "local") 1 3313 cscope_connection(4, "out") 0 3314 cscope_connection(4, "out", "local") 0 3315 cscope_connection(4, "cscope.out", "/usr/local") 1 3316< 3317cursor({lnum}, {col} [, {off}]) *cursor()* 3318cursor({list}) 3319 Positions the cursor at the column (byte count) {col} in the 3320 line {lnum}. The first column is one. 3321 3322 When there is one argument {list} this is used as a |List| 3323 with two, three or four item: 3324 [{lnum}, {col}] 3325 [{lnum}, {col}, {off}] 3326 [{lnum}, {col}, {off}, {curswant}] 3327 This is like the return value of |getpos()| or |getcurpos()|, 3328 but without the first item. 3329 3330 Does not change the jumplist. 3331 If {lnum} is greater than the number of lines in the buffer, 3332 the cursor will be positioned at the last line in the buffer. 3333 If {lnum} is zero, the cursor will stay in the current line. 3334 If {col} is greater than the number of bytes in the line, 3335 the cursor will be positioned at the last character in the 3336 line. 3337 If {col} is zero, the cursor will stay in the current column. 3338 If {curswant} is given it is used to set the preferred column 3339 for vertical movement. Otherwise {col} is used. 3340 3341 When 'virtualedit' is used {off} specifies the offset in 3342 screen columns from the start of the character. E.g., a 3343 position within a <Tab> or after the last character. 3344 Returns 0 when the position could be set, -1 otherwise. 3345 3346 3347deepcopy({expr}[, {noref}]) *deepcopy()* *E698* 3348 Make a copy of {expr}. For Numbers and Strings this isn't 3349 different from using {expr} directly. 3350 When {expr} is a |List| a full copy is created. This means 3351 that the original |List| can be changed without changing the 3352 copy, and vice versa. When an item is a |List| or 3353 |Dictionary|, a copy for it is made, recursively. Thus 3354 changing an item in the copy does not change the contents of 3355 the original |List|. 3356 A |Dictionary| is copied in a similar way as a |List|. 3357 When {noref} is omitted or zero a contained |List| or 3358 |Dictionary| is only copied once. All references point to 3359 this single copy. With {noref} set to 1 every occurrence of a 3360 |List| or |Dictionary| results in a new copy. This also means 3361 that a cyclic reference causes deepcopy() to fail. 3362 *E724* 3363 Nesting is possible up to 100 levels. When there is an item 3364 that refers back to a higher level making a deep copy with 3365 {noref} set to 1 will fail. 3366 Also see |copy()|. 3367 3368delete({fname} [, {flags}]) *delete()* 3369 Without {flags} or with {flags} empty: Deletes the file by the 3370 name {fname}. This also works when {fname} is a symbolic link. 3371 3372 When {flags} is "d": Deletes the directory by the name 3373 {fname}. This fails when directory {fname} is not empty. 3374 3375 When {flags} is "rf": Deletes the directory by the name 3376 {fname} and everything in it, recursively. BE CAREFUL! 3377 Note: on MS-Windows it is not possible to delete a directory 3378 that is being used. 3379 3380 A symbolic link itself is deleted, not what it points to. 3381 3382 The result is a Number, which is 0 if the delete operation was 3383 successful and -1 when the deletion failed or partly failed. 3384 3385 Use |remove()| to delete an item from a |List|. 3386 To delete a line from the buffer use |:delete|. Use |:exe| 3387 when the line number is in a variable. 3388 3389 *did_filetype()* 3390did_filetype() Returns |TRUE| when autocommands are being executed and the 3391 FileType event has been triggered at least once. Can be used 3392 to avoid triggering the FileType event again in the scripts 3393 that detect the file type. |FileType| 3394 Returns |FALSE| when `:setf FALLBACK` was used. 3395 When editing another file, the counter is reset, thus this 3396 really checks if the FileType event has been triggered for the 3397 current buffer. This allows an autocommand that starts 3398 editing another buffer to set 'filetype' and load a syntax 3399 file. 3400 3401diff_filler({lnum}) *diff_filler()* 3402 Returns the number of filler lines above line {lnum}. 3403 These are the lines that were inserted at this point in 3404 another diff'ed window. These filler lines are shown in the 3405 display but don't exist in the buffer. 3406 {lnum} is used like with |getline()|. Thus "." is the current 3407 line, "'m" mark m, etc. 3408 Returns 0 if the current window is not in diff mode. 3409 3410diff_hlID({lnum}, {col}) *diff_hlID()* 3411 Returns the highlight ID for diff mode at line {lnum} column 3412 {col} (byte index). When the current line does not have a 3413 diff change zero is returned. 3414 {lnum} is used like with |getline()|. Thus "." is the current 3415 line, "'m" mark m, etc. 3416 {col} is 1 for the leftmost column, {lnum} is 1 for the first 3417 line. 3418 The highlight ID can be used with |synIDattr()| to obtain 3419 syntax information about the highlighting. 3420 3421empty({expr}) *empty()* 3422 Return the Number 1 if {expr} is empty, zero otherwise. 3423 - A |List| or |Dictionary| is empty when it does not have any 3424 items. 3425 - A Number and Float is empty when its value is zero. 3426 - |v:false|, |v:none| and |v:null| are empty, |v:true| is not. 3427 - A Job is empty when it failed to start. 3428 - A Channel is empty when it is closed. 3429 3430 For a long |List| this is much faster than comparing the 3431 length with zero. 3432 3433escape({string}, {chars}) *escape()* 3434 Escape the characters in {chars} that occur in {string} with a 3435 backslash. Example: > 3436 :echo escape('c:\program files\vim', ' \') 3437< results in: > 3438 c:\\program\ files\\vim 3439< Also see |shellescape()|. 3440 3441 *eval()* 3442eval({string}) Evaluate {string} and return the result. Especially useful to 3443 turn the result of |string()| back into the original value. 3444 This works for Numbers, Floats, Strings and composites of 3445 them. Also works for |Funcref|s that refer to existing 3446 functions. 3447 3448eventhandler() *eventhandler()* 3449 Returns 1 when inside an event handler. That is that Vim got 3450 interrupted while waiting for the user to type a character, 3451 e.g., when dropping a file on Vim. This means interactive 3452 commands cannot be used. Otherwise zero is returned. 3453 3454executable({expr}) *executable()* 3455 This function checks if an executable with the name {expr} 3456 exists. {expr} must be the name of the program without any 3457 arguments. 3458 executable() uses the value of $PATH and/or the normal 3459 searchpath for programs. *PATHEXT* 3460 On MS-DOS and MS-Windows the ".exe", ".bat", etc. can 3461 optionally be included. Then the extensions in $PATHEXT are 3462 tried. Thus if "foo.exe" does not exist, "foo.exe.bat" can be 3463 found. If $PATHEXT is not set then ".exe;.com;.bat;.cmd" is 3464 used. A dot by itself can be used in $PATHEXT to try using 3465 the name without an extension. When 'shell' looks like a 3466 Unix shell, then the name is also tried without adding an 3467 extension. 3468 On MS-DOS and MS-Windows it only checks if the file exists and 3469 is not a directory, not if it's really executable. 3470 On MS-Windows an executable in the same directory as Vim is 3471 always found. Since this directory is added to $PATH it 3472 should also work to execute it |win32-PATH|. 3473 The result is a Number: 3474 1 exists 3475 0 does not exist 3476 -1 not implemented on this system 3477 3478execute({command} [, {silent}]) *execute()* 3479 Execute an Ex command or commands and return the output as a 3480 string. 3481 {command} can be a string or a List. In case of a List the 3482 lines are executed one by one. 3483 This is equivalent to: > 3484 redir => var 3485 {command} 3486 redir END 3487< 3488 The optional {silent} argument can have these values: 3489 "" no `:silent` used 3490 "silent" `:silent` used 3491 "silent!" `:silent!` used 3492 The default is "silent". Note that with "silent!", unlike 3493 `:redir`, error messages are dropped. When using an external 3494 command the screen may be messed up, use `system()` instead. 3495 *E930* 3496 It is not possible to use `:redir` anywhere in {command}. 3497 3498 To get a list of lines use |split()| on the result: > 3499 split(execute('args'), "\n") 3500 3501< When used recursively the output of the recursive call is not 3502 included in the output of the higher level call. 3503 3504exepath({expr}) *exepath()* 3505 If {expr} is an executable and is either an absolute path, a 3506 relative path or found in $PATH, return the full path. 3507 Note that the current directory is used when {expr} starts 3508 with "./", which may be a problem for Vim: > 3509 echo exepath(v:progpath) 3510< If {expr} cannot be found in $PATH or is not executable then 3511 an empty string is returned. 3512 3513 *exists()* 3514exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined, 3515 zero otherwise. 3516 3517 For checking for a supported feature use |has()|. 3518 For checking if a file exists use |filereadable()|. 3519 3520 The {expr} argument is a string, which contains one of these: 3521 &option-name Vim option (only checks if it exists, 3522 not if it really works) 3523 +option-name Vim option that works. 3524 $ENVNAME environment variable (could also be 3525 done by comparing with an empty 3526 string) 3527 *funcname built-in function (see |functions|) 3528 or user defined function (see 3529 |user-functions|). Also works for a 3530 variable that is a Funcref. 3531 varname internal variable (see 3532 |internal-variables|). Also works 3533 for |curly-braces-names|, |Dictionary| 3534 entries, |List| items, etc. Beware 3535 that evaluating an index may cause an 3536 error message for an invalid 3537 expression. E.g.: > 3538 :let l = [1, 2, 3] 3539 :echo exists("l[5]") 3540< 0 > 3541 :echo exists("l[xx]") 3542< E121: Undefined variable: xx 3543 0 3544 :cmdname Ex command: built-in command, user 3545 command or command modifier |:command|. 3546 Returns: 3547 1 for match with start of a command 3548 2 full match with a command 3549 3 matches several user commands 3550 To check for a supported command 3551 always check the return value to be 2. 3552 :2match The |:2match| command. 3553 :3match The |:3match| command. 3554 #event autocommand defined for this event 3555 #event#pattern autocommand defined for this event and 3556 pattern (the pattern is taken 3557 literally and compared to the 3558 autocommand patterns character by 3559 character) 3560 #group autocommand group exists 3561 #group#event autocommand defined for this group and 3562 event. 3563 #group#event#pattern 3564 autocommand defined for this group, 3565 event and pattern. 3566 ##event autocommand for this event is 3567 supported. 3568 3569 Examples: > 3570 exists("&shortname") 3571 exists("$HOSTNAME") 3572 exists("*strftime") 3573 exists("*s:MyFunc") 3574 exists("bufcount") 3575 exists(":Make") 3576 exists("#CursorHold") 3577 exists("#BufReadPre#*.gz") 3578 exists("#filetypeindent") 3579 exists("#filetypeindent#FileType") 3580 exists("#filetypeindent#FileType#*") 3581 exists("##ColorScheme") 3582< There must be no space between the symbol (&/$/*/#) and the 3583 name. 3584 There must be no extra characters after the name, although in 3585 a few cases this is ignored. That may become more strict in 3586 the future, thus don't count on it! 3587 Working example: > 3588 exists(":make") 3589< NOT working example: > 3590 exists(":make install") 3591 3592< Note that the argument must be a string, not the name of the 3593 variable itself. For example: > 3594 exists(bufcount) 3595< This doesn't check for existence of the "bufcount" variable, 3596 but gets the value of "bufcount", and checks if that exists. 3597 3598exp({expr}) *exp()* 3599 Return the exponential of {expr} as a |Float| in the range 3600 [0, inf]. 3601 {expr} must evaluate to a |Float| or a |Number|. 3602 Examples: > 3603 :echo exp(2) 3604< 7.389056 > 3605 :echo exp(-1) 3606< 0.367879 3607 {only available when compiled with the |+float| feature} 3608 3609 3610expand({expr} [, {nosuf} [, {list}]]) *expand()* 3611 Expand wildcards and the following special keywords in {expr}. 3612 'wildignorecase' applies. 3613 3614 If {list} is given and it is |TRUE|, a List will be returned. 3615 Otherwise the result is a String and when there are several 3616 matches, they are separated by <NL> characters. [Note: in 3617 version 5.0 a space was used, which caused problems when a 3618 file name contains a space] 3619 3620 If the expansion fails, the result is an empty string. A name 3621 for a non-existing file is not included, unless {expr} does 3622 not start with '%', '#' or '<', see below. 3623 3624 When {expr} starts with '%', '#' or '<', the expansion is done 3625 like for the |cmdline-special| variables with their associated 3626 modifiers. Here is a short overview: 3627 3628 % current file name 3629 # alternate file name 3630 #n alternate file name n 3631 <cfile> file name under the cursor 3632 <afile> autocmd file name 3633 <abuf> autocmd buffer number (as a String!) 3634 <amatch> autocmd matched name 3635 <sfile> sourced script file or function name 3636 <slnum> sourced script file line number 3637 <cword> word under the cursor 3638 <cWORD> WORD under the cursor 3639 <client> the {clientid} of the last received 3640 message |server2client()| 3641 Modifiers: 3642 :p expand to full path 3643 :h head (last path component removed) 3644 :t tail (last path component only) 3645 :r root (one extension removed) 3646 :e extension only 3647 3648 Example: > 3649 :let &tags = expand("%:p:h") . "/tags" 3650< Note that when expanding a string that starts with '%', '#' or 3651 '<', any following text is ignored. This does NOT work: > 3652 :let doesntwork = expand("%:h.bak") 3653< Use this: > 3654 :let doeswork = expand("%:h") . ".bak" 3655< Also note that expanding "<cfile>" and others only returns the 3656 referenced file name without further expansion. If "<cfile>" 3657 is "~/.cshrc", you need to do another expand() to have the 3658 "~/" expanded into the path of the home directory: > 3659 :echo expand(expand("<cfile>")) 3660< 3661 There cannot be white space between the variables and the 3662 following modifier. The |fnamemodify()| function can be used 3663 to modify normal file names. 3664 3665 When using '%' or '#', and the current or alternate file name 3666 is not defined, an empty string is used. Using "%:p" in a 3667 buffer with no name, results in the current directory, with a 3668 '/' added. 3669 3670 When {expr} does not start with '%', '#' or '<', it is 3671 expanded like a file name is expanded on the command line. 3672 'suffixes' and 'wildignore' are used, unless the optional 3673 {nosuf} argument is given and it is |TRUE|. 3674 Names for non-existing files are included. The "**" item can 3675 be used to search in a directory tree. For example, to find 3676 all "README" files in the current directory and below: > 3677 :echo expand("**/README") 3678< 3679 Expand() can also be used to expand variables and environment 3680 variables that are only known in a shell. But this can be 3681 slow, because a shell may be used to do the expansion. See 3682 |expr-env-expand|. 3683 The expanded variable is still handled like a list of file 3684 names. When an environment variable cannot be expanded, it is 3685 left unchanged. Thus ":echo expand('$FOOBAR')" results in 3686 "$FOOBAR". 3687 3688 See |glob()| for finding existing files. See |system()| for 3689 getting the raw output of an external command. 3690 3691extend({expr1}, {expr2} [, {expr3}]) *extend()* 3692 {expr1} and {expr2} must be both |Lists| or both 3693 |Dictionaries|. 3694 3695 If they are |Lists|: Append {expr2} to {expr1}. 3696 If {expr3} is given insert the items of {expr2} before item 3697 {expr3} in {expr1}. When {expr3} is zero insert before the 3698 first item. When {expr3} is equal to len({expr1}) then 3699 {expr2} is appended. 3700 Examples: > 3701 :echo sort(extend(mylist, [7, 5])) 3702 :call extend(mylist, [2, 3], 1) 3703< When {expr1} is the same List as {expr2} then the number of 3704 items copied is equal to the original length of the List. 3705 E.g., when {expr3} is 1 you get N new copies of the first item 3706 (where N is the original length of the List). 3707 Use |add()| to concatenate one item to a list. To concatenate 3708 two lists into a new list use the + operator: > 3709 :let newlist = [1, 2, 3] + [4, 5] 3710< 3711 If they are |Dictionaries|: 3712 Add all entries from {expr2} to {expr1}. 3713 If a key exists in both {expr1} and {expr2} then {expr3} is 3714 used to decide what to do: 3715 {expr3} = "keep": keep the value of {expr1} 3716 {expr3} = "force": use the value of {expr2} 3717 {expr3} = "error": give an error message *E737* 3718 When {expr3} is omitted then "force" is assumed. 3719 3720 {expr1} is changed when {expr2} is not empty. If necessary 3721 make a copy of {expr1} first. 3722 {expr2} remains unchanged. 3723 When {expr1} is locked and {expr2} is not empty the operation 3724 fails. 3725 Returns {expr1}. 3726 3727 3728feedkeys({string} [, {mode}]) *feedkeys()* 3729 Characters in {string} are queued for processing as if they 3730 come from a mapping or were typed by the user. 3731 By default the string is added to the end of the typeahead 3732 buffer, thus if a mapping is still being executed the 3733 characters come after them. Use the 'i' flag to insert before 3734 other characters, they will be executed next, before any 3735 characters from a mapping. 3736 The function does not wait for processing of keys contained in 3737 {string}. 3738 To include special keys into {string}, use double-quotes 3739 and "\..." notation |expr-quote|. For example, 3740 feedkeys("\<CR>") simulates pressing of the <Enter> key. But 3741 feedkeys('\<CR>') pushes 5 characters. 3742 If {mode} is absent, keys are remapped. 3743 {mode} is a String, which can contain these character flags: 3744 'm' Remap keys. This is default. 3745 'n' Do not remap keys. 3746 't' Handle keys as if typed; otherwise they are handled as 3747 if coming from a mapping. This matters for undo, 3748 opening folds, etc. 3749 'i' Insert the string instead of appending (see above). 3750 'x' Execute commands until typeahead is empty. This is 3751 similar to using ":normal!". You can call feedkeys() 3752 several times without 'x' and then one time with 'x' 3753 (possibly with an empty {string}) to execute all the 3754 typeahead. Note that when Vim ends in Insert mode it 3755 will behave as if <Esc> is typed, to avoid getting 3756 stuck, waiting for a character to be typed before the 3757 script continues. 3758 '!' When used with 'x' will not end Insert mode. Can be 3759 used in a test when a timer is set to exit Insert mode 3760 a little later. Useful for testing CursorHoldI. 3761 3762 Return value is always 0. 3763 3764filereadable({file}) *filereadable()* 3765 The result is a Number, which is |TRUE| when a file with the 3766 name {file} exists, and can be read. If {file} doesn't exist, 3767 or is a directory, the result is |FALSE|. {file} is any 3768 expression, which is used as a String. 3769 If you don't care about the file being readable you can use 3770 |glob()|. 3771 *file_readable()* 3772 Obsolete name: file_readable(). 3773 3774 3775filewritable({file}) *filewritable()* 3776 The result is a Number, which is 1 when a file with the 3777 name {file} exists, and can be written. If {file} doesn't 3778 exist, or is not writable, the result is 0. If {file} is a 3779 directory, and we can write to it, the result is 2. 3780 3781 3782filter({expr1}, {expr2}) *filter()* 3783 {expr1} must be a |List| or a |Dictionary|. 3784 For each item in {expr1} evaluate {expr2} and when the result 3785 is zero remove the item from the |List| or |Dictionary|. 3786 {expr2} must be a |string| or |Funcref|. 3787 3788 If {expr2} is a |string|, inside {expr2} |v:val| has the value 3789 of the current item. For a |Dictionary| |v:key| has the key 3790 of the current item and for a |List| |v:key| has the index of 3791 the current item. 3792 Examples: > 3793 call filter(mylist, 'v:val !~ "OLD"') 3794< Removes the items where "OLD" appears. > 3795 call filter(mydict, 'v:key >= 8') 3796< Removes the items with a key below 8. > 3797 call filter(var, 0) 3798< Removes all the items, thus clears the |List| or |Dictionary|. 3799 3800 Note that {expr2} is the result of expression and is then 3801 used as an expression again. Often it is good to use a 3802 |literal-string| to avoid having to double backslashes. 3803 3804 If {expr2} is a |Funcref| it must take two arguments: 3805 1. the key or the index of the current item. 3806 2. the value of the current item. 3807 The function must return |TRUE| if the item should be kept. 3808 Example that keeps the odd items of a list: > 3809 func Odd(idx, val) 3810 return a:idx % 2 == 1 3811 endfunc 3812 call filter(mylist, function('Odd')) 3813< It is shorter when using a |lambda|: > 3814 call filter(myList, {idx, val -> idx * val <= 42}) 3815< If you do not use "val" you can leave it out: > 3816 call filter(myList, {idx -> idx % 2 == 1}) 3817< 3818 The operation is done in-place. If you want a |List| or 3819 |Dictionary| to remain unmodified make a copy first: > 3820 :let l = filter(copy(mylist), 'v:val =~ "KEEP"') 3821 3822< Returns {expr1}, the |List| or |Dictionary| that was filtered. 3823 When an error is encountered while evaluating {expr2} no 3824 further items in {expr1} are processed. When {expr2} is a 3825 Funcref errors inside a function are ignored, unless it was 3826 defined with the "abort" flag. 3827 3828 3829finddir({name}[, {path}[, {count}]]) *finddir()* 3830 Find directory {name} in {path}. Supports both downwards and 3831 upwards recursive directory searches. See |file-searching| 3832 for the syntax of {path}. 3833 Returns the path of the first found match. When the found 3834 directory is below the current directory a relative path is 3835 returned. Otherwise a full path is returned. 3836 If {path} is omitted or empty then 'path' is used. 3837 If the optional {count} is given, find {count}'s occurrence of 3838 {name} in {path} instead of the first one. 3839 When {count} is negative return all the matches in a |List|. 3840 This is quite similar to the ex-command |:find|. 3841 {only available when compiled with the |+file_in_path| 3842 feature} 3843 3844findfile({name}[, {path}[, {count}]]) *findfile()* 3845 Just like |finddir()|, but find a file instead of a directory. 3846 Uses 'suffixesadd'. 3847 Example: > 3848 :echo findfile("tags.vim", ".;") 3849< Searches from the directory of the current file upwards until 3850 it finds the file "tags.vim". 3851 3852float2nr({expr}) *float2nr()* 3853 Convert {expr} to a Number by omitting the part after the 3854 decimal point. 3855 {expr} must evaluate to a |Float| or a Number. 3856 When the value of {expr} is out of range for a |Number| the 3857 result is truncated to 0x7fffffff or -0x7fffffff (or when 3858 64-bit Number support is enabled, 0x7fffffffffffffff or 3859 -0x7fffffffffffffff. NaN results in -0x80000000 (or when 3860 64-bit Number support is enabled, -0x8000000000000000). 3861 Examples: > 3862 echo float2nr(3.95) 3863< 3 > 3864 echo float2nr(-23.45) 3865< -23 > 3866 echo float2nr(1.0e100) 3867< 2147483647 (or 9223372036854775807) > 3868 echo float2nr(-1.0e150) 3869< -2147483647 (or -9223372036854775807) > 3870 echo float2nr(1.0e-100) 3871< 0 3872 {only available when compiled with the |+float| feature} 3873 3874 3875floor({expr}) *floor()* 3876 Return the largest integral value less than or equal to 3877 {expr} as a |Float| (round down). 3878 {expr} must evaluate to a |Float| or a |Number|. 3879 Examples: > 3880 echo floor(1.856) 3881< 1.0 > 3882 echo floor(-5.456) 3883< -6.0 > 3884 echo floor(4.0) 3885< 4.0 3886 {only available when compiled with the |+float| feature} 3887 3888 3889fmod({expr1}, {expr2}) *fmod()* 3890 Return the remainder of {expr1} / {expr2}, even if the 3891 division is not representable. Returns {expr1} - i * {expr2} 3892 for some integer i such that if {expr2} is non-zero, the 3893 result has the same sign as {expr1} and magnitude less than 3894 the magnitude of {expr2}. If {expr2} is zero, the value 3895 returned is zero. The value returned is a |Float|. 3896 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 3897 Examples: > 3898 :echo fmod(12.33, 1.22) 3899< 0.13 > 3900 :echo fmod(-12.33, 1.22) 3901< -0.13 3902 {only available when compiled with |+float| feature} 3903 3904 3905fnameescape({string}) *fnameescape()* 3906 Escape {string} for use as file name command argument. All 3907 characters that have a special meaning, such as '%' and '|' 3908 are escaped with a backslash. 3909 For most systems the characters escaped are 3910 " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash 3911 appears in a filename, it depends on the value of 'isfname'. 3912 A leading '+' and '>' is also escaped (special after |:edit| 3913 and |:write|). And a "-" by itself (special after |:cd|). 3914 Example: > 3915 :let fname = '+some str%nge|name' 3916 :exe "edit " . fnameescape(fname) 3917< results in executing: > 3918 edit \+some\ str\%nge\|name 3919 3920fnamemodify({fname}, {mods}) *fnamemodify()* 3921 Modify file name {fname} according to {mods}. {mods} is a 3922 string of characters like it is used for file names on the 3923 command line. See |filename-modifiers|. 3924 Example: > 3925 :echo fnamemodify("main.c", ":p:h") 3926< results in: > 3927 /home/mool/vim/vim/src 3928< Note: Environment variables don't work in {fname}, use 3929 |expand()| first then. 3930 3931foldclosed({lnum}) *foldclosed()* 3932 The result is a Number. If the line {lnum} is in a closed 3933 fold, the result is the number of the first line in that fold. 3934 If the line {lnum} is not in a closed fold, -1 is returned. 3935 3936foldclosedend({lnum}) *foldclosedend()* 3937 The result is a Number. If the line {lnum} is in a closed 3938 fold, the result is the number of the last line in that fold. 3939 If the line {lnum} is not in a closed fold, -1 is returned. 3940 3941foldlevel({lnum}) *foldlevel()* 3942 The result is a Number, which is the foldlevel of line {lnum} 3943 in the current buffer. For nested folds the deepest level is 3944 returned. If there is no fold at line {lnum}, zero is 3945 returned. It doesn't matter if the folds are open or closed. 3946 When used while updating folds (from 'foldexpr') -1 is 3947 returned for lines where folds are still to be updated and the 3948 foldlevel is unknown. As a special case the level of the 3949 previous line is usually available. 3950 3951 *foldtext()* 3952foldtext() Returns a String, to be displayed for a closed fold. This is 3953 the default function used for the 'foldtext' option and should 3954 only be called from evaluating 'foldtext'. It uses the 3955 |v:foldstart|, |v:foldend| and |v:folddashes| variables. 3956 The returned string looks like this: > 3957 +-- 45 lines: abcdef 3958< The number of leading dashes depends on the foldlevel. The 3959 "45" is the number of lines in the fold. "abcdef" is the text 3960 in the first non-blank line of the fold. Leading white space, 3961 "//" or "/*" and the text from the 'foldmarker' and 3962 'commentstring' options is removed. 3963 When used to draw the actual foldtext, the rest of the line 3964 will be filled with the fold char from the 'fillchars' 3965 setting. 3966 {not available when compiled without the |+folding| feature} 3967 3968foldtextresult({lnum}) *foldtextresult()* 3969 Returns the text that is displayed for the closed fold at line 3970 {lnum}. Evaluates 'foldtext' in the appropriate context. 3971 When there is no closed fold at {lnum} an empty string is 3972 returned. 3973 {lnum} is used like with |getline()|. Thus "." is the current 3974 line, "'m" mark m, etc. 3975 Useful when exporting folded text, e.g., to HTML. 3976 {not available when compiled without the |+folding| feature} 3977 3978 *foreground()* 3979foreground() Move the Vim window to the foreground. Useful when sent from 3980 a client to a Vim server. |remote_send()| 3981 On Win32 systems this might not work, the OS does not always 3982 allow a window to bring itself to the foreground. Use 3983 |remote_foreground()| instead. 3984 {only in the Win32, Athena, Motif and GTK GUI versions and the 3985 Win32 console version} 3986 3987 *funcref()* 3988funcref({name} [, {arglist}] [, {dict}]) 3989 Just like |function()|, but the returned Funcref will lookup 3990 the function by reference, not by name. This matters when the 3991 function {name} is redefined later. 3992 3993 Unlike |function()|, {name} must be an existing user function. 3994 Also for autoloaded functions. {name} cannot be a builtin 3995 function. 3996 3997 *function()* *E700* *E922* *E923* 3998function({name} [, {arglist}] [, {dict}]) 3999 Return a |Funcref| variable that refers to function {name}. 4000 {name} can be the name of a user defined function or an 4001 internal function. 4002 4003 {name} can also be a Funcref or a partial. When it is a 4004 partial the dict stored in it will be used and the {dict} 4005 argument is not allowed. E.g.: > 4006 let FuncWithArg = function(dict.Func, [arg]) 4007 let Broken = function(dict.Func, [arg], dict) 4008< 4009 When using the Funcref the function will be found by {name}, 4010 also when it was redefined later. Use |funcref()| to keep the 4011 same function. 4012 4013 When {arglist} or {dict} is present this creates a partial. 4014 That means the argument list and/or the dictionary is stored in 4015 the Funcref and will be used when the Funcref is called. 4016 4017 The arguments are passed to the function in front of other 4018 arguments. Example: > 4019 func Callback(arg1, arg2, name) 4020 ... 4021 let Func = function('Callback', ['one', 'two']) 4022 ... 4023 call Func('name') 4024< Invokes the function as with: > 4025 call Callback('one', 'two', 'name') 4026 4027< The function() call can be nested to add more arguments to the 4028 Funcref. The extra arguments are appended to the list of 4029 arguments. Example: > 4030 func Callback(arg1, arg2, name) 4031 ... 4032 let Func = function('Callback', ['one']) 4033 let Func2 = function(Func, ['two']) 4034 ... 4035 call Func2('name') 4036< Invokes the function as with: > 4037 call Callback('one', 'two', 'name') 4038 4039< The Dictionary is only useful when calling a "dict" function. 4040 In that case the {dict} is passed in as "self". Example: > 4041 function Callback() dict 4042 echo "called for " . self.name 4043 endfunction 4044 ... 4045 let context = {"name": "example"} 4046 let Func = function('Callback', context) 4047 ... 4048 call Func() " will echo: called for example 4049< The use of function() is not needed when there are no extra 4050 arguments, these two are equivalent: > 4051 let Func = function('Callback', context) 4052 let Func = context.Callback 4053 4054< The argument list and the Dictionary can be combined: > 4055 function Callback(arg1, count) dict 4056 ... 4057 let context = {"name": "example"} 4058 let Func = function('Callback', ['one'], context) 4059 ... 4060 call Func(500) 4061< Invokes the function as with: > 4062 call context.Callback('one', 500) 4063 4064 4065garbagecollect([{atexit}]) *garbagecollect()* 4066 Cleanup unused |Lists|, |Dictionaries|, |Channels| and |Jobs| 4067 that have circular references. 4068 4069 There is hardly ever a need to invoke this function, as it is 4070 automatically done when Vim runs out of memory or is waiting 4071 for the user to press a key after 'updatetime'. Items without 4072 circular references are always freed when they become unused. 4073 This is useful if you have deleted a very big |List| and/or 4074 |Dictionary| with circular references in a script that runs 4075 for a long time. 4076 4077 When the optional {atexit} argument is one, garbage 4078 collection will also be done when exiting Vim, if it wasn't 4079 done before. This is useful when checking for memory leaks. 4080 4081 The garbage collection is not done immediately but only when 4082 it's safe to perform. This is when waiting for the user to 4083 type a character. To force garbage collection immediately use 4084 |test_garbagecollect_now()|. 4085 4086get({list}, {idx} [, {default}]) *get()* 4087 Get item {idx} from |List| {list}. When this item is not 4088 available return {default}. Return zero when {default} is 4089 omitted. 4090get({dict}, {key} [, {default}]) 4091 Get item with key {key} from |Dictionary| {dict}. When this 4092 item is not available return {default}. Return zero when 4093 {default} is omitted. 4094get({func}, {what}) 4095 Get an item with from Funcref {func}. Possible values for 4096 {what} are: 4097 "name" The function name 4098 "func" The function 4099 "dict" The dictionary 4100 "args" The list with arguments 4101 4102 *getbufinfo()* 4103getbufinfo([{expr}]) 4104getbufinfo([{dict}]) 4105 Get information about buffers as a List of Dictionaries. 4106 4107 Without an argument information about all the buffers is 4108 returned. 4109 4110 When the argument is a Dictionary only the buffers matching 4111 the specified criteria are returned. The following keys can 4112 be specified in {dict}: 4113 buflisted include only listed buffers. 4114 bufloaded include only loaded buffers. 4115 4116 Otherwise, {expr} specifies a particular buffer to return 4117 information for. For the use of {expr}, see |bufname()| 4118 above. If the buffer is found the returned List has one item. 4119 Otherwise the result is an empty list. 4120 4121 Each returned List item is a dictionary with the following 4122 entries: 4123 bufnr buffer number. 4124 changed TRUE if the buffer is modified. 4125 changedtick number of changes made to the buffer. 4126 hidden TRUE if the buffer is hidden. 4127 listed TRUE if the buffer is listed. 4128 lnum current line number in buffer. 4129 loaded TRUE if the buffer is loaded. 4130 name full path to the file in the buffer. 4131 signs list of signs placed in the buffer. 4132 Each list item is a dictionary with 4133 the following fields: 4134 id sign identifier 4135 lnum line number 4136 name sign name 4137 variables a reference to the dictionary with 4138 buffer-local variables. 4139 windows list of |window-ID|s that display this 4140 buffer 4141 4142 Examples: > 4143 for buf in getbufinfo() 4144 echo buf.name 4145 endfor 4146 for buf in getbufinfo({'buflisted':1}) 4147 if buf.changed 4148 .... 4149 endif 4150 endfor 4151< 4152 To get buffer-local options use: > 4153 getbufvar({bufnr}, '&') 4154 4155< 4156 *getbufline()* 4157getbufline({expr}, {lnum} [, {end}]) 4158 Return a |List| with the lines starting from {lnum} to {end} 4159 (inclusive) in the buffer {expr}. If {end} is omitted, a 4160 |List| with only the line {lnum} is returned. 4161 4162 For the use of {expr}, see |bufname()| above. 4163 4164 For {lnum} and {end} "$" can be used for the last line of the 4165 buffer. Otherwise a number must be used. 4166 4167 When {lnum} is smaller than 1 or bigger than the number of 4168 lines in the buffer, an empty |List| is returned. 4169 4170 When {end} is greater than the number of lines in the buffer, 4171 it is treated as {end} is set to the number of lines in the 4172 buffer. When {end} is before {lnum} an empty |List| is 4173 returned. 4174 4175 This function works only for loaded buffers. For unloaded and 4176 non-existing buffers, an empty |List| is returned. 4177 4178 Example: > 4179 :let lines = getbufline(bufnr("myfile"), 1, "$") 4180 4181getbufvar({expr}, {varname} [, {def}]) *getbufvar()* 4182 The result is the value of option or local buffer variable 4183 {varname} in buffer {expr}. Note that the name without "b:" 4184 must be used. 4185 When {varname} is empty returns a dictionary with all the 4186 buffer-local variables. 4187 When {varname} is equal to "&" returns a dictionary with all 4188 the buffer-local options. 4189 Otherwise, when {varname} starts with "&" returns the value of 4190 a buffer-local option. 4191 This also works for a global or buffer-local option, but it 4192 doesn't work for a global variable, window-local variable or 4193 window-local option. 4194 For the use of {expr}, see |bufname()| above. 4195 When the buffer or variable doesn't exist {def} or an empty 4196 string is returned, there is no error message. 4197 Examples: > 4198 :let bufmodified = getbufvar(1, "&mod") 4199 :echo "todo myvar = " . getbufvar("todo", "myvar") 4200< 4201getchar([expr]) *getchar()* 4202 Get a single character from the user or input stream. 4203 If [expr] is omitted, wait until a character is available. 4204 If [expr] is 0, only get a character when one is available. 4205 Return zero otherwise. 4206 If [expr] is 1, only check if a character is available, it is 4207 not consumed. Return zero if no character available. 4208 4209 Without [expr] and when [expr] is 0 a whole character or 4210 special key is returned. If it is a single character, the 4211 result is a number. Use nr2char() to convert it to a String. 4212 Otherwise a String is returned with the encoded character. 4213 For a special key it's a String with a sequence of bytes 4214 starting with 0x80 (decimal: 128). This is the same value as 4215 the String "\<Key>", e.g., "\<Left>". The returned value is 4216 also a String when a modifier (shift, control, alt) was used 4217 that is not included in the character. 4218 4219 When [expr] is 0 and Esc is typed, there will be a short delay 4220 while Vim waits to see if this is the start of an escape 4221 sequence. 4222 4223 When [expr] is 1 only the first byte is returned. For a 4224 one-byte character it is the character itself as a number. 4225 Use nr2char() to convert it to a String. 4226 4227 Use getcharmod() to obtain any additional modifiers. 4228 4229 When the user clicks a mouse button, the mouse event will be 4230 returned. The position can then be found in |v:mouse_col|, 4231 |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|. This 4232 example positions the mouse as it would normally happen: > 4233 let c = getchar() 4234 if c == "\<LeftMouse>" && v:mouse_win > 0 4235 exe v:mouse_win . "wincmd w" 4236 exe v:mouse_lnum 4237 exe "normal " . v:mouse_col . "|" 4238 endif 4239< 4240 When using bracketed paste only the first character is 4241 returned, the rest of the pasted text is dropped. 4242 |xterm-bracketed-paste|. 4243 4244 There is no prompt, you will somehow have to make clear to the 4245 user that a character has to be typed. 4246 There is no mapping for the character. 4247 Key codes are replaced, thus when the user presses the <Del> 4248 key you get the code for the <Del> key, not the raw character 4249 sequence. Examples: > 4250 getchar() == "\<Del>" 4251 getchar() == "\<S-Left>" 4252< This example redefines "f" to ignore case: > 4253 :nmap f :call FindChar()<CR> 4254 :function FindChar() 4255 : let c = nr2char(getchar()) 4256 : while col('.') < col('$') - 1 4257 : normal l 4258 : if getline('.')[col('.') - 1] ==? c 4259 : break 4260 : endif 4261 : endwhile 4262 :endfunction 4263< 4264 You may also receive synthetic characters, such as 4265 |<CursorHold>|. Often you will want to ignore this and get 4266 another character: > 4267 :function GetKey() 4268 : let c = getchar() 4269 : while c == "\<CursorHold>" 4270 : let c = getchar() 4271 : endwhile 4272 : return c 4273 :endfunction 4274 4275getcharmod() *getcharmod()* 4276 The result is a Number which is the state of the modifiers for 4277 the last obtained character with getchar() or in another way. 4278 These values are added together: 4279 2 shift 4280 4 control 4281 8 alt (meta) 4282 16 meta (when it's different from ALT) 4283 32 mouse double click 4284 64 mouse triple click 4285 96 mouse quadruple click (== 32 + 64) 4286 128 command (Macintosh only) 4287 Only the modifiers that have not been included in the 4288 character itself are obtained. Thus Shift-a results in "A" 4289 without a modifier. 4290 4291getcharsearch() *getcharsearch()* 4292 Return the current character search information as a {dict} 4293 with the following entries: 4294 4295 char character previously used for a character 4296 search (|t|, |f|, |T|, or |F|); empty string 4297 if no character search has been performed 4298 forward direction of character search; 1 for forward, 4299 0 for backward 4300 until type of character search; 1 for a |t| or |T| 4301 character search, 0 for an |f| or |F| 4302 character search 4303 4304 This can be useful to always have |;| and |,| search 4305 forward/backward regardless of the direction of the previous 4306 character search: > 4307 :nnoremap <expr> ; getcharsearch().forward ? ';' : ',' 4308 :nnoremap <expr> , getcharsearch().forward ? ',' : ';' 4309< Also see |setcharsearch()|. 4310 4311getcmdline() *getcmdline()* 4312 Return the current command-line. Only works when the command 4313 line is being edited, thus requires use of |c_CTRL-\_e| or 4314 |c_CTRL-R_=|. 4315 Example: > 4316 :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR> 4317< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|. 4318 4319getcmdpos() *getcmdpos()* 4320 Return the position of the cursor in the command line as a 4321 byte count. The first column is 1. 4322 Only works when editing the command line, thus requires use of 4323 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 4324 Returns 0 otherwise. 4325 Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|. 4326 4327getcmdtype() *getcmdtype()* 4328 Return the current command-line type. Possible return values 4329 are: 4330 : normal Ex command 4331 > debug mode command |debug-mode| 4332 / forward search command 4333 ? backward search command 4334 @ |input()| command 4335 - |:insert| or |:append| command 4336 = |i_CTRL-R_=| 4337 Only works when editing the command line, thus requires use of 4338 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 4339 Returns an empty string otherwise. 4340 Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|. 4341 4342getcmdwintype() *getcmdwintype()* 4343 Return the current |command-line-window| type. Possible return 4344 values are the same as |getcmdtype()|. Returns an empty string 4345 when not in the command-line window. 4346 4347getcompletion({pat}, {type} [, {filtered}]) *getcompletion()* 4348 Return a list of command-line completion matches. {type} 4349 specifies what for. The following completion types are 4350 supported: 4351 4352 augroup autocmd groups 4353 buffer buffer names 4354 behave :behave suboptions 4355 color color schemes 4356 command Ex command (and arguments) 4357 compiler compilers 4358 cscope |:cscope| suboptions 4359 dir directory names 4360 environment environment variable names 4361 event autocommand events 4362 expression Vim expression 4363 file file and directory names 4364 file_in_path file and directory names in |'path'| 4365 filetype filetype names |'filetype'| 4366 function function name 4367 help help subjects 4368 highlight highlight groups 4369 history :history suboptions 4370 locale locale names (as output of locale -a) 4371 mapclear buffer argument 4372 mapping mapping name 4373 menu menus 4374 messages |:messages| suboptions 4375 option options 4376 packadd optional package |pack-add| names 4377 shellcmd Shell command 4378 sign |:sign| suboptions 4379 syntax syntax file names |'syntax'| 4380 syntime |:syntime| suboptions 4381 tag tags 4382 tag_listfiles tags, file names 4383 user user names 4384 var user variables 4385 4386 If {pat} is an empty string, then all the matches are returned. 4387 Otherwise only items matching {pat} are returned. See 4388 |wildcards| for the use of special characters in {pat}. 4389 4390 If the optional {filtered} flag is set to 1, then 'wildignore' 4391 is applied to filter the results. Otherwise all the matches 4392 are returned. The 'wildignorecase' option always applies. 4393 4394 If there are no matches, an empty list is returned. An 4395 invalid value for {type} produces an error. 4396 4397 *getcurpos()* 4398getcurpos() Get the position of the cursor. This is like getpos('.'), but 4399 includes an extra item in the list: 4400 [bufnum, lnum, col, off, curswant] ~ 4401 The "curswant" number is the preferred column when moving the 4402 cursor vertically. Also see |getpos()|. 4403 4404 This can be used to save and restore the cursor position: > 4405 let save_cursor = getcurpos() 4406 MoveTheCursorAround 4407 call setpos('.', save_cursor) 4408< Note that this only works within the window. See 4409 |winrestview()| for restoring more state. 4410 *getcwd()* 4411getcwd([{winnr} [, {tabnr}]]) 4412 The result is a String, which is the name of the current 4413 working directory. 4414 Without arguments, for the current window. 4415 4416 With {winnr} return the local current directory of this window 4417 in the current tab page. 4418 With {winnr} and {tabnr} return the local current directory of 4419 the window in the specified tab page. 4420 {winnr} can be the window number or the |window-ID|. 4421 Return an empty string if the arguments are invalid. 4422 4423getfsize({fname}) *getfsize()* 4424 The result is a Number, which is the size in bytes of the 4425 given file {fname}. 4426 If {fname} is a directory, 0 is returned. 4427 If the file {fname} can't be found, -1 is returned. 4428 If the size of {fname} is too big to fit in a Number then -2 4429 is returned. 4430 4431getfontname([{name}]) *getfontname()* 4432 Without an argument returns the name of the normal font being 4433 used. Like what is used for the Normal highlight group 4434 |hl-Normal|. 4435 With an argument a check is done whether {name} is a valid 4436 font name. If not then an empty string is returned. 4437 Otherwise the actual font name is returned, or {name} if the 4438 GUI does not support obtaining the real name. 4439 Only works when the GUI is running, thus not in your vimrc or 4440 gvimrc file. Use the |GUIEnter| autocommand to use this 4441 function just after the GUI has started. 4442 Note that the GTK GUI accepts any font name, thus checking for 4443 a valid name does not work. 4444 4445getfperm({fname}) *getfperm()* 4446 The result is a String, which is the read, write, and execute 4447 permissions of the given file {fname}. 4448 If {fname} does not exist or its directory cannot be read, an 4449 empty string is returned. 4450 The result is of the form "rwxrwxrwx", where each group of 4451 "rwx" flags represent, in turn, the permissions of the owner 4452 of the file, the group the file belongs to, and other users. 4453 If a user does not have a given permission the flag for this 4454 is replaced with the string "-". Examples: > 4455 :echo getfperm("/etc/passwd") 4456 :echo getfperm(expand("~/.vimrc")) 4457< This will hopefully (from a security point of view) display 4458 the string "rw-r--r--" or even "rw-------". 4459 4460 For setting permissions use |setfperm()|. 4461 4462getftime({fname}) *getftime()* 4463 The result is a Number, which is the last modification time of 4464 the given file {fname}. The value is measured as seconds 4465 since 1st Jan 1970, and may be passed to strftime(). See also 4466 |localtime()| and |strftime()|. 4467 If the file {fname} can't be found -1 is returned. 4468 4469getftype({fname}) *getftype()* 4470 The result is a String, which is a description of the kind of 4471 file of the given file {fname}. 4472 If {fname} does not exist an empty string is returned. 4473 Here is a table over different kinds of files and their 4474 results: 4475 Normal file "file" 4476 Directory "dir" 4477 Symbolic link "link" 4478 Block device "bdev" 4479 Character device "cdev" 4480 Socket "socket" 4481 FIFO "fifo" 4482 All other "other" 4483 Example: > 4484 getftype("/home") 4485< Note that a type such as "link" will only be returned on 4486 systems that support it. On some systems only "dir" and 4487 "file" are returned. On MS-Windows a symbolic link to a 4488 directory returns "dir" instead of "link". 4489 4490 *getline()* 4491getline({lnum} [, {end}]) 4492 Without {end} the result is a String, which is line {lnum} 4493 from the current buffer. Example: > 4494 getline(1) 4495< When {lnum} is a String that doesn't start with a 4496 digit, line() is called to translate the String into a Number. 4497 To get the line under the cursor: > 4498 getline(".") 4499< When {lnum} is smaller than 1 or bigger than the number of 4500 lines in the buffer, an empty string is returned. 4501 4502 When {end} is given the result is a |List| where each item is 4503 a line from the current buffer in the range {lnum} to {end}, 4504 including line {end}. 4505 {end} is used in the same way as {lnum}. 4506 Non-existing lines are silently omitted. 4507 When {end} is before {lnum} an empty |List| is returned. 4508 Example: > 4509 :let start = line('.') 4510 :let end = search("^$") - 1 4511 :let lines = getline(start, end) 4512 4513< To get lines from another buffer see |getbufline()| 4514 4515getloclist({nr}[, {what}]) *getloclist()* 4516 Returns a list with all the entries in the location list for 4517 window {nr}. {nr} can be the window number or the |window-ID|. 4518 When {nr} is zero the current window is used. 4519 4520 For a location list window, the displayed location list is 4521 returned. For an invalid window number {nr}, an empty list is 4522 returned. Otherwise, same as |getqflist()|. 4523 4524 If the optional {what} dictionary argument is supplied, then 4525 returns the items listed in {what} as a dictionary. Refer to 4526 |getqflist()| for the supported items in {what}. 4527 4528getmatches() *getmatches()* 4529 Returns a |List| with all matches previously defined by 4530 |matchadd()| and the |:match| commands. |getmatches()| is 4531 useful in combination with |setmatches()|, as |setmatches()| 4532 can restore a list of matches saved by |getmatches()|. 4533 Example: > 4534 :echo getmatches() 4535< [{'group': 'MyGroup1', 'pattern': 'TODO', 4536 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 4537 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 4538 :let m = getmatches() 4539 :call clearmatches() 4540 :echo getmatches() 4541< [] > 4542 :call setmatches(m) 4543 :echo getmatches() 4544< [{'group': 'MyGroup1', 'pattern': 'TODO', 4545 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 4546 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 4547 :unlet m 4548< 4549 *getpid()* 4550getpid() Return a Number which is the process ID of the Vim process. 4551 On Unix and MS-Windows this is a unique number, until Vim 4552 exits. On MS-DOS it's always zero. 4553 4554 *getpos()* 4555getpos({expr}) Get the position for {expr}. For possible values of {expr} 4556 see |line()|. For getting the cursor position see 4557 |getcurpos()|. 4558 The result is a |List| with four numbers: 4559 [bufnum, lnum, col, off] 4560 "bufnum" is zero, unless a mark like '0 or 'A is used, then it 4561 is the buffer number of the mark. 4562 "lnum" and "col" are the position in the buffer. The first 4563 column is 1. 4564 The "off" number is zero, unless 'virtualedit' is used. Then 4565 it is the offset in screen columns from the start of the 4566 character. E.g., a position within a <Tab> or after the last 4567 character. 4568 Note that for '< and '> Visual mode matters: when it is "V" 4569 (visual line mode) the column of '< is zero and the column of 4570 '> is a large number. 4571 This can be used to save and restore the position of a mark: > 4572 let save_a_mark = getpos("'a") 4573 ... 4574 call setpos("'a", save_a_mark) 4575< Also see |getcurpos()| and |setpos()|. 4576 4577 4578getqflist([{what}]) *getqflist()* 4579 Returns a list with all the current quickfix errors. Each 4580 list item is a dictionary with these entries: 4581 bufnr number of buffer that has the file name, use 4582 bufname() to get the name 4583 lnum line number in the buffer (first line is 1) 4584 col column number (first column is 1) 4585 vcol |TRUE|: "col" is visual column 4586 |FALSE|: "col" is byte index 4587 nr error number 4588 pattern search pattern used to locate the error 4589 text description of the error 4590 type type of the error, 'E', '1', etc. 4591 valid |TRUE|: recognized error message 4592 4593 When there is no error list or it's empty, an empty list is 4594 returned. Quickfix list entries with non-existing buffer 4595 number are returned with "bufnr" set to zero. 4596 4597 Useful application: Find pattern matches in multiple files and 4598 do something with them: > 4599 :vimgrep /theword/jg *.c 4600 :for d in getqflist() 4601 : echo bufname(d.bufnr) ':' d.lnum '=' d.text 4602 :endfor 4603< 4604 If the optional {what} dictionary argument is supplied, then 4605 returns only the items listed in {what} as a dictionary. The 4606 following string items are supported in {what}: 4607 context get the context stored with |setqflist()| 4608 items quickfix list entries 4609 nr get information for this quickfix list; zero 4610 means the current quickfix list and '$' means 4611 the last quickfix list 4612 title get the list title 4613 winid get the |window-ID| (if opened) 4614 all all of the above quickfix properties 4615 Non-string items in {what} are ignored. 4616 If "nr" is not present then the current quickfix list is used. 4617 To get the number of lists in the quickfix stack, set 'nr' to 4618 '$' in {what}. The 'nr' value in the returned dictionary 4619 contains the quickfix stack size. 4620 In case of error processing {what}, an empty dictionary is 4621 returned. 4622 4623 The returned dictionary contains the following entries: 4624 context context information stored with |setqflist()| 4625 items quickfix list entries 4626 nr quickfix list number 4627 title quickfix list title text 4628 winid quickfix |window-ID| (if opened) 4629 4630 Examples: > 4631 :echo getqflist({'all': 1}) 4632 :echo getqflist({'nr': 2, 'title': 1}) 4633< 4634 4635getreg([{regname} [, 1 [, {list}]]]) *getreg()* 4636 The result is a String, which is the contents of register 4637 {regname}. Example: > 4638 :let cliptext = getreg('*') 4639< When {regname} was not set the result is an empty string. 4640 4641 getreg('=') returns the last evaluated value of the expression 4642 register. (For use in maps.) 4643 getreg('=', 1) returns the expression itself, so that it can 4644 be restored with |setreg()|. For other registers the extra 4645 argument is ignored, thus you can always give it. 4646 4647 If {list} is present and |TRUE|, the result type is changed 4648 to |List|. Each list item is one text line. Use it if you care 4649 about zero bytes possibly present inside register: without 4650 third argument both NLs and zero bytes are represented as NLs 4651 (see |NL-used-for-Nul|). 4652 When the register was not set an empty list is returned. 4653 4654 If {regname} is not specified, |v:register| is used. 4655 4656 4657getregtype([{regname}]) *getregtype()* 4658 The result is a String, which is type of register {regname}. 4659 The value will be one of: 4660 "v" for |characterwise| text 4661 "V" for |linewise| text 4662 "<CTRL-V>{width}" for |blockwise-visual| text 4663 "" for an empty or unknown register 4664 <CTRL-V> is one character with value 0x16. 4665 If {regname} is not specified, |v:register| is used. 4666 4667gettabinfo([{arg}]) *gettabinfo()* 4668 If {arg} is not specified, then information about all the tab 4669 pages is returned as a List. Each List item is a Dictionary. 4670 Otherwise, {arg} specifies the tab page number and information 4671 about that one is returned. If the tab page does not exist an 4672 empty List is returned. 4673 4674 Each List item is a Dictionary with the following entries: 4675 tabnr tab page number. 4676 variables a reference to the dictionary with 4677 tabpage-local variables 4678 windows List of |window-ID|s in the tag page. 4679 4680gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()* 4681 Get the value of a tab-local variable {varname} in tab page 4682 {tabnr}. |t:var| 4683 Tabs are numbered starting with one. 4684 When {varname} is empty a dictionary with all tab-local 4685 variables is returned. 4686 Note that the name without "t:" must be used. 4687 When the tab or variable doesn't exist {def} or an empty 4688 string is returned, there is no error message. 4689 4690gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()* 4691 Get the value of window-local variable {varname} in window 4692 {winnr} in tab page {tabnr}. 4693 When {varname} is empty a dictionary with all window-local 4694 variables is returned. 4695 When {varname} is equal to "&" get the values of all 4696 window-local options in a Dictionary. 4697 Otherwise, when {varname} starts with "&" get the value of a 4698 window-local option. 4699 Note that {varname} must be the name without "w:". 4700 Tabs are numbered starting with one. For the current tabpage 4701 use |getwinvar()|. 4702 {winnr} can be the window number or the |window-ID|. 4703 When {winnr} is zero the current window is used. 4704 This also works for a global option, buffer-local option and 4705 window-local option, but it doesn't work for a global variable 4706 or buffer-local variable. 4707 When the tab, window or variable doesn't exist {def} or an 4708 empty string is returned, there is no error message. 4709 Examples: > 4710 :let list_is_on = gettabwinvar(1, 2, '&list') 4711 :echo "myvar = " . gettabwinvar(3, 1, 'myvar') 4712< 4713 *getwinposx()* 4714getwinposx() The result is a Number, which is the X coordinate in pixels of 4715 the left hand side of the GUI Vim window. Also works for an 4716 xterm. 4717 The result will be -1 if the information is not available. 4718 The value can be used with `:winpos`. 4719 4720 *getwinposy()* 4721getwinposy() The result is a Number, which is the Y coordinate in pixels of 4722 the top of the GUI Vim window. Also works for an xterm. 4723 The result will be -1 if the information is not available. 4724 The value can be used with `:winpos`. 4725 4726getwininfo([{winid}]) *getwininfo()* 4727 Returns information about windows as a List with Dictionaries. 4728 4729 If {winid} is given Information about the window with that ID 4730 is returned. If the window does not exist the result is an 4731 empty list. 4732 4733 Without {winid} information about all the windows in all the 4734 tab pages is returned. 4735 4736 Each List item is a Dictionary with the following entries: 4737 bufnr number of buffer in the window 4738 height window height 4739 loclist 1 if showing a location list 4740 {only with the +quickfix feature} 4741 quickfix 1 if quickfix or location list window 4742 {only with the +quickfix feature} 4743 tabnr tab page number 4744 variables a reference to the dictionary with 4745 window-local variables 4746 width window width 4747 winid |window-ID| 4748 winnr window number 4749 4750 To obtain all window-local variables use: > 4751 gettabwinvar({tabnr}, {winnr}, '&') 4752 4753getwinvar({winnr}, {varname} [, {def}]) *getwinvar()* 4754 Like |gettabwinvar()| for the current tabpage. 4755 Examples: > 4756 :let list_is_on = getwinvar(2, '&list') 4757 :echo "myvar = " . getwinvar(1, 'myvar') 4758< 4759glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()* 4760 Expand the file wildcards in {expr}. See |wildcards| for the 4761 use of special characters. 4762 4763 Unless the optional {nosuf} argument is given and is |TRUE|, 4764 the 'suffixes' and 'wildignore' options apply: Names matching 4765 one of the patterns in 'wildignore' will be skipped and 4766 'suffixes' affect the ordering of matches. 4767 'wildignorecase' always applies. 4768 4769 When {list} is present and it is |TRUE| the result is a List 4770 with all matching files. The advantage of using a List is, 4771 you also get filenames containing newlines correctly. 4772 Otherwise the result is a String and when there are several 4773 matches, they are separated by <NL> characters. 4774 4775 If the expansion fails, the result is an empty String or List. 4776 4777 A name for a non-existing file is not included. A symbolic 4778 link is only included if it points to an existing file. 4779 However, when the {alllinks} argument is present and it is 4780 |TRUE| then all symbolic links are included. 4781 4782 For most systems backticks can be used to get files names from 4783 any external command. Example: > 4784 :let tagfiles = glob("`find . -name tags -print`") 4785 :let &tags = substitute(tagfiles, "\n", ",", "g") 4786< The result of the program inside the backticks should be one 4787 item per line. Spaces inside an item are allowed. 4788 4789 See |expand()| for expanding special Vim variables. See 4790 |system()| for getting the raw output of an external command. 4791 4792glob2regpat({expr}) *glob2regpat()* 4793 Convert a file pattern, as used by glob(), into a search 4794 pattern. The result can be used to match with a string that 4795 is a file name. E.g. > 4796 if filename =~ glob2regpat('Make*.mak') 4797< This is equivalent to: > 4798 if filename =~ '^Make.*\.mak$' 4799< When {expr} is an empty string the result is "^$", match an 4800 empty string. 4801 Note that the result depends on the system. On MS-Windows 4802 a backslash usually means a path separator. 4803 4804 *globpath()* 4805globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 4806 Perform glob() on all directories in {path} and concatenate 4807 the results. Example: > 4808 :echo globpath(&rtp, "syntax/c.vim") 4809< 4810 {path} is a comma-separated list of directory names. Each 4811 directory name is prepended to {expr} and expanded like with 4812 |glob()|. A path separator is inserted when needed. 4813 To add a comma inside a directory name escape it with a 4814 backslash. Note that on MS-Windows a directory may have a 4815 trailing backslash, remove it if you put a comma after it. 4816 If the expansion fails for one of the directories, there is no 4817 error message. 4818 4819 Unless the optional {nosuf} argument is given and is |TRUE|, 4820 the 'suffixes' and 'wildignore' options apply: Names matching 4821 one of the patterns in 'wildignore' will be skipped and 4822 'suffixes' affect the ordering of matches. 4823 4824 When {list} is present and it is |TRUE| the result is a List 4825 with all matching files. The advantage of using a List is, you 4826 also get filenames containing newlines correctly. Otherwise 4827 the result is a String and when there are several matches, 4828 they are separated by <NL> characters. Example: > 4829 :echo globpath(&rtp, "syntax/c.vim", 0, 1) 4830< 4831 {alllinks} is used as with |glob()|. 4832 4833 The "**" item can be used to search in a directory tree. 4834 For example, to find all "README.txt" files in the directories 4835 in 'runtimepath' and below: > 4836 :echo globpath(&rtp, "**/README.txt") 4837< Upwards search and limiting the depth of "**" is not 4838 supported, thus using 'path' will not always work properly. 4839 4840 *has()* 4841has({feature}) The result is a Number, which is 1 if the feature {feature} is 4842 supported, zero otherwise. The {feature} argument is a 4843 string. See |feature-list| below. 4844 Also see |exists()|. 4845 4846 4847has_key({dict}, {key}) *has_key()* 4848 The result is a Number, which is 1 if |Dictionary| {dict} has 4849 an entry with key {key}. Zero otherwise. 4850 4851haslocaldir([{winnr} [, {tabnr}]]) *haslocaldir()* 4852 The result is a Number, which is 1 when the window has set a 4853 local path via |:lcd|, and 0 otherwise. 4854 4855 Without arguments use the current window. 4856 With {winnr} use this window in the current tab page. 4857 With {winnr} and {tabnr} use the window in the specified tab 4858 page. 4859 {winnr} can be the window number or the |window-ID|. 4860 Return 0 if the arguments are invalid. 4861 4862hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()* 4863 The result is a Number, which is 1 if there is a mapping that 4864 contains {what} in somewhere in the rhs (what it is mapped to) 4865 and this mapping exists in one of the modes indicated by 4866 {mode}. 4867 When {abbr} is there and it is |TRUE| use abbreviations 4868 instead of mappings. Don't forget to specify Insert and/or 4869 Command-line mode. 4870 Both the global mappings and the mappings local to the current 4871 buffer are checked for a match. 4872 If no matching mapping is found 0 is returned. 4873 The following characters are recognized in {mode}: 4874 n Normal mode 4875 v Visual mode 4876 o Operator-pending mode 4877 i Insert mode 4878 l Language-Argument ("r", "f", "t", etc.) 4879 c Command-line mode 4880 When {mode} is omitted, "nvo" is used. 4881 4882 This function is useful to check if a mapping already exists 4883 to a function in a Vim script. Example: > 4884 :if !hasmapto('\ABCdoit') 4885 : map <Leader>d \ABCdoit 4886 :endif 4887< This installs the mapping to "\ABCdoit" only if there isn't 4888 already a mapping to "\ABCdoit". 4889 4890histadd({history}, {item}) *histadd()* 4891 Add the String {item} to the history {history} which can be 4892 one of: *hist-names* 4893 "cmd" or ":" command line history 4894 "search" or "/" search pattern history 4895 "expr" or "=" typed expression history 4896 "input" or "@" input line history 4897 "debug" or ">" debug command history 4898 empty the current or last used history 4899 The {history} string does not need to be the whole name, one 4900 character is sufficient. 4901 If {item} does already exist in the history, it will be 4902 shifted to become the newest entry. 4903 The result is a Number: 1 if the operation was successful, 4904 otherwise 0 is returned. 4905 4906 Example: > 4907 :call histadd("input", strftime("%Y %b %d")) 4908 :let date=input("Enter date: ") 4909< This function is not available in the |sandbox|. 4910 4911histdel({history} [, {item}]) *histdel()* 4912 Clear {history}, i.e. delete all its entries. See |hist-names| 4913 for the possible values of {history}. 4914 4915 If the parameter {item} evaluates to a String, it is used as a 4916 regular expression. All entries matching that expression will 4917 be removed from the history (if there are any). 4918 Upper/lowercase must match, unless "\c" is used |/\c|. 4919 If {item} evaluates to a Number, it will be interpreted as 4920 an index, see |:history-indexing|. The respective entry will 4921 be removed if it exists. 4922 4923 The result is a Number: 1 for a successful operation, 4924 otherwise 0 is returned. 4925 4926 Examples: 4927 Clear expression register history: > 4928 :call histdel("expr") 4929< 4930 Remove all entries starting with "*" from the search history: > 4931 :call histdel("/", '^\*') 4932< 4933 The following three are equivalent: > 4934 :call histdel("search", histnr("search")) 4935 :call histdel("search", -1) 4936 :call histdel("search", '^'.histget("search", -1).'$') 4937< 4938 To delete the last search pattern and use the last-but-one for 4939 the "n" command and 'hlsearch': > 4940 :call histdel("search", -1) 4941 :let @/ = histget("search", -1) 4942 4943histget({history} [, {index}]) *histget()* 4944 The result is a String, the entry with Number {index} from 4945 {history}. See |hist-names| for the possible values of 4946 {history}, and |:history-indexing| for {index}. If there is 4947 no such entry, an empty String is returned. When {index} is 4948 omitted, the most recent item from the history is used. 4949 4950 Examples: 4951 Redo the second last search from history. > 4952 :execute '/' . histget("search", -2) 4953 4954< Define an Ex command ":H {num}" that supports re-execution of 4955 the {num}th entry from the output of |:history|. > 4956 :command -nargs=1 H execute histget("cmd", 0+<args>) 4957< 4958histnr({history}) *histnr()* 4959 The result is the Number of the current entry in {history}. 4960 See |hist-names| for the possible values of {history}. 4961 If an error occurred, -1 is returned. 4962 4963 Example: > 4964 :let inp_index = histnr("expr") 4965< 4966hlexists({name}) *hlexists()* 4967 The result is a Number, which is non-zero if a highlight group 4968 called {name} exists. This is when the group has been 4969 defined in some way. Not necessarily when highlighting has 4970 been defined for it, it may also have been used for a syntax 4971 item. 4972 *highlight_exists()* 4973 Obsolete name: highlight_exists(). 4974 4975 *hlID()* 4976hlID({name}) The result is a Number, which is the ID of the highlight group 4977 with name {name}. When the highlight group doesn't exist, 4978 zero is returned. 4979 This can be used to retrieve information about the highlight 4980 group. For example, to get the background color of the 4981 "Comment" group: > 4982 :echo synIDattr(synIDtrans(hlID("Comment")), "bg") 4983< *highlightID()* 4984 Obsolete name: highlightID(). 4985 4986hostname() *hostname()* 4987 The result is a String, which is the name of the machine on 4988 which Vim is currently running. Machine names greater than 4989 256 characters long are truncated. 4990 4991iconv({expr}, {from}, {to}) *iconv()* 4992 The result is a String, which is the text {expr} converted 4993 from encoding {from} to encoding {to}. 4994 When the conversion completely fails an empty string is 4995 returned. When some characters could not be converted they 4996 are replaced with "?". 4997 The encoding names are whatever the iconv() library function 4998 can accept, see ":!man 3 iconv". 4999 Most conversions require Vim to be compiled with the |+iconv| 5000 feature. Otherwise only UTF-8 to latin1 conversion and back 5001 can be done. 5002 This can be used to display messages with special characters, 5003 no matter what 'encoding' is set to. Write the message in 5004 UTF-8 and use: > 5005 echo iconv(utf8_str, "utf-8", &enc) 5006< Note that Vim uses UTF-8 for all Unicode encodings, conversion 5007 from/to UCS-2 is automatically changed to use UTF-8. You 5008 cannot use UCS-2 in a string anyway, because of the NUL bytes. 5009 {only available when compiled with the |+multi_byte| feature} 5010 5011 *indent()* 5012indent({lnum}) The result is a Number, which is indent of line {lnum} in the 5013 current buffer. The indent is counted in spaces, the value 5014 of 'tabstop' is relevant. {lnum} is used just like in 5015 |getline()|. 5016 When {lnum} is invalid -1 is returned. 5017 5018 5019index({list}, {expr} [, {start} [, {ic}]]) *index()* 5020 Return the lowest index in |List| {list} where the item has a 5021 value equal to {expr}. There is no automatic conversion, so 5022 the String "4" is different from the Number 4. And the number 5023 4 is different from the Float 4.0. The value of 'ignorecase' 5024 is not used here, case always matters. 5025 If {start} is given then start looking at the item with index 5026 {start} (may be negative for an item relative to the end). 5027 When {ic} is given and it is |TRUE|, ignore case. Otherwise 5028 case must match. 5029 -1 is returned when {expr} is not found in {list}. 5030 Example: > 5031 :let idx = index(words, "the") 5032 :if index(numbers, 123) >= 0 5033 5034 5035input({prompt} [, {text} [, {completion}]]) *input()* 5036 The result is a String, which is whatever the user typed on 5037 the command-line. The {prompt} argument is either a prompt 5038 string, or a blank string (for no prompt). A '\n' can be used 5039 in the prompt to start a new line. 5040 The highlighting set with |:echohl| is used for the prompt. 5041 The input is entered just like a command-line, with the same 5042 editing commands and mappings. There is a separate history 5043 for lines typed for input(). 5044 Example: > 5045 :if input("Coffee or beer? ") == "beer" 5046 : echo "Cheers!" 5047 :endif 5048< 5049 If the optional {text} argument is present and not empty, this 5050 is used for the default reply, as if the user typed this. 5051 Example: > 5052 :let color = input("Color? ", "white") 5053 5054< The optional {completion} argument specifies the type of 5055 completion supported for the input. Without it completion is 5056 not performed. The supported completion types are the same as 5057 that can be supplied to a user-defined command using the 5058 "-complete=" argument. Refer to |:command-completion| for 5059 more information. Example: > 5060 let fname = input("File: ", "", "file") 5061< 5062 NOTE: This function must not be used in a startup file, for 5063 the versions that only run in GUI mode (e.g., the Win32 GUI). 5064 Note: When input() is called from within a mapping it will 5065 consume remaining characters from that mapping, because a 5066 mapping is handled like the characters were typed. 5067 Use |inputsave()| before input() and |inputrestore()| 5068 after input() to avoid that. Another solution is to avoid 5069 that further characters follow in the mapping, e.g., by using 5070 |:execute| or |:normal|. 5071 5072 Example with a mapping: > 5073 :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR> 5074 :function GetFoo() 5075 : call inputsave() 5076 : let g:Foo = input("enter search pattern: ") 5077 : call inputrestore() 5078 :endfunction 5079 5080inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()* 5081 Like |input()|, but when the GUI is running and text dialogs 5082 are supported, a dialog window pops up to input the text. 5083 Example: > 5084 :let n = inputdialog("value for shiftwidth", shiftwidth()) 5085 :if n != "" 5086 : let &sw = n 5087 :endif 5088< When the dialog is cancelled {cancelreturn} is returned. When 5089 omitted an empty string is returned. 5090 Hitting <Enter> works like pressing the OK button. Hitting 5091 <Esc> works like pressing the Cancel button. 5092 NOTE: Command-line completion is not supported. 5093 5094inputlist({textlist}) *inputlist()* 5095 {textlist} must be a |List| of strings. This |List| is 5096 displayed, one string per line. The user will be prompted to 5097 enter a number, which is returned. 5098 The user can also select an item by clicking on it with the 5099 mouse. For the first string 0 is returned. When clicking 5100 above the first item a negative number is returned. When 5101 clicking on the prompt one more than the length of {textlist} 5102 is returned. 5103 Make sure {textlist} has less than 'lines' entries, otherwise 5104 it won't work. It's a good idea to put the entry number at 5105 the start of the string. And put a prompt in the first item. 5106 Example: > 5107 let color = inputlist(['Select color:', '1. red', 5108 \ '2. green', '3. blue']) 5109 5110inputrestore() *inputrestore()* 5111 Restore typeahead that was saved with a previous |inputsave()|. 5112 Should be called the same number of times inputsave() is 5113 called. Calling it more often is harmless though. 5114 Returns 1 when there is nothing to restore, 0 otherwise. 5115 5116inputsave() *inputsave()* 5117 Preserve typeahead (also from mappings) and clear it, so that 5118 a following prompt gets input from the user. Should be 5119 followed by a matching inputrestore() after the prompt. Can 5120 be used several times, in which case there must be just as 5121 many inputrestore() calls. 5122 Returns 1 when out of memory, 0 otherwise. 5123 5124inputsecret({prompt} [, {text}]) *inputsecret()* 5125 This function acts much like the |input()| function with but 5126 two exceptions: 5127 a) the user's response will be displayed as a sequence of 5128 asterisks ("*") thereby keeping the entry secret, and 5129 b) the user's response will not be recorded on the input 5130 |history| stack. 5131 The result is a String, which is whatever the user actually 5132 typed on the command-line in response to the issued prompt. 5133 NOTE: Command-line completion is not supported. 5134 5135insert({list}, {item} [, {idx}]) *insert()* 5136 Insert {item} at the start of |List| {list}. 5137 If {idx} is specified insert {item} before the item with index 5138 {idx}. If {idx} is zero it goes before the first item, just 5139 like omitting {idx}. A negative {idx} is also possible, see 5140 |list-index|. -1 inserts just before the last item. 5141 Returns the resulting |List|. Examples: > 5142 :let mylist = insert([2, 3, 5], 1) 5143 :call insert(mylist, 4, -1) 5144 :call insert(mylist, 6, len(mylist)) 5145< The last example can be done simpler with |add()|. 5146 Note that when {item} is a |List| it is inserted as a single 5147 item. Use |extend()| to concatenate |Lists|. 5148 5149invert({expr}) *invert()* 5150 Bitwise invert. The argument is converted to a number. A 5151 List, Dict or Float argument causes an error. Example: > 5152 :let bits = invert(bits) 5153 5154isdirectory({directory}) *isdirectory()* 5155 The result is a Number, which is |TRUE| when a directory 5156 with the name {directory} exists. If {directory} doesn't 5157 exist, or isn't a directory, the result is |FALSE|. {directory} 5158 is any expression, which is used as a String. 5159 5160islocked({expr}) *islocked()* *E786* 5161 The result is a Number, which is |TRUE| when {expr} is the 5162 name of a locked variable. 5163 {expr} must be the name of a variable, |List| item or 5164 |Dictionary| entry, not the variable itself! Example: > 5165 :let alist = [0, ['a', 'b'], 2, 3] 5166 :lockvar 1 alist 5167 :echo islocked('alist') " 1 5168 :echo islocked('alist[1]') " 0 5169 5170< When {expr} is a variable that does not exist you get an error 5171 message. Use |exists()| to check for existence. 5172 5173isnan({expr}) *isnan()* 5174 Return |TRUE| if {expr} is a float with value NaN. > 5175 echo isnan(0.0 / 0.0) 5176< 1 ~ 5177 5178 {only available when compiled with the |+float| feature} 5179 5180items({dict}) *items()* 5181 Return a |List| with all the key-value pairs of {dict}. Each 5182 |List| item is a list with two items: the key of a {dict} 5183 entry and the value of this entry. The |List| is in arbitrary 5184 order. 5185 5186job_getchannel({job}) *job_getchannel()* 5187 Get the channel handle that {job} is using. 5188 To check if the job has no channel: > 5189 if string(job_getchannel()) == 'channel fail' 5190< 5191 {only available when compiled with the |+job| feature} 5192 5193job_info({job}) *job_info()* 5194 Returns a Dictionary with information about {job}: 5195 "status" what |job_status()| returns 5196 "channel" what |job_getchannel()| returns 5197 "process" process ID 5198 "tty" controlling terminal name, empty when none 5199 "exitval" only valid when "status" is "dead" 5200 "exit_cb" function to be called on exit 5201 "stoponexit" |job-stoponexit| 5202 5203job_setoptions({job}, {options}) *job_setoptions()* 5204 Change options for {job}. Supported are: 5205 "stoponexit" |job-stoponexit| 5206 "exit_cb" |job-exit_cb| 5207 5208job_start({command} [, {options}]) *job_start()* 5209 Start a job and return a Job object. Unlike |system()| and 5210 |:!cmd| this does not wait for the job to finish. 5211 5212 {command} can be a String. This works best on MS-Windows. On 5213 Unix it is split up in white-separated parts to be passed to 5214 execvp(). Arguments in double quotes can contain white space. 5215 5216 {command} can be a List, where the first item is the executable 5217 and further items are the arguments. All items are converted 5218 to String. This works best on Unix. 5219 5220 On MS-Windows, job_start() makes a GUI application hidden. If 5221 want to show it, Use |:!start| instead. 5222 5223 The command is executed directly, not through a shell, the 5224 'shell' option is not used. To use the shell: > 5225 let job = job_start(["/bin/sh", "-c", "echo hello"]) 5226< Or: > 5227 let job = job_start('/bin/sh -c "echo hello"') 5228< Note that this will start two processes, the shell and the 5229 command it executes. If you don't want this use the "exec" 5230 shell command. 5231 5232 On Unix $PATH is used to search for the executable only when 5233 the command does not contain a slash. 5234 5235 The job will use the same terminal as Vim. If it reads from 5236 stdin the job and Vim will be fighting over input, that 5237 doesn't work. Redirect stdin and stdout to avoid problems: > 5238 let job = job_start(['sh', '-c', "myserver </dev/null >/dev/null"]) 5239< 5240 The returned Job object can be used to get the status with 5241 |job_status()| and stop the job with |job_stop()|. 5242 5243 {options} must be a Dictionary. It can contain many optional 5244 items, see |job-options|. 5245 5246 {only available when compiled with the |+job| feature} 5247 5248job_status({job}) *job_status()* *E916* 5249 Returns a String with the status of {job}: 5250 "run" job is running 5251 "fail" job failed to start 5252 "dead" job died or was stopped after running 5253 5254 On Unix a non-existing command results in "dead" instead of 5255 "fail", because a fork happens before the failure can be 5256 detected. 5257 5258 If an exit callback was set with the "exit_cb" option and the 5259 job is now detected to be "dead" the callback will be invoked. 5260 5261 For more information see |job_info()|. 5262 5263 {only available when compiled with the |+job| feature} 5264 5265job_stop({job} [, {how}]) *job_stop()* 5266 Stop the {job}. This can also be used to signal the job. 5267 5268 When {how} is omitted or is "term" the job will be terminated. 5269 For Unix SIGTERM is sent. On MS-Windows the job will be 5270 terminated forcedly (there is no "gentle" way). 5271 This goes to the process group, thus children may also be 5272 affected. 5273 5274 Effect for Unix: 5275 "term" SIGTERM (default) 5276 "hup" SIGHUP 5277 "quit" SIGQUIT 5278 "int" SIGINT 5279 "kill" SIGKILL (strongest way to stop) 5280 number signal with that number 5281 5282 Effect for MS-Windows: 5283 "term" terminate process forcedly (default) 5284 "hup" CTRL_BREAK 5285 "quit" CTRL_BREAK 5286 "int" CTRL_C 5287 "kill" terminate process forcedly 5288 Others CTRL_BREAK 5289 5290 On Unix the signal is sent to the process group. This means 5291 that when the job is "sh -c command" it affects both the shell 5292 and the command. 5293 5294 The result is a Number: 1 if the operation could be executed, 5295 0 if "how" is not supported on the system. 5296 Note that even when the operation was executed, whether the 5297 job was actually stopped needs to be checked with 5298 |job_status()|. 5299 5300 If the status of the job is "dead", the signal will not be 5301 sent. This is to avoid to stop the wrong job (esp. on Unix, 5302 where process numbers are recycled). 5303 5304 When using "kill" Vim will assume the job will die and close 5305 the channel. 5306 5307 {only available when compiled with the |+job| feature} 5308 5309join({list} [, {sep}]) *join()* 5310 Join the items in {list} together into one String. 5311 When {sep} is specified it is put in between the items. If 5312 {sep} is omitted a single space is used. 5313 Note that {sep} is not added at the end. You might want to 5314 add it there too: > 5315 let lines = join(mylist, "\n") . "\n" 5316< String items are used as-is. |Lists| and |Dictionaries| are 5317 converted into a string like with |string()|. 5318 The opposite function is |split()|. 5319 5320js_decode({string}) *js_decode()* 5321 This is similar to |json_decode()| with these differences: 5322 - Object key names do not have to be in quotes. 5323 - Strings can be in single quotes. 5324 - Empty items in an array (between two commas) are allowed and 5325 result in v:none items. 5326 5327js_encode({expr}) *js_encode()* 5328 This is similar to |json_encode()| with these differences: 5329 - Object key names are not in quotes. 5330 - v:none items in an array result in an empty item between 5331 commas. 5332 For example, the Vim object: 5333 [1,v:none,{"one":1},v:none] ~ 5334 Will be encoded as: 5335 [1,,{one:1},,] ~ 5336 While json_encode() would produce: 5337 [1,null,{"one":1},null] ~ 5338 This encoding is valid for JavaScript. It is more efficient 5339 than JSON, especially when using an array with optional items. 5340 5341 5342json_decode({string}) *json_decode()* 5343 This parses a JSON formatted string and returns the equivalent 5344 in Vim values. See |json_encode()| for the relation between 5345 JSON and Vim values. 5346 The decoding is permissive: 5347 - A trailing comma in an array and object is ignored, e.g. 5348 "[1, 2, ]" is the same as "[1, 2]". 5349 - More floating point numbers are recognized, e.g. "1." for 5350 "1.0", or "001.2" for "1.2". Special floating point values 5351 "Infinity" and "NaN" (capitalization ignored) are accepted. 5352 - Leading zeroes in integer numbers are ignored, e.g. "012" 5353 for "12" or "-012" for "-12". 5354 - Capitalization is ignored in literal names null, true or 5355 false, e.g. "NULL" for "null", "True" for "true". 5356 - Control characters U+0000 through U+001F which are not 5357 escaped in strings are accepted, e.g. " " (tab 5358 character in string) for "\t". 5359 - Backslash in an invalid 2-character sequence escape is 5360 ignored, e.g. "\a" is decoded as "a". 5361 - A correct surrogate pair in JSON strings should normally be 5362 a 12 character sequence such as "\uD834\uDD1E", but 5363 json_decode() silently accepts truncated surrogate pairs 5364 such as "\uD834" or "\uD834\u" 5365 *E938* 5366 A duplicate key in an object, valid in rfc7159, is not 5367 accepted by json_decode() as the result must be a valid Vim 5368 type, e.g. this fails: {"a":"b", "a":"c"} 5369 5370 5371json_encode({expr}) *json_encode()* 5372 Encode {expr} as JSON and return this as a string. 5373 The encoding is specified in: 5374 https://tools.ietf.org/html/rfc7159.html 5375 Vim values are converted as follows: 5376 Number decimal number 5377 Float floating point number 5378 Float nan "NaN" 5379 Float inf "Infinity" 5380 String in double quotes (possibly null) 5381 Funcref not possible, error 5382 List as an array (possibly null); when 5383 used recursively: [] 5384 Dict as an object (possibly null); when 5385 used recursively: {} 5386 v:false "false" 5387 v:true "true" 5388 v:none "null" 5389 v:null "null" 5390 Note that NaN and Infinity are passed on as values. This is 5391 missing in the JSON standard, but several implementations do 5392 allow it. If not then you will get an error. 5393 5394keys({dict}) *keys()* 5395 Return a |List| with all the keys of {dict}. The |List| is in 5396 arbitrary order. 5397 5398 *len()* *E701* 5399len({expr}) The result is a Number, which is the length of the argument. 5400 When {expr} is a String or a Number the length in bytes is 5401 used, as with |strlen()|. 5402 When {expr} is a |List| the number of items in the |List| is 5403 returned. 5404 When {expr} is a |Dictionary| the number of entries in the 5405 |Dictionary| is returned. 5406 Otherwise an error is given. 5407 5408 *libcall()* *E364* *E368* 5409libcall({libname}, {funcname}, {argument}) 5410 Call function {funcname} in the run-time library {libname} 5411 with single argument {argument}. 5412 This is useful to call functions in a library that you 5413 especially made to be used with Vim. Since only one argument 5414 is possible, calling standard library functions is rather 5415 limited. 5416 The result is the String returned by the function. If the 5417 function returns NULL, this will appear as an empty string "" 5418 to Vim. 5419 If the function returns a number, use libcallnr()! 5420 If {argument} is a number, it is passed to the function as an 5421 int; if {argument} is a string, it is passed as a 5422 null-terminated string. 5423 This function will fail in |restricted-mode|. 5424 5425 libcall() allows you to write your own 'plug-in' extensions to 5426 Vim without having to recompile the program. It is NOT a 5427 means to call system functions! If you try to do so Vim will 5428 very probably crash. 5429 5430 For Win32, the functions you write must be placed in a DLL 5431 and use the normal C calling convention (NOT Pascal which is 5432 used in Windows System DLLs). The function must take exactly 5433 one parameter, either a character pointer or a long integer, 5434 and must return a character pointer or NULL. The character 5435 pointer returned must point to memory that will remain valid 5436 after the function has returned (e.g. in static data in the 5437 DLL). If it points to allocated memory, that memory will 5438 leak away. Using a static buffer in the function should work, 5439 it's then freed when the DLL is unloaded. 5440 5441 WARNING: If the function returns a non-valid pointer, Vim may 5442 crash! This also happens if the function returns a number, 5443 because Vim thinks it's a pointer. 5444 For Win32 systems, {libname} should be the filename of the DLL 5445 without the ".DLL" suffix. A full path is only required if 5446 the DLL is not in the usual places. 5447 For Unix: When compiling your own plugins, remember that the 5448 object code must be compiled as position-independent ('PIC'). 5449 {only in Win32 and some Unix versions, when the |+libcall| 5450 feature is present} 5451 Examples: > 5452 :echo libcall("libc.so", "getenv", "HOME") 5453< 5454 *libcallnr()* 5455libcallnr({libname}, {funcname}, {argument}) 5456 Just like |libcall()|, but used for a function that returns an 5457 int instead of a string. 5458 {only in Win32 on some Unix versions, when the |+libcall| 5459 feature is present} 5460 Examples: > 5461 :echo libcallnr("/usr/lib/libc.so", "getpid", "") 5462 :call libcallnr("libc.so", "printf", "Hello World!\n") 5463 :call libcallnr("libc.so", "sleep", 10) 5464< 5465 *line()* 5466line({expr}) The result is a Number, which is the line number of the file 5467 position given with {expr}. The accepted positions are: 5468 . the cursor position 5469 $ the last line in the current buffer 5470 'x position of mark x (if the mark is not set, 0 is 5471 returned) 5472 w0 first line visible in current window (one if the 5473 display isn't updated, e.g. in silent Ex mode) 5474 w$ last line visible in current window (this is one 5475 less than "w0" if no lines are visible) 5476 v In Visual mode: the start of the Visual area (the 5477 cursor is the end). When not in Visual mode 5478 returns the cursor position. Differs from |'<| in 5479 that it's updated right away. 5480 Note that a mark in another file can be used. The line number 5481 then applies to another buffer. 5482 To get the column number use |col()|. To get both use 5483 |getpos()|. 5484 Examples: > 5485 line(".") line number of the cursor 5486 line("'t") line number of mark t 5487 line("'" . marker) line number of mark marker 5488< *last-position-jump* 5489 This autocommand jumps to the last known position in a file 5490 just after opening it, if the '" mark is set: > 5491 :au BufReadPost * 5492 \ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit' 5493 \ | exe "normal! g`\"" 5494 \ | endif 5495 5496line2byte({lnum}) *line2byte()* 5497 Return the byte count from the start of the buffer for line 5498 {lnum}. This includes the end-of-line character, depending on 5499 the 'fileformat' option for the current buffer. The first 5500 line returns 1. 'encoding' matters, 'fileencoding' is ignored. 5501 This can also be used to get the byte count for the line just 5502 below the last line: > 5503 line2byte(line("$") + 1) 5504< This is the buffer size plus one. If 'fileencoding' is empty 5505 it is the file size plus one. 5506 When {lnum} is invalid, or the |+byte_offset| feature has been 5507 disabled at compile time, -1 is returned. 5508 Also see |byte2line()|, |go| and |:goto|. 5509 5510lispindent({lnum}) *lispindent()* 5511 Get the amount of indent for line {lnum} according the lisp 5512 indenting rules, as with 'lisp'. 5513 The indent is counted in spaces, the value of 'tabstop' is 5514 relevant. {lnum} is used just like in |getline()|. 5515 When {lnum} is invalid or Vim was not compiled the 5516 |+lispindent| feature, -1 is returned. 5517 5518localtime() *localtime()* 5519 Return the current time, measured as seconds since 1st Jan 5520 1970. See also |strftime()| and |getftime()|. 5521 5522 5523log({expr}) *log()* 5524 Return the natural logarithm (base e) of {expr} as a |Float|. 5525 {expr} must evaluate to a |Float| or a |Number| in the range 5526 (0, inf]. 5527 Examples: > 5528 :echo log(10) 5529< 2.302585 > 5530 :echo log(exp(5)) 5531< 5.0 5532 {only available when compiled with the |+float| feature} 5533 5534 5535log10({expr}) *log10()* 5536 Return the logarithm of Float {expr} to base 10 as a |Float|. 5537 {expr} must evaluate to a |Float| or a |Number|. 5538 Examples: > 5539 :echo log10(1000) 5540< 3.0 > 5541 :echo log10(0.01) 5542< -2.0 5543 {only available when compiled with the |+float| feature} 5544 5545luaeval({expr}[, {expr}]) *luaeval()* 5546 Evaluate Lua expression {expr} and return its result converted 5547 to Vim data structures. Second {expr} may hold additional 5548 argument accessible as _A inside first {expr}. 5549 Strings are returned as they are. 5550 Boolean objects are converted to numbers. 5551 Numbers are converted to |Float| values if vim was compiled 5552 with |+float| and to numbers otherwise. 5553 Dictionaries and lists obtained by vim.eval() are returned 5554 as-is. 5555 Other objects are returned as zero without any errors. 5556 See |lua-luaeval| for more details. 5557 {only available when compiled with the |+lua| feature} 5558 5559map({expr1}, {expr2}) *map()* 5560 {expr1} must be a |List| or a |Dictionary|. 5561 Replace each item in {expr1} with the result of evaluating 5562 {expr2}. {expr2} must be a |string| or |Funcref|. 5563 5564 If {expr2} is a |string|, inside {expr2} |v:val| has the value 5565 of the current item. For a |Dictionary| |v:key| has the key 5566 of the current item and for a |List| |v:key| has the index of 5567 the current item. 5568 Example: > 5569 :call map(mylist, '"> " . v:val . " <"') 5570< This puts "> " before and " <" after each item in "mylist". 5571 5572 Note that {expr2} is the result of an expression and is then 5573 used as an expression again. Often it is good to use a 5574 |literal-string| to avoid having to double backslashes. You 5575 still have to double ' quotes 5576 5577 If {expr2} is a |Funcref| it is called with two arguments: 5578 1. The key or the index of the current item. 5579 2. the value of the current item. 5580 The function must return the new value of the item. Example 5581 that changes each value by "key-value": > 5582 func KeyValue(key, val) 5583 return a:key . '-' . a:val 5584 endfunc 5585 call map(myDict, function('KeyValue')) 5586< It is shorter when using a |lambda|: > 5587 call map(myDict, {key, val -> key . '-' . val}) 5588< If you do not use "val" you can leave it out: > 5589 call map(myDict, {key -> 'item: ' . key}) 5590< 5591 The operation is done in-place. If you want a |List| or 5592 |Dictionary| to remain unmodified make a copy first: > 5593 :let tlist = map(copy(mylist), ' v:val . "\t"') 5594 5595< Returns {expr1}, the |List| or |Dictionary| that was filtered. 5596 When an error is encountered while evaluating {expr2} no 5597 further items in {expr1} are processed. When {expr2} is a 5598 Funcref errors inside a function are ignored, unless it was 5599 defined with the "abort" flag. 5600 5601 5602maparg({name}[, {mode} [, {abbr} [, {dict}]]]) *maparg()* 5603 When {dict} is omitted or zero: Return the rhs of mapping 5604 {name} in mode {mode}. The returned String has special 5605 characters translated like in the output of the ":map" command 5606 listing. 5607 5608 When there is no mapping for {name}, an empty String is 5609 returned. 5610 5611 The {name} can have special key names, like in the ":map" 5612 command. 5613 5614 {mode} can be one of these strings: 5615 "n" Normal 5616 "v" Visual (including Select) 5617 "o" Operator-pending 5618 "i" Insert 5619 "c" Cmd-line 5620 "s" Select 5621 "x" Visual 5622 "l" langmap |language-mapping| 5623 "" Normal, Visual and Operator-pending 5624 When {mode} is omitted, the modes for "" are used. 5625 5626 When {abbr} is there and it is |TRUE| use abbreviations 5627 instead of mappings. 5628 5629 When {dict} is there and it is |TRUE| return a dictionary 5630 containing all the information of the mapping with the 5631 following items: 5632 "lhs" The {lhs} of the mapping. 5633 "rhs" The {rhs} of the mapping as typed. 5634 "silent" 1 for a |:map-silent| mapping, else 0. 5635 "noremap" 1 if the {rhs} of the mapping is not remappable. 5636 "expr" 1 for an expression mapping (|:map-<expr>|). 5637 "buffer" 1 for a buffer local mapping (|:map-local|). 5638 "mode" Modes for which the mapping is defined. In 5639 addition to the modes mentioned above, these 5640 characters will be used: 5641 " " Normal, Visual and Operator-pending 5642 "!" Insert and Commandline mode 5643 (|mapmode-ic|) 5644 "sid" The script local ID, used for <sid> mappings 5645 (|<SID>|). 5646 "nowait" Do not wait for other, longer mappings. 5647 (|:map-<nowait>|). 5648 5649 The mappings local to the current buffer are checked first, 5650 then the global mappings. 5651 This function can be used to map a key even when it's already 5652 mapped, and have it do the original mapping too. Sketch: > 5653 exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n') 5654 5655 5656mapcheck({name}[, {mode} [, {abbr}]]) *mapcheck()* 5657 Check if there is a mapping that matches with {name} in mode 5658 {mode}. See |maparg()| for {mode} and special names in 5659 {name}. 5660 When {abbr} is there and it is |TRUE| use abbreviations 5661 instead of mappings. 5662 A match happens with a mapping that starts with {name} and 5663 with a mapping which is equal to the start of {name}. 5664 5665 matches mapping "a" "ab" "abc" ~ 5666 mapcheck("a") yes yes yes 5667 mapcheck("abc") yes yes yes 5668 mapcheck("ax") yes no no 5669 mapcheck("b") no no no 5670 5671 The difference with maparg() is that mapcheck() finds a 5672 mapping that matches with {name}, while maparg() only finds a 5673 mapping for {name} exactly. 5674 When there is no mapping that starts with {name}, an empty 5675 String is returned. If there is one, the rhs of that mapping 5676 is returned. If there are several mappings that start with 5677 {name}, the rhs of one of them is returned. 5678 The mappings local to the current buffer are checked first, 5679 then the global mappings. 5680 This function can be used to check if a mapping can be added 5681 without being ambiguous. Example: > 5682 :if mapcheck("_vv") == "" 5683 : map _vv :set guifont=7x13<CR> 5684 :endif 5685< This avoids adding the "_vv" mapping when there already is a 5686 mapping for "_v" or for "_vvv". 5687 5688match({expr}, {pat}[, {start}[, {count}]]) *match()* 5689 When {expr} is a |List| then this returns the index of the 5690 first item where {pat} matches. Each item is used as a 5691 String, |Lists| and |Dictionaries| are used as echoed. 5692 Otherwise, {expr} is used as a String. The result is a 5693 Number, which gives the index (byte offset) in {expr} where 5694 {pat} matches. 5695 A match at the first character or |List| item returns zero. 5696 If there is no match -1 is returned. 5697 For getting submatches see |matchlist()|. 5698 Example: > 5699 :echo match("testing", "ing") " results in 4 5700 :echo match([1, 'x'], '\a') " results in 1 5701< See |string-match| for how {pat} is used. 5702 *strpbrk()* 5703 Vim doesn't have a strpbrk() function. But you can do: > 5704 :let sepidx = match(line, '[.,;: \t]') 5705< *strcasestr()* 5706 Vim doesn't have a strcasestr() function. But you can add 5707 "\c" to the pattern to ignore case: > 5708 :let idx = match(haystack, '\cneedle') 5709< 5710 If {start} is given, the search starts from byte index 5711 {start} in a String or item {start} in a |List|. 5712 The result, however, is still the index counted from the 5713 first character/item. Example: > 5714 :echo match("testing", "ing", 2) 5715< result is again "4". > 5716 :echo match("testing", "ing", 4) 5717< result is again "4". > 5718 :echo match("testing", "t", 2) 5719< result is "3". 5720 For a String, if {start} > 0 then it is like the string starts 5721 {start} bytes later, thus "^" will match at {start}. Except 5722 when {count} is given, then it's like matches before the 5723 {start} byte are ignored (this is a bit complicated to keep it 5724 backwards compatible). 5725 For a String, if {start} < 0, it will be set to 0. For a list 5726 the index is counted from the end. 5727 If {start} is out of range ({start} > strlen({expr}) for a 5728 String or {start} > len({expr}) for a |List|) -1 is returned. 5729 5730 When {count} is given use the {count}'th match. When a match 5731 is found in a String the search for the next one starts one 5732 character further. Thus this example results in 1: > 5733 echo match("testing", "..", 0, 2) 5734< In a |List| the search continues in the next item. 5735 Note that when {count} is added the way {start} works changes, 5736 see above. 5737 5738 See |pattern| for the patterns that are accepted. 5739 The 'ignorecase' option is used to set the ignore-caseness of 5740 the pattern. 'smartcase' is NOT used. The matching is always 5741 done like 'magic' is set and 'cpoptions' is empty. 5742 5743 *matchadd()* *E798* *E799* *E801* 5744matchadd({group}, {pattern}[, {priority}[, {id}[, {dict}]]]) 5745 Defines a pattern to be highlighted in the current window (a 5746 "match"). It will be highlighted with {group}. Returns an 5747 identification number (ID), which can be used to delete the 5748 match using |matchdelete()|. 5749 Matching is case sensitive and magic, unless case sensitivity 5750 or magicness are explicitly overridden in {pattern}. The 5751 'magic', 'smartcase' and 'ignorecase' options are not used. 5752 The "Conceal" value is special, it causes the match to be 5753 concealed. 5754 5755 The optional {priority} argument assigns a priority to the 5756 match. A match with a high priority will have its 5757 highlighting overrule that of a match with a lower priority. 5758 A priority is specified as an integer (negative numbers are no 5759 exception). If the {priority} argument is not specified, the 5760 default priority is 10. The priority of 'hlsearch' is zero, 5761 hence all matches with a priority greater than zero will 5762 overrule it. Syntax highlighting (see 'syntax') is a separate 5763 mechanism, and regardless of the chosen priority a match will 5764 always overrule syntax highlighting. 5765 5766 The optional {id} argument allows the request for a specific 5767 match ID. If a specified ID is already taken, an error 5768 message will appear and the match will not be added. An ID 5769 is specified as a positive integer (zero excluded). IDs 1, 2 5770 and 3 are reserved for |:match|, |:2match| and |:3match|, 5771 respectively. If the {id} argument is not specified or -1, 5772 |matchadd()| automatically chooses a free ID. 5773 5774 The optional {dict} argument allows for further custom 5775 values. Currently this is used to specify a match specific 5776 conceal character that will be shown for |hl-Conceal| 5777 highlighted matches. The dict can have the following members: 5778 5779 conceal Special character to show instead of the 5780 match (only for |hl-Conceal| highlighted 5781 matches, see |:syn-cchar|) 5782 5783 The number of matches is not limited, as it is the case with 5784 the |:match| commands. 5785 5786 Example: > 5787 :highlight MyGroup ctermbg=green guibg=green 5788 :let m = matchadd("MyGroup", "TODO") 5789< Deletion of the pattern: > 5790 :call matchdelete(m) 5791 5792< A list of matches defined by |matchadd()| and |:match| are 5793 available from |getmatches()|. All matches can be deleted in 5794 one operation by |clearmatches()|. 5795 5796 *matchaddpos()* 5797matchaddpos({group}, {pos}[, {priority}[, {id}[, {dict}]]]) 5798 Same as |matchadd()|, but requires a list of positions {pos} 5799 instead of a pattern. This command is faster than |matchadd()| 5800 because it does not require to handle regular expressions and 5801 sets buffer line boundaries to redraw screen. It is supposed 5802 to be used when fast match additions and deletions are 5803 required, for example to highlight matching parentheses. 5804 5805 The list {pos} can contain one of these items: 5806 - A number. This whole line will be highlighted. The first 5807 line has number 1. 5808 - A list with one number, e.g., [23]. The whole line with this 5809 number will be highlighted. 5810 - A list with two numbers, e.g., [23, 11]. The first number is 5811 the line number, the second one is the column number (first 5812 column is 1, the value must correspond to the byte index as 5813 |col()| would return). The character at this position will 5814 be highlighted. 5815 - A list with three numbers, e.g., [23, 11, 3]. As above, but 5816 the third number gives the length of the highlight in bytes. 5817 5818 The maximum number of positions is 8. 5819 5820 Example: > 5821 :highlight MyGroup ctermbg=green guibg=green 5822 :let m = matchaddpos("MyGroup", [[23, 24], 34]) 5823< Deletion of the pattern: > 5824 :call matchdelete(m) 5825 5826< Matches added by |matchaddpos()| are returned by 5827 |getmatches()| with an entry "pos1", "pos2", etc., with the 5828 value a list like the {pos} item. 5829 These matches cannot be set via |setmatches()|, however they 5830 can still be deleted by |clearmatches()|. 5831 5832matcharg({nr}) *matcharg()* 5833 Selects the {nr} match item, as set with a |:match|, 5834 |:2match| or |:3match| command. 5835 Return a |List| with two elements: 5836 The name of the highlight group used 5837 The pattern used. 5838 When {nr} is not 1, 2 or 3 returns an empty |List|. 5839 When there is no match item set returns ['', '']. 5840 This is useful to save and restore a |:match|. 5841 Highlighting matches using the |:match| commands are limited 5842 to three matches. |matchadd()| does not have this limitation. 5843 5844matchdelete({id}) *matchdelete()* *E802* *E803* 5845 Deletes a match with ID {id} previously defined by |matchadd()| 5846 or one of the |:match| commands. Returns 0 if successful, 5847 otherwise -1. See example for |matchadd()|. All matches can 5848 be deleted in one operation by |clearmatches()|. 5849 5850matchend({expr}, {pat}[, {start}[, {count}]]) *matchend()* 5851 Same as |match()|, but return the index of first character 5852 after the match. Example: > 5853 :echo matchend("testing", "ing") 5854< results in "7". 5855 *strspn()* *strcspn()* 5856 Vim doesn't have a strspn() or strcspn() function, but you can 5857 do it with matchend(): > 5858 :let span = matchend(line, '[a-zA-Z]') 5859 :let span = matchend(line, '[^a-zA-Z]') 5860< Except that -1 is returned when there are no matches. 5861 5862 The {start}, if given, has the same meaning as for |match()|. > 5863 :echo matchend("testing", "ing", 2) 5864< results in "7". > 5865 :echo matchend("testing", "ing", 5) 5866< result is "-1". 5867 When {expr} is a |List| the result is equal to |match()|. 5868 5869matchlist({expr}, {pat}[, {start}[, {count}]]) *matchlist()* 5870 Same as |match()|, but return a |List|. The first item in the 5871 list is the matched string, same as what matchstr() would 5872 return. Following items are submatches, like "\1", "\2", etc. 5873 in |:substitute|. When an optional submatch didn't match an 5874 empty string is used. Example: > 5875 echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)') 5876< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', ''] 5877 When there is no match an empty list is returned. 5878 5879matchstr({expr}, {pat}[, {start}[, {count}]]) *matchstr()* 5880 Same as |match()|, but return the matched string. Example: > 5881 :echo matchstr("testing", "ing") 5882< results in "ing". 5883 When there is no match "" is returned. 5884 The {start}, if given, has the same meaning as for |match()|. > 5885 :echo matchstr("testing", "ing", 2) 5886< results in "ing". > 5887 :echo matchstr("testing", "ing", 5) 5888< result is "". 5889 When {expr} is a |List| then the matching item is returned. 5890 The type isn't changed, it's not necessarily a String. 5891 5892matchstrpos({expr}, {pat}[, {start}[, {count}]]) *matchstrpos()* 5893 Same as |matchstr()|, but return the matched string, the start 5894 position and the end position of the match. Example: > 5895 :echo matchstrpos("testing", "ing") 5896< results in ["ing", 4, 7]. 5897 When there is no match ["", -1, -1] is returned. 5898 The {start}, if given, has the same meaning as for |match()|. > 5899 :echo matchstrpos("testing", "ing", 2) 5900< results in ["ing", 4, 7]. > 5901 :echo matchstrpos("testing", "ing", 5) 5902< result is ["", -1, -1]. 5903 When {expr} is a |List| then the matching item, the index 5904 of first item where {pat} matches, the start position and the 5905 end position of the match are returned. > 5906 :echo matchstrpos([1, '__x'], '\a') 5907< result is ["x", 1, 2, 3]. 5908 The type isn't changed, it's not necessarily a String. 5909 5910 *max()* 5911max({expr}) Return the maximum value of all items in {expr}. 5912 {expr} can be a list or a dictionary. For a dictionary, 5913 it returns the maximum of all values in the dictionary. 5914 If {expr} is neither a list nor a dictionary, or one of the 5915 items in {expr} cannot be used as a Number this results in 5916 an error. An empty |List| or |Dictionary| results in zero. 5917 5918 *min()* 5919min({expr}) Return the minimum value of all items in {expr}. 5920 {expr} can be a list or a dictionary. For a dictionary, 5921 it returns the minimum of all values in the dictionary. 5922 If {expr} is neither a list nor a dictionary, or one of the 5923 items in {expr} cannot be used as a Number this results in 5924 an error. An empty |List| or |Dictionary| results in zero. 5925 5926 *mkdir()* *E739* 5927mkdir({name} [, {path} [, {prot}]]) 5928 Create directory {name}. 5929 If {path} is "p" then intermediate directories are created as 5930 necessary. Otherwise it must be "". 5931 If {prot} is given it is used to set the protection bits of 5932 the new directory. The default is 0755 (rwxr-xr-x: r/w for 5933 the user readable for others). Use 0700 to make it unreadable 5934 for others. This is only used for the last part of {name}. 5935 Thus if you create /tmp/foo/bar then /tmp/foo will be created 5936 with 0755. 5937 Example: > 5938 :call mkdir($HOME . "/tmp/foo/bar", "p", 0700) 5939< This function is not available in the |sandbox|. 5940 Not available on all systems. To check use: > 5941 :if exists("*mkdir") 5942< 5943 *mode()* 5944mode([expr]) Return a string that indicates the current mode. 5945 If [expr] is supplied and it evaluates to a non-zero Number or 5946 a non-empty String (|non-zero-arg|), then the full mode is 5947 returned, otherwise only the first letter is returned. 5948 5949 n Normal 5950 no Operator-pending 5951 v Visual by character 5952 V Visual by line 5953 CTRL-V Visual blockwise 5954 s Select by character 5955 S Select by line 5956 CTRL-S Select blockwise 5957 i Insert 5958 ic Insert mode completion |compl-generic| 5959 ix Insert mode |i_CTRL-X| completion 5960 R Replace |R| 5961 Rc Replace mode completion |compl-generic| 5962 Rv Virtual Replace |gR| 5963 Rx Replace mode |i_CTRL-X| completion 5964 c Command-line editing 5965 cv Vim Ex mode |gQ| 5966 ce Normal Ex mode |Q| 5967 r Hit-enter prompt 5968 rm The -- more -- prompt 5969 r? A |:confirm| query of some sort 5970 ! Shell or external command is executing 5971 This is useful in the 'statusline' option or when used 5972 with |remote_expr()| In most other places it always returns 5973 "c" or "n". 5974 Also see |visualmode()|. 5975 5976mzeval({expr}) *mzeval()* 5977 Evaluate MzScheme expression {expr} and return its result 5978 converted to Vim data structures. 5979 Numbers and strings are returned as they are. 5980 Pairs (including lists and improper lists) and vectors are 5981 returned as Vim |Lists|. 5982 Hash tables are represented as Vim |Dictionary| type with keys 5983 converted to strings. 5984 All other types are converted to string with display function. 5985 Examples: > 5986 :mz (define l (list 1 2 3)) 5987 :mz (define h (make-hash)) (hash-set! h "list" l) 5988 :echo mzeval("l") 5989 :echo mzeval("h") 5990< 5991 {only available when compiled with the |+mzscheme| feature} 5992 5993nextnonblank({lnum}) *nextnonblank()* 5994 Return the line number of the first line at or below {lnum} 5995 that is not blank. Example: > 5996 if getline(nextnonblank(1)) =~ "Java" 5997< When {lnum} is invalid or there is no non-blank line at or 5998 below it, zero is returned. 5999 See also |prevnonblank()|. 6000 6001nr2char({expr}[, {utf8}]) *nr2char()* 6002 Return a string with a single character, which has the number 6003 value {expr}. Examples: > 6004 nr2char(64) returns "@" 6005 nr2char(32) returns " " 6006< When {utf8} is omitted or zero, the current 'encoding' is used. 6007 Example for "utf-8": > 6008 nr2char(300) returns I with bow character 6009< With {utf8} set to 1, always return utf-8 characters. 6010 Note that a NUL character in the file is specified with 6011 nr2char(10), because NULs are represented with newline 6012 characters. nr2char(0) is a real NUL and terminates the 6013 string, thus results in an empty string. 6014 6015or({expr}, {expr}) *or()* 6016 Bitwise OR on the two arguments. The arguments are converted 6017 to a number. A List, Dict or Float argument causes an error. 6018 Example: > 6019 :let bits = or(bits, 0x80) 6020 6021 6022pathshorten({expr}) *pathshorten()* 6023 Shorten directory names in the path {expr} and return the 6024 result. The tail, the file name, is kept as-is. The other 6025 components in the path are reduced to single letters. Leading 6026 '~' and '.' characters are kept. Example: > 6027 :echo pathshorten('~/.vim/autoload/myfile.vim') 6028< ~/.v/a/myfile.vim ~ 6029 It doesn't matter if the path exists or not. 6030 6031perleval({expr}) *perleval()* 6032 Evaluate Perl expression {expr} in scalar context and return 6033 its result converted to Vim data structures. If value can't be 6034 converted, it is returned as a string Perl representation. 6035 Note: If you want an array or hash, {expr} must return a 6036 reference to it. 6037 Example: > 6038 :echo perleval('[1 .. 4]') 6039< [1, 2, 3, 4] 6040 {only available when compiled with the |+perl| feature} 6041 6042pow({x}, {y}) *pow()* 6043 Return the power of {x} to the exponent {y} as a |Float|. 6044 {x} and {y} must evaluate to a |Float| or a |Number|. 6045 Examples: > 6046 :echo pow(3, 3) 6047< 27.0 > 6048 :echo pow(2, 16) 6049< 65536.0 > 6050 :echo pow(32, 0.20) 6051< 2.0 6052 {only available when compiled with the |+float| feature} 6053 6054prevnonblank({lnum}) *prevnonblank()* 6055 Return the line number of the first line at or above {lnum} 6056 that is not blank. Example: > 6057 let ind = indent(prevnonblank(v:lnum - 1)) 6058< When {lnum} is invalid or there is no non-blank line at or 6059 above it, zero is returned. 6060 Also see |nextnonblank()|. 6061 6062 6063printf({fmt}, {expr1} ...) *printf()* 6064 Return a String with {fmt}, where "%" items are replaced by 6065 the formatted form of their respective arguments. Example: > 6066 printf("%4d: E%d %.30s", lnum, errno, msg) 6067< May result in: 6068 " 99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~ 6069 6070 Often used items are: 6071 %s string 6072 %6S string right-aligned in 6 display cells 6073 %6s string right-aligned in 6 bytes 6074 %.9s string truncated to 9 bytes 6075 %c single byte 6076 %d decimal number 6077 %5d decimal number padded with spaces to 5 characters 6078 %x hex number 6079 %04x hex number padded with zeros to at least 4 characters 6080 %X hex number using upper case letters 6081 %o octal number 6082 %08b binary number padded with zeros to at least 8 chars 6083 %f floating point number as 12.23, inf, -inf or nan 6084 %F floating point number as 12.23, INF, -INF or NAN 6085 %e floating point number as 1.23e3, inf, -inf or nan 6086 %E floating point number as 1.23E3, INF, -INF or NAN 6087 %g floating point number, as %f or %e depending on value 6088 %G floating point number, as %F or %E depending on value 6089 %% the % character itself 6090 6091 Conversion specifications start with '%' and end with the 6092 conversion type. All other characters are copied unchanged to 6093 the result. 6094 6095 The "%" starts a conversion specification. The following 6096 arguments appear in sequence: 6097 6098 % [flags] [field-width] [.precision] type 6099 6100 flags 6101 Zero or more of the following flags: 6102 6103 # The value should be converted to an "alternate 6104 form". For c, d, and s conversions, this option 6105 has no effect. For o conversions, the precision 6106 of the number is increased to force the first 6107 character of the output string to a zero (except 6108 if a zero value is printed with an explicit 6109 precision of zero). 6110 For b and B conversions, a non-zero result has 6111 the string "0b" (or "0B" for B conversions) 6112 prepended to it. 6113 For x and X conversions, a non-zero result has 6114 the string "0x" (or "0X" for X conversions) 6115 prepended to it. 6116 6117 0 (zero) Zero padding. For all conversions the converted 6118 value is padded on the left with zeros rather 6119 than blanks. If a precision is given with a 6120 numeric conversion (d, b, B, o, x, and X), the 0 6121 flag is ignored. 6122 6123 - A negative field width flag; the converted value 6124 is to be left adjusted on the field boundary. 6125 The converted value is padded on the right with 6126 blanks, rather than on the left with blanks or 6127 zeros. A - overrides a 0 if both are given. 6128 6129 ' ' (space) A blank should be left before a positive 6130 number produced by a signed conversion (d). 6131 6132 + A sign must always be placed before a number 6133 produced by a signed conversion. A + overrides 6134 a space if both are used. 6135 6136 field-width 6137 An optional decimal digit string specifying a minimum 6138 field width. If the converted value has fewer bytes 6139 than the field width, it will be padded with spaces on 6140 the left (or right, if the left-adjustment flag has 6141 been given) to fill out the field width. 6142 6143 .precision 6144 An optional precision, in the form of a period '.' 6145 followed by an optional digit string. If the digit 6146 string is omitted, the precision is taken as zero. 6147 This gives the minimum number of digits to appear for 6148 d, o, x, and X conversions, or the maximum number of 6149 bytes to be printed from a string for s conversions. 6150 For floating point it is the number of digits after 6151 the decimal point. 6152 6153 type 6154 A character that specifies the type of conversion to 6155 be applied, see below. 6156 6157 A field width or precision, or both, may be indicated by an 6158 asterisk '*' instead of a digit string. In this case, a 6159 Number argument supplies the field width or precision. A 6160 negative field width is treated as a left adjustment flag 6161 followed by a positive field width; a negative precision is 6162 treated as though it were missing. Example: > 6163 :echo printf("%d: %.*s", nr, width, line) 6164< This limits the length of the text used from "line" to 6165 "width" bytes. 6166 6167 The conversion specifiers and their meanings are: 6168 6169 *printf-d* *printf-b* *printf-B* *printf-o* 6170 *printf-x* *printf-X* 6171 dbBoxX The Number argument is converted to signed decimal 6172 (d), unsigned binary (b and B), unsigned octal (o), or 6173 unsigned hexadecimal (x and X) notation. The letters 6174 "abcdef" are used for x conversions; the letters 6175 "ABCDEF" are used for X conversions. 6176 The precision, if any, gives the minimum number of 6177 digits that must appear; if the converted value 6178 requires fewer digits, it is padded on the left with 6179 zeros. 6180 In no case does a non-existent or small field width 6181 cause truncation of a numeric field; if the result of 6182 a conversion is wider than the field width, the field 6183 is expanded to contain the conversion result. 6184 The 'h' modifier indicates the argument is 16 bits. 6185 The 'l' modifier indicates the argument is 32 bits. 6186 The 'L' modifier indicates the argument is 64 bits. 6187 Generally, these modifiers are not useful. They are 6188 ignored when type is known from the argument. 6189 6190 i alias for d 6191 D alias for ld 6192 U alias for lu 6193 O alias for lo 6194 6195 *printf-c* 6196 c The Number argument is converted to a byte, and the 6197 resulting character is written. 6198 6199 *printf-s* 6200 s The text of the String argument is used. If a 6201 precision is specified, no more bytes than the number 6202 specified are used. 6203 If the argument is not a String type, it is 6204 automatically converted to text with the same format 6205 as ":echo". 6206 *printf-S* 6207 S The text of the String argument is used. If a 6208 precision is specified, no more display cells than the 6209 number specified are used. Without the |+multi_byte| 6210 feature works just like 's'. 6211 6212 *printf-f* *E807* 6213 f F The Float argument is converted into a string of the 6214 form 123.456. The precision specifies the number of 6215 digits after the decimal point. When the precision is 6216 zero the decimal point is omitted. When the precision 6217 is not specified 6 is used. A really big number 6218 (out of range or dividing by zero) results in "inf" 6219 or "-inf" with %f (INF or -INF with %F). 6220 "0.0 / 0.0" results in "nan" with %f (NAN with %F). 6221 Example: > 6222 echo printf("%.2f", 12.115) 6223< 12.12 6224 Note that roundoff depends on the system libraries. 6225 Use |round()| when in doubt. 6226 6227 *printf-e* *printf-E* 6228 e E The Float argument is converted into a string of the 6229 form 1.234e+03 or 1.234E+03 when using 'E'. The 6230 precision specifies the number of digits after the 6231 decimal point, like with 'f'. 6232 6233 *printf-g* *printf-G* 6234 g G The Float argument is converted like with 'f' if the 6235 value is between 0.001 (inclusive) and 10000000.0 6236 (exclusive). Otherwise 'e' is used for 'g' and 'E' 6237 for 'G'. When no precision is specified superfluous 6238 zeroes and '+' signs are removed, except for the zero 6239 immediately after the decimal point. Thus 10000000.0 6240 results in 1.0e7. 6241 6242 *printf-%* 6243 % A '%' is written. No argument is converted. The 6244 complete conversion specification is "%%". 6245 6246 When a Number argument is expected a String argument is also 6247 accepted and automatically converted. 6248 When a Float or String argument is expected a Number argument 6249 is also accepted and automatically converted. 6250 Any other argument type results in an error message. 6251 6252 *E766* *E767* 6253 The number of {exprN} arguments must exactly match the number 6254 of "%" items. If there are not sufficient or too many 6255 arguments an error is given. Up to 18 arguments can be used. 6256 6257 6258pumvisible() *pumvisible()* 6259 Returns non-zero when the popup menu is visible, zero 6260 otherwise. See |ins-completion-menu|. 6261 This can be used to avoid some things that would remove the 6262 popup menu. 6263 6264py3eval({expr}) *py3eval()* 6265 Evaluate Python expression {expr} and return its result 6266 converted to Vim data structures. 6267 Numbers and strings are returned as they are (strings are 6268 copied though, Unicode strings are additionally converted to 6269 'encoding'). 6270 Lists are represented as Vim |List| type. 6271 Dictionaries are represented as Vim |Dictionary| type with 6272 keys converted to strings. 6273 {only available when compiled with the |+python3| feature} 6274 6275 *E858* *E859* 6276pyeval({expr}) *pyeval()* 6277 Evaluate Python expression {expr} and return its result 6278 converted to Vim data structures. 6279 Numbers and strings are returned as they are (strings are 6280 copied though). 6281 Lists are represented as Vim |List| type. 6282 Dictionaries are represented as Vim |Dictionary| type, 6283 non-string keys result in error. 6284 {only available when compiled with the |+python| feature} 6285 6286pyxeval({expr}) *pyxeval()* 6287 Evaluate Python expression {expr} and return its result 6288 converted to Vim data structures. 6289 Uses Python 2 or 3, see |python_x| and 'pyxversion'. 6290 See also: |pyeval()|, |py3eval()| 6291 {only available when compiled with the |+python| or the 6292 |+python3| feature} 6293 6294 *E726* *E727* 6295range({expr} [, {max} [, {stride}]]) *range()* 6296 Returns a |List| with Numbers: 6297 - If only {expr} is specified: [0, 1, ..., {expr} - 1] 6298 - If {max} is specified: [{expr}, {expr} + 1, ..., {max}] 6299 - If {stride} is specified: [{expr}, {expr} + {stride}, ..., 6300 {max}] (increasing {expr} with {stride} each time, not 6301 producing a value past {max}). 6302 When the maximum is one before the start the result is an 6303 empty list. When the maximum is more than one before the 6304 start this is an error. 6305 Examples: > 6306 range(4) " [0, 1, 2, 3] 6307 range(2, 4) " [2, 3, 4] 6308 range(2, 9, 3) " [2, 5, 8] 6309 range(2, -2, -1) " [2, 1, 0, -1, -2] 6310 range(0) " [] 6311 range(2, 0) " error! 6312< 6313 *readfile()* 6314readfile({fname} [, {binary} [, {max}]]) 6315 Read file {fname} and return a |List|, each line of the file 6316 as an item. Lines are broken at NL characters. Macintosh 6317 files separated with CR will result in a single long line 6318 (unless a NL appears somewhere). 6319 All NUL characters are replaced with a NL character. 6320 When {binary} contains "b" binary mode is used: 6321 - When the last line ends in a NL an extra empty list item is 6322 added. 6323 - No CR characters are removed. 6324 Otherwise: 6325 - CR characters that appear before a NL are removed. 6326 - Whether the last line ends in a NL or not does not matter. 6327 - When 'encoding' is Unicode any UTF-8 byte order mark is 6328 removed from the text. 6329 When {max} is given this specifies the maximum number of lines 6330 to be read. Useful if you only want to check the first ten 6331 lines of a file: > 6332 :for line in readfile(fname, '', 10) 6333 : if line =~ 'Date' | echo line | endif 6334 :endfor 6335< When {max} is negative -{max} lines from the end of the file 6336 are returned, or as many as there are. 6337 When {max} is zero the result is an empty list. 6338 Note that without {max} the whole file is read into memory. 6339 Also note that there is no recognition of encoding. Read a 6340 file into a buffer if you need to. 6341 When the file can't be opened an error message is given and 6342 the result is an empty list. 6343 Also see |writefile()|. 6344 6345reltime([{start} [, {end}]]) *reltime()* 6346 Return an item that represents a time value. The format of 6347 the item depends on the system. It can be passed to 6348 |reltimestr()| to convert it to a string or |reltimefloat()| 6349 to convert to a Float. 6350 Without an argument it returns the current time. 6351 With one argument is returns the time passed since the time 6352 specified in the argument. 6353 With two arguments it returns the time passed between {start} 6354 and {end}. 6355 The {start} and {end} arguments must be values returned by 6356 reltime(). 6357 {only available when compiled with the |+reltime| feature} 6358 6359reltimefloat({time}) *reltimefloat()* 6360 Return a Float that represents the time value of {time}. 6361 Example: > 6362 let start = reltime() 6363 call MyFunction() 6364 let seconds = reltimefloat(reltime(start)) 6365< See the note of reltimestr() about overhead. 6366 Also see |profiling|. 6367 {only available when compiled with the |+reltime| feature} 6368 6369reltimestr({time}) *reltimestr()* 6370 Return a String that represents the time value of {time}. 6371 This is the number of seconds, a dot and the number of 6372 microseconds. Example: > 6373 let start = reltime() 6374 call MyFunction() 6375 echo reltimestr(reltime(start)) 6376< Note that overhead for the commands will be added to the time. 6377 The accuracy depends on the system. 6378 Leading spaces are used to make the string align nicely. You 6379 can use split() to remove it. > 6380 echo split(reltimestr(reltime(start)))[0] 6381< Also see |profiling|. 6382 {only available when compiled with the |+reltime| feature} 6383 6384 *remote_expr()* *E449* 6385remote_expr({server}, {string} [, {idvar} [, {timeout}]]) 6386 Send the {string} to {server}. The string is sent as an 6387 expression and the result is returned after evaluation. 6388 The result must be a String or a |List|. A |List| is turned 6389 into a String by joining the items with a line break in 6390 between (not at the end), like with join(expr, "\n"). 6391 If {idvar} is present and not empty, it is taken as the name 6392 of a variable and a {serverid} for later use with 6393 remote_read() is stored there. 6394 If {timeout} is given the read times out after this many 6395 seconds. Otherwise a timeout of 600 seconds is used. 6396 See also |clientserver| |RemoteReply|. 6397 This function is not available in the |sandbox|. 6398 {only available when compiled with the |+clientserver| feature} 6399 Note: Any errors will cause a local error message to be issued 6400 and the result will be the empty string. 6401 Examples: > 6402 :echo remote_expr("gvim", "2+2") 6403 :echo remote_expr("gvim1", "b:current_syntax") 6404< 6405 6406remote_foreground({server}) *remote_foreground()* 6407 Move the Vim server with the name {server} to the foreground. 6408 This works like: > 6409 remote_expr({server}, "foreground()") 6410< Except that on Win32 systems the client does the work, to work 6411 around the problem that the OS doesn't always allow the server 6412 to bring itself to the foreground. 6413 Note: This does not restore the window if it was minimized, 6414 like foreground() does. 6415 This function is not available in the |sandbox|. 6416 {only in the Win32, Athena, Motif and GTK GUI versions and the 6417 Win32 console version} 6418 6419 6420remote_peek({serverid} [, {retvar}]) *remote_peek()* 6421 Returns a positive number if there are available strings 6422 from {serverid}. Copies any reply string into the variable 6423 {retvar} if specified. {retvar} must be a string with the 6424 name of a variable. 6425 Returns zero if none are available. 6426 Returns -1 if something is wrong. 6427 See also |clientserver|. 6428 This function is not available in the |sandbox|. 6429 {only available when compiled with the |+clientserver| feature} 6430 Examples: > 6431 :let repl = "" 6432 :echo "PEEK: ".remote_peek(id, "repl").": ".repl 6433 6434remote_read({serverid}, [{timeout}]) *remote_read()* 6435 Return the oldest available reply from {serverid} and consume 6436 it. Unless a {timeout} in seconds is given, it blocks until a 6437 reply is available. 6438 See also |clientserver|. 6439 This function is not available in the |sandbox|. 6440 {only available when compiled with the |+clientserver| feature} 6441 Example: > 6442 :echo remote_read(id) 6443< 6444 *remote_send()* *E241* 6445remote_send({server}, {string} [, {idvar}]) 6446 Send the {string} to {server}. The string is sent as input 6447 keys and the function returns immediately. At the Vim server 6448 the keys are not mapped |:map|. 6449 If {idvar} is present, it is taken as the name of a variable 6450 and a {serverid} for later use with remote_read() is stored 6451 there. 6452 See also |clientserver| |RemoteReply|. 6453 This function is not available in the |sandbox|. 6454 {only available when compiled with the |+clientserver| feature} 6455 6456 Note: Any errors will be reported in the server and may mess 6457 up the display. 6458 Examples: > 6459 :echo remote_send("gvim", ":DropAndReply ".file, "serverid"). 6460 \ remote_read(serverid) 6461 6462 :autocmd NONE RemoteReply * 6463 \ echo remote_read(expand("<amatch>")) 6464 :echo remote_send("gvim", ":sleep 10 | echo ". 6465 \ 'server2client(expand("<client>"), "HELLO")<CR>') 6466< 6467 *remote_startserver()* *E941* *E942* 6468remote_startserver({name}) 6469 Become the server {name}. This fails if already running as a 6470 server, when |v:servername| is not empty. 6471 {only available when compiled with the |+clientserver| feature} 6472 6473remove({list}, {idx} [, {end}]) *remove()* 6474 Without {end}: Remove the item at {idx} from |List| {list} and 6475 return the item. 6476 With {end}: Remove items from {idx} to {end} (inclusive) and 6477 return a List with these items. When {idx} points to the same 6478 item as {end} a list with one item is returned. When {end} 6479 points to an item before {idx} this is an error. 6480 See |list-index| for possible values of {idx} and {end}. 6481 Example: > 6482 :echo "last item: " . remove(mylist, -1) 6483 :call remove(mylist, 0, 9) 6484remove({dict}, {key}) 6485 Remove the entry from {dict} with key {key}. Example: > 6486 :echo "removed " . remove(dict, "one") 6487< If there is no {key} in {dict} this is an error. 6488 6489 Use |delete()| to remove a file. 6490 6491rename({from}, {to}) *rename()* 6492 Rename the file by the name {from} to the name {to}. This 6493 should also work to move files across file systems. The 6494 result is a Number, which is 0 if the file was renamed 6495 successfully, and non-zero when the renaming failed. 6496 NOTE: If {to} exists it is overwritten without warning. 6497 This function is not available in the |sandbox|. 6498 6499repeat({expr}, {count}) *repeat()* 6500 Repeat {expr} {count} times and return the concatenated 6501 result. Example: > 6502 :let separator = repeat('-', 80) 6503< When {count} is zero or negative the result is empty. 6504 When {expr} is a |List| the result is {expr} concatenated 6505 {count} times. Example: > 6506 :let longlist = repeat(['a', 'b'], 3) 6507< Results in ['a', 'b', 'a', 'b', 'a', 'b']. 6508 6509 6510resolve({filename}) *resolve()* *E655* 6511 On MS-Windows, when {filename} is a shortcut (a .lnk file), 6512 returns the path the shortcut points to in a simplified form. 6513 On Unix, repeat resolving symbolic links in all path 6514 components of {filename} and return the simplified result. 6515 To cope with link cycles, resolving of symbolic links is 6516 stopped after 100 iterations. 6517 On other systems, return the simplified {filename}. 6518 The simplification step is done as by |simplify()|. 6519 resolve() keeps a leading path component specifying the 6520 current directory (provided the result is still a relative 6521 path name) and also keeps a trailing path separator. 6522 6523 *reverse()* 6524reverse({list}) Reverse the order of items in {list} in-place. Returns 6525 {list}. 6526 If you want a list to remain unmodified make a copy first: > 6527 :let revlist = reverse(copy(mylist)) 6528 6529round({expr}) *round()* 6530 Round off {expr} to the nearest integral value and return it 6531 as a |Float|. If {expr} lies halfway between two integral 6532 values, then use the larger one (away from zero). 6533 {expr} must evaluate to a |Float| or a |Number|. 6534 Examples: > 6535 echo round(0.456) 6536< 0.0 > 6537 echo round(4.5) 6538< 5.0 > 6539 echo round(-4.5) 6540< -5.0 6541 {only available when compiled with the |+float| feature} 6542 6543screenattr(row, col) *screenattr()* 6544 Like |screenchar()|, but return the attribute. This is a rather 6545 arbitrary number that can only be used to compare to the 6546 attribute at other positions. 6547 6548screenchar(row, col) *screenchar()* 6549 The result is a Number, which is the character at position 6550 [row, col] on the screen. This works for every possible 6551 screen position, also status lines, window separators and the 6552 command line. The top left position is row one, column one 6553 The character excludes composing characters. For double-byte 6554 encodings it may only be the first byte. 6555 This is mainly to be used for testing. 6556 Returns -1 when row or col is out of range. 6557 6558screencol() *screencol()* 6559 The result is a Number, which is the current screen column of 6560 the cursor. The leftmost column has number 1. 6561 This function is mainly used for testing. 6562 6563 Note: Always returns the current screen column, thus if used 6564 in a command (e.g. ":echo screencol()") it will return the 6565 column inside the command line, which is 1 when the command is 6566 executed. To get the cursor position in the file use one of 6567 the following mappings: > 6568 nnoremap <expr> GG ":echom ".screencol()."\n" 6569 nnoremap <silent> GG :echom screencol()<CR> 6570< 6571screenrow() *screenrow()* 6572 The result is a Number, which is the current screen row of the 6573 cursor. The top line has number one. 6574 This function is mainly used for testing. 6575 Alternatively you can use |winline()|. 6576 6577 Note: Same restrictions as with |screencol()|. 6578 6579search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()* 6580 Search for regexp pattern {pattern}. The search starts at the 6581 cursor position (you can use |cursor()| to set it). 6582 6583 When a match has been found its line number is returned. 6584 If there is no match a 0 is returned and the cursor doesn't 6585 move. No error message is given. 6586 6587 {flags} is a String, which can contain these character flags: 6588 'b' search Backward instead of forward 6589 'c' accept a match at the Cursor position 6590 'e' move to the End of the match 6591 'n' do Not move the cursor 6592 'p' return number of matching sub-Pattern (see below) 6593 's' Set the ' mark at the previous location of the cursor 6594 'w' Wrap around the end of the file 6595 'W' don't Wrap around the end of the file 6596 'z' start searching at the cursor column instead of zero 6597 If neither 'w' or 'W' is given, the 'wrapscan' option applies. 6598 6599 If the 's' flag is supplied, the ' mark is set, only if the 6600 cursor is moved. The 's' flag cannot be combined with the 'n' 6601 flag. 6602 6603 'ignorecase', 'smartcase' and 'magic' are used. 6604 6605 When the 'z' flag is not given, searching always starts in 6606 column zero and then matches before the cursor are skipped. 6607 When the 'c' flag is present in 'cpo' the next search starts 6608 after the match. Without the 'c' flag the next search starts 6609 one column further. 6610 6611 When the {stopline} argument is given then the search stops 6612 after searching this line. This is useful to restrict the 6613 search to a range of lines. Examples: > 6614 let match = search('(', 'b', line("w0")) 6615 let end = search('END', '', line("w$")) 6616< When {stopline} is used and it is not zero this also implies 6617 that the search does not wrap around the end of the file. 6618 A zero value is equal to not giving the argument. 6619 6620 When the {timeout} argument is given the search stops when 6621 more than this many milliseconds have passed. Thus when 6622 {timeout} is 500 the search stops after half a second. 6623 The value must not be negative. A zero value is like not 6624 giving the argument. 6625 {only available when compiled with the |+reltime| feature} 6626 6627 *search()-sub-match* 6628 With the 'p' flag the returned value is one more than the 6629 first sub-match in \(\). One if none of them matched but the 6630 whole pattern did match. 6631 To get the column number too use |searchpos()|. 6632 6633 The cursor will be positioned at the match, unless the 'n' 6634 flag is used. 6635 6636 Example (goes over all files in the argument list): > 6637 :let n = 1 6638 :while n <= argc() " loop over all files in arglist 6639 : exe "argument " . n 6640 : " start at the last char in the file and wrap for the 6641 : " first search to find match at start of file 6642 : normal G$ 6643 : let flags = "w" 6644 : while search("foo", flags) > 0 6645 : s/foo/bar/g 6646 : let flags = "W" 6647 : endwhile 6648 : update " write the file if modified 6649 : let n = n + 1 6650 :endwhile 6651< 6652 Example for using some flags: > 6653 :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe') 6654< This will search for the keywords "if", "else", and "endif" 6655 under or after the cursor. Because of the 'p' flag, it 6656 returns 1, 2, or 3 depending on which keyword is found, or 0 6657 if the search fails. With the cursor on the first word of the 6658 line: 6659 if (foo == 0) | let foo = foo + 1 | endif ~ 6660 the function returns 1. Without the 'c' flag, the function 6661 finds the "endif" and returns 3. The same thing happens 6662 without the 'e' flag if the cursor is on the "f" of "if". 6663 The 'n' flag tells the function not to move the cursor. 6664 6665 6666searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()* 6667 Search for the declaration of {name}. 6668 6669 With a non-zero {global} argument it works like |gD|, find 6670 first match in the file. Otherwise it works like |gd|, find 6671 first match in the function. 6672 6673 With a non-zero {thisblock} argument matches in a {} block 6674 that ends before the cursor position are ignored. Avoids 6675 finding variable declarations only valid in another scope. 6676 6677 Moves the cursor to the found match. 6678 Returns zero for success, non-zero for failure. 6679 Example: > 6680 if searchdecl('myvar') == 0 6681 echo getline('.') 6682 endif 6683< 6684 *searchpair()* 6685searchpair({start}, {middle}, {end} [, {flags} [, {skip} 6686 [, {stopline} [, {timeout}]]]]) 6687 Search for the match of a nested start-end pair. This can be 6688 used to find the "endif" that matches an "if", while other 6689 if/endif pairs in between are ignored. 6690 The search starts at the cursor. The default is to search 6691 forward, include 'b' in {flags} to search backward. 6692 If a match is found, the cursor is positioned at it and the 6693 line number is returned. If no match is found 0 or -1 is 6694 returned and the cursor doesn't move. No error message is 6695 given. 6696 6697 {start}, {middle} and {end} are patterns, see |pattern|. They 6698 must not contain \( \) pairs. Use of \%( \) is allowed. When 6699 {middle} is not empty, it is found when searching from either 6700 direction, but only when not in a nested start-end pair. A 6701 typical use is: > 6702 searchpair('\<if\>', '\<else\>', '\<endif\>') 6703< By leaving {middle} empty the "else" is skipped. 6704 6705 {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with 6706 |search()|. Additionally: 6707 'r' Repeat until no more matches found; will find the 6708 outer pair. Implies the 'W' flag. 6709 'm' Return number of matches instead of line number with 6710 the match; will be > 1 when 'r' is used. 6711 Note: it's nearly always a good idea to use the 'W' flag, to 6712 avoid wrapping around the end of the file. 6713 6714 When a match for {start}, {middle} or {end} is found, the 6715 {skip} expression is evaluated with the cursor positioned on 6716 the start of the match. It should return non-zero if this 6717 match is to be skipped. E.g., because it is inside a comment 6718 or a string. 6719 When {skip} is omitted or empty, every match is accepted. 6720 When evaluating {skip} causes an error the search is aborted 6721 and -1 returned. 6722 6723 For {stopline} and {timeout} see |search()|. 6724 6725 The value of 'ignorecase' is used. 'magic' is ignored, the 6726 patterns are used like it's on. 6727 6728 The search starts exactly at the cursor. A match with 6729 {start}, {middle} or {end} at the next character, in the 6730 direction of searching, is the first one found. Example: > 6731 if 1 6732 if 2 6733 endif 2 6734 endif 1 6735< When starting at the "if 2", with the cursor on the "i", and 6736 searching forwards, the "endif 2" is found. When starting on 6737 the character just before the "if 2", the "endif 1" will be 6738 found. That's because the "if 2" will be found first, and 6739 then this is considered to be a nested if/endif from "if 2" to 6740 "endif 2". 6741 When searching backwards and {end} is more than one character, 6742 it may be useful to put "\zs" at the end of the pattern, so 6743 that when the cursor is inside a match with the end it finds 6744 the matching start. 6745 6746 Example, to find the "endif" command in a Vim script: > 6747 6748 :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W', 6749 \ 'getline(".") =~ "^\\s*\""') 6750 6751< The cursor must be at or after the "if" for which a match is 6752 to be found. Note that single-quote strings are used to avoid 6753 having to double the backslashes. The skip expression only 6754 catches comments at the start of a line, not after a command. 6755 Also, a word "en" or "if" halfway a line is considered a 6756 match. 6757 Another example, to search for the matching "{" of a "}": > 6758 6759 :echo searchpair('{', '', '}', 'bW') 6760 6761< This works when the cursor is at or before the "}" for which a 6762 match is to be found. To reject matches that syntax 6763 highlighting recognized as strings: > 6764 6765 :echo searchpair('{', '', '}', 'bW', 6766 \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"') 6767< 6768 *searchpairpos()* 6769searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} 6770 [, {stopline} [, {timeout}]]]]) 6771 Same as |searchpair()|, but returns a |List| with the line and 6772 column position of the match. The first element of the |List| 6773 is the line number and the second element is the byte index of 6774 the column position of the match. If no match is found, 6775 returns [0, 0]. > 6776 6777 :let [lnum,col] = searchpairpos('{', '', '}', 'n') 6778< 6779 See |match-parens| for a bigger and more useful example. 6780 6781searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()* 6782 Same as |search()|, but returns a |List| with the line and 6783 column position of the match. The first element of the |List| 6784 is the line number and the second element is the byte index of 6785 the column position of the match. If no match is found, 6786 returns [0, 0]. 6787 Example: > 6788 :let [lnum, col] = searchpos('mypattern', 'n') 6789 6790< When the 'p' flag is given then there is an extra item with 6791 the sub-pattern match number |search()-sub-match|. Example: > 6792 :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np') 6793< In this example "submatch" is 2 when a lowercase letter is 6794 found |/\l|, 3 when an uppercase letter is found |/\u|. 6795 6796server2client({clientid}, {string}) *server2client()* 6797 Send a reply string to {clientid}. The most recent {clientid} 6798 that sent a string can be retrieved with expand("<client>"). 6799 {only available when compiled with the |+clientserver| feature} 6800 Note: 6801 This id has to be stored before the next command can be 6802 received. I.e. before returning from the received command and 6803 before calling any commands that waits for input. 6804 See also |clientserver|. 6805 Example: > 6806 :echo server2client(expand("<client>"), "HELLO") 6807< 6808serverlist() *serverlist()* 6809 Return a list of available server names, one per line. 6810 When there are no servers or the information is not available 6811 an empty string is returned. See also |clientserver|. 6812 {only available when compiled with the |+clientserver| feature} 6813 Example: > 6814 :echo serverlist() 6815< 6816setbufvar({expr}, {varname}, {val}) *setbufvar()* 6817 Set option or local variable {varname} in buffer {expr} to 6818 {val}. 6819 This also works for a global or local window option, but it 6820 doesn't work for a global or local window variable. 6821 For a local window option the global value is unchanged. 6822 For the use of {expr}, see |bufname()| above. 6823 Note that the variable name without "b:" must be used. 6824 Examples: > 6825 :call setbufvar(1, "&mod", 1) 6826 :call setbufvar("todo", "myvar", "foobar") 6827< This function is not available in the |sandbox|. 6828 6829setcharsearch({dict}) *setcharsearch()* 6830 Set the current character search information to {dict}, 6831 which contains one or more of the following entries: 6832 6833 char character which will be used for a subsequent 6834 |,| or |;| command; an empty string clears the 6835 character search 6836 forward direction of character search; 1 for forward, 6837 0 for backward 6838 until type of character search; 1 for a |t| or |T| 6839 character search, 0 for an |f| or |F| 6840 character search 6841 6842 This can be useful to save/restore a user's character search 6843 from a script: > 6844 :let prevsearch = getcharsearch() 6845 :" Perform a command which clobbers user's search 6846 :call setcharsearch(prevsearch) 6847< Also see |getcharsearch()|. 6848 6849setcmdpos({pos}) *setcmdpos()* 6850 Set the cursor position in the command line to byte position 6851 {pos}. The first position is 1. 6852 Use |getcmdpos()| to obtain the current position. 6853 Only works while editing the command line, thus you must use 6854 |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='. For 6855 |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is 6856 set after the command line is set to the expression. For 6857 |c_CTRL-R_=| it is set after evaluating the expression but 6858 before inserting the resulting text. 6859 When the number is too big the cursor is put at the end of the 6860 line. A number smaller than one has undefined results. 6861 Returns 0 when successful, 1 when not editing the command 6862 line. 6863 6864setfperm({fname}, {mode}) *setfperm()* *chmod* 6865 Set the file permissions for {fname} to {mode}. 6866 {mode} must be a string with 9 characters. It is of the form 6867 "rwxrwxrwx", where each group of "rwx" flags represent, in 6868 turn, the permissions of the owner of the file, the group the 6869 file belongs to, and other users. A '-' character means the 6870 permission is off, any other character means on. Multi-byte 6871 characters are not supported. 6872 6873 For example "rw-r-----" means read-write for the user, 6874 readable by the group, not accessible by others. "xx-x-----" 6875 would do the same thing. 6876 6877 Returns non-zero for success, zero for failure. 6878 6879 To read permissions see |getfperm()|. 6880 6881 6882setline({lnum}, {text}) *setline()* 6883 Set line {lnum} of the current buffer to {text}. To insert 6884 lines use |append()|. 6885 {lnum} is used like with |getline()|. 6886 When {lnum} is just below the last line the {text} will be 6887 added as a new line. 6888 If this succeeds, 0 is returned. If this fails (most likely 6889 because {lnum} is invalid) 1 is returned. Example: > 6890 :call setline(5, strftime("%c")) 6891< When {text} is a |List| then line {lnum} and following lines 6892 will be set to the items in the list. Example: > 6893 :call setline(5, ['aaa', 'bbb', 'ccc']) 6894< This is equivalent to: > 6895 :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']] 6896 : call setline(n, l) 6897 :endfor 6898< Note: The '[ and '] marks are not set. 6899 6900setloclist({nr}, {list}[, {action}[, {what}]]) *setloclist()* 6901 Create or replace or add to the location list for window {nr}. 6902 {nr} can be the window number or the |window-ID|. 6903 When {nr} is zero the current window is used. 6904 6905 For a location list window, the displayed location list is 6906 modified. For an invalid window number {nr}, -1 is returned. 6907 Otherwise, same as |setqflist()|. 6908 Also see |location-list|. 6909 6910 If the optional {what} dictionary argument is supplied, then 6911 only the items listed in {what} are set. Refer to |setqflist()| 6912 for the list of supported keys in {what}. 6913 6914setmatches({list}) *setmatches()* 6915 Restores a list of matches saved by |getmatches()|. Returns 0 6916 if successful, otherwise -1. All current matches are cleared 6917 before the list is restored. See example for |getmatches()|. 6918 6919 *setpos()* 6920setpos({expr}, {list}) 6921 Set the position for {expr}. Possible values: 6922 . the cursor 6923 'x mark x 6924 6925 {list} must be a |List| with four or five numbers: 6926 [bufnum, lnum, col, off] 6927 [bufnum, lnum, col, off, curswant] 6928 6929 "bufnum" is the buffer number. Zero can be used for the 6930 current buffer. When setting an uppercase mark "bufnum" is 6931 used for the mark position. For other marks it specifies the 6932 buffer to set the mark in. You can use the |bufnr()| function 6933 to turn a file name into a buffer number. 6934 For setting the cursor and the ' mark "bufnum" is ignored, 6935 since these are associated with a window, not a buffer. 6936 Does not change the jumplist. 6937 6938 "lnum" and "col" are the position in the buffer. The first 6939 column is 1. Use a zero "lnum" to delete a mark. If "col" is 6940 smaller than 1 then 1 is used. 6941 6942 The "off" number is only used when 'virtualedit' is set. Then 6943 it is the offset in screen columns from the start of the 6944 character. E.g., a position within a <Tab> or after the last 6945 character. 6946 6947 The "curswant" number is only used when setting the cursor 6948 position. It sets the preferred column for when moving the 6949 cursor vertically. When the "curswant" number is missing the 6950 preferred column is not set. When it is present and setting a 6951 mark position it is not used. 6952 6953 Note that for '< and '> changing the line number may result in 6954 the marks to be effectively be swapped, so that '< is always 6955 before '>. 6956 6957 Returns 0 when the position could be set, -1 otherwise. 6958 An error message is given if {expr} is invalid. 6959 6960 Also see |getpos()| and |getcurpos()|. 6961 6962 This does not restore the preferred column for moving 6963 vertically; if you set the cursor position with this, |j| and 6964 |k| motions will jump to previous columns! Use |cursor()| to 6965 also set the preferred column. Also see the "curswant" key in 6966 |winrestview()|. 6967 6968setqflist({list} [, {action}[, {what}]]) *setqflist()* 6969 Create or replace or add to the quickfix list using the items 6970 in {list}. Each item in {list} is a dictionary. 6971 Non-dictionary items in {list} are ignored. Each dictionary 6972 item can contain the following entries: 6973 6974 bufnr buffer number; must be the number of a valid 6975 buffer 6976 filename name of a file; only used when "bufnr" is not 6977 present or it is invalid. 6978 lnum line number in the file 6979 pattern search pattern used to locate the error 6980 col column number 6981 vcol when non-zero: "col" is visual column 6982 when zero: "col" is byte index 6983 nr error number 6984 text description of the error 6985 type single-character error type, 'E', 'W', etc. 6986 valid recognized error message 6987 6988 The "col", "vcol", "nr", "type" and "text" entries are 6989 optional. Either "lnum" or "pattern" entry can be used to 6990 locate a matching error line. 6991 If the "filename" and "bufnr" entries are not present or 6992 neither the "lnum" or "pattern" entries are present, then the 6993 item will not be handled as an error line. 6994 If both "pattern" and "lnum" are present then "pattern" will 6995 be used. 6996 If the "valid" entry is not supplied, then the valid flag is 6997 set when "bufnr" is a valid buffer or "filename" exists. 6998 If you supply an empty {list}, the quickfix list will be 6999 cleared. 7000 Note that the list is not exactly the same as what 7001 |getqflist()| returns. 7002 7003 {action} values: *E927* 7004 'a' The items from {list} are added to the existing 7005 quickfix list. If there is no existing list, then a 7006 new list is created. 7007 7008 'r' The items from the current quickfix list are replaced 7009 with the items from {list}. This can also be used to 7010 clear the list: > 7011 :call setqflist([], 'r') 7012< 7013 'f' All the quickfix lists in the quickfix stack are 7014 freed. 7015 7016 If {action} is not present or is set to ' ', then a new list 7017 is created. 7018 7019 If the optional {what} dictionary argument is supplied, then 7020 only the items listed in {what} are set. The first {list} 7021 argument is ignored. The following items can be specified in 7022 {what}: 7023 context any Vim type can be stored as a context 7024 items list of quickfix entries. Same as the {list} 7025 argument. 7026 nr list number in the quickfix stack; zero 7027 means the current quickfix list and '$' means 7028 the last quickfix list 7029 title quickfix list title text 7030 Unsupported keys in {what} are ignored. 7031 If the "nr" item is not present, then the current quickfix list 7032 is modified. When creating a new quickfix list, "nr" can be 7033 set to a value one greater than the quickfix stack size. 7034 7035 Examples: > 7036 :call setqflist([], 'r', {'title': 'My search'}) 7037 :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'}) 7038< 7039 Returns zero for success, -1 for failure. 7040 7041 This function can be used to create a quickfix list 7042 independent of the 'errorformat' setting. Use a command like 7043 `:cc 1` to jump to the first position. 7044 7045 7046 *setreg()* 7047setreg({regname}, {value} [, {options}]) 7048 Set the register {regname} to {value}. 7049 {value} may be any value returned by |getreg()|, including 7050 a |List|. 7051 If {options} contains "a" or {regname} is upper case, 7052 then the value is appended. 7053 {options} can also contain a register type specification: 7054 "c" or "v" |characterwise| mode 7055 "l" or "V" |linewise| mode 7056 "b" or "<CTRL-V>" |blockwise-visual| mode 7057 If a number immediately follows "b" or "<CTRL-V>" then this is 7058 used as the width of the selection - if it is not specified 7059 then the width of the block is set to the number of characters 7060 in the longest line (counting a <Tab> as 1 character). 7061 7062 If {options} contains no register settings, then the default 7063 is to use character mode unless {value} ends in a <NL> for 7064 string {value} and linewise mode for list {value}. Blockwise 7065 mode is never selected automatically. 7066 Returns zero for success, non-zero for failure. 7067 7068 *E883* 7069 Note: you may not use |List| containing more than one item to 7070 set search and expression registers. Lists containing no 7071 items act like empty strings. 7072 7073 Examples: > 7074 :call setreg(v:register, @*) 7075 :call setreg('*', @%, 'ac') 7076 :call setreg('a', "1\n2\n3", 'b5') 7077 7078< This example shows using the functions to save and restore a 7079 register (note: you may not reliably restore register value 7080 without using the third argument to |getreg()| as without it 7081 newlines are represented as newlines AND Nul bytes are 7082 represented as newlines as well, see |NL-used-for-Nul|). > 7083 :let var_a = getreg('a', 1, 1) 7084 :let var_amode = getregtype('a') 7085 .... 7086 :call setreg('a', var_a, var_amode) 7087 7088< You can also change the type of a register by appending 7089 nothing: > 7090 :call setreg('a', '', 'al') 7091 7092settabvar({tabnr}, {varname}, {val}) *settabvar()* 7093 Set tab-local variable {varname} to {val} in tab page {tabnr}. 7094 |t:var| 7095 Note that the variable name without "t:" must be used. 7096 Tabs are numbered starting with one. 7097 This function is not available in the |sandbox|. 7098 7099settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()* 7100 Set option or local variable {varname} in window {winnr} to 7101 {val}. 7102 Tabs are numbered starting with one. For the current tabpage 7103 use |setwinvar()|. 7104 {winnr} can be the window number or the |window-ID|. 7105 When {winnr} is zero the current window is used. 7106 This also works for a global or local buffer option, but it 7107 doesn't work for a global or local buffer variable. 7108 For a local buffer option the global value is unchanged. 7109 Note that the variable name without "w:" must be used. 7110 Examples: > 7111 :call settabwinvar(1, 1, "&list", 0) 7112 :call settabwinvar(3, 2, "myvar", "foobar") 7113< This function is not available in the |sandbox|. 7114 7115setwinvar({nr}, {varname}, {val}) *setwinvar()* 7116 Like |settabwinvar()| for the current tab page. 7117 Examples: > 7118 :call setwinvar(1, "&list", 0) 7119 :call setwinvar(2, "myvar", "foobar") 7120 7121sha256({string}) *sha256()* 7122 Returns a String with 64 hex characters, which is the SHA256 7123 checksum of {string}. 7124 {only available when compiled with the |+cryptv| feature} 7125 7126shellescape({string} [, {special}]) *shellescape()* 7127 Escape {string} for use as a shell command argument. 7128 On MS-Windows and MS-DOS, when 'shellslash' is not set, it 7129 will enclose {string} in double quotes and double all double 7130 quotes within {string}. 7131 Otherwise it will enclose {string} in single quotes and 7132 replace all "'" with "'\''". 7133 7134 When the {special} argument is present and it's a non-zero 7135 Number or a non-empty String (|non-zero-arg|), then special 7136 items such as "!", "%", "#" and "<cword>" will be preceded by 7137 a backslash. This backslash will be removed again by the |:!| 7138 command. 7139 7140 The "!" character will be escaped (again with a |non-zero-arg| 7141 {special}) when 'shell' contains "csh" in the tail. That is 7142 because for csh and tcsh "!" is used for history replacement 7143 even when inside single quotes. 7144 7145 With a |non-zero-arg| {special} the <NL> character is also 7146 escaped. When 'shell' containing "csh" in the tail it's 7147 escaped a second time. 7148 7149 Example of use with a |:!| command: > 7150 :exe '!dir ' . shellescape(expand('<cfile>'), 1) 7151< This results in a directory listing for the file under the 7152 cursor. Example of use with |system()|: > 7153 :call system("chmod +w -- " . shellescape(expand("%"))) 7154< See also |::S|. 7155 7156 7157shiftwidth() *shiftwidth()* 7158 Returns the effective value of 'shiftwidth'. This is the 7159 'shiftwidth' value unless it is zero, in which case it is the 7160 'tabstop' value. This function was introduced with patch 7161 7.3.694 in 2012, everybody should have it by now. 7162 7163 7164simplify({filename}) *simplify()* 7165 Simplify the file name as much as possible without changing 7166 the meaning. Shortcuts (on MS-Windows) or symbolic links (on 7167 Unix) are not resolved. If the first path component in 7168 {filename} designates the current directory, this will be 7169 valid for the result as well. A trailing path separator is 7170 not removed either. 7171 Example: > 7172 simplify("./dir/.././/file/") == "./file/" 7173< Note: The combination "dir/.." is only removed if "dir" is 7174 a searchable directory or does not exist. On Unix, it is also 7175 removed when "dir" is a symbolic link within the same 7176 directory. In order to resolve all the involved symbolic 7177 links before simplifying the path name, use |resolve()|. 7178 7179 7180sin({expr}) *sin()* 7181 Return the sine of {expr}, measured in radians, as a |Float|. 7182 {expr} must evaluate to a |Float| or a |Number|. 7183 Examples: > 7184 :echo sin(100) 7185< -0.506366 > 7186 :echo sin(-4.01) 7187< 0.763301 7188 {only available when compiled with the |+float| feature} 7189 7190 7191sinh({expr}) *sinh()* 7192 Return the hyperbolic sine of {expr} as a |Float| in the range 7193 [-inf, inf]. 7194 {expr} must evaluate to a |Float| or a |Number|. 7195 Examples: > 7196 :echo sinh(0.5) 7197< 0.521095 > 7198 :echo sinh(-0.9) 7199< -1.026517 7200 {only available when compiled with the |+float| feature} 7201 7202 7203sort({list} [, {func} [, {dict}]]) *sort()* *E702* 7204 Sort the items in {list} in-place. Returns {list}. 7205 7206 If you want a list to remain unmodified make a copy first: > 7207 :let sortedlist = sort(copy(mylist)) 7208 7209< When {func} is omitted, is empty or zero, then sort() uses the 7210 string representation of each item to sort on. Numbers sort 7211 after Strings, |Lists| after Numbers. For sorting text in the 7212 current buffer use |:sort|. 7213 7214 When {func} is given and it is '1' or 'i' then case is 7215 ignored. 7216 7217 When {func} is given and it is 'n' then all items will be 7218 sorted numerical (Implementation detail: This uses the 7219 strtod() function to parse numbers, Strings, Lists, Dicts and 7220 Funcrefs will be considered as being 0). 7221 7222 When {func} is given and it is 'N' then all items will be 7223 sorted numerical. This is like 'n' but a string containing 7224 digits will be used as the number they represent. 7225 7226 When {func} is given and it is 'f' then all items will be 7227 sorted numerical. All values must be a Number or a Float. 7228 7229 When {func} is a |Funcref| or a function name, this function 7230 is called to compare items. The function is invoked with two 7231 items as argument and must return zero if they are equal, 1 or 7232 bigger if the first one sorts after the second one, -1 or 7233 smaller if the first one sorts before the second one. 7234 7235 {dict} is for functions with the "dict" attribute. It will be 7236 used to set the local variable "self". |Dictionary-function| 7237 7238 The sort is stable, items which compare equal (as number or as 7239 string) will keep their relative position. E.g., when sorting 7240 on numbers, text strings will sort next to each other, in the 7241 same order as they were originally. 7242 7243 Also see |uniq()|. 7244 7245 Example: > 7246 func MyCompare(i1, i2) 7247 return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1 7248 endfunc 7249 let sortedlist = sort(mylist, "MyCompare") 7250< A shorter compare version for this specific simple case, which 7251 ignores overflow: > 7252 func MyCompare(i1, i2) 7253 return a:i1 - a:i2 7254 endfunc 7255< 7256 *soundfold()* 7257soundfold({word}) 7258 Return the sound-folded equivalent of {word}. Uses the first 7259 language in 'spelllang' for the current window that supports 7260 soundfolding. 'spell' must be set. When no sound folding is 7261 possible the {word} is returned unmodified. 7262 This can be used for making spelling suggestions. Note that 7263 the method can be quite slow. 7264 7265 *spellbadword()* 7266spellbadword([{sentence}]) 7267 Without argument: The result is the badly spelled word under 7268 or after the cursor. The cursor is moved to the start of the 7269 bad word. When no bad word is found in the cursor line the 7270 result is an empty string and the cursor doesn't move. 7271 7272 With argument: The result is the first word in {sentence} that 7273 is badly spelled. If there are no spelling mistakes the 7274 result is an empty string. 7275 7276 The return value is a list with two items: 7277 - The badly spelled word or an empty string. 7278 - The type of the spelling error: 7279 "bad" spelling mistake 7280 "rare" rare word 7281 "local" word only valid in another region 7282 "caps" word should start with Capital 7283 Example: > 7284 echo spellbadword("the quik brown fox") 7285< ['quik', 'bad'] ~ 7286 7287 The spelling information for the current window is used. The 7288 'spell' option must be set and the value of 'spelllang' is 7289 used. 7290 7291 *spellsuggest()* 7292spellsuggest({word} [, {max} [, {capital}]]) 7293 Return a |List| with spelling suggestions to replace {word}. 7294 When {max} is given up to this number of suggestions are 7295 returned. Otherwise up to 25 suggestions are returned. 7296 7297 When the {capital} argument is given and it's non-zero only 7298 suggestions with a leading capital will be given. Use this 7299 after a match with 'spellcapcheck'. 7300 7301 {word} can be a badly spelled word followed by other text. 7302 This allows for joining two words that were split. The 7303 suggestions also include the following text, thus you can 7304 replace a line. 7305 7306 {word} may also be a good word. Similar words will then be 7307 returned. {word} itself is not included in the suggestions, 7308 although it may appear capitalized. 7309 7310 The spelling information for the current window is used. The 7311 'spell' option must be set and the values of 'spelllang' and 7312 'spellsuggest' are used. 7313 7314 7315split({expr} [, {pattern} [, {keepempty}]]) *split()* 7316 Make a |List| out of {expr}. When {pattern} is omitted or 7317 empty each white-separated sequence of characters becomes an 7318 item. 7319 Otherwise the string is split where {pattern} matches, 7320 removing the matched characters. 'ignorecase' is not used 7321 here, add \c to ignore case. |/\c| 7322 When the first or last item is empty it is omitted, unless the 7323 {keepempty} argument is given and it's non-zero. 7324 Other empty items are kept when {pattern} matches at least one 7325 character or when {keepempty} is non-zero. 7326 Example: > 7327 :let words = split(getline('.'), '\W\+') 7328< To split a string in individual characters: > 7329 :for c in split(mystring, '\zs') 7330< If you want to keep the separator you can also use '\zs' at 7331 the end of the pattern: > 7332 :echo split('abc:def:ghi', ':\zs') 7333< ['abc:', 'def:', 'ghi'] ~ 7334 Splitting a table where the first element can be empty: > 7335 :let items = split(line, ':', 1) 7336< The opposite function is |join()|. 7337 7338 7339sqrt({expr}) *sqrt()* 7340 Return the non-negative square root of Float {expr} as a 7341 |Float|. 7342 {expr} must evaluate to a |Float| or a |Number|. When {expr} 7343 is negative the result is NaN (Not a Number). 7344 Examples: > 7345 :echo sqrt(100) 7346< 10.0 > 7347 :echo sqrt(-4.01) 7348< nan 7349 "nan" may be different, it depends on system libraries. 7350 {only available when compiled with the |+float| feature} 7351 7352 7353str2float({expr}) *str2float()* 7354 Convert String {expr} to a Float. This mostly works the same 7355 as when using a floating point number in an expression, see 7356 |floating-point-format|. But it's a bit more permissive. 7357 E.g., "1e40" is accepted, while in an expression you need to 7358 write "1.0e40". 7359 Text after the number is silently ignored. 7360 The decimal point is always '.', no matter what the locale is 7361 set to. A comma ends the number: "12,345.67" is converted to 7362 12.0. You can strip out thousands separators with 7363 |substitute()|: > 7364 let f = str2float(substitute(text, ',', '', 'g')) 7365< {only available when compiled with the |+float| feature} 7366 7367 7368str2nr({expr} [, {base}]) *str2nr()* 7369 Convert string {expr} to a number. 7370 {base} is the conversion base, it can be 2, 8, 10 or 16. 7371 When {base} is omitted base 10 is used. This also means that 7372 a leading zero doesn't cause octal conversion to be used, as 7373 with the default String to Number conversion. 7374 When {base} is 16 a leading "0x" or "0X" is ignored. With a 7375 different base the result will be zero. Similarly, when 7376 {base} is 8 a leading "0" is ignored, and when {base} is 2 a 7377 leading "0b" or "0B" is ignored. 7378 Text after the number is silently ignored. 7379 7380 7381strchars({expr} [, {skipcc}]) *strchars()* 7382 The result is a Number, which is the number of characters 7383 in String {expr}. 7384 When {skipcc} is omitted or zero, composing characters are 7385 counted separately. 7386 When {skipcc} set to 1, Composing characters are ignored. 7387 Also see |strlen()|, |strdisplaywidth()| and |strwidth()|. 7388 7389 {skipcc} is only available after 7.4.755. For backward 7390 compatibility, you can define a wrapper function: > 7391 if has("patch-7.4.755") 7392 function s:strchars(str, skipcc) 7393 return strchars(a:str, a:skipcc) 7394 endfunction 7395 else 7396 function s:strchars(str, skipcc) 7397 if a:skipcc 7398 return strlen(substitute(a:str, ".", "x", "g")) 7399 else 7400 return strchars(a:str) 7401 endif 7402 endfunction 7403 endif 7404< 7405strcharpart({src}, {start}[, {len}]) *strcharpart()* 7406 Like |strpart()| but using character index and length instead 7407 of byte index and length. 7408 When a character index is used where a character does not 7409 exist it is assumed to be one character. For example: > 7410 strcharpart('abc', -1, 2) 7411< results in 'a'. 7412 7413strdisplaywidth({expr}[, {col}]) *strdisplaywidth()* 7414 The result is a Number, which is the number of display cells 7415 String {expr} occupies on the screen when it starts at {col}. 7416 When {col} is omitted zero is used. Otherwise it is the 7417 screen column where to start. This matters for Tab 7418 characters. 7419 The option settings of the current window are used. This 7420 matters for anything that's displayed differently, such as 7421 'tabstop' and 'display'. 7422 When {expr} contains characters with East Asian Width Class 7423 Ambiguous, this function's return value depends on 'ambiwidth'. 7424 Also see |strlen()|, |strwidth()| and |strchars()|. 7425 7426strftime({format} [, {time}]) *strftime()* 7427 The result is a String, which is a formatted date and time, as 7428 specified by the {format} string. The given {time} is used, 7429 or the current time if no time is given. The accepted 7430 {format} depends on your system, thus this is not portable! 7431 See the manual page of the C function strftime() for the 7432 format. The maximum length of the result is 80 characters. 7433 See also |localtime()| and |getftime()|. 7434 The language can be changed with the |:language| command. 7435 Examples: > 7436 :echo strftime("%c") Sun Apr 27 11:49:23 1997 7437 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25 7438 :echo strftime("%y%m%d %T") 970427 11:53:55 7439 :echo strftime("%H:%M") 11:55 7440 :echo strftime("%c", getftime("file.c")) 7441 Show mod time of file.c. 7442< Not available on all systems. To check use: > 7443 :if exists("*strftime") 7444 7445strgetchar({str}, {index}) *strgetchar()* 7446 Get character {index} from {str}. This uses a character 7447 index, not a byte index. Composing characters are considered 7448 separate characters here. 7449 Also see |strcharpart()| and |strchars()|. 7450 7451stridx({haystack}, {needle} [, {start}]) *stridx()* 7452 The result is a Number, which gives the byte index in 7453 {haystack} of the first occurrence of the String {needle}. 7454 If {start} is specified, the search starts at index {start}. 7455 This can be used to find a second match: > 7456 :let colon1 = stridx(line, ":") 7457 :let colon2 = stridx(line, ":", colon1 + 1) 7458< The search is done case-sensitive. 7459 For pattern searches use |match()|. 7460 -1 is returned if the {needle} does not occur in {haystack}. 7461 See also |strridx()|. 7462 Examples: > 7463 :echo stridx("An Example", "Example") 3 7464 :echo stridx("Starting point", "Start") 0 7465 :echo stridx("Starting point", "start") -1 7466< *strstr()* *strchr()* 7467 stridx() works similar to the C function strstr(). When used 7468 with a single character it works similar to strchr(). 7469 7470 *string()* 7471string({expr}) Return {expr} converted to a String. If {expr} is a Number, 7472 Float, String or a composition of them, then the result can be 7473 parsed back with |eval()|. 7474 {expr} type result ~ 7475 String 'string' (single quotes are doubled) 7476 Number 123 7477 Float 123.123456 or 1.123456e8 7478 Funcref function('name') 7479 List [item, item] 7480 Dictionary {key: value, key: value} 7481 7482 When a List or Dictionary has a recursive reference it is 7483 replaced by "[...]" or "{...}". Using eval() on the result 7484 will then fail. 7485 7486 Also see |strtrans()|. 7487 7488 *strlen()* 7489strlen({expr}) The result is a Number, which is the length of the String 7490 {expr} in bytes. 7491 If the argument is a Number it is first converted to a String. 7492 For other types an error is given. 7493 If you want to count the number of multi-byte characters use 7494 |strchars()|. 7495 Also see |len()|, |strdisplaywidth()| and |strwidth()|. 7496 7497strpart({src}, {start}[, {len}]) *strpart()* 7498 The result is a String, which is part of {src}, starting from 7499 byte {start}, with the byte length {len}. 7500 To count characters instead of bytes use |strcharpart()|. 7501 7502 When bytes are selected which do not exist, this doesn't 7503 result in an error, the bytes are simply omitted. 7504 If {len} is missing, the copy continues from {start} till the 7505 end of the {src}. > 7506 strpart("abcdefg", 3, 2) == "de" 7507 strpart("abcdefg", -2, 4) == "ab" 7508 strpart("abcdefg", 5, 4) == "fg" 7509 strpart("abcdefg", 3) == "defg" 7510 7511< Note: To get the first character, {start} must be 0. For 7512 example, to get three bytes under and after the cursor: > 7513 strpart(getline("."), col(".") - 1, 3) 7514< 7515strridx({haystack}, {needle} [, {start}]) *strridx()* 7516 The result is a Number, which gives the byte index in 7517 {haystack} of the last occurrence of the String {needle}. 7518 When {start} is specified, matches beyond this index are 7519 ignored. This can be used to find a match before a previous 7520 match: > 7521 :let lastcomma = strridx(line, ",") 7522 :let comma2 = strridx(line, ",", lastcomma - 1) 7523< The search is done case-sensitive. 7524 For pattern searches use |match()|. 7525 -1 is returned if the {needle} does not occur in {haystack}. 7526 If the {needle} is empty the length of {haystack} is returned. 7527 See also |stridx()|. Examples: > 7528 :echo strridx("an angry armadillo", "an") 3 7529< *strrchr()* 7530 When used with a single character it works similar to the C 7531 function strrchr(). 7532 7533strtrans({expr}) *strtrans()* 7534 The result is a String, which is {expr} with all unprintable 7535 characters translated into printable characters |'isprint'|. 7536 Like they are shown in a window. Example: > 7537 echo strtrans(@a) 7538< This displays a newline in register a as "^@" instead of 7539 starting a new line. 7540 7541strwidth({expr}) *strwidth()* 7542 The result is a Number, which is the number of display cells 7543 String {expr} occupies. A Tab character is counted as one 7544 cell, alternatively use |strdisplaywidth()|. 7545 When {expr} contains characters with East Asian Width Class 7546 Ambiguous, this function's return value depends on 'ambiwidth'. 7547 Also see |strlen()|, |strdisplaywidth()| and |strchars()|. 7548 7549submatch({nr}[, {list}]) *submatch()* *E935* 7550 Only for an expression in a |:substitute| command or 7551 substitute() function. 7552 Returns the {nr}'th submatch of the matched text. When {nr} 7553 is 0 the whole matched text is returned. 7554 Note that a NL in the string can stand for a line break of a 7555 multi-line match or a NUL character in the text. 7556 Also see |sub-replace-expression|. 7557 7558 If {list} is present and non-zero then submatch() returns 7559 a list of strings, similar to |getline()| with two arguments. 7560 NL characters in the text represent NUL characters in the 7561 text. 7562 Only returns more than one item for |:substitute|, inside 7563 |substitute()| this list will always contain one or zero 7564 items, since there are no real line breaks. 7565 7566 When substitute() is used recursively only the submatches in 7567 the current (deepest) call can be obtained. 7568 7569 Example: > 7570 :s/\d\+/\=submatch(0) + 1/ 7571< This finds the first number in the line and adds one to it. 7572 A line break is included as a newline character. 7573 7574substitute({expr}, {pat}, {sub}, {flags}) *substitute()* 7575 The result is a String, which is a copy of {expr}, in which 7576 the first match of {pat} is replaced with {sub}. 7577 When {flags} is "g", all matches of {pat} in {expr} are 7578 replaced. Otherwise {flags} should be "". 7579 7580 This works like the ":substitute" command (without any flags). 7581 But the matching with {pat} is always done like the 'magic' 7582 option is set and 'cpoptions' is empty (to make scripts 7583 portable). 'ignorecase' is still relevant, use |/\c| or |/\C| 7584 if you want to ignore or match case and ignore 'ignorecase'. 7585 'smartcase' is not used. See |string-match| for how {pat} is 7586 used. 7587 7588 A "~" in {sub} is not replaced with the previous {sub}. 7589 Note that some codes in {sub} have a special meaning 7590 |sub-replace-special|. For example, to replace something with 7591 "\n" (two characters), use "\\\\n" or '\\n'. 7592 7593 When {pat} does not match in {expr}, {expr} is returned 7594 unmodified. 7595 7596 Example: > 7597 :let &path = substitute(&path, ",\\=[^,]*$", "", "") 7598< This removes the last component of the 'path' option. > 7599 :echo substitute("testing", ".*", "\\U\\0", "") 7600< results in "TESTING". 7601 7602 When {sub} starts with "\=", the remainder is interpreted as 7603 an expression. See |sub-replace-expression|. Example: > 7604 :echo substitute(s, '%\(\x\x\)', 7605 \ '\=nr2char("0x" . submatch(1))', 'g') 7606 7607< When {sub} is a Funcref that function is called, with one 7608 optional argument. Example: > 7609 :echo substitute(s, '%\(\x\x\)', SubNr, 'g') 7610< The optional argument is a list which contains the whole 7611 matched string and up to nine submatches, like what 7612 |submatch()| returns. Example: > 7613 :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g') 7614 7615synID({lnum}, {col}, {trans}) *synID()* 7616 The result is a Number, which is the syntax ID at the position 7617 {lnum} and {col} in the current window. 7618 The syntax ID can be used with |synIDattr()| and 7619 |synIDtrans()| to obtain syntax information about text. 7620 7621 {col} is 1 for the leftmost column, {lnum} is 1 for the first 7622 line. 'synmaxcol' applies, in a longer line zero is returned. 7623 Note that when the position is after the last character, 7624 that's where the cursor can be in Insert mode, synID() returns 7625 zero. 7626 7627 When {trans} is |TRUE|, transparent items are reduced to the 7628 item that they reveal. This is useful when wanting to know 7629 the effective color. When {trans} is |FALSE|, the transparent 7630 item is returned. This is useful when wanting to know which 7631 syntax item is effective (e.g. inside parens). 7632 Warning: This function can be very slow. Best speed is 7633 obtained by going through the file in forward direction. 7634 7635 Example (echoes the name of the syntax item under the cursor): > 7636 :echo synIDattr(synID(line("."), col("."), 1), "name") 7637< 7638 7639synIDattr({synID}, {what} [, {mode}]) *synIDattr()* 7640 The result is a String, which is the {what} attribute of 7641 syntax ID {synID}. This can be used to obtain information 7642 about a syntax item. 7643 {mode} can be "gui", "cterm" or "term", to get the attributes 7644 for that mode. When {mode} is omitted, or an invalid value is 7645 used, the attributes for the currently active highlighting are 7646 used (GUI, cterm or term). 7647 Use synIDtrans() to follow linked highlight groups. 7648 {what} result 7649 "name" the name of the syntax item 7650 "fg" foreground color (GUI: color name used to set 7651 the color, cterm: color number as a string, 7652 term: empty string) 7653 "bg" background color (as with "fg") 7654 "font" font name (only available in the GUI) 7655 |highlight-font| 7656 "sp" special color (as with "fg") |highlight-guisp| 7657 "fg#" like "fg", but for the GUI and the GUI is 7658 running the name in "#RRGGBB" form 7659 "bg#" like "fg#" for "bg" 7660 "sp#" like "fg#" for "sp" 7661 "bold" "1" if bold 7662 "italic" "1" if italic 7663 "reverse" "1" if reverse 7664 "inverse" "1" if inverse (= reverse) 7665 "standout" "1" if standout 7666 "underline" "1" if underlined 7667 "undercurl" "1" if undercurled 7668 7669 Example (echoes the color of the syntax item under the 7670 cursor): > 7671 :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg") 7672< 7673synIDtrans({synID}) *synIDtrans()* 7674 The result is a Number, which is the translated syntax ID of 7675 {synID}. This is the syntax group ID of what is being used to 7676 highlight the character. Highlight links given with 7677 ":highlight link" are followed. 7678 7679synconcealed({lnum}, {col}) *synconcealed()* 7680 The result is a List with currently three items: 7681 1. The first item in the list is 0 if the character at the 7682 position {lnum} and {col} is not part of a concealable 7683 region, 1 if it is. 7684 2. The second item in the list is a string. If the first item 7685 is 1, the second item contains the text which will be 7686 displayed in place of the concealed text, depending on the 7687 current setting of 'conceallevel' and 'listchars'. 7688 3. The third and final item in the list is a number 7689 representing the specific syntax region matched in the 7690 line. When the character is not concealed the value is 7691 zero. This allows detection of the beginning of a new 7692 concealable region if there are two consecutive regions 7693 with the same replacement character. For an example, if 7694 the text is "123456" and both "23" and "45" are concealed 7695 and replace by the character "X", then: 7696 call returns ~ 7697 synconcealed(lnum, 1) [0, '', 0] 7698 synconcealed(lnum, 2) [1, 'X', 1] 7699 synconcealed(lnum, 3) [1, 'X', 1] 7700 synconcealed(lnum, 4) [1, 'X', 2] 7701 synconcealed(lnum, 5) [1, 'X', 2] 7702 synconcealed(lnum, 6) [0, '', 0] 7703 7704 7705synstack({lnum}, {col}) *synstack()* 7706 Return a |List|, which is the stack of syntax items at the 7707 position {lnum} and {col} in the current window. Each item in 7708 the List is an ID like what |synID()| returns. 7709 The first item in the List is the outer region, following are 7710 items contained in that one. The last one is what |synID()| 7711 returns, unless not the whole item is highlighted or it is a 7712 transparent item. 7713 This function is useful for debugging a syntax file. 7714 Example that shows the syntax stack under the cursor: > 7715 for id in synstack(line("."), col(".")) 7716 echo synIDattr(id, "name") 7717 endfor 7718< When the position specified with {lnum} and {col} is invalid 7719 nothing is returned. The position just after the last 7720 character in a line and the first column in an empty line are 7721 valid positions. 7722 7723system({expr} [, {input}]) *system()* *E677* 7724 Get the output of the shell command {expr} as a string. See 7725 |systemlist()| to get the output as a List. 7726 7727 When {input} is given and is a string this string is written 7728 to a file and passed as stdin to the command. The string is 7729 written as-is, you need to take care of using the correct line 7730 separators yourself. 7731 If {input} is given and is a |List| it is written to the file 7732 in a way |writefile()| does with {binary} set to "b" (i.e. 7733 with a newline between each list item with newlines inside 7734 list items converted to NULs). 7735 When {input} is given and is a number that is a valid id for 7736 an existing buffer then the content of the buffer is written 7737 to the file line by line, each line terminated by a NL and 7738 NULs characters where the text has a NL. 7739 7740 Pipes are not used, the 'shelltemp' option is not used. 7741 7742 When prepended by |:silent| the terminal will not be set to 7743 cooked mode. This is meant to be used for commands that do 7744 not need the user to type. It avoids stray characters showing 7745 up on the screen which require |CTRL-L| to remove. > 7746 :silent let f = system('ls *.vim') 7747< 7748 Note: Use |shellescape()| or |::S| with |expand()| or 7749 |fnamemodify()| to escape special characters in a command 7750 argument. Newlines in {expr} may cause the command to fail. 7751 The characters in 'shellquote' and 'shellxquote' may also 7752 cause trouble. 7753 This is not to be used for interactive commands. 7754 7755 The result is a String. Example: > 7756 :let files = system("ls " . shellescape(expand('%:h'))) 7757 :let files = system('ls ' . expand('%:h:S')) 7758 7759< To make the result more system-independent, the shell output 7760 is filtered to replace <CR> with <NL> for Macintosh, and 7761 <CR><NL> with <NL> for DOS-like systems. 7762 To avoid the string being truncated at a NUL, all NUL 7763 characters are replaced with SOH (0x01). 7764 7765 The command executed is constructed using several options: 7766 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote' 7767 ({tmp} is an automatically generated file name). 7768 For Unix and OS/2 braces are put around {expr} to allow for 7769 concatenated commands. 7770 7771 The command will be executed in "cooked" mode, so that a 7772 CTRL-C will interrupt the command (on Unix at least). 7773 7774 The resulting error code can be found in |v:shell_error|. 7775 This function will fail in |restricted-mode|. 7776 7777 Note that any wrong value in the options mentioned above may 7778 make the function fail. It has also been reported to fail 7779 when using a security agent application. 7780 Unlike ":!cmd" there is no automatic check for changed files. 7781 Use |:checktime| to force a check. 7782 7783 7784systemlist({expr} [, {input}]) *systemlist()* 7785 Same as |system()|, but returns a |List| with lines (parts of 7786 output separated by NL) with NULs transformed into NLs. Output 7787 is the same as |readfile()| will output with {binary} argument 7788 set to "b". Note that on MS-Windows you may get trailing CR 7789 characters. 7790 7791 Returns an empty string on error. 7792 7793 7794tabpagebuflist([{arg}]) *tabpagebuflist()* 7795 The result is a |List|, where each item is the number of the 7796 buffer associated with each window in the current tab page. 7797 {arg} specifies the number of the tab page to be used. When 7798 omitted the current tab page is used. 7799 When {arg} is invalid the number zero is returned. 7800 To get a list of all buffers in all tabs use this: > 7801 let buflist = [] 7802 for i in range(tabpagenr('$')) 7803 call extend(buflist, tabpagebuflist(i + 1)) 7804 endfor 7805< Note that a buffer may appear in more than one window. 7806 7807 7808tabpagenr([{arg}]) *tabpagenr()* 7809 The result is a Number, which is the number of the current 7810 tab page. The first tab page has number 1. 7811 When the optional argument is "$", the number of the last tab 7812 page is returned (the tab page count). 7813 The number can be used with the |:tab| command. 7814 7815 7816tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()* 7817 Like |winnr()| but for tab page {tabarg}. 7818 {tabarg} specifies the number of tab page to be used. 7819 {arg} is used like with |winnr()|: 7820 - When omitted the current window number is returned. This is 7821 the window which will be used when going to this tab page. 7822 - When "$" the number of windows is returned. 7823 - When "#" the previous window nr is returned. 7824 Useful examples: > 7825 tabpagewinnr(1) " current window of tab page 1 7826 tabpagewinnr(4, '$') " number of windows in tab page 4 7827< When {tabarg} is invalid zero is returned. 7828 7829 *tagfiles()* 7830tagfiles() Returns a |List| with the file names used to search for tags 7831 for the current buffer. This is the 'tags' option expanded. 7832 7833 7834taglist({expr}[, {filename}]) *taglist()* 7835 Returns a list of tags matching the regular expression {expr}. 7836 7837 If {filename} is passed it is used to prioritize the results 7838 in the same way that |:tselect| does. See |tag-priority|. 7839 {filename} should be the full path of the file. 7840 7841 Each list item is a dictionary with at least the following 7842 entries: 7843 name Name of the tag. 7844 filename Name of the file where the tag is 7845 defined. It is either relative to the 7846 current directory or a full path. 7847 cmd Ex command used to locate the tag in 7848 the file. 7849 kind Type of the tag. The value for this 7850 entry depends on the language specific 7851 kind values. Only available when 7852 using a tags file generated by 7853 Exuberant ctags or hdrtag. 7854 static A file specific tag. Refer to 7855 |static-tag| for more information. 7856 More entries may be present, depending on the content of the 7857 tags file: access, implementation, inherits and signature. 7858 Refer to the ctags documentation for information about these 7859 fields. For C code the fields "struct", "class" and "enum" 7860 may appear, they give the name of the entity the tag is 7861 contained in. 7862 7863 The ex-command "cmd" can be either an ex search pattern, a 7864 line number or a line number followed by a byte number. 7865 7866 If there are no matching tags, then an empty list is returned. 7867 7868 To get an exact tag match, the anchors '^' and '$' should be 7869 used in {expr}. This also make the function work faster. 7870 Refer to |tag-regexp| for more information about the tag 7871 search regular expression pattern. 7872 7873 Refer to |'tags'| for information about how the tags file is 7874 located by Vim. Refer to |tags-file-format| for the format of 7875 the tags file generated by the different ctags tools. 7876 7877tan({expr}) *tan()* 7878 Return the tangent of {expr}, measured in radians, as a |Float| 7879 in the range [-inf, inf]. 7880 {expr} must evaluate to a |Float| or a |Number|. 7881 Examples: > 7882 :echo tan(10) 7883< 0.648361 > 7884 :echo tan(-4.01) 7885< -1.181502 7886 {only available when compiled with the |+float| feature} 7887 7888 7889tanh({expr}) *tanh()* 7890 Return the hyperbolic tangent of {expr} as a |Float| in the 7891 range [-1, 1]. 7892 {expr} must evaluate to a |Float| or a |Number|. 7893 Examples: > 7894 :echo tanh(0.5) 7895< 0.462117 > 7896 :echo tanh(-1) 7897< -0.761594 7898 {only available when compiled with the |+float| feature} 7899 7900 7901tempname() *tempname()* *temp-file-name* 7902 The result is a String, which is the name of a file that 7903 doesn't exist. It can be used for a temporary file. The name 7904 is different for at least 26 consecutive calls. Example: > 7905 :let tmpfile = tempname() 7906 :exe "redir > " . tmpfile 7907< For Unix, the file will be in a private directory |tempfile|. 7908 For MS-Windows forward slashes are used when the 'shellslash' 7909 option is set or when 'shellcmdflag' starts with '-'. 7910 7911term_getattr({attr}, {what}) *term_getattr()* 7912 Given {attr}, a value returned by term_scrape() in the "attr" 7913 item, return whether {what} is on. {what} can be one of: 7914 bold 7915 italic 7916 underline 7917 strike 7918 reverse 7919 7920term_getcursor({buf}) *term_getcursor()* 7921 Get the cusor position of terminal {buf}. Returns a list with 7922 three numbers: [rows, cols, visible]. "rows" and "cols" are 7923 one based, the first sceen cell is row 1, column 1. 7924 "visible" is one when the cursor is visible, zero when it is 7925 hidden. 7926 7927 This is the cursor position of the terminal itself, not of the 7928 Vim window. 7929 7930 {buf} must be the buffer number of a terminal window. If the 7931 buffer does not exist or is not a terminal window, an empty 7932 list is returned. 7933 7934term_getjob({buf}) *term_getjob()* 7935 Get the Job associated with terminal window {buf}. 7936 {buf} is used as with |term_getsize()|. 7937 Returns |v:null| when there is no job. 7938 7939term_getline({buf}, {row}) *term_getline()* 7940 Get a line of text from the terminal window of {buf}. 7941 {buf} is used as with |term_getsize()|. 7942 7943 The first line has {row} one. When {row} "." the cursor line 7944 is used. When {row} is invalid an empty string is returned. 7945 7946term_getsize({buf}) *term_getsize()* 7947 Get the size of terminal {buf}. Returns a list with two 7948 numbers: [rows, cols]. This is the size of the terminal, not 7949 the window containing the terminal. 7950 7951 {buf} must be the buffer number of a terminal window. Use an 7952 empty string for the current buffer. If the buffer does not 7953 exist or is not a terminal window, an empty list is returned. 7954 7955term_getstatus({buf}) *term_getstatus()* 7956 Get the status of terminal {buf}. This returns a comma 7957 separated list of these items: 7958 running job is running 7959 finished job has finished 7960 terminal in Terminal-Normal mode 7961 One of "running" or "finished" is always present. 7962 7963 {buf} must be the buffer number of a terminal window. If the 7964 buffer does not exist or is not a terminal window, an empty 7965 string is returned. 7966 7967term_gettitle({buf}) *term_gettitle()* 7968 Get the title of terminal {buf}. This is the title that the 7969 job in the terminal has set. 7970 7971 {buf} must be the buffer number of a terminal window. If the 7972 buffer does not exist or is not a terminal window, an empty 7973 string is returned. 7974 7975term_gettty({buf}) *term_gettty()* 7976 Get the name of the controlling terminal associated with 7977 terminal window {buf}. 7978 {buf} is used as with |term_getsize()|. 7979 7980term_list() *term_list()* 7981 Return a list with the buffer numbers of all buffers for 7982 terminal windows. 7983 7984term_scrape({buf}, {row}) *term_scrape()* 7985 Get the contents of {row} of terminal screen of {buf}. 7986 For {buf} see |term_getsize()|. 7987 7988 The first line has {row} one. When {row} "." the cursor line 7989 is used. When {row} is invalid an empty string is returned. 7990 7991 Return a List containing a Dict for each screen cell: 7992 "chars" character(s) at the cell 7993 "fg" foreground color as #rrggbb 7994 "bg" background color as #rrggbb 7995 "attr" attributes of the cell, use |term_getattr()| 7996 to get the individual flags 7997 "width" cell width: 1 or 2 7998 7999term_sendkeys({buf}, {keys}) *term_sendkeys()* 8000 Send keystrokes {keys} to terminal {buf}. 8001 {buf} is used as with |term_getsize()|. 8002 8003 {keys} are translated as key sequences. For example, "\<c-x>" 8004 means the character CTRL-X. 8005 8006term_start({cmd}, {options}) *term_start()* 8007 Open a terminal window and run {cmd} in it. 8008 8009 Returns the buffer number of the terminal window. 8010 When opening the window fails zero is returned. 8011 8012 {options} are similar to what is used for |job_start()|, see 8013 |job-options|. However, not all options can be used. These 8014 are supported: 8015 all timeout options 8016 "stoponexit" 8017 "out_cb", "err_cb" 8018 "exit_cb", "close_cb" 8019 "in_io", "in_top", "in_bot", "in_name", "in_buf" 8020 "out_io", "out_name", "out_buf", "out_modifiable", "out_msg" 8021 "err_io", "err_name", "err_buf", "err_modifiable", "err_msg" 8022 However, at least one of stdin, stdout or stderr must be 8023 connected to the terminal. When I/O is connected to the 8024 terminal then the callback function for that part is not used. 8025 8026 There is one extra option: 8027 "term_name" name to use for the buffer name, instead of 8028 the command name. 8029 8030term_wait({buf}) *term_wait()* 8031 Wait for pending updates of {buf} to be handled. 8032 {buf} is used as with |term_getsize()|. 8033 8034test_alloc_fail({id}, {countdown}, {repeat}) *test_alloc_fail()* 8035 This is for testing: If the memory allocation with {id} is 8036 called, then decrement {countdown}, and when it reaches zero 8037 let memory allocation fail {repeat} times. When {repeat} is 8038 smaller than one it fails one time. 8039 8040test_autochdir() *test_autochdir()* 8041 Set a flag to enable the effect of 'autochdir' before Vim 8042 startup has finished. 8043 8044test_garbagecollect_now() *test_garbagecollect_now()* 8045 Like garbagecollect(), but executed right away. This must 8046 only be called directly to avoid any structure to exist 8047 internally, and |v:testing| must have been set before calling 8048 any function. 8049 8050test_ignore_error({expr}) *test_ignore_error()* 8051 Ignore any error containing {expr}. A normal message is given 8052 instead. 8053 This is only meant to be used in tests, where catching the 8054 error with try/catch cannot be used (because it skips over 8055 following code). 8056 {expr} is used literally, not as a pattern. 8057 There is currently no way to revert this. 8058 8059test_null_channel() *test_null_channel()* 8060 Return a Channel that is null. Only useful for testing. 8061 {only available when compiled with the +channel feature} 8062 8063test_null_dict() *test_null_dict()* 8064 Return a Dict that is null. Only useful for testing. 8065 8066test_null_job() *test_null_job()* 8067 Return a Job that is null. Only useful for testing. 8068 {only available when compiled with the +job feature} 8069 8070test_null_list() *test_null_list()* 8071 Return a List that is null. Only useful for testing. 8072 8073test_null_partial() *test_null_partial()* 8074 Return a Partial that is null. Only useful for testing. 8075 8076test_null_string() *test_null_string()* 8077 Return a String that is null. Only useful for testing. 8078 8079test_override({name}, {val}) *test_override()* 8080 Overrides certain parts of Vims internal processing to be able 8081 to run tests. Only to be used for testing Vim! 8082 The override is enabled when {val} is non-zero and removed 8083 when {val} is zero. 8084 Current supported values for name are: 8085 8086 name effect when {val} is non-zero ~ 8087 redraw disable the redrawing() function 8088 char_avail disable the char_avail() function 8089 starting reset the "starting" variable, see below 8090 ALL clear all overrides ({val} is not used) 8091 8092 "starting" is to be used when a test should behave like 8093 startup was done. Since the tests are run by sourcing a 8094 script the "starting" variable is non-zero. This is usually a 8095 good thing (tests run faster), but sometimes changes behavior 8096 in a way that the test doesn't work properly. 8097 When using: > 8098 call test_override('starting', 1) 8099< The value of "starting" is saved. It is restored by: > 8100 call test_override('starting', 0) 8101 8102test_settime({expr}) *test_settime()* 8103 Set the time Vim uses internally. Currently only used for 8104 timestamps in the history, as they are used in viminfo, and 8105 for undo. 8106 Using a value of 1 makes Vim not sleep after a warning or 8107 error message. 8108 {expr} must evaluate to a number. When the value is zero the 8109 normal behavior is restored. 8110 8111 *timer_info()* 8112timer_info([{id}]) 8113 Return a list with information about timers. 8114 When {id} is given only information about this timer is 8115 returned. When timer {id} does not exist an empty list is 8116 returned. 8117 When {id} is omitted information about all timers is returned. 8118 8119 For each timer the information is stored in a Dictionary with 8120 these items: 8121 "id" the timer ID 8122 "time" time the timer was started with 8123 "remaining" time until the timer fires 8124 "repeat" number of times the timer will still fire; 8125 -1 means forever 8126 "callback" the callback 8127 "paused" 1 if the timer is paused, 0 otherwise 8128 8129 {only available when compiled with the |+timers| feature} 8130 8131timer_pause({timer}, {paused}) *timer_pause()* 8132 Pause or unpause a timer. A paused timer does not invoke its 8133 callback when its time expires. Unpausing a timer may cause 8134 the callback to be invoked almost immediately if enough time 8135 has passed. 8136 8137 Pausing a timer is useful to avoid the callback to be called 8138 for a short time. 8139 8140 If {paused} evaluates to a non-zero Number or a non-empty 8141 String, then the timer is paused, otherwise it is unpaused. 8142 See |non-zero-arg|. 8143 8144 {only available when compiled with the |+timers| feature} 8145 8146 *timer_start()* *timer* *timers* 8147timer_start({time}, {callback} [, {options}]) 8148 Create a timer and return the timer ID. 8149 8150 {time} is the waiting time in milliseconds. This is the 8151 minimum time before invoking the callback. When the system is 8152 busy or Vim is not waiting for input the time will be longer. 8153 8154 {callback} is the function to call. It can be the name of a 8155 function or a |Funcref|. It is called with one argument, which 8156 is the timer ID. The callback is only invoked when Vim is 8157 waiting for input. 8158 8159 {options} is a dictionary. Supported entries: 8160 "repeat" Number of times to repeat calling the 8161 callback. -1 means forever. When not present 8162 the callback will be called once. 8163 If the timer causes an error three times in a 8164 row the repeat is cancelled. This avoids that 8165 Vim becomes unusable because of all the error 8166 messages. 8167 8168 Example: > 8169 func MyHandler(timer) 8170 echo 'Handler called' 8171 endfunc 8172 let timer = timer_start(500, 'MyHandler', 8173 \ {'repeat': 3}) 8174< This will invoke MyHandler() three times at 500 msec 8175 intervals. 8176 8177 {only available when compiled with the |+timers| feature} 8178 8179timer_stop({timer}) *timer_stop()* 8180 Stop a timer. The timer callback will no longer be invoked. 8181 {timer} is an ID returned by timer_start(), thus it must be a 8182 Number. If {timer} does not exist there is no error. 8183 8184 {only available when compiled with the |+timers| feature} 8185 8186timer_stopall() *timer_stopall()* 8187 Stop all timers. The timer callbacks will no longer be 8188 invoked. Useful if some timers is misbehaving. If there are 8189 no timers there is no error. 8190 8191 {only available when compiled with the |+timers| feature} 8192 8193tolower({expr}) *tolower()* 8194 The result is a copy of the String given, with all uppercase 8195 characters turned into lowercase (just like applying |gu| to 8196 the string). 8197 8198toupper({expr}) *toupper()* 8199 The result is a copy of the String given, with all lowercase 8200 characters turned into uppercase (just like applying |gU| to 8201 the string). 8202 8203tr({src}, {fromstr}, {tostr}) *tr()* 8204 The result is a copy of the {src} string with all characters 8205 which appear in {fromstr} replaced by the character in that 8206 position in the {tostr} string. Thus the first character in 8207 {fromstr} is translated into the first character in {tostr} 8208 and so on. Exactly like the unix "tr" command. 8209 This code also deals with multibyte characters properly. 8210 8211 Examples: > 8212 echo tr("hello there", "ht", "HT") 8213< returns "Hello THere" > 8214 echo tr("<blob>", "<>", "{}") 8215< returns "{blob}" 8216 8217trunc({expr}) *trunc()* 8218 Return the largest integral value with magnitude less than or 8219 equal to {expr} as a |Float| (truncate towards zero). 8220 {expr} must evaluate to a |Float| or a |Number|. 8221 Examples: > 8222 echo trunc(1.456) 8223< 1.0 > 8224 echo trunc(-5.456) 8225< -5.0 > 8226 echo trunc(4.0) 8227< 4.0 8228 {only available when compiled with the |+float| feature} 8229 8230 *type()* 8231type({expr}) The result is a Number representing the type of {expr}. 8232 Instead of using the number directly, it is better to use the 8233 v:t_ variable that has the value: 8234 Number: 0 |v:t_number| 8235 String: 1 |v:t_string| 8236 Funcref: 2 |v:t_func| 8237 List: 3 |v:t_list| 8238 Dictionary: 4 |v:t_dict| 8239 Float: 5 |v:t_float| 8240 Boolean: 6 |v:t_bool| (v:false and v:true) 8241 None 7 |v:t_none| (v:null and v:none) 8242 Job 8 |v:t_job| 8243 Channel 9 |v:t_channel| 8244 For backward compatibility, this method can be used: > 8245 :if type(myvar) == type(0) 8246 :if type(myvar) == type("") 8247 :if type(myvar) == type(function("tr")) 8248 :if type(myvar) == type([]) 8249 :if type(myvar) == type({}) 8250 :if type(myvar) == type(0.0) 8251 :if type(myvar) == type(v:false) 8252 :if type(myvar) == type(v:none) 8253< To check if the v:t_ variables exist use this: > 8254 :if exists('v:t_number') 8255 8256undofile({name}) *undofile()* 8257 Return the name of the undo file that would be used for a file 8258 with name {name} when writing. This uses the 'undodir' 8259 option, finding directories that exist. It does not check if 8260 the undo file exists. 8261 {name} is always expanded to the full path, since that is what 8262 is used internally. 8263 If {name} is empty undofile() returns an empty string, since a 8264 buffer without a file name will not write an undo file. 8265 Useful in combination with |:wundo| and |:rundo|. 8266 When compiled without the +persistent_undo option this always 8267 returns an empty string. 8268 8269undotree() *undotree()* 8270 Return the current state of the undo tree in a dictionary with 8271 the following items: 8272 "seq_last" The highest undo sequence number used. 8273 "seq_cur" The sequence number of the current position in 8274 the undo tree. This differs from "seq_last" 8275 when some changes were undone. 8276 "time_cur" Time last used for |:earlier| and related 8277 commands. Use |strftime()| to convert to 8278 something readable. 8279 "save_last" Number of the last file write. Zero when no 8280 write yet. 8281 "save_cur" Number of the current position in the undo 8282 tree. 8283 "synced" Non-zero when the last undo block was synced. 8284 This happens when waiting from input from the 8285 user. See |undo-blocks|. 8286 "entries" A list of dictionaries with information about 8287 undo blocks. 8288 8289 The first item in the "entries" list is the oldest undo item. 8290 Each List item is a Dictionary with these items: 8291 "seq" Undo sequence number. Same as what appears in 8292 |:undolist|. 8293 "time" Timestamp when the change happened. Use 8294 |strftime()| to convert to something readable. 8295 "newhead" Only appears in the item that is the last one 8296 that was added. This marks the last change 8297 and where further changes will be added. 8298 "curhead" Only appears in the item that is the last one 8299 that was undone. This marks the current 8300 position in the undo tree, the block that will 8301 be used by a redo command. When nothing was 8302 undone after the last change this item will 8303 not appear anywhere. 8304 "save" Only appears on the last block before a file 8305 write. The number is the write count. The 8306 first write has number 1, the last one the 8307 "save_last" mentioned above. 8308 "alt" Alternate entry. This is again a List of undo 8309 blocks. Each item may again have an "alt" 8310 item. 8311 8312uniq({list} [, {func} [, {dict}]]) *uniq()* *E882* 8313 Remove second and succeeding copies of repeated adjacent 8314 {list} items in-place. Returns {list}. If you want a list 8315 to remain unmodified make a copy first: > 8316 :let newlist = uniq(copy(mylist)) 8317< The default compare function uses the string representation of 8318 each item. For the use of {func} and {dict} see |sort()|. 8319 8320values({dict}) *values()* 8321 Return a |List| with all the values of {dict}. The |List| is 8322 in arbitrary order. 8323 8324 8325virtcol({expr}) *virtcol()* 8326 The result is a Number, which is the screen column of the file 8327 position given with {expr}. That is, the last screen position 8328 occupied by the character at that position, when the screen 8329 would be of unlimited width. When there is a <Tab> at the 8330 position, the returned Number will be the column at the end of 8331 the <Tab>. For example, for a <Tab> in column 1, with 'ts' 8332 set to 8, it returns 8. |conceal| is ignored. 8333 For the byte position use |col()|. 8334 For the use of {expr} see |col()|. 8335 When 'virtualedit' is used {expr} can be [lnum, col, off], where 8336 "off" is the offset in screen columns from the start of the 8337 character. E.g., a position within a <Tab> or after the last 8338 character. When "off" is omitted zero is used. 8339 When Virtual editing is active in the current mode, a position 8340 beyond the end of the line can be returned. |'virtualedit'| 8341 The accepted positions are: 8342 . the cursor position 8343 $ the end of the cursor line (the result is the 8344 number of displayed characters in the cursor line 8345 plus one) 8346 'x position of mark x (if the mark is not set, 0 is 8347 returned) 8348 v In Visual mode: the start of the Visual area (the 8349 cursor is the end). When not in Visual mode 8350 returns the cursor position. Differs from |'<| in 8351 that it's updated right away. 8352 Note that only marks in the current file can be used. 8353 Examples: > 8354 virtcol(".") with text "foo^Lbar", with cursor on the "^L", returns 5 8355 virtcol("$") with text "foo^Lbar", returns 9 8356 virtcol("'t") with text " there", with 't at 'h', returns 6 8357< The first column is 1. 0 is returned for an error. 8358 A more advanced example that echoes the maximum length of 8359 all lines: > 8360 echo max(map(range(1, line('$')), "virtcol([v:val, '$'])")) 8361 8362 8363visualmode([expr]) *visualmode()* 8364 The result is a String, which describes the last Visual mode 8365 used in the current buffer. Initially it returns an empty 8366 string, but once Visual mode has been used, it returns "v", 8367 "V", or "<CTRL-V>" (a single CTRL-V character) for 8368 character-wise, line-wise, or block-wise Visual mode 8369 respectively. 8370 Example: > 8371 :exe "normal " . visualmode() 8372< This enters the same Visual mode as before. It is also useful 8373 in scripts if you wish to act differently depending on the 8374 Visual mode that was used. 8375 If Visual mode is active, use |mode()| to get the Visual mode 8376 (e.g., in a |:vmap|). 8377 If [expr] is supplied and it evaluates to a non-zero Number or 8378 a non-empty String, then the Visual mode will be cleared and 8379 the old value is returned. See |non-zero-arg|. 8380 8381wildmenumode() *wildmenumode()* 8382 Returns |TRUE| when the wildmenu is active and |FALSE| 8383 otherwise. See 'wildmenu' and 'wildmode'. 8384 This can be used in mappings to handle the 'wildcharm' option 8385 gracefully. (Makes only sense with |mapmode-c| mappings). 8386 8387 For example to make <c-j> work like <down> in wildmode, use: > 8388 :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>" 8389< 8390 (Note, this needs the 'wildcharm' option set appropriately). 8391 8392 8393win_findbuf({bufnr}) *win_findbuf()* 8394 Returns a list with |window-ID|s for windows that contain 8395 buffer {bufnr}. When there is none the list is empty. 8396 8397win_getid([{win} [, {tab}]]) *win_getid()* 8398 Get the |window-ID| for the specified window. 8399 When {win} is missing use the current window. 8400 With {win} this is the window number. The top window has 8401 number 1. 8402 Without {tab} use the current tab, otherwise the tab with 8403 number {tab}. The first tab has number one. 8404 Return zero if the window cannot be found. 8405 8406win_gotoid({expr}) *win_gotoid()* 8407 Go to window with ID {expr}. This may also change the current 8408 tabpage. 8409 Return 1 if successful, 0 if the window cannot be found. 8410 8411win_id2tabwin({expr}) *win_id2tabwin()* 8412 Return a list with the tab number and window number of window 8413 with ID {expr}: [tabnr, winnr]. 8414 Return [0, 0] if the window cannot be found. 8415 8416win_id2win({expr}) *win_id2win()* 8417 Return the window number of window with ID {expr}. 8418 Return 0 if the window cannot be found in the current tabpage. 8419 8420 *winbufnr()* 8421winbufnr({nr}) The result is a Number, which is the number of the buffer 8422 associated with window {nr}. {nr} can be the window number or 8423 the |window-ID|. 8424 When {nr} is zero, the number of the buffer in the current 8425 window is returned. 8426 When window {nr} doesn't exist, -1 is returned. 8427 Example: > 8428 :echo "The file in the current window is " . bufname(winbufnr(0)) 8429< 8430 *wincol()* 8431wincol() The result is a Number, which is the virtual column of the 8432 cursor in the window. This is counting screen cells from the 8433 left side of the window. The leftmost column is one. 8434 8435winheight({nr}) *winheight()* 8436 The result is a Number, which is the height of window {nr}. 8437 {nr} can be the window number or the |window-ID|. 8438 When {nr} is zero, the height of the current window is 8439 returned. When window {nr} doesn't exist, -1 is returned. 8440 An existing window always has a height of zero or more. 8441 Examples: > 8442 :echo "The current window has " . winheight(0) . " lines." 8443< 8444 *winline()* 8445winline() The result is a Number, which is the screen line of the cursor 8446 in the window. This is counting screen lines from the top of 8447 the window. The first line is one. 8448 If the cursor was moved the view on the file will be updated 8449 first, this may cause a scroll. 8450 8451 *winnr()* 8452winnr([{arg}]) The result is a Number, which is the number of the current 8453 window. The top window has number 1. 8454 When the optional argument is "$", the number of the 8455 last window is returned (the window count). > 8456 let window_count = winnr('$') 8457< When the optional argument is "#", the number of the last 8458 accessed window is returned (where |CTRL-W_p| goes to). 8459 If there is no previous window or it is in another tab page 0 8460 is returned. 8461 The number can be used with |CTRL-W_w| and ":wincmd w" 8462 |:wincmd|. 8463 Also see |tabpagewinnr()| and |win_getid()|. 8464 8465 *winrestcmd()* 8466winrestcmd() Returns a sequence of |:resize| commands that should restore 8467 the current window sizes. Only works properly when no windows 8468 are opened or closed and the current window and tab page is 8469 unchanged. 8470 Example: > 8471 :let cmd = winrestcmd() 8472 :call MessWithWindowSizes() 8473 :exe cmd 8474< 8475 *winrestview()* 8476winrestview({dict}) 8477 Uses the |Dictionary| returned by |winsaveview()| to restore 8478 the view of the current window. 8479 Note: The {dict} does not have to contain all values, that are 8480 returned by |winsaveview()|. If values are missing, those 8481 settings won't be restored. So you can use: > 8482 :call winrestview({'curswant': 4}) 8483< 8484 This will only set the curswant value (the column the cursor 8485 wants to move on vertical movements) of the cursor to column 5 8486 (yes, that is 5), while all other settings will remain the 8487 same. This is useful, if you set the cursor position manually. 8488 8489 If you have changed the values the result is unpredictable. 8490 If the window size changed the result won't be the same. 8491 8492 *winsaveview()* 8493winsaveview() Returns a |Dictionary| that contains information to restore 8494 the view of the current window. Use |winrestview()| to 8495 restore the view. 8496 This is useful if you have a mapping that jumps around in the 8497 buffer and you want to go back to the original view. 8498 This does not save fold information. Use the 'foldenable' 8499 option to temporarily switch off folding, so that folds are 8500 not opened when moving around. This may have side effects. 8501 The return value includes: 8502 lnum cursor line number 8503 col cursor column (Note: the first column 8504 zero, as opposed to what getpos() 8505 returns) 8506 coladd cursor column offset for 'virtualedit' 8507 curswant column for vertical movement 8508 topline first line in the window 8509 topfill filler lines, only in diff mode 8510 leftcol first column displayed 8511 skipcol columns skipped 8512 Note that no option values are saved. 8513 8514 8515winwidth({nr}) *winwidth()* 8516 The result is a Number, which is the width of window {nr}. 8517 {nr} can be the window number or the |window-ID|. 8518 When {nr} is zero, the width of the current window is 8519 returned. When window {nr} doesn't exist, -1 is returned. 8520 An existing window always has a width of zero or more. 8521 Examples: > 8522 :echo "The current window has " . winwidth(0) . " columns." 8523 :if winwidth(0) <= 50 8524 : exe "normal 50\<C-W>|" 8525 :endif 8526< For getting the terminal or screen size, see the 'columns' 8527 option. 8528 8529 8530wordcount() *wordcount()* 8531 The result is a dictionary of byte/chars/word statistics for 8532 the current buffer. This is the same info as provided by 8533 |g_CTRL-G| 8534 The return value includes: 8535 bytes Number of bytes in the buffer 8536 chars Number of chars in the buffer 8537 words Number of words in the buffer 8538 cursor_bytes Number of bytes before cursor position 8539 (not in Visual mode) 8540 cursor_chars Number of chars before cursor position 8541 (not in Visual mode) 8542 cursor_words Number of words before cursor position 8543 (not in Visual mode) 8544 visual_bytes Number of bytes visually selected 8545 (only in Visual mode) 8546 visual_chars Number of chars visually selected 8547 (only in Visual mode) 8548 visual_words Number of chars visually selected 8549 (only in Visual mode) 8550 8551 8552 *writefile()* 8553writefile({list}, {fname} [, {flags}]) 8554 Write |List| {list} to file {fname}. Each list item is 8555 separated with a NL. Each list item must be a String or 8556 Number. 8557 When {flags} contains "b" then binary mode is used: There will 8558 not be a NL after the last list item. An empty item at the 8559 end does cause the last line in the file to end in a NL. 8560 8561 When {flags} contains "a" then append mode is used, lines are 8562 appended to the file: > 8563 :call writefile(["foo"], "event.log", "a") 8564 :call writefile(["bar"], "event.log", "a") 8565> 8566< All NL characters are replaced with a NUL character. 8567 Inserting CR characters needs to be done before passing {list} 8568 to writefile(). 8569 An existing file is overwritten, if possible. 8570 When the write fails -1 is returned, otherwise 0. There is an 8571 error message if the file can't be created or when writing 8572 fails. 8573 Also see |readfile()|. 8574 To copy a file byte for byte: > 8575 :let fl = readfile("foo", "b") 8576 :call writefile(fl, "foocopy", "b") 8577 8578 8579xor({expr}, {expr}) *xor()* 8580 Bitwise XOR on the two arguments. The arguments are converted 8581 to a number. A List, Dict or Float argument causes an error. 8582 Example: > 8583 :let bits = xor(bits, 0x80) 8584< 8585 8586 8587 *feature-list* 8588There are four types of features: 85891. Features that are only supported when they have been enabled when Vim 8590 was compiled |+feature-list|. Example: > 8591 :if has("cindent") 85922. Features that are only supported when certain conditions have been met. 8593 Example: > 8594 :if has("gui_running") 8595< *has-patch* 85963. Included patches. The "patch123" feature means that patch 123 has been 8597 included. Note that this form does not check the version of Vim, you need 8598 to inspect |v:version| for that. 8599 Example (checking version 6.2.148 or later): > 8600 :if v:version > 602 || v:version == 602 && has("patch148") 8601< Note that it's possible for patch 147 to be omitted even though 148 is 8602 included. 8603 86044. Beyond a certain version or at a certain version and including a specific 8605 patch. The "patch-7.4.237" feature means that the Vim version is 7.5 or 8606 later, or it is version 7.4 and patch 237 was included. 8607 Note that this only works for patch 7.4.237 and later, before that you 8608 need to use the example above that checks v:version. Example: > 8609 :if has("patch-7.4.248") 8610< Note that it's possible for patch 147 to be omitted even though 148 is 8611 included. 8612 8613Hint: To find out if Vim supports backslashes in a file name (MS-Windows), 8614use: `if exists('+shellslash')` 8615 8616 8617acl Compiled with |ACL| support. 8618all_builtin_terms Compiled with all builtin terminals enabled. 8619amiga Amiga version of Vim. 8620arabic Compiled with Arabic support |Arabic|. 8621arp Compiled with ARP support (Amiga). 8622autocmd Compiled with autocommand support. |autocommand| 8623balloon_eval Compiled with |balloon-eval| support. 8624balloon_multiline GUI supports multiline balloons. 8625beos BeOS version of Vim. 8626browse Compiled with |:browse| support, and browse() will 8627 work. 8628browsefilter Compiled with support for |browsefilter|. 8629builtin_terms Compiled with some builtin terminals. 8630byte_offset Compiled with support for 'o' in 'statusline' 8631cindent Compiled with 'cindent' support. 8632clientserver Compiled with remote invocation support |clientserver|. 8633clipboard Compiled with 'clipboard' support. 8634cmdline_compl Compiled with |cmdline-completion| support. 8635cmdline_hist Compiled with |cmdline-history| support. 8636cmdline_info Compiled with 'showcmd' and 'ruler' support. 8637comments Compiled with |'comments'| support. 8638compatible Compiled to be very Vi compatible. 8639cryptv Compiled with encryption support |encryption|. 8640cscope Compiled with |cscope| support. 8641debug Compiled with "DEBUG" defined. 8642dialog_con Compiled with console dialog support. 8643dialog_gui Compiled with GUI dialog support. 8644diff Compiled with |vimdiff| and 'diff' support. 8645digraphs Compiled with support for digraphs. 8646directx Compiled with support for DirectX and 'renderoptions'. 8647dnd Compiled with support for the "~ register |quote_~|. 8648ebcdic Compiled on a machine with ebcdic character set. 8649emacs_tags Compiled with support for Emacs tags. 8650eval Compiled with expression evaluation support. Always 8651 true, of course! 8652ex_extra |+ex_extra|, always true now 8653extra_search Compiled with support for |'incsearch'| and 8654 |'hlsearch'| 8655farsi Compiled with Farsi support |farsi|. 8656file_in_path Compiled with support for |gf| and |<cfile>| 8657filterpipe When 'shelltemp' is off pipes are used for shell 8658 read/write/filter commands 8659find_in_path Compiled with support for include file searches 8660 |+find_in_path|. 8661float Compiled with support for |Float|. 8662fname_case Case in file names matters (for Amiga, MS-DOS, and 8663 Windows this is not present). 8664folding Compiled with |folding| support. 8665footer Compiled with GUI footer support. |gui-footer| 8666fork Compiled to use fork()/exec() instead of system(). 8667gettext Compiled with message translation |multi-lang| 8668gui Compiled with GUI enabled. 8669gui_athena Compiled with Athena GUI. 8670gui_gnome Compiled with Gnome support (gui_gtk is also defined). 8671gui_gtk Compiled with GTK+ GUI (any version). 8672gui_gtk2 Compiled with GTK+ 2 GUI (gui_gtk is also defined). 8673gui_gtk3 Compiled with GTK+ 3 GUI (gui_gtk is also defined). 8674gui_mac Compiled with Macintosh GUI. 8675gui_motif Compiled with Motif GUI. 8676gui_photon Compiled with Photon GUI. 8677gui_running Vim is running in the GUI, or it will start soon. 8678gui_win32 Compiled with MS Windows Win32 GUI. 8679gui_win32s idem, and Win32s system being used (Windows 3.1) 8680hangul_input Compiled with Hangul input support. |hangul| 8681iconv Can use iconv() for conversion. 8682insert_expand Compiled with support for CTRL-X expansion commands in 8683 Insert mode. 8684jumplist Compiled with |jumplist| support. 8685keymap Compiled with 'keymap' support. 8686lambda Compiled with |lambda| support. 8687langmap Compiled with 'langmap' support. 8688libcall Compiled with |libcall()| support. 8689linebreak Compiled with 'linebreak', 'breakat', 'showbreak' and 8690 'breakindent' support. 8691lispindent Compiled with support for lisp indenting. 8692listcmds Compiled with commands for the buffer list |:files| 8693 and the argument list |arglist|. 8694localmap Compiled with local mappings and abbr. |:map-local| 8695lua Compiled with Lua interface |Lua|. 8696mac Any Macintosh version of Vim, but not all OS X. 8697macunix Compiled for OS X, with |mac-darwin-feature| 8698osx Compiled for OS X, with or w/o |mac-darwin-feature| 8699menu Compiled with support for |:menu|. 8700mksession Compiled with support for |:mksession|. 8701modify_fname Compiled with file name modifiers. |filename-modifiers| 8702mouse Compiled with support mouse. 8703mouse_dec Compiled with support for Dec terminal mouse. 8704mouse_gpm Compiled with support for gpm (Linux console mouse) 8705mouse_netterm Compiled with support for netterm mouse. 8706mouse_pterm Compiled with support for qnx pterm mouse. 8707mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) 8708mouse_sgr Compiled with support for sgr mouse. 8709mouse_urxvt Compiled with support for urxvt mouse. 8710mouse_xterm Compiled with support for xterm mouse. 8711mouseshape Compiled with support for 'mouseshape'. 8712multi_byte Compiled with support for 'encoding' 8713multi_byte_encoding 'encoding' is set to a multi-byte encoding. 8714multi_byte_ime Compiled with support for IME input method. 8715multi_lang Compiled with support for multiple languages. 8716mzscheme Compiled with MzScheme interface |mzscheme|. 8717netbeans_enabled Compiled with support for |netbeans| and connected. 8718netbeans_intg Compiled with support for |netbeans|. 8719num64 Compiled with 64-bit |Number| support. 8720ole Compiled with OLE automation support for Win32. 8721packages Compiled with |packages| support. 8722path_extra Compiled with up/downwards search in 'path' and 'tags' 8723perl Compiled with Perl interface. 8724persistent_undo Compiled with support for persistent undo history. 8725postscript Compiled with PostScript file printing. 8726printer Compiled with |:hardcopy| support. 8727profile Compiled with |:profile| support. 8728python Compiled with Python 2.x interface. |has-python| 8729python3 Compiled with Python 3.x interface. |has-python| 8730pythonx Compiled with |python_x| interface. |has-pythonx| 8731qnx QNX version of Vim. 8732quickfix Compiled with |quickfix| support. 8733reltime Compiled with |reltime()| support. 8734rightleft Compiled with 'rightleft' support. 8735ruby Compiled with Ruby interface |ruby|. 8736scrollbind Compiled with 'scrollbind' support. 8737showcmd Compiled with 'showcmd' support. 8738signs Compiled with |:sign| support. 8739smartindent Compiled with 'smartindent' support. 8740spell Compiled with spell checking support |spell|. 8741startuptime Compiled with |--startuptime| support. 8742statusline Compiled with support for 'statusline', 'rulerformat' 8743 and special formats of 'titlestring' and 'iconstring'. 8744sun_workshop Compiled with support for Sun |workshop|. 8745syntax Compiled with syntax highlighting support |syntax|. 8746syntax_items There are active syntax highlighting items for the 8747 current buffer. 8748system Compiled to use system() instead of fork()/exec(). 8749tag_binary Compiled with binary searching in tags files 8750 |tag-binary-search|. 8751tag_old_static Compiled with support for old static tags 8752 |tag-old-static|. 8753tag_any_white Compiled with support for any white characters in tags 8754 files |tag-any-white|. 8755tcl Compiled with Tcl interface. 8756termguicolors Compiled with true color in terminal support. 8757terminal Compiled with |terminal| support. 8758terminfo Compiled with terminfo instead of termcap. 8759termresponse Compiled with support for |t_RV| and |v:termresponse|. 8760textobjects Compiled with support for |text-objects|. 8761tgetent Compiled with tgetent support, able to use a termcap 8762 or terminfo file. 8763timers Compiled with |timer_start()| support. 8764title Compiled with window title support |'title'|. 8765toolbar Compiled with support for |gui-toolbar|. 8766ttyin input is a terminal (tty) 8767ttyout output is a terminal (tty) 8768unix Unix version of Vim. 8769unnamedplus Compiled with support for "unnamedplus" in 'clipboard' 8770user_commands User-defined commands. 8771vertsplit Compiled with vertically split windows |:vsplit|. 8772vim_starting True while initial source'ing takes place. |startup| 8773 *vim_starting* 8774viminfo Compiled with viminfo support. 8775virtualedit Compiled with 'virtualedit' option. 8776visual Compiled with Visual mode. 8777visualextra Compiled with extra Visual mode commands. 8778 |blockwise-operators|. 8779vms VMS version of Vim. 8780vreplace Compiled with |gR| and |gr| commands. 8781wildignore Compiled with 'wildignore' option. 8782wildmenu Compiled with 'wildmenu' option. 8783win32 Win32 version of Vim (MS-Windows 95 and later, 32 or 8784 64 bits) 8785win32unix Win32 version of Vim, using Unix files (Cygwin) 8786win64 Win64 version of Vim (MS-Windows 64 bit). 8787win95 Win32 version for MS-Windows 95/98/ME. 8788winaltkeys Compiled with 'winaltkeys' option. 8789windows Compiled with support for more than one window. 8790writebackup Compiled with 'writebackup' default on. 8791xfontset Compiled with X fontset support |xfontset|. 8792xim Compiled with X input method support |xim|. 8793xpm Compiled with pixmap support. 8794xpm_w32 Compiled with pixmap support for Win32. (Only for 8795 backward compatibility. Use "xpm" instead.) 8796xsmp Compiled with X session management support. 8797xsmp_interact Compiled with interactive X session management support. 8798xterm_clipboard Compiled with support for xterm clipboard. 8799xterm_save Compiled with support for saving and restoring the 8800 xterm screen. 8801x11 Compiled with X11 support. 8802 8803 *string-match* 8804Matching a pattern in a String 8805 8806A regexp pattern as explained at |pattern| is normally used to find a match in 8807the buffer lines. When a pattern is used to find a match in a String, almost 8808everything works in the same way. The difference is that a String is handled 8809like it is one line. When it contains a "\n" character, this is not seen as a 8810line break for the pattern. It can be matched with a "\n" in the pattern, or 8811with ".". Example: > 8812 :let a = "aaaa\nxxxx" 8813 :echo matchstr(a, "..\n..") 8814 aa 8815 xx 8816 :echo matchstr(a, "a.x") 8817 a 8818 x 8819 8820Don't forget that "^" will only match at the first character of the String and 8821"$" at the last character of the string. They don't match after or before a 8822"\n". 8823 8824============================================================================== 88255. Defining functions *user-functions* 8826 8827New functions can be defined. These can be called just like builtin 8828functions. The function executes a sequence of Ex commands. Normal mode 8829commands can be executed with the |:normal| command. 8830 8831The function name must start with an uppercase letter, to avoid confusion with 8832builtin functions. To prevent from using the same name in different scripts 8833avoid obvious, short names. A good habit is to start the function name with 8834the name of the script, e.g., "HTMLcolor()". 8835 8836It's also possible to use curly braces, see |curly-braces-names|. And the 8837|autoload| facility is useful to define a function only when it's called. 8838 8839 *local-function* 8840A function local to a script must start with "s:". A local script function 8841can only be called from within the script and from functions, user commands 8842and autocommands defined in the script. It is also possible to call the 8843function from a mapping defined in the script, but then |<SID>| must be used 8844instead of "s:" when the mapping is expanded outside of the script. 8845There are only script-local functions, no buffer-local or window-local 8846functions. 8847 8848 *:fu* *:function* *E128* *E129* *E123* 8849:fu[nction] List all functions and their arguments. 8850 8851:fu[nction] {name} List function {name}. 8852 {name} can also be a |Dictionary| entry that is a 8853 |Funcref|: > 8854 :function dict.init 8855 8856:fu[nction] /{pattern} List functions with a name matching {pattern}. 8857 Example that lists all functions ending with "File": > 8858 :function /File$ 8859< 8860 *:function-verbose* 8861When 'verbose' is non-zero, listing a function will also display where it was 8862last defined. Example: > 8863 8864 :verbose function SetFileTypeSH 8865 function SetFileTypeSH(name) 8866 Last set from /usr/share/vim/vim-7.0/filetype.vim 8867< 8868See |:verbose-cmd| for more information. 8869 8870 *E124* *E125* *E853* *E884* 8871:fu[nction][!] {name}([arguments]) [range] [abort] [dict] [closure] 8872 Define a new function by the name {name}. The name 8873 must be made of alphanumeric characters and '_', and 8874 must start with a capital or "s:" (see above). Note 8875 that using "b:" or "g:" is not allowed. (since patch 8876 7.4.260 E884 is given if the function name has a colon 8877 in the name, e.g. for "foo:bar()". Before that patch 8878 no error was given). 8879 8880 {name} can also be a |Dictionary| entry that is a 8881 |Funcref|: > 8882 :function dict.init(arg) 8883< "dict" must be an existing dictionary. The entry 8884 "init" is added if it didn't exist yet. Otherwise [!] 8885 is required to overwrite an existing function. The 8886 result is a |Funcref| to a numbered function. The 8887 function can only be used with a |Funcref| and will be 8888 deleted if there are no more references to it. 8889 *E127* *E122* 8890 When a function by this name already exists and [!] is 8891 not used an error message is given. When [!] is used, 8892 an existing function is silently replaced. Unless it 8893 is currently being executed, that is an error. 8894 NOTE: Use ! wisely. If used without care it can cause 8895 an existing function to be replaced unexpectedly, 8896 which is hard to debug. 8897 8898 For the {arguments} see |function-argument|. 8899 8900 *:func-range* *a:firstline* *a:lastline* 8901 When the [range] argument is added, the function is 8902 expected to take care of a range itself. The range is 8903 passed as "a:firstline" and "a:lastline". If [range] 8904 is excluded, ":{range}call" will call the function for 8905 each line in the range, with the cursor on the start 8906 of each line. See |function-range-example|. 8907 The cursor is still moved to the first line of the 8908 range, as is the case with all Ex commands. 8909 *:func-abort* 8910 When the [abort] argument is added, the function will 8911 abort as soon as an error is detected. 8912 *:func-dict* 8913 When the [dict] argument is added, the function must 8914 be invoked through an entry in a |Dictionary|. The 8915 local variable "self" will then be set to the 8916 dictionary. See |Dictionary-function|. 8917 *:func-closure* *E932* 8918 When the [closure] argument is added, the function 8919 can access variables and arguments from the outer 8920 scope. This is usually called a closure. In this 8921 example Bar() uses "x" from the scope of Foo(). It 8922 remains referenced even after Foo() returns: > 8923 :function! Foo() 8924 : let x = 0 8925 : function! Bar() closure 8926 : let x += 1 8927 : return x 8928 : endfunction 8929 : return funcref('Bar') 8930 :endfunction 8931 8932 :let F = Foo() 8933 :echo F() 8934< 1 > 8935 :echo F() 8936< 2 > 8937 :echo F() 8938< 3 8939 8940 *function-search-undo* 8941 The last used search pattern and the redo command "." 8942 will not be changed by the function. This also 8943 implies that the effect of |:nohlsearch| is undone 8944 when the function returns. 8945 8946 *:endf* *:endfunction* *E126* *E193* *W22* 8947:endf[unction] [argument] 8948 The end of a function definition. Best is to put it 8949 on a line by its own, without [argument]. 8950 8951 [argument] can be: 8952 | command command to execute next 8953 \n command command to execute next 8954 " comment always ignored 8955 anything else ignored, warning given when 8956 'verbose' is non-zero 8957 The support for a following command was added in Vim 8958 8.0.0654, before that any argument was silently 8959 ignored. 8960 8961 To be able to define a function inside an `:execute` 8962 command, use line breaks instead of |:bar|: > 8963 :exe "func Foo()\necho 'foo'\nendfunc" 8964< 8965 *:delf* *:delfunction* *E130* *E131* *E933* 8966:delf[unction][!] {name} 8967 Delete function {name}. 8968 {name} can also be a |Dictionary| entry that is a 8969 |Funcref|: > 8970 :delfunc dict.init 8971< This will remove the "init" entry from "dict". The 8972 function is deleted if there are no more references to 8973 it. 8974 With the ! there is no error if the function does not 8975 exist. 8976 *:retu* *:return* *E133* 8977:retu[rn] [expr] Return from a function. When "[expr]" is given, it is 8978 evaluated and returned as the result of the function. 8979 If "[expr]" is not given, the number 0 is returned. 8980 When a function ends without an explicit ":return", 8981 the number 0 is returned. 8982 Note that there is no check for unreachable lines, 8983 thus there is no warning if commands follow ":return". 8984 8985 If the ":return" is used after a |:try| but before the 8986 matching |:finally| (if present), the commands 8987 following the ":finally" up to the matching |:endtry| 8988 are executed first. This process applies to all 8989 nested ":try"s inside the function. The function 8990 returns at the outermost ":endtry". 8991 8992 *function-argument* *a:var* 8993An argument can be defined by giving its name. In the function this can then 8994be used as "a:name" ("a:" for argument). 8995 *a:0* *a:1* *a:000* *E740* *...* 8996Up to 20 arguments can be given, separated by commas. After the named 8997arguments an argument "..." can be specified, which means that more arguments 8998may optionally be following. In the function the extra arguments can be used 8999as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which 9000can be 0). "a:000" is set to a |List| that contains these arguments. Note 9001that "a:1" is the same as "a:000[0]". 9002 *E742* 9003The a: scope and the variables in it cannot be changed, they are fixed. 9004However, if a composite type is used, such as |List| or |Dictionary| , you can 9005change their contents. Thus you can pass a |List| to a function and have the 9006function add an item to it. If you want to make sure the function cannot 9007change a |List| or |Dictionary| use |:lockvar|. 9008 9009When not using "...", the number of arguments in a function call must be equal 9010to the number of named arguments. When using "...", the number of arguments 9011may be larger. 9012 9013It is also possible to define a function without any arguments. You must 9014still supply the () then. The body of the function follows in the next lines, 9015until the matching |:endfunction|. It is allowed to define another function 9016inside a function body. 9017 9018 *local-variables* 9019Inside a function local variables can be used. These will disappear when the 9020function returns. Global variables need to be accessed with "g:". 9021 9022Example: > 9023 :function Table(title, ...) 9024 : echohl Title 9025 : echo a:title 9026 : echohl None 9027 : echo a:0 . " items:" 9028 : for s in a:000 9029 : echon ' ' . s 9030 : endfor 9031 :endfunction 9032 9033This function can then be called with: > 9034 call Table("Table", "line1", "line2") 9035 call Table("Empty Table") 9036 9037To return more than one value, return a |List|: > 9038 :function Compute(n1, n2) 9039 : if a:n2 == 0 9040 : return ["fail", 0] 9041 : endif 9042 : return ["ok", a:n1 / a:n2] 9043 :endfunction 9044 9045This function can then be called with: > 9046 :let [success, div] = Compute(102, 6) 9047 :if success == "ok" 9048 : echo div 9049 :endif 9050< 9051 *:cal* *:call* *E107* *E117* 9052:[range]cal[l] {name}([arguments]) 9053 Call a function. The name of the function and its arguments 9054 are as specified with |:function|. Up to 20 arguments can be 9055 used. The returned value is discarded. 9056 Without a range and for functions that accept a range, the 9057 function is called once. When a range is given the cursor is 9058 positioned at the start of the first line before executing the 9059 function. 9060 When a range is given and the function doesn't handle it 9061 itself, the function is executed for each line in the range, 9062 with the cursor in the first column of that line. The cursor 9063 is left at the last line (possibly moved by the last function 9064 call). The arguments are re-evaluated for each line. Thus 9065 this works: 9066 *function-range-example* > 9067 :function Mynumber(arg) 9068 : echo line(".") . " " . a:arg 9069 :endfunction 9070 :1,5call Mynumber(getline(".")) 9071< 9072 The "a:firstline" and "a:lastline" are defined anyway, they 9073 can be used to do something different at the start or end of 9074 the range. 9075 9076 Example of a function that handles the range itself: > 9077 9078 :function Cont() range 9079 : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ ' 9080 :endfunction 9081 :4,8call Cont() 9082< 9083 This function inserts the continuation character "\" in front 9084 of all the lines in the range, except the first one. 9085 9086 When the function returns a composite value it can be further 9087 dereferenced, but the range will not be used then. Example: > 9088 :4,8call GetDict().method() 9089< Here GetDict() gets the range but method() does not. 9090 9091 *E132* 9092The recursiveness of user functions is restricted with the |'maxfuncdepth'| 9093option. 9094 9095 9096AUTOMATICALLY LOADING FUNCTIONS ~ 9097 *autoload-functions* 9098When using many or large functions, it's possible to automatically define them 9099only when they are used. There are two methods: with an autocommand and with 9100the "autoload" directory in 'runtimepath'. 9101 9102 9103Using an autocommand ~ 9104 9105This is introduced in the user manual, section |41.14|. 9106 9107The autocommand is useful if you have a plugin that is a long Vim script file. 9108You can define the autocommand and quickly quit the script with |:finish|. 9109That makes Vim startup faster. The autocommand should then load the same file 9110again, setting a variable to skip the |:finish| command. 9111 9112Use the FuncUndefined autocommand event with a pattern that matches the 9113function(s) to be defined. Example: > 9114 9115 :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim 9116 9117The file "~/vim/bufnetfuncs.vim" should then define functions that start with 9118"BufNet". Also see |FuncUndefined|. 9119 9120 9121Using an autoload script ~ 9122 *autoload* *E746* 9123This is introduced in the user manual, section |41.15|. 9124 9125Using a script in the "autoload" directory is simpler, but requires using 9126exactly the right file name. A function that can be autoloaded has a name 9127like this: > 9128 9129 :call filename#funcname() 9130 9131When such a function is called, and it is not defined yet, Vim will search the 9132"autoload" directories in 'runtimepath' for a script file called 9133"filename.vim". For example "~/.vim/autoload/filename.vim". That file should 9134then define the function like this: > 9135 9136 function filename#funcname() 9137 echo "Done!" 9138 endfunction 9139 9140The file name and the name used before the # in the function must match 9141exactly, and the defined function must have the name exactly as it will be 9142called. 9143 9144It is possible to use subdirectories. Every # in the function name works like 9145a path separator. Thus when calling a function: > 9146 9147 :call foo#bar#func() 9148 9149Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'. 9150 9151This also works when reading a variable that has not been set yet: > 9152 9153 :let l = foo#bar#lvar 9154 9155However, when the autoload script was already loaded it won't be loaded again 9156for an unknown variable. 9157 9158When assigning a value to such a variable nothing special happens. This can 9159be used to pass settings to the autoload script before it's loaded: > 9160 9161 :let foo#bar#toggle = 1 9162 :call foo#bar#func() 9163 9164Note that when you make a mistake and call a function that is supposed to be 9165defined in an autoload script, but the script doesn't actually define the 9166function, the script will be sourced every time you try to call the function. 9167And you will get an error message every time. 9168 9169Also note that if you have two script files, and one calls a function in the 9170other and vice versa, before the used function is defined, it won't work. 9171Avoid using the autoload functionality at the toplevel. 9172 9173Hint: If you distribute a bunch of scripts you can pack them together with the 9174|vimball| utility. Also read the user manual |distribute-script|. 9175 9176============================================================================== 91776. Curly braces names *curly-braces-names* 9178 9179In most places where you can use a variable, you can use a "curly braces name" 9180variable. This is a regular variable name with one or more expressions 9181wrapped in braces {} like this: > 9182 my_{adjective}_variable 9183 9184When Vim encounters this, it evaluates the expression inside the braces, puts 9185that in place of the expression, and re-interprets the whole as a variable 9186name. So in the above example, if the variable "adjective" was set to 9187"noisy", then the reference would be to "my_noisy_variable", whereas if 9188"adjective" was set to "quiet", then it would be to "my_quiet_variable". 9189 9190One application for this is to create a set of variables governed by an option 9191value. For example, the statement > 9192 echo my_{&background}_message 9193 9194would output the contents of "my_dark_message" or "my_light_message" depending 9195on the current value of 'background'. 9196 9197You can use multiple brace pairs: > 9198 echo my_{adverb}_{adjective}_message 9199..or even nest them: > 9200 echo my_{ad{end_of_word}}_message 9201where "end_of_word" is either "verb" or "jective". 9202 9203However, the expression inside the braces must evaluate to a valid single 9204variable name, e.g. this is invalid: > 9205 :let foo='a + b' 9206 :echo c{foo}d 9207.. since the result of expansion is "ca + bd", which is not a variable name. 9208 9209 *curly-braces-function-names* 9210You can call and define functions by an evaluated name in a similar way. 9211Example: > 9212 :let func_end='whizz' 9213 :call my_func_{func_end}(parameter) 9214 9215This would call the function "my_func_whizz(parameter)". 9216 9217This does NOT work: > 9218 :let i = 3 9219 :let @{i} = '' " error 9220 :echo @{i} " error 9221 9222============================================================================== 92237. Commands *expression-commands* 9224 9225:let {var-name} = {expr1} *:let* *E18* 9226 Set internal variable {var-name} to the result of the 9227 expression {expr1}. The variable will get the type 9228 from the {expr}. If {var-name} didn't exist yet, it 9229 is created. 9230 9231:let {var-name}[{idx}] = {expr1} *E689* 9232 Set a list item to the result of the expression 9233 {expr1}. {var-name} must refer to a list and {idx} 9234 must be a valid index in that list. For nested list 9235 the index can be repeated. 9236 This cannot be used to add an item to a |List|. 9237 This cannot be used to set a byte in a String. You 9238 can do that like this: > 9239 :let var = var[0:2] . 'X' . var[4:] 9240< 9241 *E711* *E719* 9242:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710* 9243 Set a sequence of items in a |List| to the result of 9244 the expression {expr1}, which must be a list with the 9245 correct number of items. 9246 {idx1} can be omitted, zero is used instead. 9247 {idx2} can be omitted, meaning the end of the list. 9248 When the selected range of items is partly past the 9249 end of the list, items will be added. 9250 9251 *:let+=* *:let-=* *:let.=* *E734* 9252:let {var} += {expr1} Like ":let {var} = {var} + {expr1}". 9253:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}". 9254:let {var} .= {expr1} Like ":let {var} = {var} . {expr1}". 9255 These fail if {var} was not set yet and when the type 9256 of {var} and {expr1} don't fit the operator. 9257 9258 9259:let ${env-name} = {expr1} *:let-environment* *:let-$* 9260 Set environment variable {env-name} to the result of 9261 the expression {expr1}. The type is always String. 9262:let ${env-name} .= {expr1} 9263 Append {expr1} to the environment variable {env-name}. 9264 If the environment variable didn't exist yet this 9265 works like "=". 9266 9267:let @{reg-name} = {expr1} *:let-register* *:let-@* 9268 Write the result of the expression {expr1} in register 9269 {reg-name}. {reg-name} must be a single letter, and 9270 must be the name of a writable register (see 9271 |registers|). "@@" can be used for the unnamed 9272 register, "@/" for the search pattern. 9273 If the result of {expr1} ends in a <CR> or <NL>, the 9274 register will be linewise, otherwise it will be set to 9275 characterwise. 9276 This can be used to clear the last search pattern: > 9277 :let @/ = "" 9278< This is different from searching for an empty string, 9279 that would match everywhere. 9280 9281:let @{reg-name} .= {expr1} 9282 Append {expr1} to register {reg-name}. If the 9283 register was empty it's like setting it to {expr1}. 9284 9285:let &{option-name} = {expr1} *:let-option* *:let-&* 9286 Set option {option-name} to the result of the 9287 expression {expr1}. A String or Number value is 9288 always converted to the type of the option. 9289 For an option local to a window or buffer the effect 9290 is just like using the |:set| command: both the local 9291 value and the global value are changed. 9292 Example: > 9293 :let &path = &path . ',/usr/local/include' 9294< This also works for terminal codes in the form t_xx. 9295 But only for alphanumerical names. Example: > 9296 :let &t_k1 = "\<Esc>[234;" 9297< When the code does not exist yet it will be created as 9298 a terminal key code, there is no error. 9299 9300:let &{option-name} .= {expr1} 9301 For a string option: Append {expr1} to the value. 9302 Does not insert a comma like |:set+=|. 9303 9304:let &{option-name} += {expr1} 9305:let &{option-name} -= {expr1} 9306 For a number or boolean option: Add or subtract 9307 {expr1}. 9308 9309:let &l:{option-name} = {expr1} 9310:let &l:{option-name} .= {expr1} 9311:let &l:{option-name} += {expr1} 9312:let &l:{option-name} -= {expr1} 9313 Like above, but only set the local value of an option 9314 (if there is one). Works like |:setlocal|. 9315 9316:let &g:{option-name} = {expr1} 9317:let &g:{option-name} .= {expr1} 9318:let &g:{option-name} += {expr1} 9319:let &g:{option-name} -= {expr1} 9320 Like above, but only set the global value of an option 9321 (if there is one). Works like |:setglobal|. 9322 9323:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688* 9324 {expr1} must evaluate to a |List|. The first item in 9325 the list is assigned to {name1}, the second item to 9326 {name2}, etc. 9327 The number of names must match the number of items in 9328 the |List|. 9329 Each name can be one of the items of the ":let" 9330 command as mentioned above. 9331 Example: > 9332 :let [s, item] = GetItem(s) 9333< Detail: {expr1} is evaluated first, then the 9334 assignments are done in sequence. This matters if 9335 {name2} depends on {name1}. Example: > 9336 :let x = [0, 1] 9337 :let i = 0 9338 :let [i, x[i]] = [1, 2] 9339 :echo x 9340< The result is [0, 2]. 9341 9342:let [{name1}, {name2}, ...] .= {expr1} 9343:let [{name1}, {name2}, ...] += {expr1} 9344:let [{name1}, {name2}, ...] -= {expr1} 9345 Like above, but append/add/subtract the value for each 9346 |List| item. 9347 9348:let [{name}, ..., ; {lastname}] = {expr1} 9349 Like |:let-unpack| above, but the |List| may have more 9350 items than there are names. A list of the remaining 9351 items is assigned to {lastname}. If there are no 9352 remaining items {lastname} is set to an empty list. 9353 Example: > 9354 :let [a, b; rest] = ["aval", "bval", 3, 4] 9355< 9356:let [{name}, ..., ; {lastname}] .= {expr1} 9357:let [{name}, ..., ; {lastname}] += {expr1} 9358:let [{name}, ..., ; {lastname}] -= {expr1} 9359 Like above, but append/add/subtract the value for each 9360 |List| item. 9361 9362 *E121* 9363:let {var-name} .. List the value of variable {var-name}. Multiple 9364 variable names may be given. Special names recognized 9365 here: *E738* 9366 g: global variables 9367 b: local buffer variables 9368 w: local window variables 9369 t: local tab page variables 9370 s: script-local variables 9371 l: local function variables 9372 v: Vim variables. 9373 9374:let List the values of all variables. The type of the 9375 variable is indicated before the value: 9376 <nothing> String 9377 # Number 9378 * Funcref 9379 9380 9381:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795* 9382 Remove the internal variable {name}. Several variable 9383 names can be given, they are all removed. The name 9384 may also be a |List| or |Dictionary| item. 9385 With [!] no error message is given for non-existing 9386 variables. 9387 One or more items from a |List| can be removed: > 9388 :unlet list[3] " remove fourth item 9389 :unlet list[3:] " remove fourth item to last 9390< One item from a |Dictionary| can be removed at a time: > 9391 :unlet dict['two'] 9392 :unlet dict.two 9393< This is especially useful to clean up used global 9394 variables and script-local variables (these are not 9395 deleted when the script ends). Function-local 9396 variables are automatically deleted when the function 9397 ends. 9398 9399:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv* 9400 Lock the internal variable {name}. Locking means that 9401 it can no longer be changed (until it is unlocked). 9402 A locked variable can be deleted: > 9403 :lockvar v 9404 :let v = 'asdf' " fails! 9405 :unlet v 9406< *E741* *E940* 9407 If you try to change a locked variable you get an 9408 error message: "E741: Value is locked: {name}". 9409 If you try to lock or unlock a built-in variable you 9410 get an error message: "E940: Cannot lock or unlock 9411 variable {name}". 9412 9413 [depth] is relevant when locking a |List| or 9414 |Dictionary|. It specifies how deep the locking goes: 9415 1 Lock the |List| or |Dictionary| itself, 9416 cannot add or remove items, but can 9417 still change their values. 9418 2 Also lock the values, cannot change 9419 the items. If an item is a |List| or 9420 |Dictionary|, cannot add or remove 9421 items, but can still change the 9422 values. 9423 3 Like 2 but for the |List| / 9424 |Dictionary| in the |List| / 9425 |Dictionary|, one level deeper. 9426 The default [depth] is 2, thus when {name} is a |List| 9427 or |Dictionary| the values cannot be changed. 9428 *E743* 9429 For unlimited depth use [!] and omit [depth]. 9430 However, there is a maximum depth of 100 to catch 9431 loops. 9432 9433 Note that when two variables refer to the same |List| 9434 and you lock one of them, the |List| will also be 9435 locked when used through the other variable. 9436 Example: > 9437 :let l = [0, 1, 2, 3] 9438 :let cl = l 9439 :lockvar l 9440 :let cl[1] = 99 " won't work! 9441< You may want to make a copy of a list to avoid this. 9442 See |deepcopy()|. 9443 9444 9445:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo* 9446 Unlock the internal variable {name}. Does the 9447 opposite of |:lockvar|. 9448 9449 9450:if {expr1} *:if* *:endif* *:en* *E171* *E579* *E580* 9451:en[dif] Execute the commands until the next matching ":else" 9452 or ":endif" if {expr1} evaluates to non-zero. 9453 9454 From Vim version 4.5 until 5.0, every Ex command in 9455 between the ":if" and ":endif" is ignored. These two 9456 commands were just to allow for future expansions in a 9457 backward compatible way. Nesting was allowed. Note 9458 that any ":else" or ":elseif" was ignored, the "else" 9459 part was not executed either. 9460 9461 You can use this to remain compatible with older 9462 versions: > 9463 :if version >= 500 9464 : version-5-specific-commands 9465 :endif 9466< The commands still need to be parsed to find the 9467 "endif". Sometimes an older Vim has a problem with a 9468 new command. For example, ":silent" is recognized as 9469 a ":substitute" command. In that case ":execute" can 9470 avoid problems: > 9471 :if version >= 600 9472 : execute "silent 1,$delete" 9473 :endif 9474< 9475 NOTE: The ":append" and ":insert" commands don't work 9476 properly in between ":if" and ":endif". 9477 9478 *:else* *:el* *E581* *E583* 9479:el[se] Execute the commands until the next matching ":else" 9480 or ":endif" if they previously were not being 9481 executed. 9482 9483 *:elseif* *:elsei* *E582* *E584* 9484:elsei[f] {expr1} Short for ":else" ":if", with the addition that there 9485 is no extra ":endif". 9486 9487:wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw* 9488 *E170* *E585* *E588* *E733* 9489:endw[hile] Repeat the commands between ":while" and ":endwhile", 9490 as long as {expr1} evaluates to non-zero. 9491 When an error is detected from a command inside the 9492 loop, execution continues after the "endwhile". 9493 Example: > 9494 :let lnum = 1 9495 :while lnum <= line("$") 9496 :call FixLine(lnum) 9497 :let lnum = lnum + 1 9498 :endwhile 9499< 9500 NOTE: The ":append" and ":insert" commands don't work 9501 properly inside a ":while" and ":for" loop. 9502 9503:for {var} in {list} *:for* *E690* *E732* 9504:endfo[r] *:endfo* *:endfor* 9505 Repeat the commands between ":for" and ":endfor" for 9506 each item in {list}. Variable {var} is set to the 9507 value of each item. 9508 When an error is detected for a command inside the 9509 loop, execution continues after the "endfor". 9510 Changing {list} inside the loop affects what items are 9511 used. Make a copy if this is unwanted: > 9512 :for item in copy(mylist) 9513< When not making a copy, Vim stores a reference to the 9514 next item in the list, before executing the commands 9515 with the current item. Thus the current item can be 9516 removed without effect. Removing any later item means 9517 it will not be found. Thus the following example 9518 works (an inefficient way to make a list empty): > 9519 for item in mylist 9520 call remove(mylist, 0) 9521 endfor 9522< Note that reordering the list (e.g., with sort() or 9523 reverse()) may have unexpected effects. 9524 9525:for [{var1}, {var2}, ...] in {listlist} 9526:endfo[r] 9527 Like ":for" above, but each item in {listlist} must be 9528 a list, of which each item is assigned to {var1}, 9529 {var2}, etc. Example: > 9530 :for [lnum, col] in [[1, 3], [2, 5], [3, 8]] 9531 :echo getline(lnum)[col] 9532 :endfor 9533< 9534 *:continue* *:con* *E586* 9535:con[tinue] When used inside a ":while" or ":for" loop, jumps back 9536 to the start of the loop. 9537 If it is used after a |:try| inside the loop but 9538 before the matching |:finally| (if present), the 9539 commands following the ":finally" up to the matching 9540 |:endtry| are executed first. This process applies to 9541 all nested ":try"s inside the loop. The outermost 9542 ":endtry" then jumps back to the start of the loop. 9543 9544 *:break* *:brea* *E587* 9545:brea[k] When used inside a ":while" or ":for" loop, skips to 9546 the command after the matching ":endwhile" or 9547 ":endfor". 9548 If it is used after a |:try| inside the loop but 9549 before the matching |:finally| (if present), the 9550 commands following the ":finally" up to the matching 9551 |:endtry| are executed first. This process applies to 9552 all nested ":try"s inside the loop. The outermost 9553 ":endtry" then jumps to the command after the loop. 9554 9555:try *:try* *:endt* *:endtry* *E600* *E601* *E602* 9556:endt[ry] Change the error handling for the commands between 9557 ":try" and ":endtry" including everything being 9558 executed across ":source" commands, function calls, 9559 or autocommand invocations. 9560 9561 When an error or interrupt is detected and there is 9562 a |:finally| command following, execution continues 9563 after the ":finally". Otherwise, or when the 9564 ":endtry" is reached thereafter, the next 9565 (dynamically) surrounding ":try" is checked for 9566 a corresponding ":finally" etc. Then the script 9567 processing is terminated. (Whether a function 9568 definition has an "abort" argument does not matter.) 9569 Example: > 9570 :try | edit too much | finally | echo "cleanup" | endtry 9571 :echo "impossible" " not reached, script terminated above 9572< 9573 Moreover, an error or interrupt (dynamically) inside 9574 ":try" and ":endtry" is converted to an exception. It 9575 can be caught as if it were thrown by a |:throw| 9576 command (see |:catch|). In this case, the script 9577 processing is not terminated. 9578 9579 The value "Vim:Interrupt" is used for an interrupt 9580 exception. An error in a Vim command is converted 9581 to a value of the form "Vim({command}):{errmsg}", 9582 other errors are converted to a value of the form 9583 "Vim:{errmsg}". {command} is the full command name, 9584 and {errmsg} is the message that is displayed if the 9585 error exception is not caught, always beginning with 9586 the error number. 9587 Examples: > 9588 :try | sleep 100 | catch /^Vim:Interrupt$/ | endtry 9589 :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry 9590< 9591 *:cat* *:catch* *E603* *E604* *E605* 9592:cat[ch] /{pattern}/ The following commands until the next |:catch|, 9593 |:finally|, or |:endtry| that belongs to the same 9594 |:try| as the ":catch" are executed when an exception 9595 matching {pattern} is being thrown and has not yet 9596 been caught by a previous ":catch". Otherwise, these 9597 commands are skipped. 9598 When {pattern} is omitted all errors are caught. 9599 Examples: > 9600 :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C) 9601 :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors 9602 :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts 9603 :catch /^Vim(write):/ " catch all errors in :write 9604 :catch /^Vim\%((\a\+)\)\=:E123/ " catch error E123 9605 :catch /my-exception/ " catch user exception 9606 :catch /.*/ " catch everything 9607 :catch " same as /.*/ 9608< 9609 Another character can be used instead of / around the 9610 {pattern}, so long as it does not have a special 9611 meaning (e.g., '|' or '"') and doesn't occur inside 9612 {pattern}. 9613 Information about the exception is available in 9614 |v:exception|. Also see |throw-variables|. 9615 NOTE: It is not reliable to ":catch" the TEXT of 9616 an error message because it may vary in different 9617 locales. 9618 9619 *:fina* *:finally* *E606* *E607* 9620:fina[lly] The following commands until the matching |:endtry| 9621 are executed whenever the part between the matching 9622 |:try| and the ":finally" is left: either by falling 9623 through to the ":finally" or by a |:continue|, 9624 |:break|, |:finish|, or |:return|, or by an error or 9625 interrupt or exception (see |:throw|). 9626 9627 *:th* *:throw* *E608* 9628:th[row] {expr1} The {expr1} is evaluated and thrown as an exception. 9629 If the ":throw" is used after a |:try| but before the 9630 first corresponding |:catch|, commands are skipped 9631 until the first ":catch" matching {expr1} is reached. 9632 If there is no such ":catch" or if the ":throw" is 9633 used after a ":catch" but before the |:finally|, the 9634 commands following the ":finally" (if present) up to 9635 the matching |:endtry| are executed. If the ":throw" 9636 is after the ":finally", commands up to the ":endtry" 9637 are skipped. At the ":endtry", this process applies 9638 again for the next dynamically surrounding ":try" 9639 (which may be found in a calling function or sourcing 9640 script), until a matching ":catch" has been found. 9641 If the exception is not caught, the command processing 9642 is terminated. 9643 Example: > 9644 :try | throw "oops" | catch /^oo/ | echo "caught" | endtry 9645< Note that "catch" may need to be on a separate line 9646 for when an error causes the parsing to skip the whole 9647 line and not see the "|" that separates the commands. 9648 9649 *:ec* *:echo* 9650:ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The 9651 first {expr1} starts on a new line. 9652 Also see |:comment|. 9653 Use "\n" to start a new line. Use "\r" to move the 9654 cursor to the first column. 9655 Uses the highlighting set by the |:echohl| command. 9656 Cannot be followed by a comment. 9657 Example: > 9658 :echo "the value of 'shell' is" &shell 9659< *:echo-redraw* 9660 A later redraw may make the message disappear again. 9661 And since Vim mostly postpones redrawing until it's 9662 finished with a sequence of commands this happens 9663 quite often. To avoid that a command from before the 9664 ":echo" causes a redraw afterwards (redraws are often 9665 postponed until you type something), force a redraw 9666 with the |:redraw| command. Example: > 9667 :new | redraw | echo "there is a new window" 9668< 9669 *:echon* 9670:echon {expr1} .. Echoes each {expr1}, without anything added. Also see 9671 |:comment|. 9672 Uses the highlighting set by the |:echohl| command. 9673 Cannot be followed by a comment. 9674 Example: > 9675 :echon "the value of 'shell' is " &shell 9676< 9677 Note the difference between using ":echo", which is a 9678 Vim command, and ":!echo", which is an external shell 9679 command: > 9680 :!echo % --> filename 9681< The arguments of ":!" are expanded, see |:_%|. > 9682 :!echo "%" --> filename or "filename" 9683< Like the previous example. Whether you see the double 9684 quotes or not depends on your 'shell'. > 9685 :echo % --> nothing 9686< The '%' is an illegal character in an expression. > 9687 :echo "%" --> % 9688< This just echoes the '%' character. > 9689 :echo expand("%") --> filename 9690< This calls the expand() function to expand the '%'. 9691 9692 *:echoh* *:echohl* 9693:echoh[l] {name} Use the highlight group {name} for the following 9694 |:echo|, |:echon| and |:echomsg| commands. Also used 9695 for the |input()| prompt. Example: > 9696 :echohl WarningMsg | echo "Don't panic!" | echohl None 9697< Don't forget to set the group back to "None", 9698 otherwise all following echo's will be highlighted. 9699 9700 *:echom* *:echomsg* 9701:echom[sg] {expr1} .. Echo the expression(s) as a true message, saving the 9702 message in the |message-history|. 9703 Spaces are placed between the arguments as with the 9704 |:echo| command. But unprintable characters are 9705 displayed, not interpreted. 9706 The parsing works slightly different from |:echo|, 9707 more like |:execute|. All the expressions are first 9708 evaluated and concatenated before echoing anything. 9709 The expressions must evaluate to a Number or String, a 9710 Dictionary or List causes an error. 9711 Uses the highlighting set by the |:echohl| command. 9712 Example: > 9713 :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see." 9714< See |:echo-redraw| to avoid the message disappearing 9715 when the screen is redrawn. 9716 *:echoe* *:echoerr* 9717:echoe[rr] {expr1} .. Echo the expression(s) as an error message, saving the 9718 message in the |message-history|. When used in a 9719 script or function the line number will be added. 9720 Spaces are placed between the arguments as with the 9721 :echo command. When used inside a try conditional, 9722 the message is raised as an error exception instead 9723 (see |try-echoerr|). 9724 Example: > 9725 :echoerr "This script just failed!" 9726< If you just want a highlighted message use |:echohl|. 9727 And to get a beep: > 9728 :exe "normal \<Esc>" 9729< 9730 *:exe* *:execute* 9731:exe[cute] {expr1} .. Executes the string that results from the evaluation 9732 of {expr1} as an Ex command. 9733 Multiple arguments are concatenated, with a space in 9734 between. To avoid the extra space use the "." 9735 operator to concatenate strings into one argument. 9736 {expr1} is used as the processed command, command line 9737 editing keys are not recognized. 9738 Cannot be followed by a comment. 9739 Examples: > 9740 :execute "buffer" nextbuf 9741 :execute "normal" count . "w" 9742< 9743 ":execute" can be used to append a command to commands 9744 that don't accept a '|'. Example: > 9745 :execute '!ls' | echo "theend" 9746 9747< ":execute" is also a nice way to avoid having to type 9748 control characters in a Vim script for a ":normal" 9749 command: > 9750 :execute "normal ixxx\<Esc>" 9751< This has an <Esc> character, see |expr-string|. 9752 9753 Be careful to correctly escape special characters in 9754 file names. The |fnameescape()| function can be used 9755 for Vim commands, |shellescape()| for |:!| commands. 9756 Examples: > 9757 :execute "e " . fnameescape(filename) 9758 :execute "!ls " . shellescape(filename, 1) 9759< 9760 Note: The executed string may be any command-line, but 9761 starting or ending "if", "while" and "for" does not 9762 always work, because when commands are skipped the 9763 ":execute" is not evaluated and Vim loses track of 9764 where blocks start and end. Also "break" and 9765 "continue" should not be inside ":execute". 9766 This example does not work, because the ":execute" is 9767 not evaluated and Vim does not see the "while", and 9768 gives an error for finding an ":endwhile": > 9769 :if 0 9770 : execute 'while i > 5' 9771 : echo "test" 9772 : endwhile 9773 :endif 9774< 9775 It is allowed to have a "while" or "if" command 9776 completely in the executed string: > 9777 :execute 'while i < 5 | echo i | let i = i + 1 | endwhile' 9778< 9779 9780 *:exe-comment* 9781 ":execute", ":echo" and ":echon" cannot be followed by 9782 a comment directly, because they see the '"' as the 9783 start of a string. But, you can use '|' followed by a 9784 comment. Example: > 9785 :echo "foo" | "this is a comment 9786 9787============================================================================== 97888. Exception handling *exception-handling* 9789 9790The Vim script language comprises an exception handling feature. This section 9791explains how it can be used in a Vim script. 9792 9793Exceptions may be raised by Vim on an error or on interrupt, see 9794|catch-errors| and |catch-interrupt|. You can also explicitly throw an 9795exception by using the ":throw" command, see |throw-catch|. 9796 9797 9798TRY CONDITIONALS *try-conditionals* 9799 9800Exceptions can be caught or can cause cleanup code to be executed. You can 9801use a try conditional to specify catch clauses (that catch exceptions) and/or 9802a finally clause (to be executed for cleanup). 9803 A try conditional begins with a |:try| command and ends at the matching 9804|:endtry| command. In between, you can use a |:catch| command to start 9805a catch clause, or a |:finally| command to start a finally clause. There may 9806be none or multiple catch clauses, but there is at most one finally clause, 9807which must not be followed by any catch clauses. The lines before the catch 9808clauses and the finally clause is called a try block. > 9809 9810 :try 9811 : ... 9812 : ... TRY BLOCK 9813 : ... 9814 :catch /{pattern}/ 9815 : ... 9816 : ... CATCH CLAUSE 9817 : ... 9818 :catch /{pattern}/ 9819 : ... 9820 : ... CATCH CLAUSE 9821 : ... 9822 :finally 9823 : ... 9824 : ... FINALLY CLAUSE 9825 : ... 9826 :endtry 9827 9828The try conditional allows to watch code for exceptions and to take the 9829appropriate actions. Exceptions from the try block may be caught. Exceptions 9830from the try block and also the catch clauses may cause cleanup actions. 9831 When no exception is thrown during execution of the try block, the control 9832is transferred to the finally clause, if present. After its execution, the 9833script continues with the line following the ":endtry". 9834 When an exception occurs during execution of the try block, the remaining 9835lines in the try block are skipped. The exception is matched against the 9836patterns specified as arguments to the ":catch" commands. The catch clause 9837after the first matching ":catch" is taken, other catch clauses are not 9838executed. The catch clause ends when the next ":catch", ":finally", or 9839":endtry" command is reached - whatever is first. Then, the finally clause 9840(if present) is executed. When the ":endtry" is reached, the script execution 9841continues in the following line as usual. 9842 When an exception that does not match any of the patterns specified by the 9843":catch" commands is thrown in the try block, the exception is not caught by 9844that try conditional and none of the catch clauses is executed. Only the 9845finally clause, if present, is taken. The exception pends during execution of 9846the finally clause. It is resumed at the ":endtry", so that commands after 9847the ":endtry" are not executed and the exception might be caught elsewhere, 9848see |try-nesting|. 9849 When during execution of a catch clause another exception is thrown, the 9850remaining lines in that catch clause are not executed. The new exception is 9851not matched against the patterns in any of the ":catch" commands of the same 9852try conditional and none of its catch clauses is taken. If there is, however, 9853a finally clause, it is executed, and the exception pends during its 9854execution. The commands following the ":endtry" are not executed. The new 9855exception might, however, be caught elsewhere, see |try-nesting|. 9856 When during execution of the finally clause (if present) an exception is 9857thrown, the remaining lines in the finally clause are skipped. If the finally 9858clause has been taken because of an exception from the try block or one of the 9859catch clauses, the original (pending) exception is discarded. The commands 9860following the ":endtry" are not executed, and the exception from the finally 9861clause is propagated and can be caught elsewhere, see |try-nesting|. 9862 9863The finally clause is also executed, when a ":break" or ":continue" for 9864a ":while" loop enclosing the complete try conditional is executed from the 9865try block or a catch clause. Or when a ":return" or ":finish" is executed 9866from the try block or a catch clause of a try conditional in a function or 9867sourced script, respectively. The ":break", ":continue", ":return", or 9868":finish" pends during execution of the finally clause and is resumed when the 9869":endtry" is reached. It is, however, discarded when an exception is thrown 9870from the finally clause. 9871 When a ":break" or ":continue" for a ":while" loop enclosing the complete 9872try conditional or when a ":return" or ":finish" is encountered in the finally 9873clause, the rest of the finally clause is skipped, and the ":break", 9874":continue", ":return" or ":finish" is executed as usual. If the finally 9875clause has been taken because of an exception or an earlier ":break", 9876":continue", ":return", or ":finish" from the try block or a catch clause, 9877this pending exception or command is discarded. 9878 9879For examples see |throw-catch| and |try-finally|. 9880 9881 9882NESTING OF TRY CONDITIONALS *try-nesting* 9883 9884Try conditionals can be nested arbitrarily. That is, a complete try 9885conditional can be put into the try block, a catch clause, or the finally 9886clause of another try conditional. If the inner try conditional does not 9887catch an exception thrown in its try block or throws a new exception from one 9888of its catch clauses or its finally clause, the outer try conditional is 9889checked according to the rules above. If the inner try conditional is in the 9890try block of the outer try conditional, its catch clauses are checked, but 9891otherwise only the finally clause is executed. It does not matter for 9892nesting, whether the inner try conditional is directly contained in the outer 9893one, or whether the outer one sources a script or calls a function containing 9894the inner try conditional. 9895 9896When none of the active try conditionals catches an exception, just their 9897finally clauses are executed. Thereafter, the script processing terminates. 9898An error message is displayed in case of an uncaught exception explicitly 9899thrown by a ":throw" command. For uncaught error and interrupt exceptions 9900implicitly raised by Vim, the error message(s) or interrupt message are shown 9901as usual. 9902 9903For examples see |throw-catch|. 9904 9905 9906EXAMINING EXCEPTION HANDLING CODE *except-examine* 9907 9908Exception handling code can get tricky. If you are in doubt what happens, set 9909'verbose' to 13 or use the ":13verbose" command modifier when sourcing your 9910script file. Then you see when an exception is thrown, discarded, caught, or 9911finished. When using a verbosity level of at least 14, things pending in 9912a finally clause are also shown. This information is also given in debug mode 9913(see |debug-scripts|). 9914 9915 9916THROWING AND CATCHING EXCEPTIONS *throw-catch* 9917 9918You can throw any number or string as an exception. Use the |:throw| command 9919and pass the value to be thrown as argument: > 9920 :throw 4711 9921 :throw "string" 9922< *throw-expression* 9923You can also specify an expression argument. The expression is then evaluated 9924first, and the result is thrown: > 9925 :throw 4705 + strlen("string") 9926 :throw strpart("strings", 0, 6) 9927 9928An exception might be thrown during evaluation of the argument of the ":throw" 9929command. Unless it is caught there, the expression evaluation is abandoned. 9930The ":throw" command then does not throw a new exception. 9931 Example: > 9932 9933 :function! Foo(arg) 9934 : try 9935 : throw a:arg 9936 : catch /foo/ 9937 : endtry 9938 : return 1 9939 :endfunction 9940 : 9941 :function! Bar() 9942 : echo "in Bar" 9943 : return 4710 9944 :endfunction 9945 : 9946 :throw Foo("arrgh") + Bar() 9947 9948This throws "arrgh", and "in Bar" is not displayed since Bar() is not 9949executed. > 9950 :throw Foo("foo") + Bar() 9951however displays "in Bar" and throws 4711. 9952 9953Any other command that takes an expression as argument might also be 9954abandoned by an (uncaught) exception during the expression evaluation. The 9955exception is then propagated to the caller of the command. 9956 Example: > 9957 9958 :if Foo("arrgh") 9959 : echo "then" 9960 :else 9961 : echo "else" 9962 :endif 9963 9964Here neither of "then" or "else" is displayed. 9965 9966 *catch-order* 9967Exceptions can be caught by a try conditional with one or more |:catch| 9968commands, see |try-conditionals|. The values to be caught by each ":catch" 9969command can be specified as a pattern argument. The subsequent catch clause 9970gets executed when a matching exception is caught. 9971 Example: > 9972 9973 :function! Foo(value) 9974 : try 9975 : throw a:value 9976 : catch /^\d\+$/ 9977 : echo "Number thrown" 9978 : catch /.*/ 9979 : echo "String thrown" 9980 : endtry 9981 :endfunction 9982 : 9983 :call Foo(0x1267) 9984 :call Foo('string') 9985 9986The first call to Foo() displays "Number thrown", the second "String thrown". 9987An exception is matched against the ":catch" commands in the order they are 9988specified. Only the first match counts. So you should place the more 9989specific ":catch" first. The following order does not make sense: > 9990 9991 : catch /.*/ 9992 : echo "String thrown" 9993 : catch /^\d\+$/ 9994 : echo "Number thrown" 9995 9996The first ":catch" here matches always, so that the second catch clause is 9997never taken. 9998 9999 *throw-variables* 10000If you catch an exception by a general pattern, you may access the exact value 10001in the variable |v:exception|: > 10002 10003 : catch /^\d\+$/ 10004 : echo "Number thrown. Value is" v:exception 10005 10006You may also be interested where an exception was thrown. This is stored in 10007|v:throwpoint|. Note that "v:exception" and "v:throwpoint" are valid for the 10008exception most recently caught as long it is not finished. 10009 Example: > 10010 10011 :function! Caught() 10012 : if v:exception != "" 10013 : echo 'Caught "' . v:exception . '" in ' . v:throwpoint 10014 : else 10015 : echo 'Nothing caught' 10016 : endif 10017 :endfunction 10018 : 10019 :function! Foo() 10020 : try 10021 : try 10022 : try 10023 : throw 4711 10024 : finally 10025 : call Caught() 10026 : endtry 10027 : catch /.*/ 10028 : call Caught() 10029 : throw "oops" 10030 : endtry 10031 : catch /.*/ 10032 : call Caught() 10033 : finally 10034 : call Caught() 10035 : endtry 10036 :endfunction 10037 : 10038 :call Foo() 10039 10040This displays > 10041 10042 Nothing caught 10043 Caught "4711" in function Foo, line 4 10044 Caught "oops" in function Foo, line 10 10045 Nothing caught 10046 10047A practical example: The following command ":LineNumber" displays the line 10048number in the script or function where it has been used: > 10049 10050 :function! LineNumber() 10051 : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "") 10052 :endfunction 10053 :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry 10054< 10055 *try-nested* 10056An exception that is not caught by a try conditional can be caught by 10057a surrounding try conditional: > 10058 10059 :try 10060 : try 10061 : throw "foo" 10062 : catch /foobar/ 10063 : echo "foobar" 10064 : finally 10065 : echo "inner finally" 10066 : endtry 10067 :catch /foo/ 10068 : echo "foo" 10069 :endtry 10070 10071The inner try conditional does not catch the exception, just its finally 10072clause is executed. The exception is then caught by the outer try 10073conditional. The example displays "inner finally" and then "foo". 10074 10075 *throw-from-catch* 10076You can catch an exception and throw a new one to be caught elsewhere from the 10077catch clause: > 10078 10079 :function! Foo() 10080 : throw "foo" 10081 :endfunction 10082 : 10083 :function! Bar() 10084 : try 10085 : call Foo() 10086 : catch /foo/ 10087 : echo "Caught foo, throw bar" 10088 : throw "bar" 10089 : endtry 10090 :endfunction 10091 : 10092 :try 10093 : call Bar() 10094 :catch /.*/ 10095 : echo "Caught" v:exception 10096 :endtry 10097 10098This displays "Caught foo, throw bar" and then "Caught bar". 10099 10100 *rethrow* 10101There is no real rethrow in the Vim script language, but you may throw 10102"v:exception" instead: > 10103 10104 :function! Bar() 10105 : try 10106 : call Foo() 10107 : catch /.*/ 10108 : echo "Rethrow" v:exception 10109 : throw v:exception 10110 : endtry 10111 :endfunction 10112< *try-echoerr* 10113Note that this method cannot be used to "rethrow" Vim error or interrupt 10114exceptions, because it is not possible to fake Vim internal exceptions. 10115Trying so causes an error exception. You should throw your own exception 10116denoting the situation. If you want to cause a Vim error exception containing 10117the original error exception value, you can use the |:echoerr| command: > 10118 10119 :try 10120 : try 10121 : asdf 10122 : catch /.*/ 10123 : echoerr v:exception 10124 : endtry 10125 :catch /.*/ 10126 : echo v:exception 10127 :endtry 10128 10129This code displays 10130 10131 Vim(echoerr):Vim:E492: Not an editor command: asdf ~ 10132 10133 10134CLEANUP CODE *try-finally* 10135 10136Scripts often change global settings and restore them at their end. If the 10137user however interrupts the script by pressing CTRL-C, the settings remain in 10138an inconsistent state. The same may happen to you in the development phase of 10139a script when an error occurs or you explicitly throw an exception without 10140catching it. You can solve these problems by using a try conditional with 10141a finally clause for restoring the settings. Its execution is guaranteed on 10142normal control flow, on error, on an explicit ":throw", and on interrupt. 10143(Note that errors and interrupts from inside the try conditional are converted 10144to exceptions. When not caught, they terminate the script after the finally 10145clause has been executed.) 10146Example: > 10147 10148 :try 10149 : let s:saved_ts = &ts 10150 : set ts=17 10151 : 10152 : " Do the hard work here. 10153 : 10154 :finally 10155 : let &ts = s:saved_ts 10156 : unlet s:saved_ts 10157 :endtry 10158 10159This method should be used locally whenever a function or part of a script 10160changes global settings which need to be restored on failure or normal exit of 10161that function or script part. 10162 10163 *break-finally* 10164Cleanup code works also when the try block or a catch clause is left by 10165a ":continue", ":break", ":return", or ":finish". 10166 Example: > 10167 10168 :let first = 1 10169 :while 1 10170 : try 10171 : if first 10172 : echo "first" 10173 : let first = 0 10174 : continue 10175 : else 10176 : throw "second" 10177 : endif 10178 : catch /.*/ 10179 : echo v:exception 10180 : break 10181 : finally 10182 : echo "cleanup" 10183 : endtry 10184 : echo "still in while" 10185 :endwhile 10186 :echo "end" 10187 10188This displays "first", "cleanup", "second", "cleanup", and "end". > 10189 10190 :function! Foo() 10191 : try 10192 : return 4711 10193 : finally 10194 : echo "cleanup\n" 10195 : endtry 10196 : echo "Foo still active" 10197 :endfunction 10198 : 10199 :echo Foo() "returned by Foo" 10200 10201This displays "cleanup" and "4711 returned by Foo". You don't need to add an 10202extra ":return" in the finally clause. (Above all, this would override the 10203return value.) 10204 10205 *except-from-finally* 10206Using either of ":continue", ":break", ":return", ":finish", or ":throw" in 10207a finally clause is possible, but not recommended since it abandons the 10208cleanup actions for the try conditional. But, of course, interrupt and error 10209exceptions might get raised from a finally clause. 10210 Example where an error in the finally clause stops an interrupt from 10211working correctly: > 10212 10213 :try 10214 : try 10215 : echo "Press CTRL-C for interrupt" 10216 : while 1 10217 : endwhile 10218 : finally 10219 : unlet novar 10220 : endtry 10221 :catch /novar/ 10222 :endtry 10223 :echo "Script still running" 10224 :sleep 1 10225 10226If you need to put commands that could fail into a finally clause, you should 10227think about catching or ignoring the errors in these commands, see 10228|catch-errors| and |ignore-errors|. 10229 10230 10231CATCHING ERRORS *catch-errors* 10232 10233If you want to catch specific errors, you just have to put the code to be 10234watched in a try block and add a catch clause for the error message. The 10235presence of the try conditional causes all errors to be converted to an 10236exception. No message is displayed and |v:errmsg| is not set then. To find 10237the right pattern for the ":catch" command, you have to know how the format of 10238the error exception is. 10239 Error exceptions have the following format: > 10240 10241 Vim({cmdname}):{errmsg} 10242or > 10243 Vim:{errmsg} 10244 10245{cmdname} is the name of the command that failed; the second form is used when 10246the command name is not known. {errmsg} is the error message usually produced 10247when the error occurs outside try conditionals. It always begins with 10248a capital "E", followed by a two or three-digit error number, a colon, and 10249a space. 10250 10251Examples: 10252 10253The command > 10254 :unlet novar 10255normally produces the error message > 10256 E108: No such variable: "novar" 10257which is converted inside try conditionals to an exception > 10258 Vim(unlet):E108: No such variable: "novar" 10259 10260The command > 10261 :dwim 10262normally produces the error message > 10263 E492: Not an editor command: dwim 10264which is converted inside try conditionals to an exception > 10265 Vim:E492: Not an editor command: dwim 10266 10267You can catch all ":unlet" errors by a > 10268 :catch /^Vim(unlet):/ 10269or all errors for misspelled command names by a > 10270 :catch /^Vim:E492:/ 10271 10272Some error messages may be produced by different commands: > 10273 :function nofunc 10274and > 10275 :delfunction nofunc 10276both produce the error message > 10277 E128: Function name must start with a capital: nofunc 10278which is converted inside try conditionals to an exception > 10279 Vim(function):E128: Function name must start with a capital: nofunc 10280or > 10281 Vim(delfunction):E128: Function name must start with a capital: nofunc 10282respectively. You can catch the error by its number independently on the 10283command that caused it if you use the following pattern: > 10284 :catch /^Vim(\a\+):E128:/ 10285 10286Some commands like > 10287 :let x = novar 10288produce multiple error messages, here: > 10289 E121: Undefined variable: novar 10290 E15: Invalid expression: novar 10291Only the first is used for the exception value, since it is the most specific 10292one (see |except-several-errors|). So you can catch it by > 10293 :catch /^Vim(\a\+):E121:/ 10294 10295You can catch all errors related to the name "nofunc" by > 10296 :catch /\<nofunc\>/ 10297 10298You can catch all Vim errors in the ":write" and ":read" commands by > 10299 :catch /^Vim(\(write\|read\)):E\d\+:/ 10300 10301You can catch all Vim errors by the pattern > 10302 :catch /^Vim\((\a\+)\)\=:E\d\+:/ 10303< 10304 *catch-text* 10305NOTE: You should never catch the error message text itself: > 10306 :catch /No such variable/ 10307only works in the English locale, but not when the user has selected 10308a different language by the |:language| command. It is however helpful to 10309cite the message text in a comment: > 10310 :catch /^Vim(\a\+):E108:/ " No such variable 10311 10312 10313IGNORING ERRORS *ignore-errors* 10314 10315You can ignore errors in a specific Vim command by catching them locally: > 10316 10317 :try 10318 : write 10319 :catch 10320 :endtry 10321 10322But you are strongly recommended NOT to use this simple form, since it could 10323catch more than you want. With the ":write" command, some autocommands could 10324be executed and cause errors not related to writing, for instance: > 10325 10326 :au BufWritePre * unlet novar 10327 10328There could even be such errors you are not responsible for as a script 10329writer: a user of your script might have defined such autocommands. You would 10330then hide the error from the user. 10331 It is much better to use > 10332 10333 :try 10334 : write 10335 :catch /^Vim(write):/ 10336 :endtry 10337 10338which only catches real write errors. So catch only what you'd like to ignore 10339intentionally. 10340 10341For a single command that does not cause execution of autocommands, you could 10342even suppress the conversion of errors to exceptions by the ":silent!" 10343command: > 10344 :silent! nunmap k 10345This works also when a try conditional is active. 10346 10347 10348CATCHING INTERRUPTS *catch-interrupt* 10349 10350When there are active try conditionals, an interrupt (CTRL-C) is converted to 10351the exception "Vim:Interrupt". You can catch it like every exception. The 10352script is not terminated, then. 10353 Example: > 10354 10355 :function! TASK1() 10356 : sleep 10 10357 :endfunction 10358 10359 :function! TASK2() 10360 : sleep 20 10361 :endfunction 10362 10363 :while 1 10364 : let command = input("Type a command: ") 10365 : try 10366 : if command == "" 10367 : continue 10368 : elseif command == "END" 10369 : break 10370 : elseif command == "TASK1" 10371 : call TASK1() 10372 : elseif command == "TASK2" 10373 : call TASK2() 10374 : else 10375 : echo "\nIllegal command:" command 10376 : continue 10377 : endif 10378 : catch /^Vim:Interrupt$/ 10379 : echo "\nCommand interrupted" 10380 : " Caught the interrupt. Continue with next prompt. 10381 : endtry 10382 :endwhile 10383 10384You can interrupt a task here by pressing CTRL-C; the script then asks for 10385a new command. If you press CTRL-C at the prompt, the script is terminated. 10386 10387For testing what happens when CTRL-C would be pressed on a specific line in 10388your script, use the debug mode and execute the |>quit| or |>interrupt| 10389command on that line. See |debug-scripts|. 10390 10391 10392CATCHING ALL *catch-all* 10393 10394The commands > 10395 10396 :catch /.*/ 10397 :catch // 10398 :catch 10399 10400catch everything, error exceptions, interrupt exceptions and exceptions 10401explicitly thrown by the |:throw| command. This is useful at the top level of 10402a script in order to catch unexpected things. 10403 Example: > 10404 10405 :try 10406 : 10407 : " do the hard work here 10408 : 10409 :catch /MyException/ 10410 : 10411 : " handle known problem 10412 : 10413 :catch /^Vim:Interrupt$/ 10414 : echo "Script interrupted" 10415 :catch /.*/ 10416 : echo "Internal error (" . v:exception . ")" 10417 : echo " - occurred at " . v:throwpoint 10418 :endtry 10419 :" end of script 10420 10421Note: Catching all might catch more things than you want. Thus, you are 10422strongly encouraged to catch only for problems that you can really handle by 10423specifying a pattern argument to the ":catch". 10424 Example: Catching all could make it nearly impossible to interrupt a script 10425by pressing CTRL-C: > 10426 10427 :while 1 10428 : try 10429 : sleep 1 10430 : catch 10431 : endtry 10432 :endwhile 10433 10434 10435EXCEPTIONS AND AUTOCOMMANDS *except-autocmd* 10436 10437Exceptions may be used during execution of autocommands. Example: > 10438 10439 :autocmd User x try 10440 :autocmd User x throw "Oops!" 10441 :autocmd User x catch 10442 :autocmd User x echo v:exception 10443 :autocmd User x endtry 10444 :autocmd User x throw "Arrgh!" 10445 :autocmd User x echo "Should not be displayed" 10446 : 10447 :try 10448 : doautocmd User x 10449 :catch 10450 : echo v:exception 10451 :endtry 10452 10453This displays "Oops!" and "Arrgh!". 10454 10455 *except-autocmd-Pre* 10456For some commands, autocommands get executed before the main action of the 10457command takes place. If an exception is thrown and not caught in the sequence 10458of autocommands, the sequence and the command that caused its execution are 10459abandoned and the exception is propagated to the caller of the command. 10460 Example: > 10461 10462 :autocmd BufWritePre * throw "FAIL" 10463 :autocmd BufWritePre * echo "Should not be displayed" 10464 : 10465 :try 10466 : write 10467 :catch 10468 : echo "Caught:" v:exception "from" v:throwpoint 10469 :endtry 10470 10471Here, the ":write" command does not write the file currently being edited (as 10472you can see by checking 'modified'), since the exception from the BufWritePre 10473autocommand abandons the ":write". The exception is then caught and the 10474script displays: > 10475 10476 Caught: FAIL from BufWrite Auto commands for "*" 10477< 10478 *except-autocmd-Post* 10479For some commands, autocommands get executed after the main action of the 10480command has taken place. If this main action fails and the command is inside 10481an active try conditional, the autocommands are skipped and an error exception 10482is thrown that can be caught by the caller of the command. 10483 Example: > 10484 10485 :autocmd BufWritePost * echo "File successfully written!" 10486 : 10487 :try 10488 : write /i/m/p/o/s/s/i/b/l/e 10489 :catch 10490 : echo v:exception 10491 :endtry 10492 10493This just displays: > 10494 10495 Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e) 10496 10497If you really need to execute the autocommands even when the main action 10498fails, trigger the event from the catch clause. 10499 Example: > 10500 10501 :autocmd BufWritePre * set noreadonly 10502 :autocmd BufWritePost * set readonly 10503 : 10504 :try 10505 : write /i/m/p/o/s/s/i/b/l/e 10506 :catch 10507 : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e 10508 :endtry 10509< 10510You can also use ":silent!": > 10511 10512 :let x = "ok" 10513 :let v:errmsg = "" 10514 :autocmd BufWritePost * if v:errmsg != "" 10515 :autocmd BufWritePost * let x = "after fail" 10516 :autocmd BufWritePost * endif 10517 :try 10518 : silent! write /i/m/p/o/s/s/i/b/l/e 10519 :catch 10520 :endtry 10521 :echo x 10522 10523This displays "after fail". 10524 10525If the main action of the command does not fail, exceptions from the 10526autocommands will be catchable by the caller of the command: > 10527 10528 :autocmd BufWritePost * throw ":-(" 10529 :autocmd BufWritePost * echo "Should not be displayed" 10530 : 10531 :try 10532 : write 10533 :catch 10534 : echo v:exception 10535 :endtry 10536< 10537 *except-autocmd-Cmd* 10538For some commands, the normal action can be replaced by a sequence of 10539autocommands. Exceptions from that sequence will be catchable by the caller 10540of the command. 10541 Example: For the ":write" command, the caller cannot know whether the file 10542had actually been written when the exception occurred. You need to tell it in 10543some way. > 10544 10545 :if !exists("cnt") 10546 : let cnt = 0 10547 : 10548 : autocmd BufWriteCmd * if &modified 10549 : autocmd BufWriteCmd * let cnt = cnt + 1 10550 : autocmd BufWriteCmd * if cnt % 3 == 2 10551 : autocmd BufWriteCmd * throw "BufWriteCmdError" 10552 : autocmd BufWriteCmd * endif 10553 : autocmd BufWriteCmd * write | set nomodified 10554 : autocmd BufWriteCmd * if cnt % 3 == 0 10555 : autocmd BufWriteCmd * throw "BufWriteCmdError" 10556 : autocmd BufWriteCmd * endif 10557 : autocmd BufWriteCmd * echo "File successfully written!" 10558 : autocmd BufWriteCmd * endif 10559 :endif 10560 : 10561 :try 10562 : write 10563 :catch /^BufWriteCmdError$/ 10564 : if &modified 10565 : echo "Error on writing (file contents not changed)" 10566 : else 10567 : echo "Error after writing" 10568 : endif 10569 :catch /^Vim(write):/ 10570 : echo "Error on writing" 10571 :endtry 10572 10573When this script is sourced several times after making changes, it displays 10574first > 10575 File successfully written! 10576then > 10577 Error on writing (file contents not changed) 10578then > 10579 Error after writing 10580etc. 10581 10582 *except-autocmd-ill* 10583You cannot spread a try conditional over autocommands for different events. 10584The following code is ill-formed: > 10585 10586 :autocmd BufWritePre * try 10587 : 10588 :autocmd BufWritePost * catch 10589 :autocmd BufWritePost * echo v:exception 10590 :autocmd BufWritePost * endtry 10591 : 10592 :write 10593 10594 10595EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS *except-hier-param* 10596 10597Some programming languages allow to use hierarchies of exception classes or to 10598pass additional information with the object of an exception class. You can do 10599similar things in Vim. 10600 In order to throw an exception from a hierarchy, just throw the complete 10601class name with the components separated by a colon, for instance throw the 10602string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library. 10603 When you want to pass additional information with your exception class, add 10604it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)" 10605for an error when writing "myfile". 10606 With the appropriate patterns in the ":catch" command, you can catch for 10607base classes or derived classes of your hierarchy. Additional information in 10608parentheses can be cut out from |v:exception| with the ":substitute" command. 10609 Example: > 10610 10611 :function! CheckRange(a, func) 10612 : if a:a < 0 10613 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")" 10614 : endif 10615 :endfunction 10616 : 10617 :function! Add(a, b) 10618 : call CheckRange(a:a, "Add") 10619 : call CheckRange(a:b, "Add") 10620 : let c = a:a + a:b 10621 : if c < 0 10622 : throw "EXCEPT:MATHERR:OVERFLOW" 10623 : endif 10624 : return c 10625 :endfunction 10626 : 10627 :function! Div(a, b) 10628 : call CheckRange(a:a, "Div") 10629 : call CheckRange(a:b, "Div") 10630 : if (a:b == 0) 10631 : throw "EXCEPT:MATHERR:ZERODIV" 10632 : endif 10633 : return a:a / a:b 10634 :endfunction 10635 : 10636 :function! Write(file) 10637 : try 10638 : execute "write" fnameescape(a:file) 10639 : catch /^Vim(write):/ 10640 : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR" 10641 : endtry 10642 :endfunction 10643 : 10644 :try 10645 : 10646 : " something with arithmetics and I/O 10647 : 10648 :catch /^EXCEPT:MATHERR:RANGE/ 10649 : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "") 10650 : echo "Range error in" function 10651 : 10652 :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV 10653 : echo "Math error" 10654 : 10655 :catch /^EXCEPT:IO/ 10656 : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "") 10657 : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "") 10658 : if file !~ '^/' 10659 : let file = dir . "/" . file 10660 : endif 10661 : echo 'I/O error for "' . file . '"' 10662 : 10663 :catch /^EXCEPT/ 10664 : echo "Unspecified error" 10665 : 10666 :endtry 10667 10668The exceptions raised by Vim itself (on error or when pressing CTRL-C) use 10669a flat hierarchy: they are all in the "Vim" class. You cannot throw yourself 10670exceptions with the "Vim" prefix; they are reserved for Vim. 10671 Vim error exceptions are parameterized with the name of the command that 10672failed, if known. See |catch-errors|. 10673 10674 10675PECULIARITIES 10676 *except-compat* 10677The exception handling concept requires that the command sequence causing the 10678exception is aborted immediately and control is transferred to finally clauses 10679and/or a catch clause. 10680 10681In the Vim script language there are cases where scripts and functions 10682continue after an error: in functions without the "abort" flag or in a command 10683after ":silent!", control flow goes to the following line, and outside 10684functions, control flow goes to the line following the outermost ":endwhile" 10685or ":endif". On the other hand, errors should be catchable as exceptions 10686(thus, requiring the immediate abortion). 10687 10688This problem has been solved by converting errors to exceptions and using 10689immediate abortion (if not suppressed by ":silent!") only when a try 10690conditional is active. This is no restriction since an (error) exception can 10691be caught only from an active try conditional. If you want an immediate 10692termination without catching the error, just use a try conditional without 10693catch clause. (You can cause cleanup code being executed before termination 10694by specifying a finally clause.) 10695 10696When no try conditional is active, the usual abortion and continuation 10697behavior is used instead of immediate abortion. This ensures compatibility of 10698scripts written for Vim 6.1 and earlier. 10699 10700However, when sourcing an existing script that does not use exception handling 10701commands (or when calling one of its functions) from inside an active try 10702conditional of a new script, you might change the control flow of the existing 10703script on error. You get the immediate abortion on error and can catch the 10704error in the new script. If however the sourced script suppresses error 10705messages by using the ":silent!" command (checking for errors by testing 10706|v:errmsg| if appropriate), its execution path is not changed. The error is 10707not converted to an exception. (See |:silent|.) So the only remaining cause 10708where this happens is for scripts that don't care about errors and produce 10709error messages. You probably won't want to use such code from your new 10710scripts. 10711 10712 *except-syntax-err* 10713Syntax errors in the exception handling commands are never caught by any of 10714the ":catch" commands of the try conditional they belong to. Its finally 10715clauses, however, is executed. 10716 Example: > 10717 10718 :try 10719 : try 10720 : throw 4711 10721 : catch /\(/ 10722 : echo "in catch with syntax error" 10723 : catch 10724 : echo "inner catch-all" 10725 : finally 10726 : echo "inner finally" 10727 : endtry 10728 :catch 10729 : echo 'outer catch-all caught "' . v:exception . '"' 10730 : finally 10731 : echo "outer finally" 10732 :endtry 10733 10734This displays: > 10735 inner finally 10736 outer catch-all caught "Vim(catch):E54: Unmatched \(" 10737 outer finally 10738The original exception is discarded and an error exception is raised, instead. 10739 10740 *except-single-line* 10741The ":try", ":catch", ":finally", and ":endtry" commands can be put on 10742a single line, but then syntax errors may make it difficult to recognize the 10743"catch" line, thus you better avoid this. 10744 Example: > 10745 :try | unlet! foo # | catch | endtry 10746raises an error exception for the trailing characters after the ":unlet!" 10747argument, but does not see the ":catch" and ":endtry" commands, so that the 10748error exception is discarded and the "E488: Trailing characters" message gets 10749displayed. 10750 10751 *except-several-errors* 10752When several errors appear in a single command, the first error message is 10753usually the most specific one and therefor converted to the error exception. 10754 Example: > 10755 echo novar 10756causes > 10757 E121: Undefined variable: novar 10758 E15: Invalid expression: novar 10759The value of the error exception inside try conditionals is: > 10760 Vim(echo):E121: Undefined variable: novar 10761< *except-syntax-error* 10762But when a syntax error is detected after a normal error in the same command, 10763the syntax error is used for the exception being thrown. 10764 Example: > 10765 unlet novar # 10766causes > 10767 E108: No such variable: "novar" 10768 E488: Trailing characters 10769The value of the error exception inside try conditionals is: > 10770 Vim(unlet):E488: Trailing characters 10771This is done because the syntax error might change the execution path in a way 10772not intended by the user. Example: > 10773 try 10774 try | unlet novar # | catch | echo v:exception | endtry 10775 catch /.*/ 10776 echo "outer catch:" v:exception 10777 endtry 10778This displays "outer catch: Vim(unlet):E488: Trailing characters", and then 10779a "E600: Missing :endtry" error message is given, see |except-single-line|. 10780 10781============================================================================== 107829. Examples *eval-examples* 10783 10784Printing in Binary ~ 10785> 10786 :" The function Nr2Bin() returns the binary string representation of a number. 10787 :func Nr2Bin(nr) 10788 : let n = a:nr 10789 : let r = "" 10790 : while n 10791 : let r = '01'[n % 2] . r 10792 : let n = n / 2 10793 : endwhile 10794 : return r 10795 :endfunc 10796 10797 :" The function String2Bin() converts each character in a string to a 10798 :" binary string, separated with dashes. 10799 :func String2Bin(str) 10800 : let out = '' 10801 : for ix in range(strlen(a:str)) 10802 : let out = out . '-' . Nr2Bin(char2nr(a:str[ix])) 10803 : endfor 10804 : return out[1:] 10805 :endfunc 10806 10807Example of its use: > 10808 :echo Nr2Bin(32) 10809result: "100000" > 10810 :echo String2Bin("32") 10811result: "110011-110010" 10812 10813 10814Sorting lines ~ 10815 10816This example sorts lines with a specific compare function. > 10817 10818 :func SortBuffer() 10819 : let lines = getline(1, '$') 10820 : call sort(lines, function("Strcmp")) 10821 : call setline(1, lines) 10822 :endfunction 10823 10824As a one-liner: > 10825 :call setline(1, sort(getline(1, '$'), function("Strcmp"))) 10826 10827 10828scanf() replacement ~ 10829 *sscanf* 10830There is no sscanf() function in Vim. If you need to extract parts from a 10831line, you can use matchstr() and substitute() to do it. This example shows 10832how to get the file name, line number and column number out of a line like 10833"foobar.txt, 123, 45". > 10834 :" Set up the match bit 10835 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)' 10836 :"get the part matching the whole expression 10837 :let l = matchstr(line, mx) 10838 :"get each item out of the match 10839 :let file = substitute(l, mx, '\1', '') 10840 :let lnum = substitute(l, mx, '\2', '') 10841 :let col = substitute(l, mx, '\3', '') 10842 10843The input is in the variable "line", the results in the variables "file", 10844"lnum" and "col". (idea from Michael Geddes) 10845 10846 10847getting the scriptnames in a Dictionary ~ 10848 *scriptnames-dictionary* 10849The |:scriptnames| command can be used to get a list of all script files that 10850have been sourced. There is no equivalent function or variable for this 10851(because it's rarely needed). In case you need to manipulate the list this 10852code can be used: > 10853 " Get the output of ":scriptnames" in the scriptnames_output variable. 10854 let scriptnames_output = '' 10855 redir => scriptnames_output 10856 silent scriptnames 10857 redir END 10858 10859 " Split the output into lines and parse each line. Add an entry to the 10860 " "scripts" dictionary. 10861 let scripts = {} 10862 for line in split(scriptnames_output, "\n") 10863 " Only do non-blank lines. 10864 if line =~ '\S' 10865 " Get the first number in the line. 10866 let nr = matchstr(line, '\d\+') 10867 " Get the file name, remove the script number " 123: ". 10868 let name = substitute(line, '.\+:\s*', '', '') 10869 " Add an item to the Dictionary 10870 let scripts[nr] = name 10871 endif 10872 endfor 10873 unlet scriptnames_output 10874 10875============================================================================== 1087610. No +eval feature *no-eval-feature* 10877 10878When the |+eval| feature was disabled at compile time, none of the expression 10879evaluation commands are available. To prevent this from causing Vim scripts 10880to generate all kinds of errors, the ":if" and ":endif" commands are still 10881recognized, though the argument of the ":if" and everything between the ":if" 10882and the matching ":endif" is ignored. Nesting of ":if" blocks is allowed, but 10883only if the commands are at the start of the line. The ":else" command is not 10884recognized. 10885 10886Example of how to avoid executing commands when the |+eval| feature is 10887missing: > 10888 10889 :if 1 10890 : echo "Expression evaluation is compiled in" 10891 :else 10892 : echo "You will _never_ see this message" 10893 :endif 10894 10895To execute a command only when the |+eval| feature is disabled requires a trick, 10896as this example shows: > 10897 10898 silent! while 0 10899 set history=111 10900 silent! endwhile 10901 10902When the |+eval| feature is available the command is skipped because of the 10903"while 0". Without the |+eval| feature the "while 0" is an error, which is 10904silently ignored, and the command is executed. 10905 10906============================================================================== 1090711. The sandbox *eval-sandbox* *sandbox* *E48* 10908 10909The 'foldexpr', 'formatexpr', 'includeexpr', 'indentexpr', 'statusline' and 10910'foldtext' options may be evaluated in a sandbox. This means that you are 10911protected from these expressions having nasty side effects. This gives some 10912safety for when these options are set from a modeline. It is also used when 10913the command from a tags file is executed and for CTRL-R = in the command line. 10914The sandbox is also used for the |:sandbox| command. 10915 10916These items are not allowed in the sandbox: 10917 - changing the buffer text 10918 - defining or changing mapping, autocommands, functions, user commands 10919 - setting certain options (see |option-summary|) 10920 - setting certain v: variables (see |v:var|) *E794* 10921 - executing a shell command 10922 - reading or writing a file 10923 - jumping to another buffer or editing a file 10924 - executing Python, Perl, etc. commands 10925This is not guaranteed 100% secure, but it should block most attacks. 10926 10927 *:san* *:sandbox* 10928:san[dbox] {cmd} Execute {cmd} in the sandbox. Useful to evaluate an 10929 option that may have been set from a modeline, e.g. 10930 'foldexpr'. 10931 10932 *sandbox-option* 10933A few options contain an expression. When this expression is evaluated it may 10934have to be done in the sandbox to avoid a security risk. But the sandbox is 10935restrictive, thus this only happens when the option was set from an insecure 10936location. Insecure in this context are: 10937- sourcing a .vimrc or .exrc in the current directory 10938- while executing in the sandbox 10939- value coming from a modeline 10940 10941Note that when in the sandbox and saving an option value and restoring it, the 10942option will still be marked as it was set in the sandbox. 10943 10944============================================================================== 1094512. Textlock *textlock* 10946 10947In a few situations it is not allowed to change the text in the buffer, jump 10948to another window and some other things that might confuse or break what Vim 10949is currently doing. This mostly applies to things that happen when Vim is 10950actually doing something else. For example, evaluating the 'balloonexpr' may 10951happen any moment the mouse cursor is resting at some position. 10952 10953This is not allowed when the textlock is active: 10954 - changing the buffer text 10955 - jumping to another buffer or window 10956 - editing another file 10957 - closing a window or quitting Vim 10958 - etc. 10959 10960============================================================================== 1096113. Testing *testing* 10962 10963Vim can be tested after building it, usually with "make test". 10964The tests are located in the directory "src/testdir". 10965 10966There are several types of tests added over time: 10967 test33.in oldest, don't add any more 10968 test_something.in old style tests 10969 test_something.vim new style tests 10970 10971 *new-style-testing* 10972New tests should be added as new style tests. These use functions such as 10973|assert_equal()| to keep the test commands and the expected result in one 10974place. 10975 *old-style-testing* 10976In some cases an old style test needs to be used. E.g. when testing Vim 10977without the |+eval| feature. 10978 10979Find more information in the file src/testdir/README.txt. 10980 10981 10982 vim:tw=78:ts=8:ft=help:norl: 10983