1*eval.txt* For Vim version 8.1. Last change: 2019 Mar 23 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 Blobs |Blobs| 21 1.6 More about variables |more-variables| 222. Expression syntax |expression-syntax| 233. Internal variable |internal-variables| 244. Builtin Functions |functions| 255. Defining functions |user-functions| 266. Curly braces names |curly-braces-names| 277. Commands |expression-commands| 288. Exception handling |exception-handling| 299. Examples |eval-examples| 3010. No +eval feature |no-eval-feature| 3111. The sandbox |eval-sandbox| 3212. Textlock |textlock| 3313. Testing |testing| 34 35{Vi does not have any of these commands} 36 37============================================================================== 381. Variables *variables* 39 401.1 Variable types ~ 41 *E712* *E896* *E897* *E899* 42There are nine types of variables: 43 44Number A 32 or 64 bit signed number. |expr-number| *Number* 45 64-bit Numbers are available only when compiled with the 46 |+num64| feature. 47 Examples: -123 0x10 0177 0b1011 48 49Float A floating point number. |floating-point-format| *Float* 50 {only when compiled with the |+float| feature} 51 Examples: 123.456 1.15e-6 -1.1e3 52 53 *E928* 54String A NUL terminated string of 8-bit unsigned characters (bytes). 55 |expr-string| Examples: "ab\txx\"--" 'x-z''a,c' 56 57List An ordered sequence of items, see |List| for details. 58 Example: [1, 2, ['a', 'b']] 59 60Dictionary An associative, unordered array: Each entry has a key and a 61 value. |Dictionary| 62 Example: {'blue': "#0000ff", 'red': "#ff0000"} 63 64Funcref A reference to a function |Funcref|. 65 Example: function("strlen") 66 It can be bound to a dictionary and arguments, it then works 67 like a Partial. 68 Example: function("Callback", [arg], myDict) 69 70Special |v:false|, |v:true|, |v:none| and |v:null|. *Special* 71 72Job Used for a job, see |job_start()|. *Job* *Jobs* 73 74Channel Used for a channel, see |ch_open()|. *Channel* *Channels* 75 76Blob Binary Large Object. Stores any sequence of bytes. See |Blob| 77 for details 78 Example: 0zFF00ED015DAF 79 0z is an empty Blob. 80 81The Number and String types are converted automatically, depending on how they 82are used. 83 84Conversion from a Number to a String is by making the ASCII representation of 85the Number. Examples: 86 Number 123 --> String "123" ~ 87 Number 0 --> String "0" ~ 88 Number -1 --> String "-1" ~ 89 *octal* 90Conversion from a String to a Number is done by converting the first digits to 91a number. Hexadecimal "0xf9", Octal "017", and Binary "0b10" numbers are 92recognized. If the String doesn't start with digits, the result is zero. 93Examples: 94 String "456" --> Number 456 ~ 95 String "6bar" --> Number 6 ~ 96 String "foo" --> Number 0 ~ 97 String "0xf1" --> Number 241 ~ 98 String "0100" --> Number 64 ~ 99 String "0b101" --> Number 5 ~ 100 String "-8" --> Number -8 ~ 101 String "+8" --> Number 0 ~ 102 103To force conversion from String to Number, add zero to it: > 104 :echo "0100" + 0 105< 64 ~ 106 107To avoid a leading zero to cause octal conversion, or for using a different 108base, use |str2nr()|. 109 110 *TRUE* *FALSE* *Boolean* 111For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE. 112You can also use |v:false| and |v:true|. When TRUE is returned from a 113function it is the Number one, FALSE is the number zero. 114 115Note that in the command: > 116 :if "foo" 117 :" NOT executed 118"foo" is converted to 0, which means FALSE. If the string starts with a 119non-zero number it means TRUE: > 120 :if "8foo" 121 :" executed 122To test for a non-empty string, use empty(): > 123 :if !empty("foo") 124< 125 *non-zero-arg* 126Function arguments often behave slightly different from |TRUE|: If the 127argument is present and it evaluates to a non-zero Number, |v:true| or a 128non-empty String, then the value is considered to be TRUE. 129Note that " " and "0" are also non-empty strings, thus considered to be TRUE. 130A List, Dictionary or Float is not a Number or String, thus evaluate to FALSE. 131 132 *E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910* *E913* 133 *E974* *E975* *E976* 134|List|, |Dictionary|, |Funcref|, |Job|, |Channel| and |Blob| types are not 135automatically converted. 136 137 *E805* *E806* *E808* 138When mixing Number and Float the Number is converted to Float. Otherwise 139there is no automatic conversion of Float. You can use str2float() for String 140to Float, printf() for Float to String and float2nr() for Float to Number. 141 142 *E891* *E892* *E893* *E894* *E907* *E911* *E914* 143When expecting a Float a Number can also be used, but nothing else. 144 145 *no-type-checking* 146You will not get an error if you try to change the type of a variable. 147 148 1491.2 Function references ~ 150 *Funcref* *E695* *E718* 151A Funcref variable is obtained with the |function()| function, the |funcref()| 152function or created with the lambda expression |expr-lambda|. It can be used 153in an expression in the place of a function name, before the parenthesis 154around the arguments, to invoke the function it refers to. Example: > 155 156 :let Fn = function("MyFunc") 157 :echo Fn() 158< *E704* *E705* *E707* 159A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:". You 160can use "g:" but the following name must still start with a capital. You 161cannot have both a Funcref variable and a function with the same name. 162 163A special case is defining a function and directly assigning its Funcref to a 164Dictionary entry. Example: > 165 :function dict.init() dict 166 : let self.val = 0 167 :endfunction 168 169The key of the Dictionary can start with a lower case letter. The actual 170function name is not used here. Also see |numbered-function|. 171 172A Funcref can also be used with the |:call| command: > 173 :call Fn() 174 :call dict.init() 175 176The name of the referenced function can be obtained with |string()|. > 177 :let func = string(Fn) 178 179You can use |call()| to invoke a Funcref and use a list variable for the 180arguments: > 181 :let r = call(Fn, mylist) 182< 183 *Partial* 184A Funcref optionally binds a Dictionary and/or arguments. This is also called 185a Partial. This is created by passing the Dictionary and/or arguments to 186function() or funcref(). When calling the function the Dictionary and/or 187arguments will be passed to the function. Example: > 188 189 let Cb = function('Callback', ['foo'], myDict) 190 call Cb('bar') 191 192This will invoke the function as if using: > 193 call myDict.Callback('foo', 'bar') 194 195This is very useful when passing a function around, e.g. in the arguments of 196|ch_open()|. 197 198Note that binding a function to a Dictionary also happens when the function is 199a member of the Dictionary: > 200 201 let myDict.myFunction = MyFunction 202 call myDict.myFunction() 203 204Here MyFunction() will get myDict passed as "self". This happens when the 205"myFunction" member is accessed. When making assigning "myFunction" to 206otherDict and calling it, it will be bound to otherDict: > 207 208 let otherDict.myFunction = myDict.myFunction 209 call otherDict.myFunction() 210 211Now "self" will be "otherDict". But when the dictionary was bound explicitly 212this won't happen: > 213 214 let myDict.myFunction = function(MyFunction, myDict) 215 let otherDict.myFunction = myDict.myFunction 216 call otherDict.myFunction() 217 218Here "self" will be "myDict", because it was bound explicitly. 219 220 2211.3 Lists ~ 222 *list* *List* *Lists* *E686* 223A List is an ordered sequence of items. An item can be of any type. Items 224can be accessed by their index number. Items can be added and removed at any 225position in the sequence. 226 227 228List creation ~ 229 *E696* *E697* 230A List is created with a comma separated list of items in square brackets. 231Examples: > 232 :let mylist = [1, two, 3, "four"] 233 :let emptylist = [] 234 235An item can be any expression. Using a List for an item creates a 236List of Lists: > 237 :let nestlist = [[11, 12], [21, 22], [31, 32]] 238 239An extra comma after the last item is ignored. 240 241 242List index ~ 243 *list-index* *E684* 244An item in the List can be accessed by putting the index in square brackets 245after the List. Indexes are zero-based, thus the first item has index zero. > 246 :let item = mylist[0] " get the first item: 1 247 :let item = mylist[2] " get the third item: 3 248 249When the resulting item is a list this can be repeated: > 250 :let item = nestlist[0][1] " get the first list, second item: 12 251< 252A negative index is counted from the end. Index -1 refers to the last item in 253the List, -2 to the last but one item, etc. > 254 :let last = mylist[-1] " get the last item: "four" 255 256To avoid an error for an invalid index use the |get()| function. When an item 257is not available it returns zero or the default value you specify: > 258 :echo get(mylist, idx) 259 :echo get(mylist, idx, "NONE") 260 261 262List concatenation ~ 263 264Two lists can be concatenated with the "+" operator: > 265 :let longlist = mylist + [5, 6] 266 :let mylist += [7, 8] 267 268To prepend or append an item turn the item into a list by putting [] around 269it. To change a list in-place see |list-modification| below. 270 271 272Sublist ~ 273 *sublist* 274A part of the List can be obtained by specifying the first and last index, 275separated by a colon in square brackets: > 276 :let shortlist = mylist[2:-1] " get List [3, "four"] 277 278Omitting the first index is similar to zero. Omitting the last index is 279similar to -1. > 280 :let endlist = mylist[2:] " from item 2 to the end: [3, "four"] 281 :let shortlist = mylist[2:2] " List with one item: [3] 282 :let otherlist = mylist[:] " make a copy of the List 283 284If the first index is beyond the last item of the List or the second item is 285before the first item, the result is an empty list. There is no error 286message. 287 288If the second index is equal to or greater than the length of the list the 289length minus one is used: > 290 :let mylist = [0, 1, 2, 3] 291 :echo mylist[2:8] " result: [2, 3] 292 293NOTE: mylist[s:e] means using the variable "s:e" as index. Watch out for 294using a single letter variable before the ":". Insert a space when needed: 295mylist[s : e]. 296 297 298List identity ~ 299 *list-identity* 300When variable "aa" is a list and you assign it to another variable "bb", both 301variables refer to the same list. Thus changing the list "aa" will also 302change "bb": > 303 :let aa = [1, 2, 3] 304 :let bb = aa 305 :call add(aa, 4) 306 :echo bb 307< [1, 2, 3, 4] 308 309Making a copy of a list is done with the |copy()| function. Using [:] also 310works, as explained above. This creates a shallow copy of the list: Changing 311a list item in the list will also change the item in the copied list: > 312 :let aa = [[1, 'a'], 2, 3] 313 :let bb = copy(aa) 314 :call add(aa, 4) 315 :let aa[0][1] = 'aaa' 316 :echo aa 317< [[1, aaa], 2, 3, 4] > 318 :echo bb 319< [[1, aaa], 2, 3] 320 321To make a completely independent list use |deepcopy()|. This also makes a 322copy of the values in the list, recursively. Up to a hundred levels deep. 323 324The operator "is" can be used to check if two variables refer to the same 325List. "isnot" does the opposite. In contrast "==" compares if two lists have 326the same value. > 327 :let alist = [1, 2, 3] 328 :let blist = [1, 2, 3] 329 :echo alist is blist 330< 0 > 331 :echo alist == blist 332< 1 333 334Note about comparing lists: Two lists are considered equal if they have the 335same length and all items compare equal, as with using "==". There is one 336exception: When comparing a number with a string they are considered 337different. There is no automatic type conversion, as with using "==" on 338variables. Example: > 339 echo 4 == "4" 340< 1 > 341 echo [4] == ["4"] 342< 0 343 344Thus comparing Lists is more strict than comparing numbers and strings. You 345can compare simple values this way too by putting them in a list: > 346 347 :let a = 5 348 :let b = "5" 349 :echo a == b 350< 1 > 351 :echo [a] == [b] 352< 0 353 354 355List unpack ~ 356 357To unpack the items in a list to individual variables, put the variables in 358square brackets, like list items: > 359 :let [var1, var2] = mylist 360 361When the number of variables does not match the number of items in the list 362this produces an error. To handle any extra items from the list append ";" 363and a variable name: > 364 :let [var1, var2; rest] = mylist 365 366This works like: > 367 :let var1 = mylist[0] 368 :let var2 = mylist[1] 369 :let rest = mylist[2:] 370 371Except that there is no error if there are only two items. "rest" will be an 372empty list then. 373 374 375List modification ~ 376 *list-modification* 377To change a specific item of a list use |:let| this way: > 378 :let list[4] = "four" 379 :let listlist[0][3] = item 380 381To change part of a list you can specify the first and last item to be 382modified. The value must at least have the number of items in the range: > 383 :let list[3:5] = [3, 4, 5] 384 385Adding and removing items from a list is done with functions. Here are a few 386examples: > 387 :call insert(list, 'a') " prepend item 'a' 388 :call insert(list, 'a', 3) " insert item 'a' before list[3] 389 :call add(list, "new") " append String item 390 :call add(list, [1, 2]) " append a List as one new item 391 :call extend(list, [1, 2]) " extend the list with two more items 392 :let i = remove(list, 3) " remove item 3 393 :unlet list[3] " idem 394 :let l = remove(list, 3, -1) " remove items 3 to last item 395 :unlet list[3 : ] " idem 396 :call filter(list, 'v:val !~ "x"') " remove items with an 'x' 397 398Changing the order of items in a list: > 399 :call sort(list) " sort a list alphabetically 400 :call reverse(list) " reverse the order of items 401 :call uniq(sort(list)) " sort and remove duplicates 402 403 404For loop ~ 405 406The |:for| loop executes commands for each item in a list. A variable is set 407to each item in the list in sequence. Example: > 408 :for item in mylist 409 : call Doit(item) 410 :endfor 411 412This works like: > 413 :let index = 0 414 :while index < len(mylist) 415 : let item = mylist[index] 416 : :call Doit(item) 417 : let index = index + 1 418 :endwhile 419 420If all you want to do is modify each item in the list then the |map()| 421function will be a simpler method than a for loop. 422 423Just like the |:let| command, |:for| also accepts a list of variables. This 424requires the argument to be a list of lists. > 425 :for [lnum, col] in [[1, 3], [2, 8], [3, 0]] 426 : call Doit(lnum, col) 427 :endfor 428 429This works like a |:let| command is done for each list item. Again, the types 430must remain the same to avoid an error. 431 432It is also possible to put remaining items in a List variable: > 433 :for [i, j; rest] in listlist 434 : call Doit(i, j) 435 : if !empty(rest) 436 : echo "remainder: " . string(rest) 437 : endif 438 :endfor 439 440 441List functions ~ 442 *E714* 443Functions that are useful with a List: > 444 :let r = call(funcname, list) " call a function with an argument list 445 :if empty(list) " check if list is empty 446 :let l = len(list) " number of items in list 447 :let big = max(list) " maximum value in list 448 :let small = min(list) " minimum value in list 449 :let xs = count(list, 'x') " count nr of times 'x' appears in list 450 :let i = index(list, 'x') " index of first 'x' in list 451 :let lines = getline(1, 10) " get ten text lines from buffer 452 :call append('$', lines) " append text lines in buffer 453 :let list = split("a b c") " create list from items in a string 454 :let string = join(list, ', ') " create string from list items 455 :let s = string(list) " String representation of list 456 :call map(list, '">> " . v:val') " prepend ">> " to each item 457 458Don't forget that a combination of features can make things simple. For 459example, to add up all the numbers in a list: > 460 :exe 'let sum = ' . join(nrlist, '+') 461 462 4631.4 Dictionaries ~ 464 *dict* *Dict* *Dictionaries* *Dictionary* 465A Dictionary is an associative array: Each entry has a key and a value. The 466entry can be located with the key. The entries are stored without a specific 467ordering. 468 469 470Dictionary creation ~ 471 *E720* *E721* *E722* *E723* 472A Dictionary is created with a comma separated list of entries in curly 473braces. Each entry has a key and a value, separated by a colon. Each key can 474only appear once. Examples: > 475 :let mydict = {1: 'one', 2: 'two', 3: 'three'} 476 :let emptydict = {} 477< *E713* *E716* *E717* 478A key is always a String. You can use a Number, it will be converted to a 479String automatically. Thus the String '4' and the number 4 will find the same 480entry. Note that the String '04' and the Number 04 are different, since the 481Number will be converted to the String '4'. The empty string can be used as a 482key. 483 484A value can be any expression. Using a Dictionary for a value creates a 485nested Dictionary: > 486 :let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}} 487 488An extra comma after the last entry is ignored. 489 490 491Accessing entries ~ 492 493The normal way to access an entry is by putting the key in square brackets: > 494 :let val = mydict["one"] 495 :let mydict["four"] = 4 496 497You can add new entries to an existing Dictionary this way, unlike Lists. 498 499For keys that consist entirely of letters, digits and underscore the following 500form can be used |expr-entry|: > 501 :let val = mydict.one 502 :let mydict.four = 4 503 504Since an entry can be any type, also a List and a Dictionary, the indexing and 505key lookup can be repeated: > 506 :echo dict.key[idx].key 507 508 509Dictionary to List conversion ~ 510 511You may want to loop over the entries in a dictionary. For this you need to 512turn the Dictionary into a List and pass it to |:for|. 513 514Most often you want to loop over the keys, using the |keys()| function: > 515 :for key in keys(mydict) 516 : echo key . ': ' . mydict[key] 517 :endfor 518 519The List of keys is unsorted. You may want to sort them first: > 520 :for key in sort(keys(mydict)) 521 522To loop over the values use the |values()| function: > 523 :for v in values(mydict) 524 : echo "value: " . v 525 :endfor 526 527If you want both the key and the value use the |items()| function. It returns 528a List in which each item is a List with two items, the key and the value: > 529 :for [key, value] in items(mydict) 530 : echo key . ': ' . value 531 :endfor 532 533 534Dictionary identity ~ 535 *dict-identity* 536Just like Lists you need to use |copy()| and |deepcopy()| to make a copy of a 537Dictionary. Otherwise, assignment results in referring to the same 538Dictionary: > 539 :let onedict = {'a': 1, 'b': 2} 540 :let adict = onedict 541 :let adict['a'] = 11 542 :echo onedict['a'] 543 11 544 545Two Dictionaries compare equal if all the key-value pairs compare equal. For 546more info see |list-identity|. 547 548 549Dictionary modification ~ 550 *dict-modification* 551To change an already existing entry of a Dictionary, or to add a new entry, 552use |:let| this way: > 553 :let dict[4] = "four" 554 :let dict['one'] = item 555 556Removing an entry from a Dictionary is done with |remove()| or |:unlet|. 557Three ways to remove the entry with key "aaa" from dict: > 558 :let i = remove(dict, 'aaa') 559 :unlet dict.aaa 560 :unlet dict['aaa'] 561 562Merging a Dictionary with another is done with |extend()|: > 563 :call extend(adict, bdict) 564This extends adict with all entries from bdict. Duplicate keys cause entries 565in adict to be overwritten. An optional third argument can change this. 566Note that the order of entries in a Dictionary is irrelevant, thus don't 567expect ":echo adict" to show the items from bdict after the older entries in 568adict. 569 570Weeding out entries from a Dictionary can be done with |filter()|: > 571 :call filter(dict, 'v:val =~ "x"') 572This removes all entries from "dict" with a value not matching 'x'. 573 574 575Dictionary function ~ 576 *Dictionary-function* *self* *E725* *E862* 577When a function is defined with the "dict" attribute it can be used in a 578special way with a dictionary. Example: > 579 :function Mylen() dict 580 : return len(self.data) 581 :endfunction 582 :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")} 583 :echo mydict.len() 584 585This is like a method in object oriented programming. The entry in the 586Dictionary is a |Funcref|. The local variable "self" refers to the dictionary 587the function was invoked from. 588 589It is also possible to add a function without the "dict" attribute as a 590Funcref to a Dictionary, but the "self" variable is not available then. 591 592 *numbered-function* *anonymous-function* 593To avoid the extra name for the function it can be defined and directly 594assigned to a Dictionary in this way: > 595 :let mydict = {'data': [0, 1, 2, 3]} 596 :function mydict.len() 597 : return len(self.data) 598 :endfunction 599 :echo mydict.len() 600 601The function will then get a number and the value of dict.len is a |Funcref| 602that references this function. The function can only be used through a 603|Funcref|. It will automatically be deleted when there is no |Funcref| 604remaining that refers to it. 605 606It is not necessary to use the "dict" attribute for a numbered function. 607 608If you get an error for a numbered function, you can find out what it is with 609a trick. Assuming the function is 42, the command is: > 610 :function {42} 611 612 613Functions for Dictionaries ~ 614 *E715* 615Functions that can be used with a Dictionary: > 616 :if has_key(dict, 'foo') " TRUE if dict has entry with key "foo" 617 :if empty(dict) " TRUE if dict is empty 618 :let l = len(dict) " number of items in dict 619 :let big = max(dict) " maximum value in dict 620 :let small = min(dict) " minimum value in dict 621 :let xs = count(dict, 'x') " count nr of times 'x' appears in dict 622 :let s = string(dict) " String representation of dict 623 :call map(dict, '">> " . v:val') " prepend ">> " to each item 624 625 6261.5 Blobs ~ 627 *blob* *Blob* *Blobs* *E978* 628A Blob mostly behaves like a |List| of numbers, where the numbers have an 6298-bit value, from 0 to 255. 630 631 632Blob creation ~ 633 634A Blob can be created with a |blob-literal|: > 635 :let b = 0zFF00ED015DAF 636Dots can be inserted between bytes (pair of hex characters) for readability, 637they don't change the value: > 638 :let b = 0zFF00.ED01.5DAF 639 640A blob can be read from a file with |readfile()| passing the {type} argument 641set to "B", for example: > 642 :let b = readfile('image.png', 'B') 643 644A blob can be read from a channel with the |ch_readblob()| function. 645 646 647Blob index ~ 648 *blob-index* *E979* 649A byte in the Blob can be accessed by putting the index in square brackets 650after the Blob. Indexes are zero-based, thus the first byte has index zero. > 651 :let myblob = 0z00112233 652 :let byte = myblob[0] " get the first byte: 0x00 653 :let byte = myblob[2] " get the third byte: 0x22 654 655A negative index is counted from the end. Index -1 refers to the last byte in 656the Blob, -2 to the last but one byte, etc. > 657 :let last = myblob[-1] " get the last byte: 0x33 658 659To avoid an error for an invalid index use the |get()| function. When an item 660is not available it returns -1 or the default value you specify: > 661 :echo get(myblob, idx) 662 :echo get(myblob, idx, 999) 663 664 665Blob iteration ~ 666 667The |:for| loop executes commands for each byte of a Blob. The loop variable is 668set to each byte in the Blob. Example: > 669 :for byte in 0z112233 670 : call Doit(byte) 671 :endfor 672This calls Doit() with 0x11, 0x22 and 0x33. 673 674 675Blob concatenation ~ 676 677Two blobs can be concatenated with the "+" operator: > 678 :let longblob = myblob + 0z4455 679 :let myblob += 0z6677 680 681To change a blob in-place see |blob-modification| below. 682 683 684Part of a blob ~ 685 686A part of the Blob can be obtained by specifying the first and last index, 687separated by a colon in square brackets: > 688 :let myblob = 0z00112233 689 :let shortblob = myblob[1:2] " get 0z1122 690 :let shortblob = myblob[2:-1] " get 0z2233 691 692Omitting the first index is similar to zero. Omitting the last index is 693similar to -1. > 694 :let endblob = myblob[2:] " from item 2 to the end: 0z2233 695 :let shortblob = myblob[2:2] " Blob with one byte: 0z22 696 :let otherblob = myblob[:] " make a copy of the Blob 697 698If the first index is beyond the last byte of the Blob or the second index is 699before the first index, the result is an empty Blob. There is no error 700message. 701 702If the second index is equal to or greater than the length of the list the 703length minus one is used: > 704 :echo myblob[2:8] " result: 0z2233 705 706 707Blob modification ~ 708 *blob-modification* 709To change a specific byte of a blob use |:let| this way: > 710 :let blob[4] = 0x44 711 712When the index is just one beyond the end of the Blob, it is appended. Any 713higher index is an error. 714 715To change a sequence of bytes the [:] notation can be used: > 716 let blob[1:3] = 0z445566 717The length of the replaced bytes must be exactly the same as the value 718provided. *E972* 719 720To change part of a blob you can specify the first and last byte to be 721modified. The value must have the same number of bytes in the range: > 722 :let blob[3:5] = 0z334455 723 724You can also use the functions |add()|, |remove()| and |insert()|. 725 726 727Blob identity ~ 728 729Blobs can be compared for equality: > 730 if blob == 0z001122 731And for equal identity: > 732 if blob is otherblob 733< *blob-identity* *E977* 734When variable "aa" is a Blob and you assign it to another variable "bb", both 735variables refer to the same Blob. Then the "is" operator returns true. 736 737When making a copy using [:] or |copy()| the values are the same, but the 738identity is different: > 739 :let blob = 0z112233 740 :let blob2 = blob 741 :echo blob == blob2 742< 1 > 743 :echo blob is blob2 744< 1 > 745 :let blob3 = blob[:] 746 :echo blob == blob3 747< 1 > 748 :echo blob is blob3 749< 0 750 751Making a copy of a Blob is done with the |copy()| function. Using [:] also 752works, as explained above. 753 754 7551.6 More about variables ~ 756 *more-variables* 757If you need to know the type of a variable or expression, use the |type()| 758function. 759 760When the '!' flag is included in the 'viminfo' option, global variables that 761start with an uppercase letter, and don't contain a lowercase letter, are 762stored in the viminfo file |viminfo-file|. 763 764When the 'sessionoptions' option contains "global", global variables that 765start with an uppercase letter and contain at least one lowercase letter are 766stored in the session file |session-file|. 767 768variable name can be stored where ~ 769my_var_6 not 770My_Var_6 session file 771MY_VAR_6 viminfo file 772 773 774It's possible to form a variable name with curly braces, see 775|curly-braces-names|. 776 777============================================================================== 7782. Expression syntax *expression-syntax* 779 780Expression syntax summary, from least to most significant: 781 782|expr1| expr2 783 expr2 ? expr1 : expr1 if-then-else 784 785|expr2| expr3 786 expr3 || expr3 .. logical OR 787 788|expr3| expr4 789 expr4 && expr4 .. logical AND 790 791|expr4| expr5 792 expr5 == expr5 equal 793 expr5 != expr5 not equal 794 expr5 > expr5 greater than 795 expr5 >= expr5 greater than or equal 796 expr5 < expr5 smaller than 797 expr5 <= expr5 smaller than or equal 798 expr5 =~ expr5 regexp matches 799 expr5 !~ expr5 regexp doesn't match 800 801 expr5 ==? expr5 equal, ignoring case 802 expr5 ==# expr5 equal, match case 803 etc. As above, append ? for ignoring case, # for 804 matching case 805 806 expr5 is expr5 same |List|, |Dictionary| or |Blob| instance 807 expr5 isnot expr5 different |List|, |Dictionary| or |Blob| 808 instance 809 810|expr5| expr6 811 expr6 + expr6 .. number addition, list or blob concatenation 812 expr6 - expr6 .. number subtraction 813 expr6 . expr6 .. string concatenation 814 815|expr6| expr7 816 expr7 * expr7 .. number multiplication 817 expr7 / expr7 .. number division 818 expr7 % expr7 .. number modulo 819 820|expr7| expr8 821 ! expr7 logical NOT 822 - expr7 unary minus 823 + expr7 unary plus 824 825|expr8| expr9 826 expr8[expr1] byte of a String or item of a |List| 827 expr8[expr1 : expr1] substring of a String or sublist of a |List| 828 expr8.name entry in a |Dictionary| 829 expr8(expr1, ...) function call with |Funcref| variable 830 831|expr9| number number constant 832 "string" string constant, backslash is special 833 'string' string constant, ' is doubled 834 [expr1, ...] |List| 835 {expr1: expr1, ...} |Dictionary| 836 &option option value 837 (expr1) nested expression 838 variable internal variable 839 va{ria}ble internal variable with curly braces 840 $VAR environment variable 841 @r contents of register 'r' 842 function(expr1, ...) function call 843 func{ti}on(expr1, ...) function call with curly braces 844 {args -> expr1} lambda expression 845 846 847".." indicates that the operations in this level can be concatenated. 848Example: > 849 &nu || &list && &shell == "csh" 850 851All expressions within one level are parsed from left to right. 852 853 854expr1 *expr1* *E109* 855----- 856 857expr2 ? expr1 : expr1 858 859The expression before the '?' is evaluated to a number. If it evaluates to 860|TRUE|, the result is the value of the expression between the '?' and ':', 861otherwise the result is the value of the expression after the ':'. 862Example: > 863 :echo lnum == 1 ? "top" : lnum 864 865Since the first expression is an "expr2", it cannot contain another ?:. The 866other two expressions can, thus allow for recursive use of ?:. 867Example: > 868 :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum 869 870To keep this readable, using |line-continuation| is suggested: > 871 :echo lnum == 1 872 :\ ? "top" 873 :\ : lnum == 1000 874 :\ ? "last" 875 :\ : lnum 876 877You should always put a space before the ':', otherwise it can be mistaken for 878use in a variable such as "a:1". 879 880 881expr2 and expr3 *expr2* *expr3* 882--------------- 883 884expr3 || expr3 .. logical OR *expr-barbar* 885expr4 && expr4 .. logical AND *expr-&&* 886 887The "||" and "&&" operators take one argument on each side. The arguments 888are (converted to) Numbers. The result is: 889 890 input output ~ 891n1 n2 n1 || n2 n1 && n2 ~ 892|FALSE| |FALSE| |FALSE| |FALSE| 893|FALSE| |TRUE| |TRUE| |FALSE| 894|TRUE| |FALSE| |TRUE| |FALSE| 895|TRUE| |TRUE| |TRUE| |TRUE| 896 897The operators can be concatenated, for example: > 898 899 &nu || &list && &shell == "csh" 900 901Note that "&&" takes precedence over "||", so this has the meaning of: > 902 903 &nu || (&list && &shell == "csh") 904 905Once the result is known, the expression "short-circuits", that is, further 906arguments are not evaluated. This is like what happens in C. For example: > 907 908 let a = 1 909 echo a || b 910 911This is valid even if there is no variable called "b" because "a" is |TRUE|, 912so the result must be |TRUE|. Similarly below: > 913 914 echo exists("b") && b == "yes" 915 916This is valid whether "b" has been defined or not. The second clause will 917only be evaluated if "b" has been defined. 918 919 920expr4 *expr4* 921----- 922 923expr5 {cmp} expr5 924 925Compare two expr5 expressions, resulting in a 0 if it evaluates to false, or 1 926if it evaluates to true. 927 928 *expr-==* *expr-!=* *expr->* *expr->=* 929 *expr-<* *expr-<=* *expr-=~* *expr-!~* 930 *expr-==#* *expr-!=#* *expr->#* *expr->=#* 931 *expr-<#* *expr-<=#* *expr-=~#* *expr-!~#* 932 *expr-==?* *expr-!=?* *expr->?* *expr->=?* 933 *expr-<?* *expr-<=?* *expr-=~?* *expr-!~?* 934 *expr-is* *expr-isnot* *expr-is#* *expr-isnot#* 935 *expr-is?* *expr-isnot?* 936 use 'ignorecase' match case ignore case ~ 937equal == ==# ==? 938not equal != !=# !=? 939greater than > ># >? 940greater than or equal >= >=# >=? 941smaller than < <# <? 942smaller than or equal <= <=# <=? 943regexp matches =~ =~# =~? 944regexp doesn't match !~ !~# !~? 945same instance is is# is? 946different instance isnot isnot# isnot? 947 948Examples: 949"abc" ==# "Abc" evaluates to 0 950"abc" ==? "Abc" evaluates to 1 951"abc" == "Abc" evaluates to 1 if 'ignorecase' is set, 0 otherwise 952 953 *E691* *E692* 954A |List| can only be compared with a |List| and only "equal", "not equal", 955"is" and "isnot" can be used. This compares the values of the list, 956recursively. Ignoring case means case is ignored when comparing item values. 957 958 *E735* *E736* 959A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not 960equal", "is" and "isnot" can be used. This compares the key/values of the 961|Dictionary| recursively. Ignoring case means case is ignored when comparing 962item values. 963 964 *E694* 965A |Funcref| can only be compared with a |Funcref| and only "equal", "not 966equal", "is" and "isnot" can be used. Case is never ignored. Whether 967arguments or a Dictionary are bound (with a partial) matters. The 968Dictionaries must also be equal (or the same, in case of "is") and the 969arguments must be equal (or the same). 970 971To compare Funcrefs to see if they refer to the same function, ignoring bound 972Dictionary and arguments, use |get()| to get the function name: > 973 if get(Part1, 'name') == get(Part2, 'name') 974 " Part1 and Part2 refer to the same function 975 976Using "is" or "isnot" with a |List|, |Dictionary| or |Blob| checks whether 977the expressions are referring to the same |List|, |Dictionary| or |Blob| 978instance. A copy of a |List| is different from the original |List|. When 979using "is" without a |List|, |Dictionary| or |Blob|, it is equivalent to 980using "equal", using "isnot" equivalent to using "not equal". Except that 981a different type means the values are different: > 982 echo 4 == '4' 983 1 984 echo 4 is '4' 985 0 986 echo 0 is [] 987 0 988"is#"/"isnot#" and "is?"/"isnot?" can be used to match and ignore case. 989 990When comparing a String with a Number, the String is converted to a Number, 991and the comparison is done on Numbers. This means that: > 992 echo 0 == 'x' 993 1 994because 'x' converted to a Number is zero. However: > 995 echo [0] == ['x'] 996 0 997Inside a List or Dictionary this conversion is not used. 998 999When comparing two Strings, this is done with strcmp() or stricmp(). This 1000results in the mathematical difference (comparing byte values), not 1001necessarily the alphabetical difference in the local language. 1002 1003When using the operators with a trailing '#', or the short version and 1004'ignorecase' is off, the comparing is done with strcmp(): case matters. 1005 1006When using the operators with a trailing '?', or the short version and 1007'ignorecase' is set, the comparing is done with stricmp(): case is ignored. 1008 1009'smartcase' is not used. 1010 1011The "=~" and "!~" operators match the lefthand argument with the righthand 1012argument, which is used as a pattern. See |pattern| for what a pattern is. 1013This matching is always done like 'magic' was set and 'cpoptions' is empty, no 1014matter what the actual value of 'magic' or 'cpoptions' is. This makes scripts 1015portable. To avoid backslashes in the regexp pattern to be doubled, use a 1016single-quote string, see |literal-string|. 1017Since a string is considered to be a single line, a multi-line pattern 1018(containing \n, backslash-n) will not match. However, a literal NL character 1019can be matched like an ordinary character. Examples: 1020 "foo\nbar" =~ "\n" evaluates to 1 1021 "foo\nbar" =~ "\\n" evaluates to 0 1022 1023 1024expr5 and expr6 *expr5* *expr6* 1025--------------- 1026expr6 + expr6 Number addition, |List| or |Blob| concatenation *expr-+* 1027expr6 - expr6 Number subtraction *expr--* 1028expr6 . expr6 String concatenation *expr-.* 1029 1030For |Lists| only "+" is possible and then both expr6 must be a list. The 1031result is a new list with the two lists Concatenated. 1032 1033expr7 * expr7 Number multiplication *expr-star* 1034expr7 / expr7 Number division *expr-/* 1035expr7 % expr7 Number modulo *expr-%* 1036 1037For all, except ".", Strings are converted to Numbers. 1038For bitwise operators see |and()|, |or()| and |xor()|. 1039 1040Note the difference between "+" and ".": 1041 "123" + "456" = 579 1042 "123" . "456" = "123456" 1043 1044Since '.' has the same precedence as '+' and '-', you need to read: > 1045 1 . 90 + 90.0 1046As: > 1047 (1 . 90) + 90.0 1048That works, since the String "190" is automatically converted to the Number 1049190, which can be added to the Float 90.0. However: > 1050 1 . 90 * 90.0 1051Should be read as: > 1052 1 . (90 * 90.0) 1053Since '.' has lower precedence than '*'. This does NOT work, since this 1054attempts to concatenate a Float and a String. 1055 1056When dividing a Number by zero the result depends on the value: 1057 0 / 0 = -0x80000000 (like NaN for Float) 1058 >0 / 0 = 0x7fffffff (like positive infinity) 1059 <0 / 0 = -0x7fffffff (like negative infinity) 1060 (before Vim 7.2 it was always 0x7fffffff) 1061 1062When 64-bit Number support is enabled: 1063 0 / 0 = -0x8000000000000000 (like NaN for Float) 1064 >0 / 0 = 0x7fffffffffffffff (like positive infinity) 1065 <0 / 0 = -0x7fffffffffffffff (like negative infinity) 1066 1067When the righthand side of '%' is zero, the result is 0. 1068 1069None of these work for |Funcref|s. 1070 1071. and % do not work for Float. *E804* 1072 1073 1074expr7 *expr7* 1075----- 1076! expr7 logical NOT *expr-!* 1077- expr7 unary minus *expr-unary--* 1078+ expr7 unary plus *expr-unary-+* 1079 1080For '!' |TRUE| becomes |FALSE|, |FALSE| becomes |TRUE| (one). 1081For '-' the sign of the number is changed. 1082For '+' the number is unchanged. 1083 1084A String will be converted to a Number first. 1085 1086These three can be repeated and mixed. Examples: 1087 !-1 == 0 1088 !!8 == 1 1089 --9 == 9 1090 1091 1092expr8 *expr8* 1093----- 1094This expression is either |expr9| or a sequence of the alternatives below, 1095in any order. E.g., these are all possible: 1096 expr9[expr1].name 1097 expr9.name[expr1] 1098 expr9(expr1, ...)[expr1].name 1099 1100 1101expr8[expr1] item of String or |List| *expr-[]* *E111* 1102 *E909* *subscript* 1103If expr8 is a Number or String this results in a String that contains the 1104expr1'th single byte from expr8. expr8 is used as a String, expr1 as a 1105Number. This doesn't recognize multi-byte encodings, see `byteidx()` for 1106an alternative, or use `split()` to turn the string into a list of characters. 1107 1108Index zero gives the first byte. This is like it works in C. Careful: 1109text column numbers start with one! Example, to get the byte under the 1110cursor: > 1111 :let c = getline(".")[col(".") - 1] 1112 1113If the length of the String is less than the index, the result is an empty 1114String. A negative index always results in an empty string (reason: backward 1115compatibility). Use [-1:] to get the last byte. 1116 1117If expr8 is a |List| then it results the item at index expr1. See |list-index| 1118for possible index values. If the index is out of range this results in an 1119error. Example: > 1120 :let item = mylist[-1] " get last item 1121 1122Generally, if a |List| index is equal to or higher than the length of the 1123|List|, or more negative than the length of the |List|, this results in an 1124error. 1125 1126 1127expr8[expr1a : expr1b] substring or sublist *expr-[:]* 1128 1129If expr8 is a Number or String this results in the substring with the bytes 1130from expr1a to and including expr1b. expr8 is used as a String, expr1a and 1131expr1b are used as a Number. This doesn't recognize multi-byte encodings, see 1132|byteidx()| for computing the indexes. 1133 1134If expr1a is omitted zero is used. If expr1b is omitted the length of the 1135string minus one is used. 1136 1137A negative number can be used to measure from the end of the string. -1 is 1138the last character, -2 the last but one, etc. 1139 1140If an index goes out of range for the string characters are omitted. If 1141expr1b is smaller than expr1a the result is an empty string. 1142 1143Examples: > 1144 :let c = name[-1:] " last byte of a string 1145 :let c = name[-2:-2] " last but one byte of a string 1146 :let s = line(".")[4:] " from the fifth byte to the end 1147 :let s = s[:-3] " remove last two bytes 1148< 1149 *slice* 1150If expr8 is a |List| this results in a new |List| with the items indicated by 1151the indexes expr1a and expr1b. This works like with a String, as explained 1152just above. Also see |sublist| below. Examples: > 1153 :let l = mylist[:3] " first four items 1154 :let l = mylist[4:4] " List with one item 1155 :let l = mylist[:] " shallow copy of a List 1156 1157If expr8 is a |Blob| this results in a new |Blob| with the bytes in the 1158indexes expr1a and expr1b, inclusive. Examples: > 1159 :let b = 0zDEADBEEF 1160 :let bs = b[1:2] " 0zADBE 1161 :let bs = b[:] " copy of 0zDEADBEEF 1162 1163Using expr8[expr1] or expr8[expr1a : expr1b] on a |Funcref| results in an 1164error. 1165 1166Watch out for confusion between a namespace and a variable followed by a colon 1167for a sublist: > 1168 mylist[n:] " uses variable n 1169 mylist[s:] " uses namespace s:, error! 1170 1171 1172expr8.name entry in a |Dictionary| *expr-entry* 1173 1174If expr8 is a |Dictionary| and it is followed by a dot, then the following 1175name will be used as a key in the |Dictionary|. This is just like: 1176expr8[name]. 1177 1178The name must consist of alphanumeric characters, just like a variable name, 1179but it may start with a number. Curly braces cannot be used. 1180 1181There must not be white space before or after the dot. 1182 1183Examples: > 1184 :let dict = {"one": 1, 2: "two"} 1185 :echo dict.one 1186 :echo dict .2 1187 1188Note that the dot is also used for String concatenation. To avoid confusion 1189always put spaces around the dot for String concatenation. 1190 1191 1192expr8(expr1, ...) |Funcref| function call 1193 1194When expr8 is a |Funcref| type variable, invoke the function it refers to. 1195 1196 1197 1198 *expr9* 1199number 1200------ 1201number number constant *expr-number* 1202 *hex-number* *octal-number* *binary-number* 1203 1204Decimal, Hexadecimal (starting with 0x or 0X), Binary (starting with 0b or 0B) 1205and Octal (starting with 0). 1206 1207 *floating-point-format* 1208Floating point numbers can be written in two forms: 1209 1210 [-+]{N}.{M} 1211 [-+]{N}.{M}[eE][-+]{exp} 1212 1213{N} and {M} are numbers. Both {N} and {M} must be present and can only 1214contain digits. 1215[-+] means there is an optional plus or minus sign. 1216{exp} is the exponent, power of 10. 1217Only a decimal point is accepted, not a comma. No matter what the current 1218locale is. 1219{only when compiled with the |+float| feature} 1220 1221Examples: 1222 123.456 1223 +0.0001 1224 55.0 1225 -0.123 1226 1.234e03 1227 1.0E-6 1228 -3.1416e+88 1229 1230These are INVALID: 1231 3. empty {M} 1232 1e40 missing .{M} 1233 1234Rationale: 1235Before floating point was introduced, the text "123.456" was interpreted as 1236the two numbers "123" and "456", both converted to a string and concatenated, 1237resulting in the string "123456". Since this was considered pointless, and we 1238could not find it intentionally being used in Vim scripts, this backwards 1239incompatibility was accepted in favor of being able to use the normal notation 1240for floating point numbers. 1241 1242 *float-pi* *float-e* 1243A few useful values to copy&paste: > 1244 :let pi = 3.14159265359 1245 :let e = 2.71828182846 1246Or, if you don't want to write them in as floating-point literals, you can 1247also use functions, like the following: > 1248 :let pi = acos(-1.0) 1249 :let e = exp(1.0) 1250< 1251 *floating-point-precision* 1252The precision and range of floating points numbers depends on what "double" 1253means in the library Vim was compiled with. There is no way to change this at 1254runtime. 1255 1256The default for displaying a |Float| is to use 6 decimal places, like using 1257printf("%g", f). You can select something else when using the |printf()| 1258function. Example: > 1259 :echo printf('%.15e', atan(1)) 1260< 7.853981633974483e-01 1261 1262 1263 1264string *string* *String* *expr-string* *E114* 1265------ 1266"string" string constant *expr-quote* 1267 1268Note that double quotes are used. 1269 1270A string constant accepts these special characters: 1271\... three-digit octal number (e.g., "\316") 1272\.. two-digit octal number (must be followed by non-digit) 1273\. one-digit octal number (must be followed by non-digit) 1274\x.. byte specified with two hex numbers (e.g., "\x1f") 1275\x. byte specified with one hex number (must be followed by non-hex char) 1276\X.. same as \x.. 1277\X. same as \x. 1278\u.... character specified with up to 4 hex numbers, stored according to the 1279 current value of 'encoding' (e.g., "\u02a4") 1280\U.... same as \u but allows up to 8 hex numbers. 1281\b backspace <BS> 1282\e escape <Esc> 1283\f formfeed <FF> 1284\n newline <NL> 1285\r return <CR> 1286\t tab <Tab> 1287\\ backslash 1288\" double quote 1289\<xxx> Special key named "xxx". e.g. "\<C-W>" for CTRL-W. This is for use 1290 in mappings, the 0x80 byte is escaped. 1291 To use the double quote character it must be escaped: "<M-\">". 1292 Don't use <Char-xxxx> to get a utf-8 character, use \uxxxx as 1293 mentioned above. 1294 1295Note that "\xff" is stored as the byte 255, which may be invalid in some 1296encodings. Use "\u00ff" to store character 255 according to the current value 1297of 'encoding'. 1298 1299Note that "\000" and "\x00" force the end of the string. 1300 1301 1302blob-literal *blob-literal* *E973* 1303------------ 1304 1305Hexadecimal starting with 0z or 0Z, with an arbitrary number of bytes. 1306The sequence must be an even number of hex characters. Example: > 1307 :let b = 0zFF00ED015DAF 1308 1309 1310literal-string *literal-string* *E115* 1311--------------- 1312'string' string constant *expr-'* 1313 1314Note that single quotes are used. 1315 1316This string is taken as it is. No backslashes are removed or have a special 1317meaning. The only exception is that two quotes stand for one quote. 1318 1319Single quoted strings are useful for patterns, so that backslashes do not need 1320to be doubled. These two commands are equivalent: > 1321 if a =~ "\\s*" 1322 if a =~ '\s*' 1323 1324 1325option *expr-option* *E112* *E113* 1326------ 1327&option option value, local value if possible 1328&g:option global option value 1329&l:option local option value 1330 1331Examples: > 1332 echo "tabstop is " . &tabstop 1333 if &insertmode 1334 1335Any option name can be used here. See |options|. When using the local value 1336and there is no buffer-local or window-local value, the global value is used 1337anyway. 1338 1339 1340register *expr-register* *@r* 1341-------- 1342@r contents of register 'r' 1343 1344The result is the contents of the named register, as a single string. 1345Newlines are inserted where required. To get the contents of the unnamed 1346register use @" or @@. See |registers| for an explanation of the available 1347registers. 1348 1349When using the '=' register you get the expression itself, not what it 1350evaluates to. Use |eval()| to evaluate it. 1351 1352 1353nesting *expr-nesting* *E110* 1354------- 1355(expr1) nested expression 1356 1357 1358environment variable *expr-env* 1359-------------------- 1360$VAR environment variable 1361 1362The String value of any environment variable. When it is not defined, the 1363result is an empty string. 1364 *expr-env-expand* 1365Note that there is a difference between using $VAR directly and using 1366expand("$VAR"). Using it directly will only expand environment variables that 1367are known inside the current Vim session. Using expand() will first try using 1368the environment variables known inside the current Vim session. If that 1369fails, a shell will be used to expand the variable. This can be slow, but it 1370does expand all variables that the shell knows about. Example: > 1371 :echo $shell 1372 :echo expand("$shell") 1373The first one probably doesn't echo anything, the second echoes the $shell 1374variable (if your shell supports it). 1375 1376 1377internal variable *expr-variable* 1378----------------- 1379variable internal variable 1380See below |internal-variables|. 1381 1382 1383function call *expr-function* *E116* *E118* *E119* *E120* 1384------------- 1385function(expr1, ...) function call 1386See below |functions|. 1387 1388 1389lambda expression *expr-lambda* *lambda* 1390----------------- 1391{args -> expr1} lambda expression 1392 1393A lambda expression creates a new unnamed function which returns the result of 1394evaluating |expr1|. Lambda expressions differ from |user-functions| in 1395the following ways: 1396 13971. The body of the lambda expression is an |expr1| and not a sequence of |Ex| 1398 commands. 13992. The prefix "a:" should not be used for arguments. E.g.: > 1400 :let F = {arg1, arg2 -> arg1 - arg2} 1401 :echo F(5, 2) 1402< 3 1403 1404The arguments are optional. Example: > 1405 :let F = {-> 'error function'} 1406 :echo F() 1407< error function 1408 *closure* 1409Lambda expressions can access outer scope variables and arguments. This is 1410often called a closure. Example where "i" and "a:arg" are used in a lambda 1411while they already exist in the function scope. They remain valid even after 1412the function returns: > 1413 :function Foo(arg) 1414 : let i = 3 1415 : return {x -> x + i - a:arg} 1416 :endfunction 1417 :let Bar = Foo(4) 1418 :echo Bar(6) 1419< 5 1420 1421Note that the variables must exist in the outer scope before the lamba is 1422defined for this to work. See also |:func-closure|. 1423 1424Lambda and closure support can be checked with: > 1425 if has('lambda') 1426 1427Examples for using a lambda expression with |sort()|, |map()| and |filter()|: > 1428 :echo map([1, 2, 3], {idx, val -> val + 1}) 1429< [2, 3, 4] > 1430 :echo sort([3,7,2,1,4], {a, b -> a - b}) 1431< [1, 2, 3, 4, 7] 1432 1433The lambda expression is also useful for Channel, Job and timer: > 1434 :let timer = timer_start(500, 1435 \ {-> execute("echo 'Handler called'", "")}, 1436 \ {'repeat': 3}) 1437< Handler called 1438 Handler called 1439 Handler called 1440 1441Note how execute() is used to execute an Ex command. That's ugly though. 1442 1443 1444Lambda expressions have internal names like '<lambda>42'. If you get an error 1445for a lambda expression, you can find what it is with the following command: > 1446 :function {'<lambda>42'} 1447See also: |numbered-function| 1448 1449============================================================================== 14503. Internal variable *internal-variables* *E461* 1451 1452An internal variable name can be made up of letters, digits and '_'. But it 1453cannot start with a digit. It's also possible to use curly braces, see 1454|curly-braces-names|. 1455 1456An internal variable is created with the ":let" command |:let|. 1457An internal variable is explicitly destroyed with the ":unlet" command 1458|:unlet|. 1459Using a name that is not an internal variable or refers to a variable that has 1460been destroyed results in an error. 1461 1462There are several name spaces for variables. Which one is to be used is 1463specified by what is prepended: 1464 1465 (nothing) In a function: local to a function; otherwise: global 1466|buffer-variable| b: Local to the current buffer. 1467|window-variable| w: Local to the current window. 1468|tabpage-variable| t: Local to the current tab page. 1469|global-variable| g: Global. 1470|local-variable| l: Local to a function. 1471|script-variable| s: Local to a |:source|'ed Vim script. 1472|function-argument| a: Function argument (only inside a function). 1473|vim-variable| v: Global, predefined by Vim. 1474 1475The scope name by itself can be used as a |Dictionary|. For example, to 1476delete all script-local variables: > 1477 :for k in keys(s:) 1478 : unlet s:[k] 1479 :endfor 1480< 1481 *buffer-variable* *b:var* *b:* 1482A variable name that is preceded with "b:" is local to the current buffer. 1483Thus you can have several "b:foo" variables, one for each buffer. 1484This kind of variable is deleted when the buffer is wiped out or deleted with 1485|:bdelete|. 1486 1487One local buffer variable is predefined: 1488 *b:changedtick* *changetick* 1489b:changedtick The total number of changes to the current buffer. It is 1490 incremented for each change. An undo command is also a change 1491 in this case. This can be used to perform an action only when 1492 the buffer has changed. Example: > 1493 :if my_changedtick != b:changedtick 1494 : let my_changedtick = b:changedtick 1495 : call My_Update() 1496 :endif 1497< You cannot change or delete the b:changedtick variable. 1498 1499 *window-variable* *w:var* *w:* 1500A variable name that is preceded with "w:" is local to the current window. It 1501is deleted when the window is closed. 1502 1503 *tabpage-variable* *t:var* *t:* 1504A variable name that is preceded with "t:" is local to the current tab page, 1505It is deleted when the tab page is closed. {not available when compiled 1506without the |+windows| feature} 1507 1508 *global-variable* *g:var* *g:* 1509Inside functions global variables are accessed with "g:". Omitting this will 1510access a variable local to a function. But "g:" can also be used in any other 1511place if you like. 1512 1513 *local-variable* *l:var* *l:* 1514Inside functions local variables are accessed without prepending anything. 1515But you can also prepend "l:" if you like. However, without prepending "l:" 1516you may run into reserved variable names. For example "count". By itself it 1517refers to "v:count". Using "l:count" you can have a local variable with the 1518same name. 1519 1520 *script-variable* *s:var* 1521In a Vim script variables starting with "s:" can be used. They cannot be 1522accessed from outside of the scripts, thus are local to the script. 1523 1524They can be used in: 1525- commands executed while the script is sourced 1526- functions defined in the script 1527- autocommands defined in the script 1528- functions and autocommands defined in functions and autocommands which were 1529 defined in the script (recursively) 1530- user defined commands defined in the script 1531Thus not in: 1532- other scripts sourced from this one 1533- mappings 1534- menus 1535- etc. 1536 1537Script variables can be used to avoid conflicts with global variable names. 1538Take this example: > 1539 1540 let s:counter = 0 1541 function MyCounter() 1542 let s:counter = s:counter + 1 1543 echo s:counter 1544 endfunction 1545 command Tick call MyCounter() 1546 1547You can now invoke "Tick" from any script, and the "s:counter" variable in 1548that script will not be changed, only the "s:counter" in the script where 1549"Tick" was defined is used. 1550 1551Another example that does the same: > 1552 1553 let s:counter = 0 1554 command Tick let s:counter = s:counter + 1 | echo s:counter 1555 1556When calling a function and invoking a user-defined command, the context for 1557script variables is set to the script where the function or command was 1558defined. 1559 1560The script variables are also available when a function is defined inside a 1561function that is defined in a script. Example: > 1562 1563 let s:counter = 0 1564 function StartCounting(incr) 1565 if a:incr 1566 function MyCounter() 1567 let s:counter = s:counter + 1 1568 endfunction 1569 else 1570 function MyCounter() 1571 let s:counter = s:counter - 1 1572 endfunction 1573 endif 1574 endfunction 1575 1576This defines the MyCounter() function either for counting up or counting down 1577when calling StartCounting(). It doesn't matter from where StartCounting() is 1578called, the s:counter variable will be accessible in MyCounter(). 1579 1580When the same script is sourced again it will use the same script variables. 1581They will remain valid as long as Vim is running. This can be used to 1582maintain a counter: > 1583 1584 if !exists("s:counter") 1585 let s:counter = 1 1586 echo "script executed for the first time" 1587 else 1588 let s:counter = s:counter + 1 1589 echo "script executed " . s:counter . " times now" 1590 endif 1591 1592Note that this means that filetype plugins don't get a different set of script 1593variables for each buffer. Use local buffer variables instead |b:var|. 1594 1595 1596PREDEFINED VIM VARIABLES *vim-variable* *v:var* *v:* 1597 *E963* 1598Some variables can be set by the user, but the type cannot be changed. 1599 1600 *v:beval_col* *beval_col-variable* 1601v:beval_col The number of the column, over which the mouse pointer is. 1602 This is the byte index in the |v:beval_lnum| line. 1603 Only valid while evaluating the 'balloonexpr' option. 1604 1605 *v:beval_bufnr* *beval_bufnr-variable* 1606v:beval_bufnr The number of the buffer, over which the mouse pointer is. Only 1607 valid while evaluating the 'balloonexpr' option. 1608 1609 *v:beval_lnum* *beval_lnum-variable* 1610v:beval_lnum The number of the line, over which the mouse pointer is. Only 1611 valid while evaluating the 'balloonexpr' option. 1612 1613 *v:beval_text* *beval_text-variable* 1614v:beval_text The text under or after the mouse pointer. Usually a word as 1615 it is useful for debugging a C program. 'iskeyword' applies, 1616 but a dot and "->" before the position is included. When on a 1617 ']' the text before it is used, including the matching '[' and 1618 word before it. When on a Visual area within one line the 1619 highlighted text is used. Also see |<cexpr>|. 1620 Only valid while evaluating the 'balloonexpr' option. 1621 1622 *v:beval_winnr* *beval_winnr-variable* 1623v:beval_winnr The number of the window, over which the mouse pointer is. Only 1624 valid while evaluating the 'balloonexpr' option. The first 1625 window has number zero (unlike most other places where a 1626 window gets a number). 1627 1628 *v:beval_winid* *beval_winid-variable* 1629v:beval_winid The |window-ID| of the window, over which the mouse pointer 1630 is. Otherwise like v:beval_winnr. 1631 1632 *v:char* *char-variable* 1633v:char Argument for evaluating 'formatexpr' and used for the typed 1634 character when using <expr> in an abbreviation |:map-<expr>|. 1635 It is also used by the |InsertCharPre| and |InsertEnter| events. 1636 1637 *v:charconvert_from* *charconvert_from-variable* 1638v:charconvert_from 1639 The name of the character encoding of a file to be converted. 1640 Only valid while evaluating the 'charconvert' option. 1641 1642 *v:charconvert_to* *charconvert_to-variable* 1643v:charconvert_to 1644 The name of the character encoding of a file after conversion. 1645 Only valid while evaluating the 'charconvert' option. 1646 1647 *v:cmdarg* *cmdarg-variable* 1648v:cmdarg This variable is used for two purposes: 1649 1. The extra arguments given to a file read/write command. 1650 Currently these are "++enc=" and "++ff=". This variable is 1651 set before an autocommand event for a file read/write 1652 command is triggered. There is a leading space to make it 1653 possible to append this variable directly after the 1654 read/write command. Note: The "+cmd" argument isn't 1655 included here, because it will be executed anyway. 1656 2. When printing a PostScript file with ":hardcopy" this is 1657 the argument for the ":hardcopy" command. This can be used 1658 in 'printexpr'. 1659 1660 *v:cmdbang* *cmdbang-variable* 1661v:cmdbang Set like v:cmdarg for a file read/write command. When a "!" 1662 was used the value is 1, otherwise it is 0. Note that this 1663 can only be used in autocommands. For user commands |<bang>| 1664 can be used. 1665 1666 *v:completed_item* *completed_item-variable* 1667v:completed_item 1668 |Dictionary| containing the |complete-items| for the most 1669 recently completed word after |CompleteDone|. The 1670 |Dictionary| is empty if the completion failed. 1671 1672 *v:count* *count-variable* 1673v:count The count given for the last Normal mode command. Can be used 1674 to get the count before a mapping. Read-only. Example: > 1675 :map _x :<C-U>echo "the count is " . v:count<CR> 1676< Note: The <C-U> is required to remove the line range that you 1677 get when typing ':' after a count. 1678 When there are two counts, as in "3d2w", they are multiplied, 1679 just like what happens in the command, "d6w" for the example. 1680 Also used for evaluating the 'formatexpr' option. 1681 "count" also works, for backwards compatibility. 1682 1683 *v:count1* *count1-variable* 1684v:count1 Just like "v:count", but defaults to one when no count is 1685 used. 1686 1687 *v:ctype* *ctype-variable* 1688v:ctype The current locale setting for characters of the runtime 1689 environment. This allows Vim scripts to be aware of the 1690 current locale encoding. Technical: it's the value of 1691 LC_CTYPE. When not using a locale the value is "C". 1692 This variable can not be set directly, use the |:language| 1693 command. 1694 See |multi-lang|. 1695 1696 *v:dying* *dying-variable* 1697v:dying Normally zero. When a deadly signal is caught it's set to 1698 one. When multiple signals are caught the number increases. 1699 Can be used in an autocommand to check if Vim didn't 1700 terminate normally. {only works on Unix} 1701 Example: > 1702 :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif 1703< Note: if another deadly signal is caught when v:dying is one, 1704 VimLeave autocommands will not be executed. 1705 1706 *v:errmsg* *errmsg-variable* 1707v:errmsg Last given error message. It's allowed to set this variable. 1708 Example: > 1709 :let v:errmsg = "" 1710 :silent! next 1711 :if v:errmsg != "" 1712 : ... handle error 1713< "errmsg" also works, for backwards compatibility. 1714 1715 *v:errors* *errors-variable* *assert-return* 1716v:errors Errors found by assert functions, such as |assert_true()|. 1717 This is a list of strings. 1718 The assert functions append an item when an assert fails. 1719 The return value indicates this: a one is returned if an item 1720 was added to v:errors, otherwise zero is returned. 1721 To remove old results make it empty: > 1722 :let v:errors = [] 1723< If v:errors is set to anything but a list it is made an empty 1724 list by the assert function. 1725 1726 *v:event* *event-variable* 1727v:event Dictionary containing information about the current 1728 |autocommand|. The dictionary is emptied when the |autocommand| 1729 finishes, please refer to |dict-identity| for how to get an 1730 independent copy of it. 1731 1732 *v:exception* *exception-variable* 1733v:exception The value of the exception most recently caught and not 1734 finished. See also |v:throwpoint| and |throw-variables|. 1735 Example: > 1736 :try 1737 : throw "oops" 1738 :catch /.*/ 1739 : echo "caught" v:exception 1740 :endtry 1741< Output: "caught oops". 1742 1743 *v:false* *false-variable* 1744v:false A Number with value zero. Used to put "false" in JSON. See 1745 |json_encode()|. 1746 When used as a string this evaluates to "v:false". > 1747 echo v:false 1748< v:false ~ 1749 That is so that eval() can parse the string back to the same 1750 value. Read-only. 1751 1752 *v:fcs_reason* *fcs_reason-variable* 1753v:fcs_reason The reason why the |FileChangedShell| event was triggered. 1754 Can be used in an autocommand to decide what to do and/or what 1755 to set v:fcs_choice to. Possible values: 1756 deleted file no longer exists 1757 conflict file contents, mode or timestamp was 1758 changed and buffer is modified 1759 changed file contents has changed 1760 mode mode of file changed 1761 time only file timestamp changed 1762 1763 *v:fcs_choice* *fcs_choice-variable* 1764v:fcs_choice What should happen after a |FileChangedShell| event was 1765 triggered. Can be used in an autocommand to tell Vim what to 1766 do with the affected buffer: 1767 reload Reload the buffer (does not work if 1768 the file was deleted). 1769 ask Ask the user what to do, as if there 1770 was no autocommand. Except that when 1771 only the timestamp changed nothing 1772 will happen. 1773 <empty> Nothing, the autocommand should do 1774 everything that needs to be done. 1775 The default is empty. If another (invalid) value is used then 1776 Vim behaves like it is empty, there is no warning message. 1777 1778 *v:fname_in* *fname_in-variable* 1779v:fname_in The name of the input file. Valid while evaluating: 1780 option used for ~ 1781 'charconvert' file to be converted 1782 'diffexpr' original file 1783 'patchexpr' original file 1784 'printexpr' file to be printed 1785 And set to the swap file name for |SwapExists|. 1786 1787 *v:fname_out* *fname_out-variable* 1788v:fname_out The name of the output file. Only valid while 1789 evaluating: 1790 option used for ~ 1791 'charconvert' resulting converted file (*) 1792 'diffexpr' output of diff 1793 'patchexpr' resulting patched file 1794 (*) When doing conversion for a write command (e.g., ":w 1795 file") it will be equal to v:fname_in. When doing conversion 1796 for a read command (e.g., ":e file") it will be a temporary 1797 file and different from v:fname_in. 1798 1799 *v:fname_new* *fname_new-variable* 1800v:fname_new The name of the new version of the file. Only valid while 1801 evaluating 'diffexpr'. 1802 1803 *v:fname_diff* *fname_diff-variable* 1804v:fname_diff The name of the diff (patch) file. Only valid while 1805 evaluating 'patchexpr'. 1806 1807 *v:folddashes* *folddashes-variable* 1808v:folddashes Used for 'foldtext': dashes representing foldlevel of a closed 1809 fold. 1810 Read-only in the |sandbox|. |fold-foldtext| 1811 1812 *v:foldlevel* *foldlevel-variable* 1813v:foldlevel Used for 'foldtext': foldlevel of closed fold. 1814 Read-only in the |sandbox|. |fold-foldtext| 1815 1816 *v:foldend* *foldend-variable* 1817v:foldend Used for 'foldtext': last line of closed fold. 1818 Read-only in the |sandbox|. |fold-foldtext| 1819 1820 *v:foldstart* *foldstart-variable* 1821v:foldstart Used for 'foldtext': first line of closed fold. 1822 Read-only in the |sandbox|. |fold-foldtext| 1823 1824 *v:hlsearch* *hlsearch-variable* 1825v:hlsearch Variable that indicates whether search highlighting is on. 1826 Setting it makes sense only if 'hlsearch' is enabled which 1827 requires |+extra_search|. Setting this variable to zero acts 1828 like the |:nohlsearch| command, setting it to one acts like > 1829 let &hlsearch = &hlsearch 1830< Note that the value is restored when returning from a 1831 function. |function-search-undo|. 1832 1833 *v:insertmode* *insertmode-variable* 1834v:insertmode Used for the |InsertEnter| and |InsertChange| autocommand 1835 events. Values: 1836 i Insert mode 1837 r Replace mode 1838 v Virtual Replace mode 1839 1840 *v:key* *key-variable* 1841v:key Key of the current item of a |Dictionary|. Only valid while 1842 evaluating the expression used with |map()| and |filter()|. 1843 Read-only. 1844 1845 *v:lang* *lang-variable* 1846v:lang The current locale setting for messages of the runtime 1847 environment. This allows Vim scripts to be aware of the 1848 current language. Technical: it's the value of LC_MESSAGES. 1849 The value is system dependent. 1850 This variable can not be set directly, use the |:language| 1851 command. 1852 It can be different from |v:ctype| when messages are desired 1853 in a different language than what is used for character 1854 encoding. See |multi-lang|. 1855 1856 *v:lc_time* *lc_time-variable* 1857v:lc_time The current locale setting for time messages of the runtime 1858 environment. This allows Vim scripts to be aware of the 1859 current language. Technical: it's the value of LC_TIME. 1860 This variable can not be set directly, use the |:language| 1861 command. See |multi-lang|. 1862 1863 *v:lnum* *lnum-variable* 1864v:lnum Line number for the 'foldexpr' |fold-expr|, 'formatexpr' and 1865 'indentexpr' expressions, tab page number for 'guitablabel' 1866 and 'guitabtooltip'. Only valid while one of these 1867 expressions is being evaluated. Read-only when in the 1868 |sandbox|. 1869 1870 *v:mouse_win* *mouse_win-variable* 1871v:mouse_win Window number for a mouse click obtained with |getchar()|. 1872 First window has number 1, like with |winnr()|. The value is 1873 zero when there was no mouse button click. 1874 1875 *v:mouse_winid* *mouse_winid-variable* 1876v:mouse_winid Window ID for a mouse click obtained with |getchar()|. 1877 The value is zero when there was no mouse button click. 1878 1879 *v:mouse_lnum* *mouse_lnum-variable* 1880v:mouse_lnum Line number for a mouse click obtained with |getchar()|. 1881 This is the text line number, not the screen line number. The 1882 value is zero when there was no mouse button click. 1883 1884 *v:mouse_col* *mouse_col-variable* 1885v:mouse_col Column number for a mouse click obtained with |getchar()|. 1886 This is the screen column number, like with |virtcol()|. The 1887 value is zero when there was no mouse button click. 1888 1889 *v:none* *none-variable* *None* 1890v:none An empty String. Used to put an empty item in JSON. See 1891 |json_encode()|. 1892 When used as a number this evaluates to zero. 1893 When used as a string this evaluates to "v:none". > 1894 echo v:none 1895< v:none ~ 1896 That is so that eval() can parse the string back to the same 1897 value. Read-only. 1898 1899 *v:null* *null-variable* 1900v:null An empty String. Used to put "null" in JSON. See 1901 |json_encode()|. 1902 When used as a number this evaluates to zero. 1903 When used as a string this evaluates to "v:null". > 1904 echo v:null 1905< v:null ~ 1906 That is so that eval() can parse the string back to the same 1907 value. Read-only. 1908 1909 *v:oldfiles* *oldfiles-variable* 1910v:oldfiles List of file names that is loaded from the |viminfo| file on 1911 startup. These are the files that Vim remembers marks for. 1912 The length of the List is limited by the ' argument of the 1913 'viminfo' option (default is 100). 1914 When the |viminfo| file is not used the List is empty. 1915 Also see |:oldfiles| and |c_#<|. 1916 The List can be modified, but this has no effect on what is 1917 stored in the |viminfo| file later. If you use values other 1918 than String this will cause trouble. 1919 {only when compiled with the |+viminfo| feature} 1920 1921 *v:option_new* 1922v:option_new New value of the option. Valid while executing an |OptionSet| 1923 autocommand. 1924 *v:option_old* 1925v:option_old Old value of the option. Valid while executing an |OptionSet| 1926 autocommand. 1927 *v:option_type* 1928v:option_type Scope of the set command. Valid while executing an 1929 |OptionSet| autocommand. Can be either "global" or "local" 1930 *v:operator* *operator-variable* 1931v:operator The last operator given in Normal mode. This is a single 1932 character except for commands starting with <g> or <z>, 1933 in which case it is two characters. Best used alongside 1934 |v:prevcount| and |v:register|. Useful if you want to cancel 1935 Operator-pending mode and then use the operator, e.g.: > 1936 :omap O <Esc>:call MyMotion(v:operator)<CR> 1937< The value remains set until another operator is entered, thus 1938 don't expect it to be empty. 1939 v:operator is not set for |:delete|, |:yank| or other Ex 1940 commands. 1941 Read-only. 1942 1943 *v:prevcount* *prevcount-variable* 1944v:prevcount The count given for the last but one Normal mode command. 1945 This is the v:count value of the previous command. Useful if 1946 you want to cancel Visual or Operator-pending mode and then 1947 use the count, e.g.: > 1948 :vmap % <Esc>:call MyFilter(v:prevcount)<CR> 1949< Read-only. 1950 1951 *v:profiling* *profiling-variable* 1952v:profiling Normally zero. Set to one after using ":profile start". 1953 See |profiling|. 1954 1955 *v:progname* *progname-variable* 1956v:progname Contains the name (with path removed) with which Vim was 1957 invoked. Allows you to do special initialisations for |view|, 1958 |evim| etc., or any other name you might symlink to Vim. 1959 Read-only. 1960 1961 *v:progpath* *progpath-variable* 1962v:progpath Contains the command with which Vim was invoked, including the 1963 path. Useful if you want to message a Vim server using a 1964 |--remote-expr|. 1965 To get the full path use: > 1966 echo exepath(v:progpath) 1967< If the path is relative it will be expanded to the full path, 1968 so that it still works after `:cd`. Thus starting "./vim" 1969 results in "/home/user/path/to/vim/src/vim". 1970 On MS-Windows the executable may be called "vim.exe", but the 1971 ".exe" is not added to v:progpath. 1972 Read-only. 1973 1974 *v:register* *register-variable* 1975v:register The name of the register in effect for the current normal mode 1976 command (regardless of whether that command actually used a 1977 register). Or for the currently executing normal mode mapping 1978 (use this in custom commands that take a register). 1979 If none is supplied it is the default register '"', unless 1980 'clipboard' contains "unnamed" or "unnamedplus", then it is 1981 '*' or '+'. 1982 Also see |getreg()| and |setreg()| 1983 1984 *v:scrollstart* *scrollstart-variable* 1985v:scrollstart String describing the script or function that caused the 1986 screen to scroll up. It's only set when it is empty, thus the 1987 first reason is remembered. It is set to "Unknown" for a 1988 typed command. 1989 This can be used to find out why your script causes the 1990 hit-enter prompt. 1991 1992 *v:servername* *servername-variable* 1993v:servername The resulting registered |client-server-name| if any. 1994 Read-only. 1995 1996 1997v:searchforward *v:searchforward* *searchforward-variable* 1998 Search direction: 1 after a forward search, 0 after a 1999 backward search. It is reset to forward when directly setting 2000 the last search pattern, see |quote/|. 2001 Note that the value is restored when returning from a 2002 function. |function-search-undo|. 2003 Read-write. 2004 2005 *v:shell_error* *shell_error-variable* 2006v:shell_error Result of the last shell command. When non-zero, the last 2007 shell command had an error. When zero, there was no problem. 2008 This only works when the shell returns the error code to Vim. 2009 The value -1 is often used when the command could not be 2010 executed. Read-only. 2011 Example: > 2012 :!mv foo bar 2013 :if v:shell_error 2014 : echo 'could not rename "foo" to "bar"!' 2015 :endif 2016< "shell_error" also works, for backwards compatibility. 2017 2018 *v:statusmsg* *statusmsg-variable* 2019v:statusmsg Last given status message. It's allowed to set this variable. 2020 2021 *v:swapname* *swapname-variable* 2022v:swapname Only valid when executing |SwapExists| autocommands: Name of 2023 the swap file found. Read-only. 2024 2025 *v:swapchoice* *swapchoice-variable* 2026v:swapchoice |SwapExists| autocommands can set this to the selected choice 2027 for handling an existing swap file: 2028 'o' Open read-only 2029 'e' Edit anyway 2030 'r' Recover 2031 'd' Delete swapfile 2032 'q' Quit 2033 'a' Abort 2034 The value should be a single-character string. An empty value 2035 results in the user being asked, as would happen when there is 2036 no SwapExists autocommand. The default is empty. 2037 2038 *v:swapcommand* *swapcommand-variable* 2039v:swapcommand Normal mode command to be executed after a file has been 2040 opened. Can be used for a |SwapExists| autocommand to have 2041 another Vim open the file and jump to the right place. For 2042 example, when jumping to a tag the value is ":tag tagname\r". 2043 For ":edit +cmd file" the value is ":cmd\r". 2044 2045 *v:t_TYPE* *v:t_bool* *t_bool-variable* 2046v:t_bool Value of |Boolean| type. Read-only. See: |type()| 2047 *v:t_channel* *t_channel-variable* 2048v:t_channel Value of |Channel| type. Read-only. See: |type()| 2049 *v:t_dict* *t_dict-variable* 2050v:t_dict Value of |Dictionary| type. Read-only. See: |type()| 2051 *v:t_float* *t_float-variable* 2052v:t_float Value of |Float| type. Read-only. See: |type()| 2053 *v:t_func* *t_func-variable* 2054v:t_func Value of |Funcref| type. Read-only. See: |type()| 2055 *v:t_job* *t_job-variable* 2056v:t_job Value of |Job| type. Read-only. See: |type()| 2057 *v:t_list* *t_list-variable* 2058v:t_list Value of |List| type. Read-only. See: |type()| 2059 *v:t_none* *t_none-variable* 2060v:t_none Value of |None| type. Read-only. See: |type()| 2061 *v:t_number* *t_number-variable* 2062v:t_number Value of |Number| type. Read-only. See: |type()| 2063 *v:t_string* *t_string-variable* 2064v:t_string Value of |String| type. Read-only. See: |type()| 2065 *v:t_blob* *t_blob-variable* 2066v:t_blob Value of |Blob| type. Read-only. See: |type()| 2067 2068 *v:termresponse* *termresponse-variable* 2069v:termresponse The escape sequence returned by the terminal for the |t_RV| 2070 termcap entry. It is set when Vim receives an escape sequence 2071 that starts with ESC [ or CSI and ends in a 'c', with only 2072 digits, ';' and '.' in between. 2073 When this option is set, the TermResponse autocommand event is 2074 fired, so that you can react to the response from the 2075 terminal. 2076 The response from a new xterm is: "<Esc>[ Pp ; Pv ; Pc c". Pp 2077 is the terminal type: 0 for vt100 and 1 for vt220. Pv is the 2078 patch level (since this was introduced in patch 95, it's 2079 always 95 or bigger). Pc is always zero. 2080 {only when compiled with |+termresponse| feature} 2081 2082 *v:termblinkresp* 2083v:termblinkresp The escape sequence returned by the terminal for the |t_RC| 2084 termcap entry. This is used to find out whether the terminal 2085 cursor is blinking. This is used by |term_getcursor()|. 2086 2087 *v:termstyleresp* 2088v:termstyleresp The escape sequence returned by the terminal for the |t_RS| 2089 termcap entry. This is used to find out what the shape of the 2090 cursor is. This is used by |term_getcursor()|. 2091 2092 *v:termrbgresp* 2093v:termrbgresp The escape sequence returned by the terminal for the |t_RB| 2094 termcap entry. This is used to find out what the terminal 2095 background color is, see 'background'. 2096 2097 *v:termrfgresp* 2098v:termrfgresp The escape sequence returned by the terminal for the |t_RF| 2099 termcap entry. This is used to find out what the terminal 2100 foreground color is. 2101 2102 *v:termu7resp* 2103v:termu7resp The escape sequence returned by the terminal for the |t_u7| 2104 termcap entry. This is used to find out what the terminal 2105 does with ambiguous width characters, see 'ambiwidth'. 2106 2107 *v:testing* *testing-variable* 2108v:testing Must be set before using `test_garbagecollect_now()`. 2109 Also, when set certain error messages won't be shown for 2 2110 seconds. (e.g. "'dictionary' option is empty") 2111 2112 *v:this_session* *this_session-variable* 2113v:this_session Full filename of the last loaded or saved session file. See 2114 |:mksession|. It is allowed to set this variable. When no 2115 session file has been saved, this variable is empty. 2116 "this_session" also works, for backwards compatibility. 2117 2118 *v:throwpoint* *throwpoint-variable* 2119v:throwpoint The point where the exception most recently caught and not 2120 finished was thrown. Not set when commands are typed. See 2121 also |v:exception| and |throw-variables|. 2122 Example: > 2123 :try 2124 : throw "oops" 2125 :catch /.*/ 2126 : echo "Exception from" v:throwpoint 2127 :endtry 2128< Output: "Exception from test.vim, line 2" 2129 2130 *v:true* *true-variable* 2131v:true A Number with value one. Used to put "true" in JSON. See 2132 |json_encode()|. 2133 When used as a string this evaluates to "v:true". > 2134 echo v:true 2135< v:true ~ 2136 That is so that eval() can parse the string back to the same 2137 value. Read-only. 2138 *v:val* *val-variable* 2139v:val Value of the current item of a |List| or |Dictionary|. Only 2140 valid while evaluating the expression used with |map()| and 2141 |filter()|. Read-only. 2142 2143 *v:version* *version-variable* 2144v:version Version number of Vim: Major version number times 100 plus 2145 minor version number. Version 5.0 is 500. Version 5.1 (5.01) 2146 is 501. Read-only. "version" also works, for backwards 2147 compatibility. 2148 Use |has()| to check if a certain patch was included, e.g.: > 2149 if has("patch-7.4.123") 2150< Note that patch numbers are specific to the version, thus both 2151 version 5.0 and 5.1 may have a patch 123, but these are 2152 completely different. 2153 2154 *v:vim_did_enter* *vim_did_enter-variable* 2155v:vim_did_enter Zero until most of startup is done. It is set to one just 2156 before |VimEnter| autocommands are triggered. 2157 2158 *v:warningmsg* *warningmsg-variable* 2159v:warningmsg Last given warning message. It's allowed to set this variable. 2160 2161 *v:windowid* *windowid-variable* 2162v:windowid When any X11 based GUI is running or when running in a 2163 terminal and Vim connects to the X server (|-X|) this will be 2164 set to the window ID. 2165 When an MS-Windows GUI is running this will be set to the 2166 window handle. 2167 Otherwise the value is zero. 2168 Note: for windows inside Vim use |winnr()| or |win_getid()|, 2169 see |window-ID|. 2170 2171============================================================================== 21724. Builtin Functions *functions* 2173 2174See |function-list| for a list grouped by what the function is used for. 2175 2176(Use CTRL-] on the function name to jump to the full explanation.) 2177 2178USAGE RESULT DESCRIPTION ~ 2179 2180abs({expr}) Float or Number absolute value of {expr} 2181acos({expr}) Float arc cosine of {expr} 2182add({object}, {item}) List/Blob append {item} to {object} 2183and({expr}, {expr}) Number bitwise AND 2184append({lnum}, {text}) Number append {text} below line {lnum} 2185appendbufline({expr}, {lnum}, {text}) 2186 Number append {text} below line {lnum} 2187 in buffer {expr} 2188argc([{winid}]) Number number of files in the argument list 2189argidx() Number current index in the argument list 2190arglistid([{winnr} [, {tabnr}]]) Number argument list id 2191argv({nr} [, {winid}]) String {nr} entry of the argument list 2192argv([-1, {winid}]) List the argument list 2193assert_beeps({cmd}) Number assert {cmd} causes a beep 2194assert_equal({exp}, {act} [, {msg}]) 2195 Number assert {exp} is equal to {act} 2196assert_equalfile({fname-one}, {fname-two}) 2197 Number assert file contents is equal 2198assert_exception({error} [, {msg}]) 2199 Number assert {error} is in v:exception 2200assert_fails({cmd} [, {error} [, {msg}]]) 2201 Number assert {cmd} fails 2202assert_false({actual} [, {msg}]) 2203 Number assert {actual} is false 2204assert_inrange({lower}, {upper}, {actual} [, {msg}]) 2205 Number assert {actual} is inside the range 2206assert_match({pat}, {text} [, {msg}]) 2207 Number assert {pat} matches {text} 2208assert_notequal({exp}, {act} [, {msg}]) 2209 Number assert {exp} is not equal {act} 2210assert_notmatch({pat}, {text} [, {msg}]) 2211 Number assert {pat} not matches {text} 2212assert_report({msg}) Number report a test failure 2213assert_true({actual} [, {msg}]) Number assert {actual} is true 2214asin({expr}) Float arc sine of {expr} 2215atan({expr}) Float arc tangent of {expr} 2216atan2({expr1}, {expr2}) Float arc tangent of {expr1} / {expr2} 2217balloon_show({expr}) none show {expr} inside the balloon 2218balloon_split({msg}) List split {msg} as used for a balloon 2219browse({save}, {title}, {initdir}, {default}) 2220 String put up a file requester 2221browsedir({title}, {initdir}) String put up a directory requester 2222bufexists({expr}) Number |TRUE| if buffer {expr} exists 2223buflisted({expr}) Number |TRUE| if buffer {expr} is listed 2224bufloaded({expr}) Number |TRUE| if buffer {expr} is loaded 2225bufname({expr}) String Name of the buffer {expr} 2226bufnr({expr} [, {create}]) Number Number of the buffer {expr} 2227bufwinid({expr}) Number window ID of buffer {expr} 2228bufwinnr({expr}) Number window number of buffer {expr} 2229byte2line({byte}) Number line number at byte count {byte} 2230byteidx({expr}, {nr}) Number byte index of {nr}'th char in {expr} 2231byteidxcomp({expr}, {nr}) Number byte index of {nr}'th char in {expr} 2232call({func}, {arglist} [, {dict}]) 2233 any call {func} with arguments {arglist} 2234ceil({expr}) Float round {expr} up 2235ch_canread({handle}) Number check if there is something to read 2236ch_close({handle}) none close {handle} 2237ch_close_in({handle}) none close in part of {handle} 2238ch_evalexpr({handle}, {expr} [, {options}]) 2239 any evaluate {expr} on JSON {handle} 2240ch_evalraw({handle}, {string} [, {options}]) 2241 any evaluate {string} on raw {handle} 2242ch_getbufnr({handle}, {what}) Number get buffer number for {handle}/{what} 2243ch_getjob({channel}) Job get the Job of {channel} 2244ch_info({handle}) String info about channel {handle} 2245ch_log({msg} [, {handle}]) none write {msg} in the channel log file 2246ch_logfile({fname} [, {mode}]) none start logging channel activity 2247ch_open({address} [, {options}]) 2248 Channel open a channel to {address} 2249ch_read({handle} [, {options}]) String read from {handle} 2250ch_readblob({handle} [, {options}]) 2251 Blob read Blob from {handle} 2252ch_readraw({handle} [, {options}]) 2253 String read raw from {handle} 2254ch_sendexpr({handle}, {expr} [, {options}]) 2255 any send {expr} over JSON {handle} 2256ch_sendraw({handle}, {expr} [, {options}]) 2257 any send {expr} over raw {handle} 2258ch_setoptions({handle}, {options}) 2259 none set options for {handle} 2260ch_status({handle} [, {options}]) 2261 String status of channel {handle} 2262changenr() Number current change number 2263char2nr({expr} [, {utf8}]) Number ASCII/UTF8 value of first char in {expr} 2264cindent({lnum}) Number C indent for line {lnum} 2265clearmatches() none clear all matches 2266col({expr}) Number column nr of cursor or mark 2267complete({startcol}, {matches}) none set Insert mode completion 2268complete_add({expr}) Number add completion match 2269complete_check() Number check for key typed during completion 2270confirm({msg} [, {choices} [, {default} [, {type}]]]) 2271 Number number of choice picked by user 2272copy({expr}) any make a shallow copy of {expr} 2273cos({expr}) Float cosine of {expr} 2274cosh({expr}) Float hyperbolic cosine of {expr} 2275count({comp}, {expr} [, {ic} [, {start}]]) 2276 Number count how many {expr} are in {comp} 2277cscope_connection([{num}, {dbpath} [, {prepend}]]) 2278 Number checks existence of cscope connection 2279cursor({lnum}, {col} [, {off}]) 2280 Number move cursor to {lnum}, {col}, {off} 2281cursor({list}) Number move cursor to position in {list} 2282debugbreak({pid}) Number interrupt process being debugged 2283deepcopy({expr} [, {noref}]) any make a full copy of {expr} 2284delete({fname} [, {flags}]) Number delete the file or directory {fname} 2285deletebufline({expr}, {first} [, {last}]) 2286 Number delete lines from buffer {expr} 2287did_filetype() Number |TRUE| if FileType autocmd event used 2288diff_filler({lnum}) Number diff filler lines about {lnum} 2289diff_hlID({lnum}, {col}) Number diff highlighting at {lnum}/{col} 2290empty({expr}) Number |TRUE| if {expr} is empty 2291escape({string}, {chars}) String escape {chars} in {string} with '\' 2292eval({string}) any evaluate {string} into its value 2293eventhandler() Number |TRUE| if inside an event handler 2294executable({expr}) Number 1 if executable {expr} exists 2295execute({command}) String execute {command} and get the output 2296exepath({expr}) String full path of the command {expr} 2297exists({expr}) Number |TRUE| if {expr} exists 2298extend({expr1}, {expr2} [, {expr3}]) 2299 List/Dict insert items of {expr2} into {expr1} 2300exp({expr}) Float exponential of {expr} 2301expand({expr} [, {nosuf} [, {list}]]) 2302 any expand special keywords in {expr} 2303feedkeys({string} [, {mode}]) Number add key sequence to typeahead buffer 2304filereadable({file}) Number |TRUE| if {file} is a readable file 2305filewritable({file}) Number |TRUE| if {file} is a writable file 2306filter({expr1}, {expr2}) List/Dict remove items from {expr1} where 2307 {expr2} is 0 2308finddir({name} [, {path} [, {count}]]) 2309 String find directory {name} in {path} 2310findfile({name} [, {path} [, {count}]]) 2311 String find file {name} in {path} 2312float2nr({expr}) Number convert Float {expr} to a Number 2313floor({expr}) Float round {expr} down 2314fmod({expr1}, {expr2}) Float remainder of {expr1} / {expr2} 2315fnameescape({fname}) String escape special characters in {fname} 2316fnamemodify({fname}, {mods}) String modify file name 2317foldclosed({lnum}) Number first line of fold at {lnum} if closed 2318foldclosedend({lnum}) Number last line of fold at {lnum} if closed 2319foldlevel({lnum}) Number fold level at {lnum} 2320foldtext() String line displayed for closed fold 2321foldtextresult({lnum}) String text for closed fold at {lnum} 2322foreground() Number bring the Vim window to the foreground 2323funcref({name} [, {arglist}] [, {dict}]) 2324 Funcref reference to function {name} 2325function({name} [, {arglist}] [, {dict}]) 2326 Funcref named reference to function {name} 2327garbagecollect([{atexit}]) none free memory, breaking cyclic references 2328get({list}, {idx} [, {def}]) any get item {idx} from {list} or {def} 2329get({dict}, {key} [, {def}]) any get item {key} from {dict} or {def} 2330get({func}, {what}) any get property of funcref/partial {func} 2331getbufinfo([{expr}]) List information about buffers 2332getbufline({expr}, {lnum} [, {end}]) 2333 List lines {lnum} to {end} of buffer {expr} 2334getbufvar({expr}, {varname} [, {def}]) 2335 any variable {varname} in buffer {expr} 2336getchangelist({expr}) List list of change list items 2337getchar([expr]) Number get one character from the user 2338getcharmod() Number modifiers for the last typed character 2339getcharsearch() Dict last character search 2340getcmdline() String return the current command-line 2341getcmdpos() Number return cursor position in command-line 2342getcmdtype() String return current command-line type 2343getcmdwintype() String return current command-line window type 2344getcompletion({pat}, {type} [, {filtered}]) 2345 List list of cmdline completion matches 2346getcurpos() List position of the cursor 2347getcwd([{winnr} [, {tabnr}]]) String get the current working directory 2348getfontname([{name}]) String name of font being used 2349getfperm({fname}) String file permissions of file {fname} 2350getfsize({fname}) Number size in bytes of file {fname} 2351getftime({fname}) Number last modification time of file 2352getftype({fname}) String description of type of file {fname} 2353getjumplist([{winnr} [, {tabnr}]]) 2354 List list of jump list items 2355getline({lnum}) String line {lnum} of current buffer 2356getline({lnum}, {end}) List lines {lnum} to {end} of current buffer 2357getloclist({nr} [, {what}]) List list of location list items 2358getmatches() List list of current matches 2359getpid() Number process ID of Vim 2360getpos({expr}) List position of cursor, mark, etc. 2361getqflist([{what}]) List list of quickfix items 2362getreg([{regname} [, 1 [, {list}]]]) 2363 String or List contents of register 2364getregtype([{regname}]) String type of register 2365gettabinfo([{expr}]) List list of tab pages 2366gettabvar({nr}, {varname} [, {def}]) 2367 any variable {varname} in tab {nr} or {def} 2368gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) 2369 any {name} in {winnr} in tab page {tabnr} 2370gettagstack([{nr}]) Dict get the tag stack of window {nr} 2371getwininfo([{winid}]) List list of info about each window 2372getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window 2373getwinposx() Number X coord in pixels of the Vim window 2374getwinposy() Number Y coord in pixels of the Vim window 2375getwinvar({nr}, {varname} [, {def}]) 2376 any variable {varname} in window {nr} 2377glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) 2378 any expand file wildcards in {expr} 2379glob2regpat({expr}) String convert a glob pat into a search pat 2380globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 2381 String do glob({expr}) for all dirs in {path} 2382has({feature}) Number |TRUE| if feature {feature} supported 2383has_key({dict}, {key}) Number |TRUE| if {dict} has entry {key} 2384haslocaldir([{winnr} [, {tabnr}]]) 2385 Number |TRUE| if the window executed |:lcd| 2386hasmapto({what} [, {mode} [, {abbr}]]) 2387 Number |TRUE| if mapping to {what} exists 2388histadd({history}, {item}) String add an item to a history 2389histdel({history} [, {item}]) String remove an item from a history 2390histget({history} [, {index}]) String get the item {index} from a history 2391histnr({history}) Number highest index of a history 2392hlexists({name}) Number |TRUE| if highlight group {name} exists 2393hlID({name}) Number syntax ID of highlight group {name} 2394hostname() String name of the machine Vim is running on 2395iconv({expr}, {from}, {to}) String convert encoding of {expr} 2396indent({lnum}) Number indent of line {lnum} 2397index({object}, {expr} [, {start} [, {ic}]]) 2398 Number index in {object} where {expr} appears 2399input({prompt} [, {text} [, {completion}]]) 2400 String get input from the user 2401inputdialog({prompt} [, {text} [, {completion}]]) 2402 String like input() but in a GUI dialog 2403inputlist({textlist}) Number let the user pick from a choice list 2404inputrestore() Number restore typeahead 2405inputsave() Number save and clear typeahead 2406inputsecret({prompt} [, {text}]) String like input() but hiding the text 2407insert({object}, {item} [, {idx}]) List insert {item} in {object} [before {idx}] 2408invert({expr}) Number bitwise invert 2409isdirectory({directory}) Number |TRUE| if {directory} is a directory 2410islocked({expr}) Number |TRUE| if {expr} is locked 2411isnan({expr}) Number |TRUE| if {expr} is NaN 2412items({dict}) List key-value pairs in {dict} 2413job_getchannel({job}) Channel get the channel handle for {job} 2414job_info([{job}]) Dict get information about {job} 2415job_setoptions({job}, {options}) none set options for {job} 2416job_start({command} [, {options}]) 2417 Job start a job 2418job_status({job}) String get the status of {job} 2419job_stop({job} [, {how}]) Number stop {job} 2420join({list} [, {sep}]) String join {list} items into one String 2421js_decode({string}) any decode JS style JSON 2422js_encode({expr}) String encode JS style JSON 2423json_decode({string}) any decode JSON 2424json_encode({expr}) String encode JSON 2425keys({dict}) List keys in {dict} 2426len({expr}) Number the length of {expr} 2427libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg} 2428libcallnr({lib}, {func}, {arg}) Number idem, but return a Number 2429line({expr}) Number line nr of cursor, last line or mark 2430line2byte({lnum}) Number byte count of line {lnum} 2431lispindent({lnum}) Number Lisp indent for line {lnum} 2432localtime() Number current time 2433log({expr}) Float natural logarithm (base e) of {expr} 2434log10({expr}) Float logarithm of Float {expr} to base 10 2435luaeval({expr} [, {expr}]) any evaluate |Lua| expression 2436map({expr1}, {expr2}) List/Dict change each item in {expr1} to {expr} 2437maparg({name} [, {mode} [, {abbr} [, {dict}]]]) 2438 String or Dict 2439 rhs of mapping {name} in mode {mode} 2440mapcheck({name} [, {mode} [, {abbr}]]) 2441 String check for mappings matching {name} 2442match({expr}, {pat} [, {start} [, {count}]]) 2443 Number position where {pat} matches in {expr} 2444matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]]) 2445 Number highlight {pattern} with {group} 2446matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) 2447 Number highlight positions with {group} 2448matcharg({nr}) List arguments of |:match| 2449matchdelete({id}) Number delete match identified by {id} 2450matchend({expr}, {pat} [, {start} [, {count}]]) 2451 Number position where {pat} ends in {expr} 2452matchlist({expr}, {pat} [, {start} [, {count}]]) 2453 List match and submatches of {pat} in {expr} 2454matchstr({expr}, {pat} [, {start} [, {count}]]) 2455 String {count}'th match of {pat} in {expr} 2456matchstrpos({expr}, {pat} [, {start} [, {count}]]) 2457 List {count}'th match of {pat} in {expr} 2458max({expr}) Number maximum value of items in {expr} 2459min({expr}) Number minimum value of items in {expr} 2460mkdir({name} [, {path} [, {prot}]]) 2461 Number create directory {name} 2462mode([expr]) String current editing mode 2463mzeval({expr}) any evaluate |MzScheme| expression 2464nextnonblank({lnum}) Number line nr of non-blank line >= {lnum} 2465nr2char({expr} [, {utf8}]) String single char with ASCII/UTF8 value {expr} 2466or({expr}, {expr}) Number bitwise OR 2467pathshorten({expr}) String shorten directory names in a path 2468perleval({expr}) any evaluate |Perl| expression 2469pow({x}, {y}) Float {x} to the power of {y} 2470prevnonblank({lnum}) Number line nr of non-blank line <= {lnum} 2471printf({fmt}, {expr1}...) String format text 2472prompt_setcallback({buf}, {expr}) none set prompt callback function 2473prompt_setinterrupt({buf}, {text}) none set prompt interrupt function 2474prompt_setprompt({buf}, {text}) none set prompt text 2475prop_add({lnum}, {col}, {props}) none add a text property 2476prop_clear({lnum} [, {lnum-end} [, {props}]]) 2477 none remove all text properties 2478prop_find({props} [, {direction}]) 2479 Dict search for a text property 2480prop_list({lnum} [, {props}) List text properties in {lnum} 2481prop_remove({props} [, {lnum} [, {lnum-end}]]) 2482 Number remove a text property 2483prop_type_add({name}, {props}) none define a new property type 2484prop_type_change({name}, {props}) 2485 none change an existing property type 2486prop_type_delete({name} [, {props}]) 2487 none delete a property type 2488prop_type_get([{name} [, {props}]) 2489 Dict get property type values 2490prop_type_list([{props}]) List get list of property types 2491pumvisible() Number whether popup menu is visible 2492pyeval({expr}) any evaluate |Python| expression 2493py3eval({expr}) any evaluate |python3| expression 2494pyxeval({expr}) any evaluate |python_x| expression 2495range({expr} [, {max} [, {stride}]]) 2496 List items from {expr} to {max} 2497readfile({fname} [, {type} [, {max}]]) 2498 List get list of lines from file {fname} 2499reg_executing() String get the executing register name 2500reg_recording() String get the recording register name 2501reltime([{start} [, {end}]]) List get time value 2502reltimefloat({time}) Float turn the time value into a Float 2503reltimestr({time}) String turn time value into a String 2504remote_expr({server}, {string} [, {idvar} [, {timeout}]]) 2505 String send expression 2506remote_foreground({server}) Number bring Vim server to the foreground 2507remote_peek({serverid} [, {retvar}]) 2508 Number check for reply string 2509remote_read({serverid} [, {timeout}]) 2510 String read reply string 2511remote_send({server}, {string} [, {idvar}]) 2512 String send key sequence 2513remote_startserver({name}) none become server {name} 2514remove({list}, {idx} [, {end}]) any/List 2515 remove items {idx}-{end} from {list} 2516remove({blob}, {idx} [, {end}]) Number/Blob 2517 remove bytes {idx}-{end} from {blob} 2518remove({dict}, {key}) any remove entry {key} from {dict} 2519rename({from}, {to}) Number rename (move) file from {from} to {to} 2520repeat({expr}, {count}) String repeat {expr} {count} times 2521resolve({filename}) String get filename a shortcut points to 2522reverse({list}) List reverse {list} in-place 2523round({expr}) Float round off {expr} 2524rubyeval({expr}) any evaluate |Ruby| expression 2525screenattr({row}, {col}) Number attribute at screen position 2526screenchar({row}, {col}) Number character at screen position 2527screencol() Number current cursor column 2528screenrow() Number current cursor row 2529search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) 2530 Number search for {pattern} 2531searchdecl({name} [, {global} [, {thisblock}]]) 2532 Number search for variable declaration 2533searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 2534 Number search for other end of start/end pair 2535searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 2536 List search for other end of start/end pair 2537searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) 2538 List search for {pattern} 2539server2client({clientid}, {string}) 2540 Number send reply string 2541serverlist() String get a list of available servers 2542setbufline({expr}, {lnum}, {text}) 2543 Number set line {lnum} to {text} in buffer 2544 {expr} 2545setbufvar({expr}, {varname}, {val}) 2546 none set {varname} in buffer {expr} to {val} 2547setcharsearch({dict}) Dict set character search from {dict} 2548setcmdpos({pos}) Number set cursor position in command-line 2549setfperm({fname}, {mode}) Number set {fname} file permissions to {mode} 2550setline({lnum}, {line}) Number set line {lnum} to {line} 2551setloclist({nr}, {list} [, {action} [, {what}]]) 2552 Number modify location list using {list} 2553setmatches({list}) Number restore a list of matches 2554setpos({expr}, {list}) Number set the {expr} position to {list} 2555setqflist({list} [, {action} [, {what}]]) 2556 Number modify quickfix list using {list} 2557setreg({n}, {v} [, {opt}]) Number set register to value and type 2558settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val} 2559settabwinvar({tabnr}, {winnr}, {varname}, {val}) 2560 none set {varname} in window {winnr} in tab 2561 page {tabnr} to {val} 2562settagstack({nr}, {dict} [, {action}]) 2563 Number modify tag stack using {dict} 2564setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val} 2565sha256({string}) String SHA256 checksum of {string} 2566shellescape({string} [, {special}]) 2567 String escape {string} for use as shell 2568 command argument 2569shiftwidth([{col}]) Number effective value of 'shiftwidth' 2570sign_define({name} [, {dict}]) Number define or update a sign 2571sign_getdefined([{name}]) List get a list of defined signs 2572sign_getplaced([{expr} [, {dict}]]) 2573 List get a list of placed signs 2574sign_jump({id}, {group}, {expr}) 2575 Number jump to a sign 2576sign_place({id}, {group}, {name}, {expr} [, {dict}]) 2577 Number place a sign 2578sign_undefine([{name}]) Number undefine a sign 2579sign_unplace({group} [, {dict}]) 2580 Number unplace a sign 2581simplify({filename}) String simplify filename as much as possible 2582sin({expr}) Float sine of {expr} 2583sinh({expr}) Float hyperbolic sine of {expr} 2584sort({list} [, {func} [, {dict}]]) 2585 List sort {list}, using {func} to compare 2586soundfold({word}) String sound-fold {word} 2587spellbadword() String badly spelled word at cursor 2588spellsuggest({word} [, {max} [, {capital}]]) 2589 List spelling suggestions 2590split({expr} [, {pat} [, {keepempty}]]) 2591 List make |List| from {pat} separated {expr} 2592sqrt({expr}) Float square root of {expr} 2593str2float({expr}) Float convert String to Float 2594str2nr({expr} [, {base}]) Number convert String to Number 2595strchars({expr} [, {skipcc}]) Number character length of the String {expr} 2596strcharpart({str}, {start} [, {len}]) 2597 String {len} characters of {str} at {start} 2598strdisplaywidth({expr} [, {col}]) Number display length of the String {expr} 2599strftime({format} [, {time}]) String time in specified format 2600strgetchar({str}, {index}) Number get char {index} from {str} 2601stridx({haystack}, {needle} [, {start}]) 2602 Number index of {needle} in {haystack} 2603string({expr}) String String representation of {expr} value 2604strlen({expr}) Number length of the String {expr} 2605strpart({str}, {start} [, {len}]) 2606 String {len} characters of {str} at {start} 2607strridx({haystack}, {needle} [, {start}]) 2608 Number last index of {needle} in {haystack} 2609strtrans({expr}) String translate string to make it printable 2610strwidth({expr}) Number display cell length of the String {expr} 2611submatch({nr} [, {list}]) String or List 2612 specific match in ":s" or substitute() 2613substitute({expr}, {pat}, {sub}, {flags}) 2614 String all {pat} in {expr} replaced with {sub} 2615swapinfo({fname}) Dict information about swap file {fname} 2616swapname({expr}) String swap file of buffer {expr} 2617synID({lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col} 2618synIDattr({synID}, {what} [, {mode}]) 2619 String attribute {what} of syntax ID {synID} 2620synIDtrans({synID}) Number translated syntax ID of {synID} 2621synconcealed({lnum}, {col}) List info about concealing 2622synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and {col} 2623system({expr} [, {input}]) String output of shell command/filter {expr} 2624systemlist({expr} [, {input}]) List output of shell command/filter {expr} 2625tabpagebuflist([{arg}]) List list of buffer numbers in tab page 2626tabpagenr([{arg}]) Number number of current or last tab page 2627tabpagewinnr({tabarg} [, {arg}]) Number number of current window in tab page 2628taglist({expr} [, {filename}]) List list of tags matching {expr} 2629tagfiles() List tags files used 2630tan({expr}) Float tangent of {expr} 2631tanh({expr}) Float hyperbolic tangent of {expr} 2632tempname() String name for a temporary file 2633term_dumpdiff({filename}, {filename} [, {options}]) 2634 Number display difference between two dumps 2635term_dumpload({filename} [, {options}]) 2636 Number displaying a screen dump 2637term_dumpwrite({buf}, {filename} [, {options}]) 2638 none dump terminal window contents 2639term_getaltscreen({buf}) Number get the alternate screen flag 2640term_getansicolors({buf}) List get ANSI palette in GUI color mode 2641term_getattr({attr}, {what}) Number get the value of attribute {what} 2642term_getcursor({buf}) List get the cursor position of a terminal 2643term_getjob({buf}) Job get the job associated with a terminal 2644term_getline({buf}, {row}) String get a line of text from a terminal 2645term_getscrolled({buf}) Number get the scroll count of a terminal 2646term_getsize({buf}) List get the size of a terminal 2647term_getstatus({buf}) String get the status of a terminal 2648term_gettitle({buf}) String get the title of a terminal 2649term_gettty({buf}, [{input}]) String get the tty name of a terminal 2650term_list() List get the list of terminal buffers 2651term_scrape({buf}, {row}) List get row of a terminal screen 2652term_sendkeys({buf}, {keys}) none send keystrokes to a terminal 2653term_setansicolors({buf}, {colors}) 2654 none set ANSI palette in GUI color mode 2655term_setkill({buf}, {how}) none set signal to stop job in terminal 2656term_setrestore({buf}, {command}) none set command to restore terminal 2657term_setsize({buf}, {rows}, {cols}) 2658 none set the size of a terminal 2659term_start({cmd}, {options}) Number open a terminal window and run a job 2660term_wait({buf} [, {time}]) Number wait for screen to be updated 2661test_alloc_fail({id}, {countdown}, {repeat}) 2662 none make memory allocation fail 2663test_autochdir() none enable 'autochdir' during startup 2664test_feedinput({string}) none add key sequence to input buffer 2665test_garbagecollect_now() none free memory right now for testing 2666test_ignore_error({expr}) none ignore a specific error 2667test_null_blob() Blob null value for testing 2668test_null_channel() Channel null value for testing 2669test_null_dict() Dict null value for testing 2670test_null_job() Job null value for testing 2671test_null_list() List null value for testing 2672test_null_partial() Funcref null value for testing 2673test_null_string() String null value for testing 2674test_option_not_set({name}) none reset flag indicating option was set 2675test_override({expr}, {val}) none test with Vim internal overrides 2676test_refcount({expr}) Number get the reference count of {expr} 2677test_scrollbar({which}, {value}, {dragging}) 2678 none scroll in the GUI for testing 2679test_settime({expr}) none set current time for testing 2680timer_info([{id}]) List information about timers 2681timer_pause({id}, {pause}) none pause or unpause a timer 2682timer_start({time}, {callback} [, {options}]) 2683 Number create a timer 2684timer_stop({timer}) none stop a timer 2685timer_stopall() none stop all timers 2686tolower({expr}) String the String {expr} switched to lowercase 2687toupper({expr}) String the String {expr} switched to uppercase 2688tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr} 2689 to chars in {tostr} 2690trim({text} [, {mask}]) String trim characters in {mask} from {text} 2691trunc({expr}) Float truncate Float {expr} 2692type({name}) Number type of variable {name} 2693undofile({name}) String undo file name for {name} 2694undotree() List undo file tree 2695uniq({list} [, {func} [, {dict}]]) 2696 List remove adjacent duplicates from a list 2697values({dict}) List values in {dict} 2698virtcol({expr}) Number screen column of cursor or mark 2699visualmode([expr]) String last visual mode used 2700wildmenumode() Number whether 'wildmenu' mode is active 2701win_findbuf({bufnr}) List find windows containing {bufnr} 2702win_getid([{win} [, {tab}]]) Number get window ID for {win} in {tab} 2703win_gotoid({expr}) Number go to window with ID {expr} 2704win_id2tabwin({expr}) List get tab and window nr from window ID 2705win_id2win({expr}) Number get window nr from window ID 2706win_screenpos({nr}) List get screen position of window {nr} 2707winbufnr({nr}) Number buffer number of window {nr} 2708wincol() Number window column of the cursor 2709winheight({nr}) Number height of window {nr} 2710winlayout([{tabnr}]) List layout of windows in tab {tabnr} 2711winline() Number window line of the cursor 2712winnr([{expr}]) Number number of current window 2713winrestcmd() String returns command to restore window sizes 2714winrestview({dict}) none restore view of current window 2715winsaveview() Dict save view of current window 2716winwidth({nr}) Number width of window {nr} 2717wordcount() Dict get byte/char/word statistics 2718writefile({object}, {fname} [, {flags}]) 2719 Number write |Blob| or |List| of lines to file 2720xor({expr}, {expr}) Number bitwise XOR 2721 2722 2723abs({expr}) *abs()* 2724 Return the absolute value of {expr}. When {expr} evaluates to 2725 a |Float| abs() returns a |Float|. When {expr} can be 2726 converted to a |Number| abs() returns a |Number|. Otherwise 2727 abs() gives an error message and returns -1. 2728 Examples: > 2729 echo abs(1.456) 2730< 1.456 > 2731 echo abs(-5.456) 2732< 5.456 > 2733 echo abs(-4) 2734< 4 2735 {only available when compiled with the |+float| feature} 2736 2737 2738acos({expr}) *acos()* 2739 Return the arc cosine of {expr} measured in radians, as a 2740 |Float| in the range of [0, pi]. 2741 {expr} must evaluate to a |Float| or a |Number| in the range 2742 [-1, 1]. 2743 Examples: > 2744 :echo acos(0) 2745< 1.570796 > 2746 :echo acos(-0.5) 2747< 2.094395 2748 {only available when compiled with the |+float| feature} 2749 2750 2751add({object}, {expr}) *add()* 2752 Append the item {expr} to |List| or |Blob| {object}. Returns 2753 the resulting |List| or |Blob|. Examples: > 2754 :let alist = add([1, 2, 3], item) 2755 :call add(mylist, "woodstock") 2756< Note that when {expr} is a |List| it is appended as a single 2757 item. Use |extend()| to concatenate |Lists|. 2758 When {object} is a |Blob| then {expr} must be a number. 2759 Use |insert()| to add an item at another position. 2760 2761 2762and({expr}, {expr}) *and()* 2763 Bitwise AND on the two arguments. The arguments are converted 2764 to a number. A List, Dict or Float argument causes an error. 2765 Example: > 2766 :let flag = and(bits, 0x80) 2767 2768 2769append({lnum}, {text}) *append()* 2770 When {text} is a |List|: Append each item of the |List| as a 2771 text line below line {lnum} in the current buffer. 2772 Otherwise append {text} as one text line below line {lnum} in 2773 the current buffer. 2774 {lnum} can be zero to insert a line before the first one. 2775 Returns 1 for failure ({lnum} out of range or out of memory), 2776 0 for success. Example: > 2777 :let failed = append(line('$'), "# THE END") 2778 :let failed = append(0, ["Chapter 1", "the beginning"]) 2779 2780appendbufline({expr}, {lnum}, {text}) *appendbufline()* 2781 Like |append()| but append the text in buffer {expr}. 2782 2783 For the use of {expr}, see |bufname()|. 2784 2785 {lnum} is used like with |append()|. Note that using |line()| 2786 would use the current buffer, not the one appending to. 2787 Use "$" to append at the end of the buffer. 2788 2789 On success 0 is returned, on failure 1 is returned. 2790 2791 If {expr} is not a valid buffer or {lnum} is not valid, an 2792 error message is given. Example: > 2793 :let failed = appendbufline(13, 0, "# THE START") 2794< 2795 *argc()* 2796argc([{winid}]) 2797 The result is the number of files in the argument list. See 2798 |arglist|. 2799 If {winid} is not supplied, the argument list of the current 2800 window is used. 2801 If {winid} is -1, the global argument list is used. 2802 Otherwise {winid} specifies the window of which the argument 2803 list is used: either the window number or the window ID. 2804 Returns -1 if the {winid} argument is invalid. 2805 2806 *argidx()* 2807argidx() The result is the current index in the argument list. 0 is 2808 the first file. argc() - 1 is the last one. See |arglist|. 2809 2810 *arglistid()* 2811arglistid([{winnr} [, {tabnr}]]) 2812 Return the argument list ID. This is a number which 2813 identifies the argument list being used. Zero is used for the 2814 global argument list. See |arglist|. 2815 Returns -1 if the arguments are invalid. 2816 2817 Without arguments use the current window. 2818 With {winnr} only use this window in the current tab page. 2819 With {winnr} and {tabnr} use the window in the specified tab 2820 page. 2821 {winnr} can be the window number or the |window-ID|. 2822 2823 *argv()* 2824argv([{nr} [, {winid}]) 2825 The result is the {nr}th file in the argument list. See 2826 |arglist|. "argv(0)" is the first one. Example: > 2827 :let i = 0 2828 :while i < argc() 2829 : let f = escape(fnameescape(argv(i)), '.') 2830 : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>' 2831 : let i = i + 1 2832 :endwhile 2833< Without the {nr} argument, or when {nr} is -1, a |List| with 2834 the whole |arglist| is returned. 2835 2836 The {winid} argument specifies the window ID, see |argc()|. 2837 2838assert_beeps({cmd}) *assert_beeps()* 2839 Run {cmd} and add an error message to |v:errors| if it does 2840 NOT produce a beep or visual bell. 2841 Also see |assert_fails()| and |assert-return|. 2842 2843 *assert_equal()* 2844assert_equal({expected}, {actual} [, {msg}]) 2845 When {expected} and {actual} are not equal an error message is 2846 added to |v:errors| and 1 is returned. Otherwise zero is 2847 returned |assert-return|. 2848 There is no automatic conversion, the String "4" is different 2849 from the Number 4. And the number 4 is different from the 2850 Float 4.0. The value of 'ignorecase' is not used here, case 2851 always matters. 2852 When {msg} is omitted an error in the form "Expected 2853 {expected} but got {actual}" is produced. 2854 Example: > 2855 assert_equal('foo', 'bar') 2856< Will result in a string to be added to |v:errors|: 2857 test.vim line 12: Expected 'foo' but got 'bar' ~ 2858 2859 *assert_equalfile()* 2860assert_equalfile({fname-one}, {fname-two}) 2861 When the files {fname-one} and {fname-two} do not contain 2862 exactly the same text an error message is added to |v:errors|. 2863 Also see |assert-return|. 2864 When {fname-one} or {fname-two} does not exist the error will 2865 mention that. 2866 Mainly useful with |terminal-diff|. 2867 2868assert_exception({error} [, {msg}]) *assert_exception()* 2869 When v:exception does not contain the string {error} an error 2870 message is added to |v:errors|. Also see |assert-return|. 2871 This can be used to assert that a command throws an exception. 2872 Using the error number, followed by a colon, avoids problems 2873 with translations: > 2874 try 2875 commandthatfails 2876 call assert_false(1, 'command should have failed') 2877 catch 2878 call assert_exception('E492:') 2879 endtry 2880 2881assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()* 2882 Run {cmd} and add an error message to |v:errors| if it does 2883 NOT produce an error. Also see |assert-return|. 2884 When {error} is given it must match in |v:errmsg|. 2885 Note that beeping is not considered an error, and some failing 2886 commands only beep. Use |assert_beeps()| for those. 2887 2888assert_false({actual} [, {msg}]) *assert_false()* 2889 When {actual} is not false an error message is added to 2890 |v:errors|, like with |assert_equal()|. 2891 Also see |assert-return|. 2892 A value is false when it is zero. When {actual} is not a 2893 number the assert fails. 2894 When {msg} is omitted an error in the form 2895 "Expected False but got {actual}" is produced. 2896 2897assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()* 2898 This asserts number and |Float| values. When {actual} is lower 2899 than {lower} or higher than {upper} an error message is added 2900 to |v:errors|. Also see |assert-return|. 2901 When {msg} is omitted an error in the form 2902 "Expected range {lower} - {upper}, but got {actual}" is 2903 produced. 2904 2905 *assert_match()* 2906assert_match({pattern}, {actual} [, {msg}]) 2907 When {pattern} does not match {actual} an error message is 2908 added to |v:errors|. Also see |assert-return|. 2909 2910 {pattern} is used as with |=~|: The matching is always done 2911 like 'magic' was set and 'cpoptions' is empty, no matter what 2912 the actual value of 'magic' or 'cpoptions' is. 2913 2914 {actual} is used as a string, automatic conversion applies. 2915 Use "^" and "$" to match with the start and end of the text. 2916 Use both to match the whole text. 2917 2918 When {msg} is omitted an error in the form 2919 "Pattern {pattern} does not match {actual}" is produced. 2920 Example: > 2921 assert_match('^f.*o$', 'foobar') 2922< Will result in a string to be added to |v:errors|: 2923 test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~ 2924 2925 *assert_notequal()* 2926assert_notequal({expected}, {actual} [, {msg}]) 2927 The opposite of `assert_equal()`: add an error message to 2928 |v:errors| when {expected} and {actual} are equal. 2929 Also see |assert-return|. 2930 2931 *assert_notmatch()* 2932assert_notmatch({pattern}, {actual} [, {msg}]) 2933 The opposite of `assert_match()`: add an error message to 2934 |v:errors| when {pattern} matches {actual}. 2935 Also see |assert-return|. 2936 2937assert_report({msg}) *assert_report()* 2938 Report a test failure directly, using {msg}. 2939 Always returns one. 2940 2941assert_true({actual} [, {msg}]) *assert_true()* 2942 When {actual} is not true an error message is added to 2943 |v:errors|, like with |assert_equal()|. 2944 Also see |assert-return|. 2945 A value is TRUE when it is a non-zero number. When {actual} 2946 is not a number the assert fails. 2947 When {msg} is omitted an error in the form "Expected True but 2948 got {actual}" is produced. 2949 2950asin({expr}) *asin()* 2951 Return the arc sine of {expr} measured in radians, as a |Float| 2952 in the range of [-pi/2, pi/2]. 2953 {expr} must evaluate to a |Float| or a |Number| in the range 2954 [-1, 1]. 2955 Examples: > 2956 :echo asin(0.8) 2957< 0.927295 > 2958 :echo asin(-0.5) 2959< -0.523599 2960 {only available when compiled with the |+float| feature} 2961 2962 2963atan({expr}) *atan()* 2964 Return the principal value of the arc tangent of {expr}, in 2965 the range [-pi/2, +pi/2] radians, as a |Float|. 2966 {expr} must evaluate to a |Float| or a |Number|. 2967 Examples: > 2968 :echo atan(100) 2969< 1.560797 > 2970 :echo atan(-4.01) 2971< -1.326405 2972 {only available when compiled with the |+float| feature} 2973 2974 2975atan2({expr1}, {expr2}) *atan2()* 2976 Return the arc tangent of {expr1} / {expr2}, measured in 2977 radians, as a |Float| in the range [-pi, pi]. 2978 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 2979 Examples: > 2980 :echo atan2(-1, 1) 2981< -0.785398 > 2982 :echo atan2(1, -1) 2983< 2.356194 2984 {only available when compiled with the |+float| feature} 2985 2986balloon_show({expr}) *balloon_show()* 2987 Show {expr} inside the balloon. For the GUI {expr} is used as 2988 a string. For a terminal {expr} can be a list, which contains 2989 the lines of the balloon. If {expr} is not a list it will be 2990 split with |balloon_split()|. 2991 2992 Example: > 2993 func GetBalloonContent() 2994 " initiate getting the content 2995 return '' 2996 endfunc 2997 set balloonexpr=GetBalloonContent() 2998 2999 func BalloonCallback(result) 3000 call balloon_show(a:result) 3001 endfunc 3002< 3003 The intended use is that fetching the content of the balloon 3004 is initiated from 'balloonexpr'. It will invoke an 3005 asynchronous method, in which a callback invokes 3006 balloon_show(). The 'balloonexpr' itself can return an 3007 empty string or a placeholder. 3008 3009 When showing a balloon is not possible nothing happens, no 3010 error message. 3011 {only available when compiled with the |+balloon_eval| or 3012 |+balloon_eval_term| feature} 3013 3014balloon_split({msg}) *balloon_split()* 3015 Split {msg} into lines to be displayed in a balloon. The 3016 splits are made for the current window size and optimize to 3017 show debugger output. 3018 Returns a |List| with the split lines. 3019 {only available when compiled with the |+balloon_eval_term| 3020 feature} 3021 3022 *browse()* 3023browse({save}, {title}, {initdir}, {default}) 3024 Put up a file requester. This only works when "has("browse")" 3025 returns |TRUE| (only in some GUI versions). 3026 The input fields are: 3027 {save} when |TRUE|, select file to write 3028 {title} title for the requester 3029 {initdir} directory to start browsing in 3030 {default} default file name 3031 When the "Cancel" button is hit, something went wrong, or 3032 browsing is not possible, an empty string is returned. 3033 3034 *browsedir()* 3035browsedir({title}, {initdir}) 3036 Put up a directory requester. This only works when 3037 "has("browse")" returns |TRUE| (only in some GUI versions). 3038 On systems where a directory browser is not supported a file 3039 browser is used. In that case: select a file in the directory 3040 to be used. 3041 The input fields are: 3042 {title} title for the requester 3043 {initdir} directory to start browsing in 3044 When the "Cancel" button is hit, something went wrong, or 3045 browsing is not possible, an empty string is returned. 3046 3047bufexists({expr}) *bufexists()* 3048 The result is a Number, which is |TRUE| if a buffer called 3049 {expr} exists. 3050 If the {expr} argument is a number, buffer numbers are used. 3051 Number zero is the alternate buffer for the current window. 3052 3053 If the {expr} argument is a string it must match a buffer name 3054 exactly. The name can be: 3055 - Relative to the current directory. 3056 - A full path. 3057 - The name of a buffer with 'buftype' set to "nofile". 3058 - A URL name. 3059 Unlisted buffers will be found. 3060 Note that help files are listed by their short name in the 3061 output of |:buffers|, but bufexists() requires using their 3062 long name to be able to find them. 3063 bufexists() may report a buffer exists, but to use the name 3064 with a |:buffer| command you may need to use |expand()|. Esp 3065 for MS-Windows 8.3 names in the form "c:\DOCUME~1" 3066 Use "bufexists(0)" to test for the existence of an alternate 3067 file name. 3068 *buffer_exists()* 3069 Obsolete name: buffer_exists(). 3070 3071buflisted({expr}) *buflisted()* 3072 The result is a Number, which is |TRUE| if a buffer called 3073 {expr} exists and is listed (has the 'buflisted' option set). 3074 The {expr} argument is used like with |bufexists()|. 3075 3076bufloaded({expr}) *bufloaded()* 3077 The result is a Number, which is |TRUE| if a buffer called 3078 {expr} exists and is loaded (shown in a window or hidden). 3079 The {expr} argument is used like with |bufexists()|. 3080 3081bufname({expr}) *bufname()* 3082 The result is the name of a buffer, as it is displayed by the 3083 ":ls" command. 3084 If {expr} is a Number, that buffer number's name is given. 3085 Number zero is the alternate buffer for the current window. 3086 If {expr} is a String, it is used as a |file-pattern| to match 3087 with the buffer names. This is always done like 'magic' is 3088 set and 'cpoptions' is empty. When there is more than one 3089 match an empty string is returned. 3090 "" or "%" can be used for the current buffer, "#" for the 3091 alternate buffer. 3092 A full match is preferred, otherwise a match at the start, end 3093 or middle of the buffer name is accepted. If you only want a 3094 full match then put "^" at the start and "$" at the end of the 3095 pattern. 3096 Listed buffers are found first. If there is a single match 3097 with a listed buffer, that one is returned. Next unlisted 3098 buffers are searched for. 3099 If the {expr} is a String, but you want to use it as a buffer 3100 number, force it to be a Number by adding zero to it: > 3101 :echo bufname("3" + 0) 3102< If the buffer doesn't exist, or doesn't have a name, an empty 3103 string is returned. > 3104 bufname("#") alternate buffer name 3105 bufname(3) name of buffer 3 3106 bufname("%") name of current buffer 3107 bufname("file2") name of buffer where "file2" matches. 3108< *buffer_name()* 3109 Obsolete name: buffer_name(). 3110 3111 *bufnr()* 3112bufnr({expr} [, {create}]) 3113 The result is the number of a buffer, as it is displayed by 3114 the ":ls" command. For the use of {expr}, see |bufname()| 3115 above. 3116 If the buffer doesn't exist, -1 is returned. Or, if the 3117 {create} argument is present and not zero, a new, unlisted, 3118 buffer is created and its number is returned. 3119 bufnr("$") is the last buffer: > 3120 :let last_buffer = bufnr("$") 3121< The result is a Number, which is the highest buffer number 3122 of existing buffers. Note that not all buffers with a smaller 3123 number necessarily exist, because ":bwipeout" may have removed 3124 them. Use bufexists() to test for the existence of a buffer. 3125 *buffer_number()* 3126 Obsolete name: buffer_number(). 3127 *last_buffer_nr()* 3128 Obsolete name for bufnr("$"): last_buffer_nr(). 3129 3130bufwinid({expr}) *bufwinid()* 3131 The result is a Number, which is the |window-ID| of the first 3132 window associated with buffer {expr}. For the use of {expr}, 3133 see |bufname()| above. If buffer {expr} doesn't exist or 3134 there is no such window, -1 is returned. Example: > 3135 3136 echo "A window containing buffer 1 is " . (bufwinid(1)) 3137< 3138 Only deals with the current tab page. 3139 3140bufwinnr({expr}) *bufwinnr()* 3141 The result is a Number, which is the number of the first 3142 window associated with buffer {expr}. For the use of {expr}, 3143 see |bufname()| above. If buffer {expr} doesn't exist or 3144 there is no such window, -1 is returned. Example: > 3145 3146 echo "A window containing buffer 1 is " . (bufwinnr(1)) 3147 3148< The number can be used with |CTRL-W_w| and ":wincmd w" 3149 |:wincmd|. 3150 Only deals with the current tab page. 3151 3152byte2line({byte}) *byte2line()* 3153 Return the line number that contains the character at byte 3154 count {byte} in the current buffer. This includes the 3155 end-of-line character, depending on the 'fileformat' option 3156 for the current buffer. The first character has byte count 3157 one. 3158 Also see |line2byte()|, |go| and |:goto|. 3159 {not available when compiled without the |+byte_offset| 3160 feature} 3161 3162byteidx({expr}, {nr}) *byteidx()* 3163 Return byte index of the {nr}'th character in the string 3164 {expr}. Use zero for the first character, it returns zero. 3165 This function is only useful when there are multibyte 3166 characters, otherwise the returned value is equal to {nr}. 3167 Composing characters are not counted separately, their byte 3168 length is added to the preceding base character. See 3169 |byteidxcomp()| below for counting composing characters 3170 separately. 3171 Example : > 3172 echo matchstr(str, ".", byteidx(str, 3)) 3173< will display the fourth character. Another way to do the 3174 same: > 3175 let s = strpart(str, byteidx(str, 3)) 3176 echo strpart(s, 0, byteidx(s, 1)) 3177< Also see |strgetchar()| and |strcharpart()|. 3178 3179 If there are less than {nr} characters -1 is returned. 3180 If there are exactly {nr} characters the length of the string 3181 in bytes is returned. 3182 3183byteidxcomp({expr}, {nr}) *byteidxcomp()* 3184 Like byteidx(), except that a composing character is counted 3185 as a separate character. Example: > 3186 let s = 'e' . nr2char(0x301) 3187 echo byteidx(s, 1) 3188 echo byteidxcomp(s, 1) 3189 echo byteidxcomp(s, 2) 3190< The first and third echo result in 3 ('e' plus composing 3191 character is 3 bytes), the second echo results in 1 ('e' is 3192 one byte). 3193 Only works different from byteidx() when 'encoding' is set to 3194 a Unicode encoding. 3195 3196call({func}, {arglist} [, {dict}]) *call()* *E699* 3197 Call function {func} with the items in |List| {arglist} as 3198 arguments. 3199 {func} can either be a |Funcref| or the name of a function. 3200 a:firstline and a:lastline are set to the cursor line. 3201 Returns the return value of the called function. 3202 {dict} is for functions with the "dict" attribute. It will be 3203 used to set the local variable "self". |Dictionary-function| 3204 3205ceil({expr}) *ceil()* 3206 Return the smallest integral value greater than or equal to 3207 {expr} as a |Float| (round up). 3208 {expr} must evaluate to a |Float| or a |Number|. 3209 Examples: > 3210 echo ceil(1.456) 3211< 2.0 > 3212 echo ceil(-5.456) 3213< -5.0 > 3214 echo ceil(4.0) 3215< 4.0 3216 {only available when compiled with the |+float| feature} 3217 3218ch_canread({handle}) *ch_canread()* 3219 Return non-zero when there is something to read from {handle}. 3220 {handle} can be a Channel or a Job that has a Channel. 3221 3222 This is useful to read from a channel at a convenient time, 3223 e.g. from a timer. 3224 3225 Note that messages are dropped when the channel does not have 3226 a callback. Add a close callback to avoid that. 3227 3228 {only available when compiled with the |+channel| feature} 3229 3230ch_close({handle}) *ch_close()* 3231 Close {handle}. See |channel-close|. 3232 {handle} can be a Channel or a Job that has a Channel. 3233 A close callback is not invoked. 3234 3235 {only available when compiled with the |+channel| feature} 3236 3237ch_close_in({handle}) *ch_close_in()* 3238 Close the "in" part of {handle}. See |channel-close-in|. 3239 {handle} can be a Channel or a Job that has a Channel. 3240 A close callback is not invoked. 3241 3242 {only available when compiled with the |+channel| feature} 3243 3244ch_evalexpr({handle}, {expr} [, {options}]) *ch_evalexpr()* 3245 Send {expr} over {handle}. The {expr} is encoded 3246 according to the type of channel. The function cannot be used 3247 with a raw channel. See |channel-use|. 3248 {handle} can be a Channel or a Job that has a Channel. 3249 *E917* 3250 {options} must be a Dictionary. It must not have a "callback" 3251 entry. It can have a "timeout" entry to specify the timeout 3252 for this specific request. 3253 3254 ch_evalexpr() waits for a response and returns the decoded 3255 expression. When there is an error or timeout it returns an 3256 empty string. 3257 3258 {only available when compiled with the |+channel| feature} 3259 3260ch_evalraw({handle}, {string} [, {options}]) *ch_evalraw()* 3261 Send {string} over {handle}. 3262 {handle} can be a Channel or a Job that has a Channel. 3263 3264 Works like |ch_evalexpr()|, but does not encode the request or 3265 decode the response. The caller is responsible for the 3266 correct contents. Also does not add a newline for a channel 3267 in NL mode, the caller must do that. The NL in the response 3268 is removed. 3269 Note that Vim does not know when the text received on a raw 3270 channel is complete, it may only return the first part and you 3271 need to use |ch_readraw()| to fetch the rest. 3272 See |channel-use|. 3273 3274 {only available when compiled with the |+channel| feature} 3275 3276ch_getbufnr({handle}, {what}) *ch_getbufnr()* 3277 Get the buffer number that {handle} is using for {what}. 3278 {handle} can be a Channel or a Job that has a Channel. 3279 {what} can be "err" for stderr, "out" for stdout or empty for 3280 socket output. 3281 Returns -1 when there is no buffer. 3282 {only available when compiled with the |+channel| feature} 3283 3284ch_getjob({channel}) *ch_getjob()* 3285 Get the Job associated with {channel}. 3286 If there is no job calling |job_status()| on the returned Job 3287 will result in "fail". 3288 3289 {only available when compiled with the |+channel| and 3290 |+job| features} 3291 3292ch_info({handle}) *ch_info()* 3293 Returns a Dictionary with information about {handle}. The 3294 items are: 3295 "id" number of the channel 3296 "status" "open", "buffered" or "closed", like 3297 ch_status() 3298 When opened with ch_open(): 3299 "hostname" the hostname of the address 3300 "port" the port of the address 3301 "sock_status" "open" or "closed" 3302 "sock_mode" "NL", "RAW", "JSON" or "JS" 3303 "sock_io" "socket" 3304 "sock_timeout" timeout in msec 3305 When opened with job_start(): 3306 "out_status" "open", "buffered" or "closed" 3307 "out_mode" "NL", "RAW", "JSON" or "JS" 3308 "out_io" "null", "pipe", "file" or "buffer" 3309 "out_timeout" timeout in msec 3310 "err_status" "open", "buffered" or "closed" 3311 "err_mode" "NL", "RAW", "JSON" or "JS" 3312 "err_io" "out", "null", "pipe", "file" or "buffer" 3313 "err_timeout" timeout in msec 3314 "in_status" "open" or "closed" 3315 "in_mode" "NL", "RAW", "JSON" or "JS" 3316 "in_io" "null", "pipe", "file" or "buffer" 3317 "in_timeout" timeout in msec 3318 3319ch_log({msg} [, {handle}]) *ch_log()* 3320 Write {msg} in the channel log file, if it was opened with 3321 |ch_logfile()|. 3322 When {handle} is passed the channel number is used for the 3323 message. 3324 {handle} can be a Channel or a Job that has a Channel. The 3325 Channel must be open for the channel number to be used. 3326 3327ch_logfile({fname} [, {mode}]) *ch_logfile()* 3328 Start logging channel activity to {fname}. 3329 When {fname} is an empty string: stop logging. 3330 3331 When {mode} is omitted or "a" append to the file. 3332 When {mode} is "w" start with an empty file. 3333 3334 Use |ch_log()| to write log messages. The file is flushed 3335 after every message, on Unix you can use "tail -f" to see what 3336 is going on in real time. 3337 3338 This function is not available in the |sandbox|. 3339 NOTE: the channel communication is stored in the file, be 3340 aware that this may contain confidential and privacy sensitive 3341 information, e.g. a password you type in a terminal window. 3342 3343 3344ch_open({address} [, {options}]) *ch_open()* 3345 Open a channel to {address}. See |channel|. 3346 Returns a Channel. Use |ch_status()| to check for failure. 3347 3348 {address} has the form "hostname:port", e.g., 3349 "localhost:8765". 3350 3351 If {options} is given it must be a |Dictionary|. 3352 See |channel-open-options|. 3353 3354 {only available when compiled with the |+channel| feature} 3355 3356ch_read({handle} [, {options}]) *ch_read()* 3357 Read from {handle} and return the received message. 3358 {handle} can be a Channel or a Job that has a Channel. 3359 For a NL channel this waits for a NL to arrive, except when 3360 there is nothing more to read (channel was closed). 3361 See |channel-more|. 3362 {only available when compiled with the |+channel| feature} 3363 3364ch_readblob({handle} [, {options}]) *ch_readblob()* 3365 Like ch_read() but reads binary data and returns a |Blob|. 3366 See |channel-more|. 3367 {only available when compiled with the |+channel| feature} 3368 3369ch_readraw({handle} [, {options}]) *ch_readraw()* 3370 Like ch_read() but for a JS and JSON channel does not decode 3371 the message. For a NL channel it does not block waiting for 3372 the NL to arrive, but otherwise works like ch_read(). 3373 See |channel-more|. 3374 {only available when compiled with the |+channel| feature} 3375 3376ch_sendexpr({handle}, {expr} [, {options}]) *ch_sendexpr()* 3377 Send {expr} over {handle}. The {expr} is encoded 3378 according to the type of channel. The function cannot be used 3379 with a raw channel. 3380 See |channel-use|. *E912* 3381 {handle} can be a Channel or a Job that has a Channel. 3382 3383 {only available when compiled with the |+channel| feature} 3384 3385ch_sendraw({handle}, {expr} [, {options}]) *ch_sendraw()* 3386 Send |String| or |Blob| {expr} over {handle}. 3387 Works like |ch_sendexpr()|, but does not encode the request or 3388 decode the response. The caller is responsible for the 3389 correct contents. Also does not add a newline for a channel 3390 in NL mode, the caller must do that. The NL in the response 3391 is removed. 3392 See |channel-use|. 3393 3394 {only available when compiled with the |+channel| feature} 3395 3396ch_setoptions({handle}, {options}) *ch_setoptions()* 3397 Set options on {handle}: 3398 "callback" the channel callback 3399 "timeout" default read timeout in msec 3400 "mode" mode for the whole channel 3401 See |ch_open()| for more explanation. 3402 {handle} can be a Channel or a Job that has a Channel. 3403 3404 Note that changing the mode may cause queued messages to be 3405 lost. 3406 3407 These options cannot be changed: 3408 "waittime" only applies to |ch_open()| 3409 3410ch_status({handle} [, {options}]) *ch_status()* 3411 Return the status of {handle}: 3412 "fail" failed to open the channel 3413 "open" channel can be used 3414 "buffered" channel can be read, not written to 3415 "closed" channel can not be used 3416 {handle} can be a Channel or a Job that has a Channel. 3417 "buffered" is used when the channel was closed but there is 3418 still data that can be obtained with |ch_read()|. 3419 3420 If {options} is given it can contain a "part" entry to specify 3421 the part of the channel to return the status for: "out" or 3422 "err". For example, to get the error status: > 3423 ch_status(job, {"part": "err"}) 3424< 3425changenr() *changenr()* 3426 Return the number of the most recent change. This is the same 3427 number as what is displayed with |:undolist| and can be used 3428 with the |:undo| command. 3429 When a change was made it is the number of that change. After 3430 redo it is the number of the redone change. After undo it is 3431 one less than the number of the undone change. 3432 3433char2nr({expr} [, {utf8}]) *char2nr()* 3434 Return number value of the first char in {expr}. Examples: > 3435 char2nr(" ") returns 32 3436 char2nr("ABC") returns 65 3437< When {utf8} is omitted or zero, the current 'encoding' is used. 3438 Example for "utf-8": > 3439 char2nr("á") returns 225 3440 char2nr("á"[0]) returns 195 3441< With {utf8} set to 1, always treat as utf-8 characters. 3442 A combining character is a separate character. 3443 |nr2char()| does the opposite. 3444 3445cindent({lnum}) *cindent()* 3446 Get the amount of indent for line {lnum} according the C 3447 indenting rules, as with 'cindent'. 3448 The indent is counted in spaces, the value of 'tabstop' is 3449 relevant. {lnum} is used just like in |getline()|. 3450 When {lnum} is invalid or Vim was not compiled the |+cindent| 3451 feature, -1 is returned. 3452 See |C-indenting|. 3453 3454clearmatches() *clearmatches()* 3455 Clears all matches previously defined by |matchadd()| and the 3456 |:match| commands. 3457 3458 *col()* 3459col({expr}) The result is a Number, which is the byte index of the column 3460 position given with {expr}. The accepted positions are: 3461 . the cursor position 3462 $ the end of the cursor line (the result is the 3463 number of bytes in the cursor line plus one) 3464 'x position of mark x (if the mark is not set, 0 is 3465 returned) 3466 v In Visual mode: the start of the Visual area (the 3467 cursor is the end). When not in Visual mode 3468 returns the cursor position. Differs from |'<| in 3469 that it's updated right away. 3470 Additionally {expr} can be [lnum, col]: a |List| with the line 3471 and column number. Most useful when the column is "$", to get 3472 the last column of a specific line. When "lnum" or "col" is 3473 out of range then col() returns zero. 3474 To get the line number use |line()|. To get both use 3475 |getpos()|. 3476 For the screen column position use |virtcol()|. 3477 Note that only marks in the current file can be used. 3478 Examples: > 3479 col(".") column of cursor 3480 col("$") length of cursor line plus one 3481 col("'t") column of mark t 3482 col("'" . markname) column of mark markname 3483< The first column is 1. 0 is returned for an error. 3484 For an uppercase mark the column may actually be in another 3485 buffer. 3486 For the cursor position, when 'virtualedit' is active, the 3487 column is one higher if the cursor is after the end of the 3488 line. This can be used to obtain the column in Insert mode: > 3489 :imap <F2> <C-O>:let save_ve = &ve<CR> 3490 \<C-O>:set ve=all<CR> 3491 \<C-O>:echo col(".") . "\n" <Bar> 3492 \let &ve = save_ve<CR> 3493< 3494 3495complete({startcol}, {matches}) *complete()* *E785* 3496 Set the matches for Insert mode completion. 3497 Can only be used in Insert mode. You need to use a mapping 3498 with CTRL-R = (see |i_CTRL-R|). It does not work after CTRL-O 3499 or with an expression mapping. 3500 {startcol} is the byte offset in the line where the completed 3501 text start. The text up to the cursor is the original text 3502 that will be replaced by the matches. Use col('.') for an 3503 empty string. "col('.') - 1" will replace one character by a 3504 match. 3505 {matches} must be a |List|. Each |List| item is one match. 3506 See |complete-items| for the kind of items that are possible. 3507 Note that the after calling this function you need to avoid 3508 inserting anything that would cause completion to stop. 3509 The match can be selected with CTRL-N and CTRL-P as usual with 3510 Insert mode completion. The popup menu will appear if 3511 specified, see |ins-completion-menu|. 3512 Example: > 3513 inoremap <F5> <C-R>=ListMonths()<CR> 3514 3515 func! ListMonths() 3516 call complete(col('.'), ['January', 'February', 'March', 3517 \ 'April', 'May', 'June', 'July', 'August', 'September', 3518 \ 'October', 'November', 'December']) 3519 return '' 3520 endfunc 3521< This isn't very useful, but it shows how it works. Note that 3522 an empty string is returned to avoid a zero being inserted. 3523 3524complete_add({expr}) *complete_add()* 3525 Add {expr} to the list of matches. Only to be used by the 3526 function specified with the 'completefunc' option. 3527 Returns 0 for failure (empty string or out of memory), 3528 1 when the match was added, 2 when the match was already in 3529 the list. 3530 See |complete-functions| for an explanation of {expr}. It is 3531 the same as one item in the list that 'omnifunc' would return. 3532 3533complete_check() *complete_check()* 3534 Check for a key typed while looking for completion matches. 3535 This is to be used when looking for matches takes some time. 3536 Returns |TRUE| when searching for matches is to be aborted, 3537 zero otherwise. 3538 Only to be used by the function specified with the 3539 'completefunc' option. 3540 3541 *confirm()* 3542confirm({msg} [, {choices} [, {default} [, {type}]]]) 3543 confirm() offers the user a dialog, from which a choice can be 3544 made. It returns the number of the choice. For the first 3545 choice this is 1. 3546 Note: confirm() is only supported when compiled with dialog 3547 support, see |+dialog_con| and |+dialog_gui|. 3548 3549 {msg} is displayed in a |dialog| with {choices} as the 3550 alternatives. When {choices} is missing or empty, "&OK" is 3551 used (and translated). 3552 {msg} is a String, use '\n' to include a newline. Only on 3553 some systems the string is wrapped when it doesn't fit. 3554 3555 {choices} is a String, with the individual choices separated 3556 by '\n', e.g. > 3557 confirm("Save changes?", "&Yes\n&No\n&Cancel") 3558< The letter after the '&' is the shortcut key for that choice. 3559 Thus you can type 'c' to select "Cancel". The shortcut does 3560 not need to be the first letter: > 3561 confirm("file has been modified", "&Save\nSave &All") 3562< For the console, the first letter of each choice is used as 3563 the default shortcut key. 3564 3565 The optional {default} argument is the number of the choice 3566 that is made if the user hits <CR>. Use 1 to make the first 3567 choice the default one. Use 0 to not set a default. If 3568 {default} is omitted, 1 is used. 3569 3570 The optional {type} argument gives the type of dialog. This 3571 is only used for the icon of the GTK, Mac, Motif and Win32 3572 GUI. It can be one of these values: "Error", "Question", 3573 "Info", "Warning" or "Generic". Only the first character is 3574 relevant. When {type} is omitted, "Generic" is used. 3575 3576 If the user aborts the dialog by pressing <Esc>, CTRL-C, 3577 or another valid interrupt key, confirm() returns 0. 3578 3579 An example: > 3580 :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2) 3581 :if choice == 0 3582 : echo "make up your mind!" 3583 :elseif choice == 3 3584 : echo "tasteful" 3585 :else 3586 : echo "I prefer bananas myself." 3587 :endif 3588< In a GUI dialog, buttons are used. The layout of the buttons 3589 depends on the 'v' flag in 'guioptions'. If it is included, 3590 the buttons are always put vertically. Otherwise, confirm() 3591 tries to put the buttons in one horizontal line. If they 3592 don't fit, a vertical layout is used anyway. For some systems 3593 the horizontal layout is always used. 3594 3595 *copy()* 3596copy({expr}) Make a copy of {expr}. For Numbers and Strings this isn't 3597 different from using {expr} directly. 3598 When {expr} is a |List| a shallow copy is created. This means 3599 that the original |List| can be changed without changing the 3600 copy, and vice versa. But the items are identical, thus 3601 changing an item changes the contents of both |Lists|. 3602 A |Dictionary| is copied in a similar way as a |List|. 3603 Also see |deepcopy()|. 3604 3605cos({expr}) *cos()* 3606 Return the cosine of {expr}, measured in radians, as a |Float|. 3607 {expr} must evaluate to a |Float| or a |Number|. 3608 Examples: > 3609 :echo cos(100) 3610< 0.862319 > 3611 :echo cos(-4.01) 3612< -0.646043 3613 {only available when compiled with the |+float| feature} 3614 3615 3616cosh({expr}) *cosh()* 3617 Return the hyperbolic cosine of {expr} as a |Float| in the range 3618 [1, inf]. 3619 {expr} must evaluate to a |Float| or a |Number|. 3620 Examples: > 3621 :echo cosh(0.5) 3622< 1.127626 > 3623 :echo cosh(-0.5) 3624< -1.127626 3625 {only available when compiled with the |+float| feature} 3626 3627 3628count({comp}, {expr} [, {ic} [, {start}]]) *count()* 3629 Return the number of times an item with value {expr} appears 3630 in |String|, |List| or |Dictionary| {comp}. 3631 3632 If {start} is given then start with the item with this index. 3633 {start} can only be used with a |List|. 3634 3635 When {ic} is given and it's |TRUE| then case is ignored. 3636 3637 When {comp} is a string then the number of not overlapping 3638 occurrences of {expr} is returned. Zero is returned when 3639 {expr} is an empty string. 3640 3641 *cscope_connection()* 3642cscope_connection([{num} , {dbpath} [, {prepend}]]) 3643 Checks for the existence of a |cscope| connection. If no 3644 parameters are specified, then the function returns: 3645 0, if cscope was not available (not compiled in), or 3646 if there are no cscope connections; 3647 1, if there is at least one cscope connection. 3648 3649 If parameters are specified, then the value of {num} 3650 determines how existence of a cscope connection is checked: 3651 3652 {num} Description of existence check 3653 ----- ------------------------------ 3654 0 Same as no parameters (e.g., "cscope_connection()"). 3655 1 Ignore {prepend}, and use partial string matches for 3656 {dbpath}. 3657 2 Ignore {prepend}, and use exact string matches for 3658 {dbpath}. 3659 3 Use {prepend}, use partial string matches for both 3660 {dbpath} and {prepend}. 3661 4 Use {prepend}, use exact string matches for both 3662 {dbpath} and {prepend}. 3663 3664 Note: All string comparisons are case sensitive! 3665 3666 Examples. Suppose we had the following (from ":cs show"): > 3667 3668 # pid database name prepend path 3669 0 27664 cscope.out /usr/local 3670< 3671 Invocation Return Val ~ 3672 ---------- ---------- > 3673 cscope_connection() 1 3674 cscope_connection(1, "out") 1 3675 cscope_connection(2, "out") 0 3676 cscope_connection(3, "out") 0 3677 cscope_connection(3, "out", "local") 1 3678 cscope_connection(4, "out") 0 3679 cscope_connection(4, "out", "local") 0 3680 cscope_connection(4, "cscope.out", "/usr/local") 1 3681< 3682cursor({lnum}, {col} [, {off}]) *cursor()* 3683cursor({list}) 3684 Positions the cursor at the column (byte count) {col} in the 3685 line {lnum}. The first column is one. 3686 3687 When there is one argument {list} this is used as a |List| 3688 with two, three or four item: 3689 [{lnum}, {col}] 3690 [{lnum}, {col}, {off}] 3691 [{lnum}, {col}, {off}, {curswant}] 3692 This is like the return value of |getpos()| or |getcurpos()|, 3693 but without the first item. 3694 3695 Does not change the jumplist. 3696 If {lnum} is greater than the number of lines in the buffer, 3697 the cursor will be positioned at the last line in the buffer. 3698 If {lnum} is zero, the cursor will stay in the current line. 3699 If {col} is greater than the number of bytes in the line, 3700 the cursor will be positioned at the last character in the 3701 line. 3702 If {col} is zero, the cursor will stay in the current column. 3703 If {curswant} is given it is used to set the preferred column 3704 for vertical movement. Otherwise {col} is used. 3705 3706 When 'virtualedit' is used {off} specifies the offset in 3707 screen columns from the start of the character. E.g., a 3708 position within a <Tab> or after the last character. 3709 Returns 0 when the position could be set, -1 otherwise. 3710 3711debugbreak({pid}) *debugbreak()* 3712 Specifically used to interrupt a program being debugged. It 3713 will cause process {pid} to get a SIGTRAP. Behavior for other 3714 processes is undefined. See |terminal-debugger|. 3715 {only available on MS-Windows} 3716 3717deepcopy({expr} [, {noref}]) *deepcopy()* *E698* 3718 Make a copy of {expr}. For Numbers and Strings this isn't 3719 different from using {expr} directly. 3720 When {expr} is a |List| a full copy is created. This means 3721 that the original |List| can be changed without changing the 3722 copy, and vice versa. When an item is a |List| or 3723 |Dictionary|, a copy for it is made, recursively. Thus 3724 changing an item in the copy does not change the contents of 3725 the original |List|. 3726 A |Dictionary| is copied in a similar way as a |List|. 3727 When {noref} is omitted or zero a contained |List| or 3728 |Dictionary| is only copied once. All references point to 3729 this single copy. With {noref} set to 1 every occurrence of a 3730 |List| or |Dictionary| results in a new copy. This also means 3731 that a cyclic reference causes deepcopy() to fail. 3732 *E724* 3733 Nesting is possible up to 100 levels. When there is an item 3734 that refers back to a higher level making a deep copy with 3735 {noref} set to 1 will fail. 3736 Also see |copy()|. 3737 3738delete({fname} [, {flags}]) *delete()* 3739 Without {flags} or with {flags} empty: Deletes the file by the 3740 name {fname}. This also works when {fname} is a symbolic link. 3741 3742 When {flags} is "d": Deletes the directory by the name 3743 {fname}. This fails when directory {fname} is not empty. 3744 3745 When {flags} is "rf": Deletes the directory by the name 3746 {fname} and everything in it, recursively. BE CAREFUL! 3747 Note: on MS-Windows it is not possible to delete a directory 3748 that is being used. 3749 3750 A symbolic link itself is deleted, not what it points to. 3751 3752 The result is a Number, which is 0 if the delete operation was 3753 successful and -1 when the deletion failed or partly failed. 3754 3755 Use |remove()| to delete an item from a |List|. 3756 To delete a line from the buffer use |:delete| or 3757 |deletebufline()|. 3758 3759deletebufline({expr}, {first} [, {last}]) *deletebufline()* 3760 Delete lines {first} to {last} (inclusive) from buffer {expr}. 3761 If {last} is omitted then delete line {first} only. 3762 On success 0 is returned, on failure 1 is returned. 3763 3764 For the use of {expr}, see |bufname()| above. 3765 3766 {first} and {last} are used like with |getline()|. Note that 3767 when using |line()| this refers to the current buffer. Use "$" 3768 to refer to the last line in buffer {expr}. 3769 3770 *did_filetype()* 3771did_filetype() Returns |TRUE| when autocommands are being executed and the 3772 FileType event has been triggered at least once. Can be used 3773 to avoid triggering the FileType event again in the scripts 3774 that detect the file type. |FileType| 3775 Returns |FALSE| when `:setf FALLBACK` was used. 3776 When editing another file, the counter is reset, thus this 3777 really checks if the FileType event has been triggered for the 3778 current buffer. This allows an autocommand that starts 3779 editing another buffer to set 'filetype' and load a syntax 3780 file. 3781 3782diff_filler({lnum}) *diff_filler()* 3783 Returns the number of filler lines above line {lnum}. 3784 These are the lines that were inserted at this point in 3785 another diff'ed window. These filler lines are shown in the 3786 display but don't exist in the buffer. 3787 {lnum} is used like with |getline()|. Thus "." is the current 3788 line, "'m" mark m, etc. 3789 Returns 0 if the current window is not in diff mode. 3790 3791diff_hlID({lnum}, {col}) *diff_hlID()* 3792 Returns the highlight ID for diff mode at line {lnum} column 3793 {col} (byte index). When the current line does not have a 3794 diff change zero is returned. 3795 {lnum} is used like with |getline()|. Thus "." is the current 3796 line, "'m" mark m, etc. 3797 {col} is 1 for the leftmost column, {lnum} is 1 for the first 3798 line. 3799 The highlight ID can be used with |synIDattr()| to obtain 3800 syntax information about the highlighting. 3801 3802empty({expr}) *empty()* 3803 Return the Number 1 if {expr} is empty, zero otherwise. 3804 - A |List| or |Dictionary| is empty when it does not have any 3805 items. 3806 - A |String| is empty when its length is zero. 3807 - A |Number| and |Float| are empty when their value is zero. 3808 - |v:false|, |v:none| and |v:null| are empty, |v:true| is not. 3809 - A |Job| is empty when it failed to start. 3810 - A |Channel| is empty when it is closed. 3811 - A |Blob| is empty when its length is zero. 3812 3813 For a long |List| this is much faster than comparing the 3814 length with zero. 3815 3816escape({string}, {chars}) *escape()* 3817 Escape the characters in {chars} that occur in {string} with a 3818 backslash. Example: > 3819 :echo escape('c:\program files\vim', ' \') 3820< results in: > 3821 c:\\program\ files\\vim 3822< Also see |shellescape()| and |fnameescape()|. 3823 3824 *eval()* 3825eval({string}) Evaluate {string} and return the result. Especially useful to 3826 turn the result of |string()| back into the original value. 3827 This works for Numbers, Floats, Strings, Blobs and composites 3828 of them. Also works for |Funcref|s that refer to existing 3829 functions. 3830 3831eventhandler() *eventhandler()* 3832 Returns 1 when inside an event handler. That is that Vim got 3833 interrupted while waiting for the user to type a character, 3834 e.g., when dropping a file on Vim. This means interactive 3835 commands cannot be used. Otherwise zero is returned. 3836 3837executable({expr}) *executable()* 3838 This function checks if an executable with the name {expr} 3839 exists. {expr} must be the name of the program without any 3840 arguments. 3841 executable() uses the value of $PATH and/or the normal 3842 searchpath for programs. *PATHEXT* 3843 On MS-DOS and MS-Windows the ".exe", ".bat", etc. can 3844 optionally be included. Then the extensions in $PATHEXT are 3845 tried. Thus if "foo.exe" does not exist, "foo.exe.bat" can be 3846 found. If $PATHEXT is not set then ".exe;.com;.bat;.cmd" is 3847 used. A dot by itself can be used in $PATHEXT to try using 3848 the name without an extension. When 'shell' looks like a 3849 Unix shell, then the name is also tried without adding an 3850 extension. 3851 On MS-DOS and MS-Windows it only checks if the file exists and 3852 is not a directory, not if it's really executable. 3853 On MS-Windows an executable in the same directory as Vim is 3854 always found. Since this directory is added to $PATH it 3855 should also work to execute it |win32-PATH|. 3856 The result is a Number: 3857 1 exists 3858 0 does not exist 3859 -1 not implemented on this system 3860 |exepath()| can be used to get the full path of an executable. 3861 3862execute({command} [, {silent}]) *execute()* 3863 Execute an Ex command or commands and return the output as a 3864 string. 3865 {command} can be a string or a List. In case of a List the 3866 lines are executed one by one. 3867 This is equivalent to: > 3868 redir => var 3869 {command} 3870 redir END 3871< 3872 The optional {silent} argument can have these values: 3873 "" no `:silent` used 3874 "silent" `:silent` used 3875 "silent!" `:silent!` used 3876 The default is "silent". Note that with "silent!", unlike 3877 `:redir`, error messages are dropped. When using an external 3878 command the screen may be messed up, use `system()` instead. 3879 *E930* 3880 It is not possible to use `:redir` anywhere in {command}. 3881 3882 To get a list of lines use |split()| on the result: > 3883 split(execute('args'), "\n") 3884 3885< When used recursively the output of the recursive call is not 3886 included in the output of the higher level call. 3887 3888exepath({expr}) *exepath()* 3889 If {expr} is an executable and is either an absolute path, a 3890 relative path or found in $PATH, return the full path. 3891 Note that the current directory is used when {expr} starts 3892 with "./", which may be a problem for Vim: > 3893 echo exepath(v:progpath) 3894< If {expr} cannot be found in $PATH or is not executable then 3895 an empty string is returned. 3896 3897 *exists()* 3898exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined, 3899 zero otherwise. 3900 3901 For checking for a supported feature use |has()|. 3902 For checking if a file exists use |filereadable()|. 3903 3904 The {expr} argument is a string, which contains one of these: 3905 &option-name Vim option (only checks if it exists, 3906 not if it really works) 3907 +option-name Vim option that works. 3908 $ENVNAME environment variable (could also be 3909 done by comparing with an empty 3910 string) 3911 *funcname built-in function (see |functions|) 3912 or user defined function (see 3913 |user-functions|). Also works for a 3914 variable that is a Funcref. 3915 varname internal variable (see 3916 |internal-variables|). Also works 3917 for |curly-braces-names|, |Dictionary| 3918 entries, |List| items, etc. Beware 3919 that evaluating an index may cause an 3920 error message for an invalid 3921 expression. E.g.: > 3922 :let l = [1, 2, 3] 3923 :echo exists("l[5]") 3924< 0 > 3925 :echo exists("l[xx]") 3926< E121: Undefined variable: xx 3927 0 3928 :cmdname Ex command: built-in command, user 3929 command or command modifier |:command|. 3930 Returns: 3931 1 for match with start of a command 3932 2 full match with a command 3933 3 matches several user commands 3934 To check for a supported command 3935 always check the return value to be 2. 3936 :2match The |:2match| command. 3937 :3match The |:3match| command. 3938 #event autocommand defined for this event 3939 #event#pattern autocommand defined for this event and 3940 pattern (the pattern is taken 3941 literally and compared to the 3942 autocommand patterns character by 3943 character) 3944 #group autocommand group exists 3945 #group#event autocommand defined for this group and 3946 event. 3947 #group#event#pattern 3948 autocommand defined for this group, 3949 event and pattern. 3950 ##event autocommand for this event is 3951 supported. 3952 3953 Examples: > 3954 exists("&shortname") 3955 exists("$HOSTNAME") 3956 exists("*strftime") 3957 exists("*s:MyFunc") 3958 exists("bufcount") 3959 exists(":Make") 3960 exists("#CursorHold") 3961 exists("#BufReadPre#*.gz") 3962 exists("#filetypeindent") 3963 exists("#filetypeindent#FileType") 3964 exists("#filetypeindent#FileType#*") 3965 exists("##ColorScheme") 3966< There must be no space between the symbol (&/$/*/#) and the 3967 name. 3968 There must be no extra characters after the name, although in 3969 a few cases this is ignored. That may become more strict in 3970 the future, thus don't count on it! 3971 Working example: > 3972 exists(":make") 3973< NOT working example: > 3974 exists(":make install") 3975 3976< Note that the argument must be a string, not the name of the 3977 variable itself. For example: > 3978 exists(bufcount) 3979< This doesn't check for existence of the "bufcount" variable, 3980 but gets the value of "bufcount", and checks if that exists. 3981 3982exp({expr}) *exp()* 3983 Return the exponential of {expr} as a |Float| in the range 3984 [0, inf]. 3985 {expr} must evaluate to a |Float| or a |Number|. 3986 Examples: > 3987 :echo exp(2) 3988< 7.389056 > 3989 :echo exp(-1) 3990< 0.367879 3991 {only available when compiled with the |+float| feature} 3992 3993 3994expand({expr} [, {nosuf} [, {list}]]) *expand()* 3995 Expand wildcards and the following special keywords in {expr}. 3996 'wildignorecase' applies. 3997 3998 If {list} is given and it is |TRUE|, a List will be returned. 3999 Otherwise the result is a String and when there are several 4000 matches, they are separated by <NL> characters. [Note: in 4001 version 5.0 a space was used, which caused problems when a 4002 file name contains a space] 4003 4004 If the expansion fails, the result is an empty string. A name 4005 for a non-existing file is not included, unless {expr} does 4006 not start with '%', '#' or '<', see below. 4007 4008 When {expr} starts with '%', '#' or '<', the expansion is done 4009 like for the |cmdline-special| variables with their associated 4010 modifiers. Here is a short overview: 4011 4012 % current file name 4013 # alternate file name 4014 #n alternate file name n 4015 <cfile> file name under the cursor 4016 <afile> autocmd file name 4017 <abuf> autocmd buffer number (as a String!) 4018 <amatch> autocmd matched name 4019 <sfile> sourced script file or function name 4020 <slnum> sourced script line number or function 4021 line number 4022 <sflnum> script file line number, also when in 4023 a function 4024 <cword> word under the cursor 4025 <cWORD> WORD under the cursor 4026 <client> the {clientid} of the last received 4027 message |server2client()| 4028 Modifiers: 4029 :p expand to full path 4030 :h head (last path component removed) 4031 :t tail (last path component only) 4032 :r root (one extension removed) 4033 :e extension only 4034 4035 Example: > 4036 :let &tags = expand("%:p:h") . "/tags" 4037< Note that when expanding a string that starts with '%', '#' or 4038 '<', any following text is ignored. This does NOT work: > 4039 :let doesntwork = expand("%:h.bak") 4040< Use this: > 4041 :let doeswork = expand("%:h") . ".bak" 4042< Also note that expanding "<cfile>" and others only returns the 4043 referenced file name without further expansion. If "<cfile>" 4044 is "~/.cshrc", you need to do another expand() to have the 4045 "~/" expanded into the path of the home directory: > 4046 :echo expand(expand("<cfile>")) 4047< 4048 There cannot be white space between the variables and the 4049 following modifier. The |fnamemodify()| function can be used 4050 to modify normal file names. 4051 4052 When using '%' or '#', and the current or alternate file name 4053 is not defined, an empty string is used. Using "%:p" in a 4054 buffer with no name, results in the current directory, with a 4055 '/' added. 4056 4057 When {expr} does not start with '%', '#' or '<', it is 4058 expanded like a file name is expanded on the command line. 4059 'suffixes' and 'wildignore' are used, unless the optional 4060 {nosuf} argument is given and it is |TRUE|. 4061 Names for non-existing files are included. The "**" item can 4062 be used to search in a directory tree. For example, to find 4063 all "README" files in the current directory and below: > 4064 :echo expand("**/README") 4065< 4066 expand() can also be used to expand variables and environment 4067 variables that are only known in a shell. But this can be 4068 slow, because a shell may be used to do the expansion. See 4069 |expr-env-expand|. 4070 The expanded variable is still handled like a list of file 4071 names. When an environment variable cannot be expanded, it is 4072 left unchanged. Thus ":echo expand('$FOOBAR')" results in 4073 "$FOOBAR". 4074 4075 See |glob()| for finding existing files. See |system()| for 4076 getting the raw output of an external command. 4077 4078extend({expr1}, {expr2} [, {expr3}]) *extend()* 4079 {expr1} and {expr2} must be both |Lists| or both 4080 |Dictionaries|. 4081 4082 If they are |Lists|: Append {expr2} to {expr1}. 4083 If {expr3} is given insert the items of {expr2} before item 4084 {expr3} in {expr1}. When {expr3} is zero insert before the 4085 first item. When {expr3} is equal to len({expr1}) then 4086 {expr2} is appended. 4087 Examples: > 4088 :echo sort(extend(mylist, [7, 5])) 4089 :call extend(mylist, [2, 3], 1) 4090< When {expr1} is the same List as {expr2} then the number of 4091 items copied is equal to the original length of the List. 4092 E.g., when {expr3} is 1 you get N new copies of the first item 4093 (where N is the original length of the List). 4094 Use |add()| to concatenate one item to a list. To concatenate 4095 two lists into a new list use the + operator: > 4096 :let newlist = [1, 2, 3] + [4, 5] 4097< 4098 If they are |Dictionaries|: 4099 Add all entries from {expr2} to {expr1}. 4100 If a key exists in both {expr1} and {expr2} then {expr3} is 4101 used to decide what to do: 4102 {expr3} = "keep": keep the value of {expr1} 4103 {expr3} = "force": use the value of {expr2} 4104 {expr3} = "error": give an error message *E737* 4105 When {expr3} is omitted then "force" is assumed. 4106 4107 {expr1} is changed when {expr2} is not empty. If necessary 4108 make a copy of {expr1} first. 4109 {expr2} remains unchanged. 4110 When {expr1} is locked and {expr2} is not empty the operation 4111 fails. 4112 Returns {expr1}. 4113 4114 4115feedkeys({string} [, {mode}]) *feedkeys()* 4116 Characters in {string} are queued for processing as if they 4117 come from a mapping or were typed by the user. 4118 4119 By default the string is added to the end of the typeahead 4120 buffer, thus if a mapping is still being executed the 4121 characters come after them. Use the 'i' flag to insert before 4122 other characters, they will be executed next, before any 4123 characters from a mapping. 4124 4125 The function does not wait for processing of keys contained in 4126 {string}. 4127 4128 To include special keys into {string}, use double-quotes 4129 and "\..." notation |expr-quote|. For example, 4130 feedkeys("\<CR>") simulates pressing of the <Enter> key. But 4131 feedkeys('\<CR>') pushes 5 characters. 4132 4133 {mode} is a String, which can contain these character flags: 4134 'm' Remap keys. This is default. If {mode} is absent, 4135 keys are remapped. 4136 'n' Do not remap keys. 4137 't' Handle keys as if typed; otherwise they are handled as 4138 if coming from a mapping. This matters for undo, 4139 opening folds, etc. 4140 'L' Lowlevel input. Only works for Unix or when using the 4141 GUI. Keys are used as if they were coming from the 4142 terminal. Other flags are not used. *E980* 4143 'i' Insert the string instead of appending (see above). 4144 'x' Execute commands until typeahead is empty. This is 4145 similar to using ":normal!". You can call feedkeys() 4146 several times without 'x' and then one time with 'x' 4147 (possibly with an empty {string}) to execute all the 4148 typeahead. Note that when Vim ends in Insert mode it 4149 will behave as if <Esc> is typed, to avoid getting 4150 stuck, waiting for a character to be typed before the 4151 script continues. 4152 Note that if you manage to call feedkeys() while 4153 executing commands, thus calling it recursively, then 4154 all typehead will be consumed by the last call. 4155 '!' When used with 'x' will not end Insert mode. Can be 4156 used in a test when a timer is set to exit Insert mode 4157 a little later. Useful for testing CursorHoldI. 4158 4159 Return value is always 0. 4160 4161filereadable({file}) *filereadable()* 4162 The result is a Number, which is |TRUE| when a file with the 4163 name {file} exists, and can be read. If {file} doesn't exist, 4164 or is a directory, the result is |FALSE|. {file} is any 4165 expression, which is used as a String. 4166 If you don't care about the file being readable you can use 4167 |glob()|. 4168 *file_readable()* 4169 Obsolete name: file_readable(). 4170 4171 4172filewritable({file}) *filewritable()* 4173 The result is a Number, which is 1 when a file with the 4174 name {file} exists, and can be written. If {file} doesn't 4175 exist, or is not writable, the result is 0. If {file} is a 4176 directory, and we can write to it, the result is 2. 4177 4178 4179filter({expr1}, {expr2}) *filter()* 4180 {expr1} must be a |List| or a |Dictionary|. 4181 For each item in {expr1} evaluate {expr2} and when the result 4182 is zero remove the item from the |List| or |Dictionary|. 4183 {expr2} must be a |string| or |Funcref|. 4184 4185 If {expr2} is a |string|, inside {expr2} |v:val| has the value 4186 of the current item. For a |Dictionary| |v:key| has the key 4187 of the current item and for a |List| |v:key| has the index of 4188 the current item. 4189 Examples: > 4190 call filter(mylist, 'v:val !~ "OLD"') 4191< Removes the items where "OLD" appears. > 4192 call filter(mydict, 'v:key >= 8') 4193< Removes the items with a key below 8. > 4194 call filter(var, 0) 4195< Removes all the items, thus clears the |List| or |Dictionary|. 4196 4197 Note that {expr2} is the result of expression and is then 4198 used as an expression again. Often it is good to use a 4199 |literal-string| to avoid having to double backslashes. 4200 4201 If {expr2} is a |Funcref| it must take two arguments: 4202 1. the key or the index of the current item. 4203 2. the value of the current item. 4204 The function must return |TRUE| if the item should be kept. 4205 Example that keeps the odd items of a list: > 4206 func Odd(idx, val) 4207 return a:idx % 2 == 1 4208 endfunc 4209 call filter(mylist, function('Odd')) 4210< It is shorter when using a |lambda|: > 4211 call filter(myList, {idx, val -> idx * val <= 42}) 4212< If you do not use "val" you can leave it out: > 4213 call filter(myList, {idx -> idx % 2 == 1}) 4214< 4215 The operation is done in-place. If you want a |List| or 4216 |Dictionary| to remain unmodified make a copy first: > 4217 :let l = filter(copy(mylist), 'v:val =~ "KEEP"') 4218 4219< Returns {expr1}, the |List| or |Dictionary| that was filtered. 4220 When an error is encountered while evaluating {expr2} no 4221 further items in {expr1} are processed. When {expr2} is a 4222 Funcref errors inside a function are ignored, unless it was 4223 defined with the "abort" flag. 4224 4225 4226finddir({name} [, {path} [, {count}]]) *finddir()* 4227 Find directory {name} in {path}. Supports both downwards and 4228 upwards recursive directory searches. See |file-searching| 4229 for the syntax of {path}. 4230 Returns the path of the first found match. When the found 4231 directory is below the current directory a relative path is 4232 returned. Otherwise a full path is returned. 4233 If {path} is omitted or empty then 'path' is used. 4234 If the optional {count} is given, find {count}'s occurrence of 4235 {name} in {path} instead of the first one. 4236 When {count} is negative return all the matches in a |List|. 4237 This is quite similar to the ex-command |:find|. 4238 {only available when compiled with the |+file_in_path| 4239 feature} 4240 4241findfile({name} [, {path} [, {count}]]) *findfile()* 4242 Just like |finddir()|, but find a file instead of a directory. 4243 Uses 'suffixesadd'. 4244 Example: > 4245 :echo findfile("tags.vim", ".;") 4246< Searches from the directory of the current file upwards until 4247 it finds the file "tags.vim". 4248 4249float2nr({expr}) *float2nr()* 4250 Convert {expr} to a Number by omitting the part after the 4251 decimal point. 4252 {expr} must evaluate to a |Float| or a Number. 4253 When the value of {expr} is out of range for a |Number| the 4254 result is truncated to 0x7fffffff or -0x7fffffff (or when 4255 64-bit Number support is enabled, 0x7fffffffffffffff or 4256 -0x7fffffffffffffff). NaN results in -0x80000000 (or when 4257 64-bit Number support is enabled, -0x8000000000000000). 4258 Examples: > 4259 echo float2nr(3.95) 4260< 3 > 4261 echo float2nr(-23.45) 4262< -23 > 4263 echo float2nr(1.0e100) 4264< 2147483647 (or 9223372036854775807) > 4265 echo float2nr(-1.0e150) 4266< -2147483647 (or -9223372036854775807) > 4267 echo float2nr(1.0e-100) 4268< 0 4269 {only available when compiled with the |+float| feature} 4270 4271 4272floor({expr}) *floor()* 4273 Return the largest integral value less than or equal to 4274 {expr} as a |Float| (round down). 4275 {expr} must evaluate to a |Float| or a |Number|. 4276 Examples: > 4277 echo floor(1.856) 4278< 1.0 > 4279 echo floor(-5.456) 4280< -6.0 > 4281 echo floor(4.0) 4282< 4.0 4283 {only available when compiled with the |+float| feature} 4284 4285 4286fmod({expr1}, {expr2}) *fmod()* 4287 Return the remainder of {expr1} / {expr2}, even if the 4288 division is not representable. Returns {expr1} - i * {expr2} 4289 for some integer i such that if {expr2} is non-zero, the 4290 result has the same sign as {expr1} and magnitude less than 4291 the magnitude of {expr2}. If {expr2} is zero, the value 4292 returned is zero. The value returned is a |Float|. 4293 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 4294 Examples: > 4295 :echo fmod(12.33, 1.22) 4296< 0.13 > 4297 :echo fmod(-12.33, 1.22) 4298< -0.13 4299 {only available when compiled with |+float| feature} 4300 4301 4302fnameescape({string}) *fnameescape()* 4303 Escape {string} for use as file name command argument. All 4304 characters that have a special meaning, such as '%' and '|' 4305 are escaped with a backslash. 4306 For most systems the characters escaped are 4307 " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash 4308 appears in a filename, it depends on the value of 'isfname'. 4309 A leading '+' and '>' is also escaped (special after |:edit| 4310 and |:write|). And a "-" by itself (special after |:cd|). 4311 Example: > 4312 :let fname = '+some str%nge|name' 4313 :exe "edit " . fnameescape(fname) 4314< results in executing: > 4315 edit \+some\ str\%nge\|name 4316 4317fnamemodify({fname}, {mods}) *fnamemodify()* 4318 Modify file name {fname} according to {mods}. {mods} is a 4319 string of characters like it is used for file names on the 4320 command line. See |filename-modifiers|. 4321 Example: > 4322 :echo fnamemodify("main.c", ":p:h") 4323< results in: > 4324 /home/mool/vim/vim/src 4325< Note: Environment variables don't work in {fname}, use 4326 |expand()| first then. 4327 4328foldclosed({lnum}) *foldclosed()* 4329 The result is a Number. If the line {lnum} is in a closed 4330 fold, the result is the number of the first line in that fold. 4331 If the line {lnum} is not in a closed fold, -1 is returned. 4332 4333foldclosedend({lnum}) *foldclosedend()* 4334 The result is a Number. If the line {lnum} is in a closed 4335 fold, the result is the number of the last line in that fold. 4336 If the line {lnum} is not in a closed fold, -1 is returned. 4337 4338foldlevel({lnum}) *foldlevel()* 4339 The result is a Number, which is the foldlevel of line {lnum} 4340 in the current buffer. For nested folds the deepest level is 4341 returned. If there is no fold at line {lnum}, zero is 4342 returned. It doesn't matter if the folds are open or closed. 4343 When used while updating folds (from 'foldexpr') -1 is 4344 returned for lines where folds are still to be updated and the 4345 foldlevel is unknown. As a special case the level of the 4346 previous line is usually available. 4347 4348 *foldtext()* 4349foldtext() Returns a String, to be displayed for a closed fold. This is 4350 the default function used for the 'foldtext' option and should 4351 only be called from evaluating 'foldtext'. It uses the 4352 |v:foldstart|, |v:foldend| and |v:folddashes| variables. 4353 The returned string looks like this: > 4354 +-- 45 lines: abcdef 4355< The number of leading dashes depends on the foldlevel. The 4356 "45" is the number of lines in the fold. "abcdef" is the text 4357 in the first non-blank line of the fold. Leading white space, 4358 "//" or "/*" and the text from the 'foldmarker' and 4359 'commentstring' options is removed. 4360 When used to draw the actual foldtext, the rest of the line 4361 will be filled with the fold char from the 'fillchars' 4362 setting. 4363 {not available when compiled without the |+folding| feature} 4364 4365foldtextresult({lnum}) *foldtextresult()* 4366 Returns the text that is displayed for the closed fold at line 4367 {lnum}. Evaluates 'foldtext' in the appropriate context. 4368 When there is no closed fold at {lnum} an empty string is 4369 returned. 4370 {lnum} is used like with |getline()|. Thus "." is the current 4371 line, "'m" mark m, etc. 4372 Useful when exporting folded text, e.g., to HTML. 4373 {not available when compiled without the |+folding| feature} 4374 4375 *foreground()* 4376foreground() Move the Vim window to the foreground. Useful when sent from 4377 a client to a Vim server. |remote_send()| 4378 On Win32 systems this might not work, the OS does not always 4379 allow a window to bring itself to the foreground. Use 4380 |remote_foreground()| instead. 4381 {only in the Win32, Athena, Motif and GTK GUI versions and the 4382 Win32 console version} 4383 4384 *funcref()* 4385funcref({name} [, {arglist}] [, {dict}]) 4386 Just like |function()|, but the returned Funcref will lookup 4387 the function by reference, not by name. This matters when the 4388 function {name} is redefined later. 4389 4390 Unlike |function()|, {name} must be an existing user function. 4391 Also for autoloaded functions. {name} cannot be a builtin 4392 function. 4393 4394 *function()* *E700* *E922* *E923* 4395function({name} [, {arglist}] [, {dict}]) 4396 Return a |Funcref| variable that refers to function {name}. 4397 {name} can be the name of a user defined function or an 4398 internal function. 4399 4400 {name} can also be a Funcref or a partial. When it is a 4401 partial the dict stored in it will be used and the {dict} 4402 argument is not allowed. E.g.: > 4403 let FuncWithArg = function(dict.Func, [arg]) 4404 let Broken = function(dict.Func, [arg], dict) 4405< 4406 When using the Funcref the function will be found by {name}, 4407 also when it was redefined later. Use |funcref()| to keep the 4408 same function. 4409 4410 When {arglist} or {dict} is present this creates a partial. 4411 That means the argument list and/or the dictionary is stored in 4412 the Funcref and will be used when the Funcref is called. 4413 4414 The arguments are passed to the function in front of other 4415 arguments. Example: > 4416 func Callback(arg1, arg2, name) 4417 ... 4418 let Func = function('Callback', ['one', 'two']) 4419 ... 4420 call Func('name') 4421< Invokes the function as with: > 4422 call Callback('one', 'two', 'name') 4423 4424< The function() call can be nested to add more arguments to the 4425 Funcref. The extra arguments are appended to the list of 4426 arguments. Example: > 4427 func Callback(arg1, arg2, name) 4428 ... 4429 let Func = function('Callback', ['one']) 4430 let Func2 = function(Func, ['two']) 4431 ... 4432 call Func2('name') 4433< Invokes the function as with: > 4434 call Callback('one', 'two', 'name') 4435 4436< The Dictionary is only useful when calling a "dict" function. 4437 In that case the {dict} is passed in as "self". Example: > 4438 function Callback() dict 4439 echo "called for " . self.name 4440 endfunction 4441 ... 4442 let context = {"name": "example"} 4443 let Func = function('Callback', context) 4444 ... 4445 call Func() " will echo: called for example 4446< The use of function() is not needed when there are no extra 4447 arguments, these two are equivalent: > 4448 let Func = function('Callback', context) 4449 let Func = context.Callback 4450 4451< The argument list and the Dictionary can be combined: > 4452 function Callback(arg1, count) dict 4453 ... 4454 let context = {"name": "example"} 4455 let Func = function('Callback', ['one'], context) 4456 ... 4457 call Func(500) 4458< Invokes the function as with: > 4459 call context.Callback('one', 500) 4460 4461 4462garbagecollect([{atexit}]) *garbagecollect()* 4463 Cleanup unused |Lists|, |Dictionaries|, |Channels| and |Jobs| 4464 that have circular references. 4465 4466 There is hardly ever a need to invoke this function, as it is 4467 automatically done when Vim runs out of memory or is waiting 4468 for the user to press a key after 'updatetime'. Items without 4469 circular references are always freed when they become unused. 4470 This is useful if you have deleted a very big |List| and/or 4471 |Dictionary| with circular references in a script that runs 4472 for a long time. 4473 4474 When the optional {atexit} argument is one, garbage 4475 collection will also be done when exiting Vim, if it wasn't 4476 done before. This is useful when checking for memory leaks. 4477 4478 The garbage collection is not done immediately but only when 4479 it's safe to perform. This is when waiting for the user to 4480 type a character. To force garbage collection immediately use 4481 |test_garbagecollect_now()|. 4482 4483get({list}, {idx} [, {default}]) *get()* 4484 Get item {idx} from |List| {list}. When this item is not 4485 available return {default}. Return zero when {default} is 4486 omitted. 4487get({blob}, {idx} [, {default}]) 4488 Get byte {idx} from |Blob| {blob}. When this byte is not 4489 available return {default}. Return -1 when {default} is 4490 omitted. 4491get({dict}, {key} [, {default}]) 4492 Get item with key {key} from |Dictionary| {dict}. When this 4493 item is not available return {default}. Return zero when 4494 {default} is omitted. 4495get({func}, {what}) 4496 Get an item with from Funcref {func}. Possible values for 4497 {what} are: 4498 "name" The function name 4499 "func" The function 4500 "dict" The dictionary 4501 "args" The list with arguments 4502 4503 *getbufinfo()* 4504getbufinfo([{expr}]) 4505getbufinfo([{dict}]) 4506 Get information about buffers as a List of Dictionaries. 4507 4508 Without an argument information about all the buffers is 4509 returned. 4510 4511 When the argument is a Dictionary only the buffers matching 4512 the specified criteria are returned. The following keys can 4513 be specified in {dict}: 4514 buflisted include only listed buffers. 4515 bufloaded include only loaded buffers. 4516 bufmodified include only modified buffers. 4517 4518 Otherwise, {expr} specifies a particular buffer to return 4519 information for. For the use of {expr}, see |bufname()| 4520 above. If the buffer is found the returned List has one item. 4521 Otherwise the result is an empty list. 4522 4523 Each returned List item is a dictionary with the following 4524 entries: 4525 bufnr buffer number. 4526 changed TRUE if the buffer is modified. 4527 changedtick number of changes made to the buffer. 4528 hidden TRUE if the buffer is hidden. 4529 listed TRUE if the buffer is listed. 4530 lnum current line number in buffer. 4531 loaded TRUE if the buffer is loaded. 4532 name full path to the file in the buffer. 4533 signs list of signs placed in the buffer. 4534 Each list item is a dictionary with 4535 the following fields: 4536 id sign identifier 4537 lnum line number 4538 name sign name 4539 variables a reference to the dictionary with 4540 buffer-local variables. 4541 windows list of |window-ID|s that display this 4542 buffer 4543 4544 Examples: > 4545 for buf in getbufinfo() 4546 echo buf.name 4547 endfor 4548 for buf in getbufinfo({'buflisted':1}) 4549 if buf.changed 4550 .... 4551 endif 4552 endfor 4553< 4554 To get buffer-local options use: > 4555 getbufvar({bufnr}, '&option_name') 4556 4557< 4558 *getbufline()* 4559getbufline({expr}, {lnum} [, {end}]) 4560 Return a |List| with the lines starting from {lnum} to {end} 4561 (inclusive) in the buffer {expr}. If {end} is omitted, a 4562 |List| with only the line {lnum} is returned. 4563 4564 For the use of {expr}, see |bufname()| above. 4565 4566 For {lnum} and {end} "$" can be used for the last line of the 4567 buffer. Otherwise a number must be used. 4568 4569 When {lnum} is smaller than 1 or bigger than the number of 4570 lines in the buffer, an empty |List| is returned. 4571 4572 When {end} is greater than the number of lines in the buffer, 4573 it is treated as {end} is set to the number of lines in the 4574 buffer. When {end} is before {lnum} an empty |List| is 4575 returned. 4576 4577 This function works only for loaded buffers. For unloaded and 4578 non-existing buffers, an empty |List| is returned. 4579 4580 Example: > 4581 :let lines = getbufline(bufnr("myfile"), 1, "$") 4582 4583getbufvar({expr}, {varname} [, {def}]) *getbufvar()* 4584 The result is the value of option or local buffer variable 4585 {varname} in buffer {expr}. Note that the name without "b:" 4586 must be used. 4587 When {varname} is empty returns a dictionary with all the 4588 buffer-local variables. 4589 When {varname} is equal to "&" returns a dictionary with all 4590 the buffer-local options. 4591 Otherwise, when {varname} starts with "&" returns the value of 4592 a buffer-local option. 4593 This also works for a global or buffer-local option, but it 4594 doesn't work for a global variable, window-local variable or 4595 window-local option. 4596 For the use of {expr}, see |bufname()| above. 4597 When the buffer or variable doesn't exist {def} or an empty 4598 string is returned, there is no error message. 4599 Examples: > 4600 :let bufmodified = getbufvar(1, "&mod") 4601 :echo "todo myvar = " . getbufvar("todo", "myvar") 4602< 4603getchangelist({expr}) *getchangelist()* 4604 Returns the |changelist| for the buffer {expr}. For the use 4605 of {expr}, see |bufname()| above. If buffer {expr} doesn't 4606 exist, an empty list is returned. 4607 4608 The returned list contains two entries: a list with the change 4609 locations and the current position in the list. Each 4610 entry in the change list is a dictionary with the following 4611 entries: 4612 col column number 4613 coladd column offset for 'virtualedit' 4614 lnum line number 4615 If buffer {expr} is the current buffer, then the current 4616 position refers to the position in the list. For other 4617 buffers, it is set to the length of the list. 4618 4619getchar([expr]) *getchar()* 4620 Get a single character from the user or input stream. 4621 If [expr] is omitted, wait until a character is available. 4622 If [expr] is 0, only get a character when one is available. 4623 Return zero otherwise. 4624 If [expr] is 1, only check if a character is available, it is 4625 not consumed. Return zero if no character available. 4626 4627 Without [expr] and when [expr] is 0 a whole character or 4628 special key is returned. If it is a single character, the 4629 result is a number. Use nr2char() to convert it to a String. 4630 Otherwise a String is returned with the encoded character. 4631 For a special key it's a String with a sequence of bytes 4632 starting with 0x80 (decimal: 128). This is the same value as 4633 the String "\<Key>", e.g., "\<Left>". The returned value is 4634 also a String when a modifier (shift, control, alt) was used 4635 that is not included in the character. 4636 4637 When [expr] is 0 and Esc is typed, there will be a short delay 4638 while Vim waits to see if this is the start of an escape 4639 sequence. 4640 4641 When [expr] is 1 only the first byte is returned. For a 4642 one-byte character it is the character itself as a number. 4643 Use nr2char() to convert it to a String. 4644 4645 Use getcharmod() to obtain any additional modifiers. 4646 4647 When the user clicks a mouse button, the mouse event will be 4648 returned. The position can then be found in |v:mouse_col|, 4649 |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|. This 4650 example positions the mouse as it would normally happen: > 4651 let c = getchar() 4652 if c == "\<LeftMouse>" && v:mouse_win > 0 4653 exe v:mouse_win . "wincmd w" 4654 exe v:mouse_lnum 4655 exe "normal " . v:mouse_col . "|" 4656 endif 4657< 4658 When using bracketed paste only the first character is 4659 returned, the rest of the pasted text is dropped. 4660 |xterm-bracketed-paste|. 4661 4662 There is no prompt, you will somehow have to make clear to the 4663 user that a character has to be typed. 4664 There is no mapping for the character. 4665 Key codes are replaced, thus when the user presses the <Del> 4666 key you get the code for the <Del> key, not the raw character 4667 sequence. Examples: > 4668 getchar() == "\<Del>" 4669 getchar() == "\<S-Left>" 4670< This example redefines "f" to ignore case: > 4671 :nmap f :call FindChar()<CR> 4672 :function FindChar() 4673 : let c = nr2char(getchar()) 4674 : while col('.') < col('$') - 1 4675 : normal l 4676 : if getline('.')[col('.') - 1] ==? c 4677 : break 4678 : endif 4679 : endwhile 4680 :endfunction 4681< 4682 You may also receive synthetic characters, such as 4683 |<CursorHold>|. Often you will want to ignore this and get 4684 another character: > 4685 :function GetKey() 4686 : let c = getchar() 4687 : while c == "\<CursorHold>" 4688 : let c = getchar() 4689 : endwhile 4690 : return c 4691 :endfunction 4692 4693getcharmod() *getcharmod()* 4694 The result is a Number which is the state of the modifiers for 4695 the last obtained character with getchar() or in another way. 4696 These values are added together: 4697 2 shift 4698 4 control 4699 8 alt (meta) 4700 16 meta (when it's different from ALT) 4701 32 mouse double click 4702 64 mouse triple click 4703 96 mouse quadruple click (== 32 + 64) 4704 128 command (Macintosh only) 4705 Only the modifiers that have not been included in the 4706 character itself are obtained. Thus Shift-a results in "A" 4707 without a modifier. 4708 4709getcharsearch() *getcharsearch()* 4710 Return the current character search information as a {dict} 4711 with the following entries: 4712 4713 char character previously used for a character 4714 search (|t|, |f|, |T|, or |F|); empty string 4715 if no character search has been performed 4716 forward direction of character search; 1 for forward, 4717 0 for backward 4718 until type of character search; 1 for a |t| or |T| 4719 character search, 0 for an |f| or |F| 4720 character search 4721 4722 This can be useful to always have |;| and |,| search 4723 forward/backward regardless of the direction of the previous 4724 character search: > 4725 :nnoremap <expr> ; getcharsearch().forward ? ';' : ',' 4726 :nnoremap <expr> , getcharsearch().forward ? ',' : ';' 4727< Also see |setcharsearch()|. 4728 4729getcmdline() *getcmdline()* 4730 Return the current command-line. Only works when the command 4731 line is being edited, thus requires use of |c_CTRL-\_e| or 4732 |c_CTRL-R_=|. 4733 Example: > 4734 :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR> 4735< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|. 4736 Returns an empty string when entering a password or using 4737 |inputsecret()|. 4738 4739getcmdpos() *getcmdpos()* 4740 Return the position of the cursor in the command line as a 4741 byte count. The first column is 1. 4742 Only works when editing the command line, thus requires use of 4743 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 4744 Returns 0 otherwise. 4745 Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|. 4746 4747getcmdtype() *getcmdtype()* 4748 Return the current command-line type. Possible return values 4749 are: 4750 : normal Ex command 4751 > debug mode command |debug-mode| 4752 / forward search command 4753 ? backward search command 4754 @ |input()| command 4755 - |:insert| or |:append| command 4756 = |i_CTRL-R_=| 4757 Only works when editing the command line, thus requires use of 4758 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 4759 Returns an empty string otherwise. 4760 Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|. 4761 4762getcmdwintype() *getcmdwintype()* 4763 Return the current |command-line-window| type. Possible return 4764 values are the same as |getcmdtype()|. Returns an empty string 4765 when not in the command-line window. 4766 4767getcompletion({pat}, {type} [, {filtered}]) *getcompletion()* 4768 Return a list of command-line completion matches. {type} 4769 specifies what for. The following completion types are 4770 supported: 4771 4772 arglist file names in argument list 4773 augroup autocmd groups 4774 buffer buffer names 4775 behave :behave suboptions 4776 color color schemes 4777 command Ex command (and arguments) 4778 compiler compilers 4779 cscope |:cscope| suboptions 4780 dir directory names 4781 environment environment variable names 4782 event autocommand events 4783 expression Vim expression 4784 file file and directory names 4785 file_in_path file and directory names in |'path'| 4786 filetype filetype names |'filetype'| 4787 function function name 4788 help help subjects 4789 highlight highlight groups 4790 history :history suboptions 4791 locale locale names (as output of locale -a) 4792 mapclear buffer argument 4793 mapping mapping name 4794 menu menus 4795 messages |:messages| suboptions 4796 option options 4797 packadd optional package |pack-add| names 4798 shellcmd Shell command 4799 sign |:sign| suboptions 4800 syntax syntax file names |'syntax'| 4801 syntime |:syntime| suboptions 4802 tag tags 4803 tag_listfiles tags, file names 4804 user user names 4805 var user variables 4806 4807 If {pat} is an empty string, then all the matches are returned. 4808 Otherwise only items matching {pat} are returned. See 4809 |wildcards| for the use of special characters in {pat}. 4810 4811 If the optional {filtered} flag is set to 1, then 'wildignore' 4812 is applied to filter the results. Otherwise all the matches 4813 are returned. The 'wildignorecase' option always applies. 4814 4815 If there are no matches, an empty list is returned. An 4816 invalid value for {type} produces an error. 4817 4818 *getcurpos()* 4819getcurpos() Get the position of the cursor. This is like getpos('.'), but 4820 includes an extra item in the list: 4821 [bufnum, lnum, col, off, curswant] ~ 4822 The "curswant" number is the preferred column when moving the 4823 cursor vertically. Also see |getpos()|. 4824 4825 This can be used to save and restore the cursor position: > 4826 let save_cursor = getcurpos() 4827 MoveTheCursorAround 4828 call setpos('.', save_cursor) 4829< Note that this only works within the window. See 4830 |winrestview()| for restoring more state. 4831 *getcwd()* 4832getcwd([{winnr} [, {tabnr}]]) 4833 The result is a String, which is the name of the current 4834 working directory. 4835 4836 With {winnr} return the local current directory of this window 4837 in the current tab page. {winnr} can be the window number or 4838 the |window-ID|. 4839 If {winnr} is -1 return the name of the global working 4840 directory. See also |haslocaldir()|. 4841 4842 With {winnr} and {tabnr} return the local current directory of 4843 the window in the specified tab page. 4844 Return an empty string if the arguments are invalid. 4845 4846getfsize({fname}) *getfsize()* 4847 The result is a Number, which is the size in bytes of the 4848 given file {fname}. 4849 If {fname} is a directory, 0 is returned. 4850 If the file {fname} can't be found, -1 is returned. 4851 If the size of {fname} is too big to fit in a Number then -2 4852 is returned. 4853 4854getfontname([{name}]) *getfontname()* 4855 Without an argument returns the name of the normal font being 4856 used. Like what is used for the Normal highlight group 4857 |hl-Normal|. 4858 With an argument a check is done whether {name} is a valid 4859 font name. If not then an empty string is returned. 4860 Otherwise the actual font name is returned, or {name} if the 4861 GUI does not support obtaining the real name. 4862 Only works when the GUI is running, thus not in your vimrc or 4863 gvimrc file. Use the |GUIEnter| autocommand to use this 4864 function just after the GUI has started. 4865 Note that the GTK GUI accepts any font name, thus checking for 4866 a valid name does not work. 4867 4868getfperm({fname}) *getfperm()* 4869 The result is a String, which is the read, write, and execute 4870 permissions of the given file {fname}. 4871 If {fname} does not exist or its directory cannot be read, an 4872 empty string is returned. 4873 The result is of the form "rwxrwxrwx", where each group of 4874 "rwx" flags represent, in turn, the permissions of the owner 4875 of the file, the group the file belongs to, and other users. 4876 If a user does not have a given permission the flag for this 4877 is replaced with the string "-". Examples: > 4878 :echo getfperm("/etc/passwd") 4879 :echo getfperm(expand("~/.vimrc")) 4880< This will hopefully (from a security point of view) display 4881 the string "rw-r--r--" or even "rw-------". 4882 4883 For setting permissions use |setfperm()|. 4884 4885getftime({fname}) *getftime()* 4886 The result is a Number, which is the last modification time of 4887 the given file {fname}. The value is measured as seconds 4888 since 1st Jan 1970, and may be passed to strftime(). See also 4889 |localtime()| and |strftime()|. 4890 If the file {fname} can't be found -1 is returned. 4891 4892getftype({fname}) *getftype()* 4893 The result is a String, which is a description of the kind of 4894 file of the given file {fname}. 4895 If {fname} does not exist an empty string is returned. 4896 Here is a table over different kinds of files and their 4897 results: 4898 Normal file "file" 4899 Directory "dir" 4900 Symbolic link "link" 4901 Block device "bdev" 4902 Character device "cdev" 4903 Socket "socket" 4904 FIFO "fifo" 4905 All other "other" 4906 Example: > 4907 getftype("/home") 4908< Note that a type such as "link" will only be returned on 4909 systems that support it. On some systems only "dir" and 4910 "file" are returned. On MS-Windows a symbolic link to a 4911 directory returns "dir" instead of "link". 4912 4913getjumplist([{winnr} [, {tabnr}]]) *getjumplist()* 4914 Returns the |jumplist| for the specified window. 4915 4916 Without arguments use the current window. 4917 With {winnr} only use this window in the current tab page. 4918 {winnr} can also be a |window-ID|. 4919 With {winnr} and {tabnr} use the window in the specified tab 4920 page. 4921 4922 The returned list contains two entries: a list with the jump 4923 locations and the last used jump position number in the list. 4924 Each entry in the jump location list is a dictionary with 4925 the following entries: 4926 bufnr buffer number 4927 col column number 4928 coladd column offset for 'virtualedit' 4929 filename filename if available 4930 lnum line number 4931 4932 *getline()* 4933getline({lnum} [, {end}]) 4934 Without {end} the result is a String, which is line {lnum} 4935 from the current buffer. Example: > 4936 getline(1) 4937< When {lnum} is a String that doesn't start with a 4938 digit, |line()| is called to translate the String into a Number. 4939 To get the line under the cursor: > 4940 getline(".") 4941< When {lnum} is smaller than 1 or bigger than the number of 4942 lines in the buffer, an empty string is returned. 4943 4944 When {end} is given the result is a |List| where each item is 4945 a line from the current buffer in the range {lnum} to {end}, 4946 including line {end}. 4947 {end} is used in the same way as {lnum}. 4948 Non-existing lines are silently omitted. 4949 When {end} is before {lnum} an empty |List| is returned. 4950 Example: > 4951 :let start = line('.') 4952 :let end = search("^$") - 1 4953 :let lines = getline(start, end) 4954 4955< To get lines from another buffer see |getbufline()| 4956 4957getloclist({nr} [, {what}]) *getloclist()* 4958 Returns a list with all the entries in the location list for 4959 window {nr}. {nr} can be the window number or the |window-ID|. 4960 When {nr} is zero the current window is used. 4961 4962 For a location list window, the displayed location list is 4963 returned. For an invalid window number {nr}, an empty list is 4964 returned. Otherwise, same as |getqflist()|. 4965 4966 If the optional {what} dictionary argument is supplied, then 4967 returns the items listed in {what} as a dictionary. Refer to 4968 |getqflist()| for the supported items in {what}. 4969 4970 In addition to the items supported by |getqflist()| in {what}, 4971 the following item is supported by |getloclist()|: 4972 4973 filewinid id of the window used to display files 4974 from the location list. This field is 4975 applicable only when called from a 4976 location list window. See 4977 |location-list-file-window| for more 4978 details. 4979 4980getmatches() *getmatches()* 4981 Returns a |List| with all matches previously defined by 4982 |matchadd()| and the |:match| commands. |getmatches()| is 4983 useful in combination with |setmatches()|, as |setmatches()| 4984 can restore a list of matches saved by |getmatches()|. 4985 Example: > 4986 :echo getmatches() 4987< [{'group': 'MyGroup1', 'pattern': 'TODO', 4988 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 4989 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 4990 :let m = getmatches() 4991 :call clearmatches() 4992 :echo getmatches() 4993< [] > 4994 :call setmatches(m) 4995 :echo getmatches() 4996< [{'group': 'MyGroup1', 'pattern': 'TODO', 4997 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 4998 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 4999 :unlet m 5000< 5001 *getpid()* 5002getpid() Return a Number which is the process ID of the Vim process. 5003 On Unix and MS-Windows this is a unique number, until Vim 5004 exits. On MS-DOS it's always zero. 5005 5006 *getpos()* 5007getpos({expr}) Get the position for {expr}. For possible values of {expr} 5008 see |line()|. For getting the cursor position see 5009 |getcurpos()|. 5010 The result is a |List| with four numbers: 5011 [bufnum, lnum, col, off] 5012 "bufnum" is zero, unless a mark like '0 or 'A is used, then it 5013 is the buffer number of the mark. 5014 "lnum" and "col" are the position in the buffer. The first 5015 column is 1. 5016 The "off" number is zero, unless 'virtualedit' is used. Then 5017 it is the offset in screen columns from the start of the 5018 character. E.g., a position within a <Tab> or after the last 5019 character. 5020 Note that for '< and '> Visual mode matters: when it is "V" 5021 (visual line mode) the column of '< is zero and the column of 5022 '> is a large number. 5023 This can be used to save and restore the position of a mark: > 5024 let save_a_mark = getpos("'a") 5025 ... 5026 call setpos("'a", save_a_mark) 5027< Also see |getcurpos()| and |setpos()|. 5028 5029 5030getqflist([{what}]) *getqflist()* 5031 Returns a list with all the current quickfix errors. Each 5032 list item is a dictionary with these entries: 5033 bufnr number of buffer that has the file name, use 5034 bufname() to get the name 5035 module module name 5036 lnum line number in the buffer (first line is 1) 5037 col column number (first column is 1) 5038 vcol |TRUE|: "col" is visual column 5039 |FALSE|: "col" is byte index 5040 nr error number 5041 pattern search pattern used to locate the error 5042 text description of the error 5043 type type of the error, 'E', '1', etc. 5044 valid |TRUE|: recognized error message 5045 5046 When there is no error list or it's empty, an empty list is 5047 returned. Quickfix list entries with non-existing buffer 5048 number are returned with "bufnr" set to zero. 5049 5050 Useful application: Find pattern matches in multiple files and 5051 do something with them: > 5052 :vimgrep /theword/jg *.c 5053 :for d in getqflist() 5054 : echo bufname(d.bufnr) ':' d.lnum '=' d.text 5055 :endfor 5056< 5057 If the optional {what} dictionary argument is supplied, then 5058 returns only the items listed in {what} as a dictionary. The 5059 following string items are supported in {what}: 5060 changedtick get the total number of changes made 5061 to the list |quickfix-changedtick| 5062 context get the |quickfix-context| 5063 efm errorformat to use when parsing "lines". If 5064 not present, then the 'errorformat' option 5065 value is used. 5066 id get information for the quickfix list with 5067 |quickfix-ID|; zero means the id for the 5068 current list or the list specified by "nr" 5069 idx index of the current entry in the quickfix 5070 list specified by 'id' or 'nr'. 5071 See |quickfix-index| 5072 items quickfix list entries 5073 lines parse a list of lines using 'efm' and return 5074 the resulting entries. Only a |List| type is 5075 accepted. The current quickfix list is not 5076 modified. See |quickfix-parse|. 5077 nr get information for this quickfix list; zero 5078 means the current quickfix list and "$" means 5079 the last quickfix list 5080 qfbufnr number of the buffer displayed in the quickfix 5081 window. Returns 0 if the quickfix buffer is 5082 not present. See |quickfix-buffer|. 5083 size number of entries in the quickfix list 5084 title get the list title |quickfix-title| 5085 winid get the quickfix |window-ID| 5086 all all of the above quickfix properties 5087 Non-string items in {what} are ignored. To get the value of a 5088 particular item, set it to zero. 5089 If "nr" is not present then the current quickfix list is used. 5090 If both "nr" and a non-zero "id" are specified, then the list 5091 specified by "id" is used. 5092 To get the number of lists in the quickfix stack, set "nr" to 5093 "$" in {what}. The "nr" value in the returned dictionary 5094 contains the quickfix stack size. 5095 When "lines" is specified, all the other items except "efm" 5096 are ignored. The returned dictionary contains the entry 5097 "items" with the list of entries. 5098 5099 The returned dictionary contains the following entries: 5100 changedtick total number of changes made to the 5101 list |quickfix-changedtick| 5102 context quickfix list context. See |quickfix-context| 5103 If not present, set to "". 5104 id quickfix list ID |quickfix-ID|. If not 5105 present, set to 0. 5106 idx index of the current entry in the list. If not 5107 present, set to 0. 5108 items quickfix list entries. If not present, set to 5109 an empty list. 5110 nr quickfix list number. If not present, set to 0 5111 qfbufnr number of the buffer displayed in the quickfix 5112 window. If not present, set to 0. 5113 size number of entries in the quickfix list. If not 5114 present, set to 0. 5115 title quickfix list title text. If not present, set 5116 to "". 5117 winid quickfix |window-ID|. If not present, set to 0 5118 5119 Examples (See also |getqflist-examples|): > 5120 :echo getqflist({'all': 1}) 5121 :echo getqflist({'nr': 2, 'title': 1}) 5122 :echo getqflist({'lines' : ["F1:10:L10"]}) 5123< 5124getreg([{regname} [, 1 [, {list}]]]) *getreg()* 5125 The result is a String, which is the contents of register 5126 {regname}. Example: > 5127 :let cliptext = getreg('*') 5128< When {regname} was not set the result is an empty string. 5129 5130 getreg('=') returns the last evaluated value of the expression 5131 register. (For use in maps.) 5132 getreg('=', 1) returns the expression itself, so that it can 5133 be restored with |setreg()|. For other registers the extra 5134 argument is ignored, thus you can always give it. 5135 5136 If {list} is present and |TRUE|, the result type is changed 5137 to |List|. Each list item is one text line. Use it if you care 5138 about zero bytes possibly present inside register: without 5139 third argument both NLs and zero bytes are represented as NLs 5140 (see |NL-used-for-Nul|). 5141 When the register was not set an empty list is returned. 5142 5143 If {regname} is not specified, |v:register| is used. 5144 5145 5146getregtype([{regname}]) *getregtype()* 5147 The result is a String, which is type of register {regname}. 5148 The value will be one of: 5149 "v" for |characterwise| text 5150 "V" for |linewise| text 5151 "<CTRL-V>{width}" for |blockwise-visual| text 5152 "" for an empty or unknown register 5153 <CTRL-V> is one character with value 0x16. 5154 If {regname} is not specified, |v:register| is used. 5155 5156gettabinfo([{arg}]) *gettabinfo()* 5157 If {arg} is not specified, then information about all the tab 5158 pages is returned as a List. Each List item is a Dictionary. 5159 Otherwise, {arg} specifies the tab page number and information 5160 about that one is returned. If the tab page does not exist an 5161 empty List is returned. 5162 5163 Each List item is a Dictionary with the following entries: 5164 tabnr tab page number. 5165 variables a reference to the dictionary with 5166 tabpage-local variables 5167 windows List of |window-ID|s in the tab page. 5168 5169gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()* 5170 Get the value of a tab-local variable {varname} in tab page 5171 {tabnr}. |t:var| 5172 Tabs are numbered starting with one. 5173 When {varname} is empty a dictionary with all tab-local 5174 variables is returned. 5175 Note that the name without "t:" must be used. 5176 When the tab or variable doesn't exist {def} or an empty 5177 string is returned, there is no error message. 5178 5179gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()* 5180 Get the value of window-local variable {varname} in window 5181 {winnr} in tab page {tabnr}. 5182 When {varname} is empty a dictionary with all window-local 5183 variables is returned. 5184 When {varname} is equal to "&" get the values of all 5185 window-local options in a Dictionary. 5186 Otherwise, when {varname} starts with "&" get the value of a 5187 window-local option. 5188 Note that {varname} must be the name without "w:". 5189 Tabs are numbered starting with one. For the current tabpage 5190 use |getwinvar()|. 5191 {winnr} can be the window number or the |window-ID|. 5192 When {winnr} is zero the current window is used. 5193 This also works for a global option, buffer-local option and 5194 window-local option, but it doesn't work for a global variable 5195 or buffer-local variable. 5196 When the tab, window or variable doesn't exist {def} or an 5197 empty string is returned, there is no error message. 5198 Examples: > 5199 :let list_is_on = gettabwinvar(1, 2, '&list') 5200 :echo "myvar = " . gettabwinvar(3, 1, 'myvar') 5201< 5202 To obtain all window-local variables use: > 5203 gettabwinvar({tabnr}, {winnr}, '&') 5204 5205gettagstack([{nr}]) *gettagstack()* 5206 The result is a Dict, which is the tag stack of window {nr}. 5207 {nr} can be the window number or the |window-ID|. 5208 When {nr} is not specified, the current window is used. 5209 When window {nr} doesn't exist, an empty Dict is returned. 5210 5211 The returned dictionary contains the following entries: 5212 curidx Current index in the stack. When at 5213 top of the stack, set to (length + 1). 5214 Index of bottom of the stack is 1. 5215 items List of items in the stack. Each item 5216 is a dictionary containing the 5217 entries described below. 5218 length Number of entries in the stack. 5219 5220 Each item in the stack is a dictionary with the following 5221 entries: 5222 bufnr buffer number of the current jump 5223 from cursor position before the tag jump. 5224 See |getpos()| for the format of the 5225 returned list. 5226 matchnr current matching tag number. Used when 5227 multiple matching tags are found for a 5228 name. 5229 tagname name of the tag 5230 5231 See |tagstack| for more information about the tag stack. 5232 5233getwininfo([{winid}]) *getwininfo()* 5234 Returns information about windows as a List with Dictionaries. 5235 5236 If {winid} is given Information about the window with that ID 5237 is returned. If the window does not exist the result is an 5238 empty list. 5239 5240 Without {winid} information about all the windows in all the 5241 tab pages is returned. 5242 5243 Each List item is a Dictionary with the following entries: 5244 botline last displayed buffer line 5245 bufnr number of buffer in the window 5246 height window height (excluding winbar) 5247 loclist 1 if showing a location list 5248 {only with the +quickfix feature} 5249 quickfix 1 if quickfix or location list window 5250 {only with the +quickfix feature} 5251 terminal 1 if a terminal window 5252 {only with the +terminal feature} 5253 tabnr tab page number 5254 topline first displayed buffer line 5255 variables a reference to the dictionary with 5256 window-local variables 5257 width window width 5258 winbar 1 if the window has a toolbar, 0 5259 otherwise 5260 wincol leftmost screen column of the window, 5261 col from |win_screenpos()| 5262 winid |window-ID| 5263 winnr window number 5264 winrow topmost screen column of the window, 5265 row from |win_screenpos()| 5266 5267getwinpos([{timeout}]) *getwinpos()* 5268 The result is a list with two numbers, the result of 5269 getwinposx() and getwinposy() combined: 5270 [x-pos, y-pos] 5271 {timeout} can be used to specify how long to wait in msec for 5272 a response from the terminal. When omitted 100 msec is used. 5273 Use a longer time for a remote terminal. 5274 When using a value less than 10 and no response is received 5275 within that time, a previously reported position is returned, 5276 if available. This can be used to poll for the position and 5277 do some work in the meantime: > 5278 while 1 5279 let res = getwinpos(1) 5280 if res[0] >= 0 5281 break 5282 endif 5283 " Do some work here 5284 endwhile 5285< 5286 *getwinposx()* 5287getwinposx() The result is a Number, which is the X coordinate in pixels of 5288 the left hand side of the GUI Vim window. Also works for an 5289 xterm (uses a timeout of 100 msec). 5290 The result will be -1 if the information is not available. 5291 The value can be used with `:winpos`. 5292 5293 *getwinposy()* 5294getwinposy() The result is a Number, which is the Y coordinate in pixels of 5295 the top of the GUI Vim window. Also works for an xterm (uses 5296 a timeout of 100 msec). 5297 The result will be -1 if the information is not available. 5298 The value can be used with `:winpos`. 5299 5300getwinvar({winnr}, {varname} [, {def}]) *getwinvar()* 5301 Like |gettabwinvar()| for the current tabpage. 5302 Examples: > 5303 :let list_is_on = getwinvar(2, '&list') 5304 :echo "myvar = " . getwinvar(1, 'myvar') 5305< 5306glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()* 5307 Expand the file wildcards in {expr}. See |wildcards| for the 5308 use of special characters. 5309 5310 Unless the optional {nosuf} argument is given and is |TRUE|, 5311 the 'suffixes' and 'wildignore' options apply: Names matching 5312 one of the patterns in 'wildignore' will be skipped and 5313 'suffixes' affect the ordering of matches. 5314 'wildignorecase' always applies. 5315 5316 When {list} is present and it is |TRUE| the result is a List 5317 with all matching files. The advantage of using a List is, 5318 you also get filenames containing newlines correctly. 5319 Otherwise the result is a String and when there are several 5320 matches, they are separated by <NL> characters. 5321 5322 If the expansion fails, the result is an empty String or List. 5323 5324 A name for a non-existing file is not included. A symbolic 5325 link is only included if it points to an existing file. 5326 However, when the {alllinks} argument is present and it is 5327 |TRUE| then all symbolic links are included. 5328 5329 For most systems backticks can be used to get files names from 5330 any external command. Example: > 5331 :let tagfiles = glob("`find . -name tags -print`") 5332 :let &tags = substitute(tagfiles, "\n", ",", "g") 5333< The result of the program inside the backticks should be one 5334 item per line. Spaces inside an item are allowed. 5335 5336 See |expand()| for expanding special Vim variables. See 5337 |system()| for getting the raw output of an external command. 5338 5339glob2regpat({expr}) *glob2regpat()* 5340 Convert a file pattern, as used by glob(), into a search 5341 pattern. The result can be used to match with a string that 5342 is a file name. E.g. > 5343 if filename =~ glob2regpat('Make*.mak') 5344< This is equivalent to: > 5345 if filename =~ '^Make.*\.mak$' 5346< When {expr} is an empty string the result is "^$", match an 5347 empty string. 5348 Note that the result depends on the system. On MS-Windows 5349 a backslash usually means a path separator. 5350 5351 *globpath()* 5352globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 5353 Perform glob() on all directories in {path} and concatenate 5354 the results. Example: > 5355 :echo globpath(&rtp, "syntax/c.vim") 5356< 5357 {path} is a comma-separated list of directory names. Each 5358 directory name is prepended to {expr} and expanded like with 5359 |glob()|. A path separator is inserted when needed. 5360 To add a comma inside a directory name escape it with a 5361 backslash. Note that on MS-Windows a directory may have a 5362 trailing backslash, remove it if you put a comma after it. 5363 If the expansion fails for one of the directories, there is no 5364 error message. 5365 5366 Unless the optional {nosuf} argument is given and is |TRUE|, 5367 the 'suffixes' and 'wildignore' options apply: Names matching 5368 one of the patterns in 'wildignore' will be skipped and 5369 'suffixes' affect the ordering of matches. 5370 5371 When {list} is present and it is |TRUE| the result is a List 5372 with all matching files. The advantage of using a List is, you 5373 also get filenames containing newlines correctly. Otherwise 5374 the result is a String and when there are several matches, 5375 they are separated by <NL> characters. Example: > 5376 :echo globpath(&rtp, "syntax/c.vim", 0, 1) 5377< 5378 {alllinks} is used as with |glob()|. 5379 5380 The "**" item can be used to search in a directory tree. 5381 For example, to find all "README.txt" files in the directories 5382 in 'runtimepath' and below: > 5383 :echo globpath(&rtp, "**/README.txt") 5384< Upwards search and limiting the depth of "**" is not 5385 supported, thus using 'path' will not always work properly. 5386 5387 *has()* 5388has({feature}) The result is a Number, which is 1 if the feature {feature} is 5389 supported, zero otherwise. The {feature} argument is a 5390 string. See |feature-list| below. 5391 Also see |exists()|. 5392 5393 5394has_key({dict}, {key}) *has_key()* 5395 The result is a Number, which is 1 if |Dictionary| {dict} has 5396 an entry with key {key}. Zero otherwise. 5397 5398haslocaldir([{winnr} [, {tabnr}]]) *haslocaldir()* 5399 The result is a Number, which is 1 when the window has set a 5400 local path via |:lcd|, and 0 otherwise. 5401 5402 Without arguments use the current window. 5403 With {winnr} use this window in the current tab page. 5404 With {winnr} and {tabnr} use the window in the specified tab 5405 page. 5406 {winnr} can be the window number or the |window-ID|. 5407 Return 0 if the arguments are invalid. 5408 5409hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()* 5410 The result is a Number, which is 1 if there is a mapping that 5411 contains {what} in somewhere in the rhs (what it is mapped to) 5412 and this mapping exists in one of the modes indicated by 5413 {mode}. 5414 When {abbr} is there and it is |TRUE| use abbreviations 5415 instead of mappings. Don't forget to specify Insert and/or 5416 Command-line mode. 5417 Both the global mappings and the mappings local to the current 5418 buffer are checked for a match. 5419 If no matching mapping is found 0 is returned. 5420 The following characters are recognized in {mode}: 5421 n Normal mode 5422 v Visual mode 5423 o Operator-pending mode 5424 i Insert mode 5425 l Language-Argument ("r", "f", "t", etc.) 5426 c Command-line mode 5427 When {mode} is omitted, "nvo" is used. 5428 5429 This function is useful to check if a mapping already exists 5430 to a function in a Vim script. Example: > 5431 :if !hasmapto('\ABCdoit') 5432 : map <Leader>d \ABCdoit 5433 :endif 5434< This installs the mapping to "\ABCdoit" only if there isn't 5435 already a mapping to "\ABCdoit". 5436 5437histadd({history}, {item}) *histadd()* 5438 Add the String {item} to the history {history} which can be 5439 one of: *hist-names* 5440 "cmd" or ":" command line history 5441 "search" or "/" search pattern history 5442 "expr" or "=" typed expression history 5443 "input" or "@" input line history 5444 "debug" or ">" debug command history 5445 empty the current or last used history 5446 The {history} string does not need to be the whole name, one 5447 character is sufficient. 5448 If {item} does already exist in the history, it will be 5449 shifted to become the newest entry. 5450 The result is a Number: 1 if the operation was successful, 5451 otherwise 0 is returned. 5452 5453 Example: > 5454 :call histadd("input", strftime("%Y %b %d")) 5455 :let date=input("Enter date: ") 5456< This function is not available in the |sandbox|. 5457 5458histdel({history} [, {item}]) *histdel()* 5459 Clear {history}, i.e. delete all its entries. See |hist-names| 5460 for the possible values of {history}. 5461 5462 If the parameter {item} evaluates to a String, it is used as a 5463 regular expression. All entries matching that expression will 5464 be removed from the history (if there are any). 5465 Upper/lowercase must match, unless "\c" is used |/\c|. 5466 If {item} evaluates to a Number, it will be interpreted as 5467 an index, see |:history-indexing|. The respective entry will 5468 be removed if it exists. 5469 5470 The result is a Number: 1 for a successful operation, 5471 otherwise 0 is returned. 5472 5473 Examples: 5474 Clear expression register history: > 5475 :call histdel("expr") 5476< 5477 Remove all entries starting with "*" from the search history: > 5478 :call histdel("/", '^\*') 5479< 5480 The following three are equivalent: > 5481 :call histdel("search", histnr("search")) 5482 :call histdel("search", -1) 5483 :call histdel("search", '^'.histget("search", -1).'$') 5484< 5485 To delete the last search pattern and use the last-but-one for 5486 the "n" command and 'hlsearch': > 5487 :call histdel("search", -1) 5488 :let @/ = histget("search", -1) 5489 5490histget({history} [, {index}]) *histget()* 5491 The result is a String, the entry with Number {index} from 5492 {history}. See |hist-names| for the possible values of 5493 {history}, and |:history-indexing| for {index}. If there is 5494 no such entry, an empty String is returned. When {index} is 5495 omitted, the most recent item from the history is used. 5496 5497 Examples: 5498 Redo the second last search from history. > 5499 :execute '/' . histget("search", -2) 5500 5501< Define an Ex command ":H {num}" that supports re-execution of 5502 the {num}th entry from the output of |:history|. > 5503 :command -nargs=1 H execute histget("cmd", 0+<args>) 5504< 5505histnr({history}) *histnr()* 5506 The result is the Number of the current entry in {history}. 5507 See |hist-names| for the possible values of {history}. 5508 If an error occurred, -1 is returned. 5509 5510 Example: > 5511 :let inp_index = histnr("expr") 5512< 5513hlexists({name}) *hlexists()* 5514 The result is a Number, which is non-zero if a highlight group 5515 called {name} exists. This is when the group has been 5516 defined in some way. Not necessarily when highlighting has 5517 been defined for it, it may also have been used for a syntax 5518 item. 5519 *highlight_exists()* 5520 Obsolete name: highlight_exists(). 5521 5522 *hlID()* 5523hlID({name}) The result is a Number, which is the ID of the highlight group 5524 with name {name}. When the highlight group doesn't exist, 5525 zero is returned. 5526 This can be used to retrieve information about the highlight 5527 group. For example, to get the background color of the 5528 "Comment" group: > 5529 :echo synIDattr(synIDtrans(hlID("Comment")), "bg") 5530< *highlightID()* 5531 Obsolete name: highlightID(). 5532 5533hostname() *hostname()* 5534 The result is a String, which is the name of the machine on 5535 which Vim is currently running. Machine names greater than 5536 256 characters long are truncated. 5537 5538iconv({expr}, {from}, {to}) *iconv()* 5539 The result is a String, which is the text {expr} converted 5540 from encoding {from} to encoding {to}. 5541 When the conversion completely fails an empty string is 5542 returned. When some characters could not be converted they 5543 are replaced with "?". 5544 The encoding names are whatever the iconv() library function 5545 can accept, see ":!man 3 iconv". 5546 Most conversions require Vim to be compiled with the |+iconv| 5547 feature. Otherwise only UTF-8 to latin1 conversion and back 5548 can be done. 5549 This can be used to display messages with special characters, 5550 no matter what 'encoding' is set to. Write the message in 5551 UTF-8 and use: > 5552 echo iconv(utf8_str, "utf-8", &enc) 5553< Note that Vim uses UTF-8 for all Unicode encodings, conversion 5554 from/to UCS-2 is automatically changed to use UTF-8. You 5555 cannot use UCS-2 in a string anyway, because of the NUL bytes. 5556 5557 *indent()* 5558indent({lnum}) The result is a Number, which is indent of line {lnum} in the 5559 current buffer. The indent is counted in spaces, the value 5560 of 'tabstop' is relevant. {lnum} is used just like in 5561 |getline()|. 5562 When {lnum} is invalid -1 is returned. 5563 5564 5565index({object}, {expr} [, {start} [, {ic}]]) *index()* 5566 If {object} is a |List| return the lowest index where the item 5567 has a value equal to {expr}. There is no automatic 5568 conversion, so the String "4" is different from the Number 4. 5569 And the number 4 is different from the Float 4.0. The value 5570 of 'ignorecase' is not used here, case always matters. 5571 5572 If {object} is |Blob| return the lowest index where the byte 5573 value is equal to {expr}. 5574 5575 If {start} is given then start looking at the item with index 5576 {start} (may be negative for an item relative to the end). 5577 When {ic} is given and it is |TRUE|, ignore case. Otherwise 5578 case must match. 5579 -1 is returned when {expr} is not found in {object}. 5580 Example: > 5581 :let idx = index(words, "the") 5582 :if index(numbers, 123) >= 0 5583 5584 5585input({prompt} [, {text} [, {completion}]]) *input()* 5586 The result is a String, which is whatever the user typed on 5587 the command-line. The {prompt} argument is either a prompt 5588 string, or a blank string (for no prompt). A '\n' can be used 5589 in the prompt to start a new line. 5590 The highlighting set with |:echohl| is used for the prompt. 5591 The input is entered just like a command-line, with the same 5592 editing commands and mappings. There is a separate history 5593 for lines typed for input(). 5594 Example: > 5595 :if input("Coffee or beer? ") == "beer" 5596 : echo "Cheers!" 5597 :endif 5598< 5599 If the optional {text} argument is present and not empty, this 5600 is used for the default reply, as if the user typed this. 5601 Example: > 5602 :let color = input("Color? ", "white") 5603 5604< The optional {completion} argument specifies the type of 5605 completion supported for the input. Without it completion is 5606 not performed. The supported completion types are the same as 5607 that can be supplied to a user-defined command using the 5608 "-complete=" argument. Refer to |:command-completion| for 5609 more information. Example: > 5610 let fname = input("File: ", "", "file") 5611< 5612 NOTE: This function must not be used in a startup file, for 5613 the versions that only run in GUI mode (e.g., the Win32 GUI). 5614 Note: When input() is called from within a mapping it will 5615 consume remaining characters from that mapping, because a 5616 mapping is handled like the characters were typed. 5617 Use |inputsave()| before input() and |inputrestore()| 5618 after input() to avoid that. Another solution is to avoid 5619 that further characters follow in the mapping, e.g., by using 5620 |:execute| or |:normal|. 5621 5622 Example with a mapping: > 5623 :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR> 5624 :function GetFoo() 5625 : call inputsave() 5626 : let g:Foo = input("enter search pattern: ") 5627 : call inputrestore() 5628 :endfunction 5629 5630inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()* 5631 Like |input()|, but when the GUI is running and text dialogs 5632 are supported, a dialog window pops up to input the text. 5633 Example: > 5634 :let n = inputdialog("value for shiftwidth", shiftwidth()) 5635 :if n != "" 5636 : let &sw = n 5637 :endif 5638< When the dialog is cancelled {cancelreturn} is returned. When 5639 omitted an empty string is returned. 5640 Hitting <Enter> works like pressing the OK button. Hitting 5641 <Esc> works like pressing the Cancel button. 5642 NOTE: Command-line completion is not supported. 5643 5644inputlist({textlist}) *inputlist()* 5645 {textlist} must be a |List| of strings. This |List| is 5646 displayed, one string per line. The user will be prompted to 5647 enter a number, which is returned. 5648 The user can also select an item by clicking on it with the 5649 mouse. For the first string 0 is returned. When clicking 5650 above the first item a negative number is returned. When 5651 clicking on the prompt one more than the length of {textlist} 5652 is returned. 5653 Make sure {textlist} has less than 'lines' entries, otherwise 5654 it won't work. It's a good idea to put the entry number at 5655 the start of the string. And put a prompt in the first item. 5656 Example: > 5657 let color = inputlist(['Select color:', '1. red', 5658 \ '2. green', '3. blue']) 5659 5660inputrestore() *inputrestore()* 5661 Restore typeahead that was saved with a previous |inputsave()|. 5662 Should be called the same number of times inputsave() is 5663 called. Calling it more often is harmless though. 5664 Returns 1 when there is nothing to restore, 0 otherwise. 5665 5666inputsave() *inputsave()* 5667 Preserve typeahead (also from mappings) and clear it, so that 5668 a following prompt gets input from the user. Should be 5669 followed by a matching inputrestore() after the prompt. Can 5670 be used several times, in which case there must be just as 5671 many inputrestore() calls. 5672 Returns 1 when out of memory, 0 otherwise. 5673 5674inputsecret({prompt} [, {text}]) *inputsecret()* 5675 This function acts much like the |input()| function with but 5676 two exceptions: 5677 a) the user's response will be displayed as a sequence of 5678 asterisks ("*") thereby keeping the entry secret, and 5679 b) the user's response will not be recorded on the input 5680 |history| stack. 5681 The result is a String, which is whatever the user actually 5682 typed on the command-line in response to the issued prompt. 5683 NOTE: Command-line completion is not supported. 5684 5685insert({object}, {item} [, {idx}]) *insert()* 5686 When {object} is a |List| or a |Blob| insert {item} at the start 5687 of it. 5688 5689 If {idx} is specified insert {item} before the item with index 5690 {idx}. If {idx} is zero it goes before the first item, just 5691 like omitting {idx}. A negative {idx} is also possible, see 5692 |list-index|. -1 inserts just before the last item. 5693 5694 Returns the resulting |List| or |Blob|. Examples: > 5695 :let mylist = insert([2, 3, 5], 1) 5696 :call insert(mylist, 4, -1) 5697 :call insert(mylist, 6, len(mylist)) 5698< The last example can be done simpler with |add()|. 5699 Note that when {item} is a |List| it is inserted as a single 5700 item. Use |extend()| to concatenate |Lists|. 5701 5702invert({expr}) *invert()* 5703 Bitwise invert. The argument is converted to a number. A 5704 List, Dict or Float argument causes an error. Example: > 5705 :let bits = invert(bits) 5706 5707isdirectory({directory}) *isdirectory()* 5708 The result is a Number, which is |TRUE| when a directory 5709 with the name {directory} exists. If {directory} doesn't 5710 exist, or isn't a directory, the result is |FALSE|. {directory} 5711 is any expression, which is used as a String. 5712 5713islocked({expr}) *islocked()* *E786* 5714 The result is a Number, which is |TRUE| when {expr} is the 5715 name of a locked variable. 5716 {expr} must be the name of a variable, |List| item or 5717 |Dictionary| entry, not the variable itself! Example: > 5718 :let alist = [0, ['a', 'b'], 2, 3] 5719 :lockvar 1 alist 5720 :echo islocked('alist') " 1 5721 :echo islocked('alist[1]') " 0 5722 5723< When {expr} is a variable that does not exist you get an error 5724 message. Use |exists()| to check for existence. 5725 5726isnan({expr}) *isnan()* 5727 Return |TRUE| if {expr} is a float with value NaN. > 5728 echo isnan(0.0 / 0.0) 5729< 1 ~ 5730 5731 {only available when compiled with the |+float| feature} 5732 5733items({dict}) *items()* 5734 Return a |List| with all the key-value pairs of {dict}. Each 5735 |List| item is a list with two items: the key of a {dict} 5736 entry and the value of this entry. The |List| is in arbitrary 5737 order. Also see |keys()| and |values()|. 5738 Example: > 5739 for [key, value] in items(mydict) 5740 echo key . ': ' . value 5741 endfor 5742 5743job_getchannel({job}) *job_getchannel()* 5744 Get the channel handle that {job} is using. 5745 To check if the job has no channel: > 5746 if string(job_getchannel()) == 'channel fail' 5747< 5748 {only available when compiled with the |+job| feature} 5749 5750job_info([{job}]) *job_info()* 5751 Returns a Dictionary with information about {job}: 5752 "status" what |job_status()| returns 5753 "channel" what |job_getchannel()| returns 5754 "cmd" List of command arguments used to start the job 5755 "process" process ID 5756 "tty_in" terminal input name, empty when none 5757 "tty_out" terminal output name, empty when none 5758 "exitval" only valid when "status" is "dead" 5759 "exit_cb" function to be called on exit 5760 "stoponexit" |job-stoponexit| 5761 5762 Only in Unix: 5763 "termsig" the signal which terminated the process 5764 (See |job_stop()| for the values) 5765 only valid when "status" is "dead" 5766 5767 Only in MS-Windows: 5768 "tty_type" Type of virtual console in use. 5769 Values are "winpty" or "conpty". 5770 See 'termwintype'. 5771 5772 Without any arguments, returns a List with all Job objects. 5773 5774job_setoptions({job}, {options}) *job_setoptions()* 5775 Change options for {job}. Supported are: 5776 "stoponexit" |job-stoponexit| 5777 "exit_cb" |job-exit_cb| 5778 5779job_start({command} [, {options}]) *job_start()* 5780 Start a job and return a Job object. Unlike |system()| and 5781 |:!cmd| this does not wait for the job to finish. 5782 To start a job in a terminal window see |term_start()|. 5783 5784 If the job fails to start then |job_status()| on the returned 5785 Job object results in "fail" and none of the callbacks will be 5786 invoked. 5787 5788 {command} can be a String. This works best on MS-Windows. On 5789 Unix it is split up in white-separated parts to be passed to 5790 execvp(). Arguments in double quotes can contain white space. 5791 5792 {command} can be a List, where the first item is the executable 5793 and further items are the arguments. All items are converted 5794 to String. This works best on Unix. 5795 5796 On MS-Windows, job_start() makes a GUI application hidden. If 5797 want to show it, Use |:!start| instead. 5798 5799 The command is executed directly, not through a shell, the 5800 'shell' option is not used. To use the shell: > 5801 let job = job_start(["/bin/sh", "-c", "echo hello"]) 5802< Or: > 5803 let job = job_start('/bin/sh -c "echo hello"') 5804< Note that this will start two processes, the shell and the 5805 command it executes. If you don't want this use the "exec" 5806 shell command. 5807 5808 On Unix $PATH is used to search for the executable only when 5809 the command does not contain a slash. 5810 5811 The job will use the same terminal as Vim. If it reads from 5812 stdin the job and Vim will be fighting over input, that 5813 doesn't work. Redirect stdin and stdout to avoid problems: > 5814 let job = job_start(['sh', '-c', "myserver </dev/null >/dev/null"]) 5815< 5816 The returned Job object can be used to get the status with 5817 |job_status()| and stop the job with |job_stop()|. 5818 5819 Note that the job object will be deleted if there are no 5820 references to it. This closes the stdin and stderr, which may 5821 cause the job to fail with an error. To avoid this keep a 5822 reference to the job. Thus instead of: > 5823 call job_start('my-command') 5824< use: > 5825 let myjob = job_start('my-command') 5826< and unlet "myjob" once the job is not needed or is past the 5827 point where it would fail (e.g. when it prints a message on 5828 startup). Keep in mind that variables local to a function 5829 will cease to exist if the function returns. Use a 5830 script-local variable if needed: > 5831 let s:myjob = job_start('my-command') 5832< 5833 {options} must be a Dictionary. It can contain many optional 5834 items, see |job-options|. 5835 5836 {only available when compiled with the |+job| feature} 5837 5838job_status({job}) *job_status()* *E916* 5839 Returns a String with the status of {job}: 5840 "run" job is running 5841 "fail" job failed to start 5842 "dead" job died or was stopped after running 5843 5844 On Unix a non-existing command results in "dead" instead of 5845 "fail", because a fork happens before the failure can be 5846 detected. 5847 5848 If an exit callback was set with the "exit_cb" option and the 5849 job is now detected to be "dead" the callback will be invoked. 5850 5851 For more information see |job_info()|. 5852 5853 {only available when compiled with the |+job| feature} 5854 5855job_stop({job} [, {how}]) *job_stop()* 5856 Stop the {job}. This can also be used to signal the job. 5857 5858 When {how} is omitted or is "term" the job will be terminated. 5859 For Unix SIGTERM is sent. On MS-Windows the job will be 5860 terminated forcedly (there is no "gentle" way). 5861 This goes to the process group, thus children may also be 5862 affected. 5863 5864 Effect for Unix: 5865 "term" SIGTERM (default) 5866 "hup" SIGHUP 5867 "quit" SIGQUIT 5868 "int" SIGINT 5869 "kill" SIGKILL (strongest way to stop) 5870 number signal with that number 5871 5872 Effect for MS-Windows: 5873 "term" terminate process forcedly (default) 5874 "hup" CTRL_BREAK 5875 "quit" CTRL_BREAK 5876 "int" CTRL_C 5877 "kill" terminate process forcedly 5878 Others CTRL_BREAK 5879 5880 On Unix the signal is sent to the process group. This means 5881 that when the job is "sh -c command" it affects both the shell 5882 and the command. 5883 5884 The result is a Number: 1 if the operation could be executed, 5885 0 if "how" is not supported on the system. 5886 Note that even when the operation was executed, whether the 5887 job was actually stopped needs to be checked with 5888 |job_status()|. 5889 5890 If the status of the job is "dead", the signal will not be 5891 sent. This is to avoid to stop the wrong job (esp. on Unix, 5892 where process numbers are recycled). 5893 5894 When using "kill" Vim will assume the job will die and close 5895 the channel. 5896 5897 {only available when compiled with the |+job| feature} 5898 5899join({list} [, {sep}]) *join()* 5900 Join the items in {list} together into one String. 5901 When {sep} is specified it is put in between the items. If 5902 {sep} is omitted a single space is used. 5903 Note that {sep} is not added at the end. You might want to 5904 add it there too: > 5905 let lines = join(mylist, "\n") . "\n" 5906< String items are used as-is. |Lists| and |Dictionaries| are 5907 converted into a string like with |string()|. 5908 The opposite function is |split()|. 5909 5910js_decode({string}) *js_decode()* 5911 This is similar to |json_decode()| with these differences: 5912 - Object key names do not have to be in quotes. 5913 - Strings can be in single quotes. 5914 - Empty items in an array (between two commas) are allowed and 5915 result in v:none items. 5916 5917js_encode({expr}) *js_encode()* 5918 This is similar to |json_encode()| with these differences: 5919 - Object key names are not in quotes. 5920 - v:none items in an array result in an empty item between 5921 commas. 5922 For example, the Vim object: 5923 [1,v:none,{"one":1},v:none] ~ 5924 Will be encoded as: 5925 [1,,{one:1},,] ~ 5926 While json_encode() would produce: 5927 [1,null,{"one":1},null] ~ 5928 This encoding is valid for JavaScript. It is more efficient 5929 than JSON, especially when using an array with optional items. 5930 5931 5932json_decode({string}) *json_decode()* 5933 This parses a JSON formatted string and returns the equivalent 5934 in Vim values. See |json_encode()| for the relation between 5935 JSON and Vim values. 5936 The decoding is permissive: 5937 - A trailing comma in an array and object is ignored, e.g. 5938 "[1, 2, ]" is the same as "[1, 2]". 5939 - Integer keys are accepted in objects, e.g. {1:2} is the 5940 same as {"1":2}. 5941 - More floating point numbers are recognized, e.g. "1." for 5942 "1.0", or "001.2" for "1.2". Special floating point values 5943 "Infinity", "-Infinity" and "NaN" (capitalization ignored) 5944 are accepted. 5945 - Leading zeroes in integer numbers are ignored, e.g. "012" 5946 for "12" or "-012" for "-12". 5947 - Capitalization is ignored in literal names null, true or 5948 false, e.g. "NULL" for "null", "True" for "true". 5949 - Control characters U+0000 through U+001F which are not 5950 escaped in strings are accepted, e.g. " " (tab 5951 character in string) for "\t". 5952 - An empty JSON expression or made of only spaces is accepted 5953 and results in v:none. 5954 - Backslash in an invalid 2-character sequence escape is 5955 ignored, e.g. "\a" is decoded as "a". 5956 - A correct surrogate pair in JSON strings should normally be 5957 a 12 character sequence such as "\uD834\uDD1E", but 5958 json_decode() silently accepts truncated surrogate pairs 5959 such as "\uD834" or "\uD834\u" 5960 *E938* 5961 A duplicate key in an object, valid in rfc7159, is not 5962 accepted by json_decode() as the result must be a valid Vim 5963 type, e.g. this fails: {"a":"b", "a":"c"} 5964 5965 5966json_encode({expr}) *json_encode()* 5967 Encode {expr} as JSON and return this as a string. 5968 The encoding is specified in: 5969 https://tools.ietf.org/html/rfc7159.html 5970 Vim values are converted as follows: 5971 |Number| decimal number 5972 |Float| floating point number 5973 Float nan "NaN" 5974 Float inf "Infinity" 5975 Float -inf "-Infinity" 5976 |String| in double quotes (possibly null) 5977 |Funcref| not possible, error 5978 |List| as an array (possibly null); when 5979 used recursively: [] 5980 |Dict| as an object (possibly null); when 5981 used recursively: {} 5982 |Blob| as an array of the individual bytes 5983 v:false "false" 5984 v:true "true" 5985 v:none "null" 5986 v:null "null" 5987 Note that NaN and Infinity are passed on as values. This is 5988 missing in the JSON standard, but several implementations do 5989 allow it. If not then you will get an error. 5990 5991keys({dict}) *keys()* 5992 Return a |List| with all the keys of {dict}. The |List| is in 5993 arbitrary order. Also see |items()| and |values()|. 5994 5995 *len()* *E701* 5996len({expr}) The result is a Number, which is the length of the argument. 5997 When {expr} is a String or a Number the length in bytes is 5998 used, as with |strlen()|. 5999 When {expr} is a |List| the number of items in the |List| is 6000 returned. 6001 When {expr} is a |Blob| the number of bytes is returned. 6002 When {expr} is a |Dictionary| the number of entries in the 6003 |Dictionary| is returned. 6004 Otherwise an error is given. 6005 6006 *libcall()* *E364* *E368* 6007libcall({libname}, {funcname}, {argument}) 6008 Call function {funcname} in the run-time library {libname} 6009 with single argument {argument}. 6010 This is useful to call functions in a library that you 6011 especially made to be used with Vim. Since only one argument 6012 is possible, calling standard library functions is rather 6013 limited. 6014 The result is the String returned by the function. If the 6015 function returns NULL, this will appear as an empty string "" 6016 to Vim. 6017 If the function returns a number, use libcallnr()! 6018 If {argument} is a number, it is passed to the function as an 6019 int; if {argument} is a string, it is passed as a 6020 null-terminated string. 6021 This function will fail in |restricted-mode|. 6022 6023 libcall() allows you to write your own 'plug-in' extensions to 6024 Vim without having to recompile the program. It is NOT a 6025 means to call system functions! If you try to do so Vim will 6026 very probably crash. 6027 6028 For Win32, the functions you write must be placed in a DLL 6029 and use the normal C calling convention (NOT Pascal which is 6030 used in Windows System DLLs). The function must take exactly 6031 one parameter, either a character pointer or a long integer, 6032 and must return a character pointer or NULL. The character 6033 pointer returned must point to memory that will remain valid 6034 after the function has returned (e.g. in static data in the 6035 DLL). If it points to allocated memory, that memory will 6036 leak away. Using a static buffer in the function should work, 6037 it's then freed when the DLL is unloaded. 6038 6039 WARNING: If the function returns a non-valid pointer, Vim may 6040 crash! This also happens if the function returns a number, 6041 because Vim thinks it's a pointer. 6042 For Win32 systems, {libname} should be the filename of the DLL 6043 without the ".DLL" suffix. A full path is only required if 6044 the DLL is not in the usual places. 6045 For Unix: When compiling your own plugins, remember that the 6046 object code must be compiled as position-independent ('PIC'). 6047 {only in Win32 and some Unix versions, when the |+libcall| 6048 feature is present} 6049 Examples: > 6050 :echo libcall("libc.so", "getenv", "HOME") 6051< 6052 *libcallnr()* 6053libcallnr({libname}, {funcname}, {argument}) 6054 Just like |libcall()|, but used for a function that returns an 6055 int instead of a string. 6056 {only in Win32 on some Unix versions, when the |+libcall| 6057 feature is present} 6058 Examples: > 6059 :echo libcallnr("/usr/lib/libc.so", "getpid", "") 6060 :call libcallnr("libc.so", "printf", "Hello World!\n") 6061 :call libcallnr("libc.so", "sleep", 10) 6062< 6063 *line()* 6064line({expr}) The result is a Number, which is the line number of the file 6065 position given with {expr}. The accepted positions are: 6066 . the cursor position 6067 $ the last line in the current buffer 6068 'x position of mark x (if the mark is not set, 0 is 6069 returned) 6070 w0 first line visible in current window (one if the 6071 display isn't updated, e.g. in silent Ex mode) 6072 w$ last line visible in current window (this is one 6073 less than "w0" if no lines are visible) 6074 v In Visual mode: the start of the Visual area (the 6075 cursor is the end). When not in Visual mode 6076 returns the cursor position. Differs from |'<| in 6077 that it's updated right away. 6078 Note that a mark in another file can be used. The line number 6079 then applies to another buffer. 6080 To get the column number use |col()|. To get both use 6081 |getpos()|. 6082 Examples: > 6083 line(".") line number of the cursor 6084 line("'t") line number of mark t 6085 line("'" . marker) line number of mark marker 6086< 6087 To jump to the last known position when opening a file see 6088 |last-position-jump|. 6089 6090line2byte({lnum}) *line2byte()* 6091 Return the byte count from the start of the buffer for line 6092 {lnum}. This includes the end-of-line character, depending on 6093 the 'fileformat' option for the current buffer. The first 6094 line returns 1. 'encoding' matters, 'fileencoding' is ignored. 6095 This can also be used to get the byte count for the line just 6096 below the last line: > 6097 line2byte(line("$") + 1) 6098< This is the buffer size plus one. If 'fileencoding' is empty 6099 it is the file size plus one. 6100 When {lnum} is invalid, or the |+byte_offset| feature has been 6101 disabled at compile time, -1 is returned. 6102 Also see |byte2line()|, |go| and |:goto|. 6103 6104lispindent({lnum}) *lispindent()* 6105 Get the amount of indent for line {lnum} according the lisp 6106 indenting rules, as with 'lisp'. 6107 The indent is counted in spaces, the value of 'tabstop' is 6108 relevant. {lnum} is used just like in |getline()|. 6109 When {lnum} is invalid or Vim was not compiled the 6110 |+lispindent| feature, -1 is returned. 6111 6112localtime() *localtime()* 6113 Return the current time, measured as seconds since 1st Jan 6114 1970. See also |strftime()| and |getftime()|. 6115 6116 6117log({expr}) *log()* 6118 Return the natural logarithm (base e) of {expr} as a |Float|. 6119 {expr} must evaluate to a |Float| or a |Number| in the range 6120 (0, inf]. 6121 Examples: > 6122 :echo log(10) 6123< 2.302585 > 6124 :echo log(exp(5)) 6125< 5.0 6126 {only available when compiled with the |+float| feature} 6127 6128 6129log10({expr}) *log10()* 6130 Return the logarithm of Float {expr} to base 10 as a |Float|. 6131 {expr} must evaluate to a |Float| or a |Number|. 6132 Examples: > 6133 :echo log10(1000) 6134< 3.0 > 6135 :echo log10(0.01) 6136< -2.0 6137 {only available when compiled with the |+float| feature} 6138 6139luaeval({expr} [, {expr}]) *luaeval()* 6140 Evaluate Lua expression {expr} and return its result converted 6141 to Vim data structures. Second {expr} may hold additional 6142 argument accessible as _A inside first {expr}. 6143 Strings are returned as they are. 6144 Boolean objects are converted to numbers. 6145 Numbers are converted to |Float| values if vim was compiled 6146 with |+float| and to numbers otherwise. 6147 Dictionaries and lists obtained by vim.eval() are returned 6148 as-is. 6149 Other objects are returned as zero without any errors. 6150 See |lua-luaeval| for more details. 6151 {only available when compiled with the |+lua| feature} 6152 6153map({expr1}, {expr2}) *map()* 6154 {expr1} must be a |List| or a |Dictionary|. 6155 Replace each item in {expr1} with the result of evaluating 6156 {expr2}. {expr2} must be a |string| or |Funcref|. 6157 6158 If {expr2} is a |string|, inside {expr2} |v:val| has the value 6159 of the current item. For a |Dictionary| |v:key| has the key 6160 of the current item and for a |List| |v:key| has the index of 6161 the current item. 6162 Example: > 6163 :call map(mylist, '"> " . v:val . " <"') 6164< This puts "> " before and " <" after each item in "mylist". 6165 6166 Note that {expr2} is the result of an expression and is then 6167 used as an expression again. Often it is good to use a 6168 |literal-string| to avoid having to double backslashes. You 6169 still have to double ' quotes 6170 6171 If {expr2} is a |Funcref| it is called with two arguments: 6172 1. The key or the index of the current item. 6173 2. the value of the current item. 6174 The function must return the new value of the item. Example 6175 that changes each value by "key-value": > 6176 func KeyValue(key, val) 6177 return a:key . '-' . a:val 6178 endfunc 6179 call map(myDict, function('KeyValue')) 6180< It is shorter when using a |lambda|: > 6181 call map(myDict, {key, val -> key . '-' . val}) 6182< If you do not use "val" you can leave it out: > 6183 call map(myDict, {key -> 'item: ' . key}) 6184< 6185 The operation is done in-place. If you want a |List| or 6186 |Dictionary| to remain unmodified make a copy first: > 6187 :let tlist = map(copy(mylist), ' v:val . "\t"') 6188 6189< Returns {expr1}, the |List| or |Dictionary| that was filtered. 6190 When an error is encountered while evaluating {expr2} no 6191 further items in {expr1} are processed. When {expr2} is a 6192 Funcref errors inside a function are ignored, unless it was 6193 defined with the "abort" flag. 6194 6195 6196maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()* 6197 When {dict} is omitted or zero: Return the rhs of mapping 6198 {name} in mode {mode}. The returned String has special 6199 characters translated like in the output of the ":map" command 6200 listing. 6201 6202 When there is no mapping for {name}, an empty String is 6203 returned. When the mapping for {name} is empty, then "<Nop>" 6204 is returned. 6205 6206 The {name} can have special key names, like in the ":map" 6207 command. 6208 6209 {mode} can be one of these strings: 6210 "n" Normal 6211 "v" Visual (including Select) 6212 "o" Operator-pending 6213 "i" Insert 6214 "c" Cmd-line 6215 "s" Select 6216 "x" Visual 6217 "l" langmap |language-mapping| 6218 "t" Terminal-Job 6219 "" Normal, Visual and Operator-pending 6220 When {mode} is omitted, the modes for "" are used. 6221 6222 When {abbr} is there and it is |TRUE| use abbreviations 6223 instead of mappings. 6224 6225 When {dict} is there and it is |TRUE| return a dictionary 6226 containing all the information of the mapping with the 6227 following items: 6228 "lhs" The {lhs} of the mapping. 6229 "rhs" The {rhs} of the mapping as typed. 6230 "silent" 1 for a |:map-silent| mapping, else 0. 6231 "noremap" 1 if the {rhs} of the mapping is not remappable. 6232 "expr" 1 for an expression mapping (|:map-<expr>|). 6233 "buffer" 1 for a buffer local mapping (|:map-local|). 6234 "mode" Modes for which the mapping is defined. In 6235 addition to the modes mentioned above, these 6236 characters will be used: 6237 " " Normal, Visual and Operator-pending 6238 "!" Insert and Commandline mode 6239 (|mapmode-ic|) 6240 "sid" The script local ID, used for <sid> mappings 6241 (|<SID>|). 6242 "lnum" The line number in "sid", zero if unknown. 6243 "nowait" Do not wait for other, longer mappings. 6244 (|:map-<nowait>|). 6245 6246 The mappings local to the current buffer are checked first, 6247 then the global mappings. 6248 This function can be used to map a key even when it's already 6249 mapped, and have it do the original mapping too. Sketch: > 6250 exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n') 6251 6252 6253mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()* 6254 Check if there is a mapping that matches with {name} in mode 6255 {mode}. See |maparg()| for {mode} and special names in 6256 {name}. 6257 When {abbr} is there and it is |TRUE| use abbreviations 6258 instead of mappings. 6259 A match happens with a mapping that starts with {name} and 6260 with a mapping which is equal to the start of {name}. 6261 6262 matches mapping "a" "ab" "abc" ~ 6263 mapcheck("a") yes yes yes 6264 mapcheck("abc") yes yes yes 6265 mapcheck("ax") yes no no 6266 mapcheck("b") no no no 6267 6268 The difference with maparg() is that mapcheck() finds a 6269 mapping that matches with {name}, while maparg() only finds a 6270 mapping for {name} exactly. 6271 When there is no mapping that starts with {name}, an empty 6272 String is returned. If there is one, the RHS of that mapping 6273 is returned. If there are several mappings that start with 6274 {name}, the RHS of one of them is returned. This will be 6275 "<Nop>" if the RHS is empty. 6276 The mappings local to the current buffer are checked first, 6277 then the global mappings. 6278 This function can be used to check if a mapping can be added 6279 without being ambiguous. Example: > 6280 :if mapcheck("_vv") == "" 6281 : map _vv :set guifont=7x13<CR> 6282 :endif 6283< This avoids adding the "_vv" mapping when there already is a 6284 mapping for "_v" or for "_vvv". 6285 6286match({expr}, {pat} [, {start} [, {count}]]) *match()* 6287 When {expr} is a |List| then this returns the index of the 6288 first item where {pat} matches. Each item is used as a 6289 String, |Lists| and |Dictionaries| are used as echoed. 6290 6291 Otherwise, {expr} is used as a String. The result is a 6292 Number, which gives the index (byte offset) in {expr} where 6293 {pat} matches. 6294 6295 A match at the first character or |List| item returns zero. 6296 If there is no match -1 is returned. 6297 6298 For getting submatches see |matchlist()|. 6299 Example: > 6300 :echo match("testing", "ing") " results in 4 6301 :echo match([1, 'x'], '\a') " results in 1 6302< See |string-match| for how {pat} is used. 6303 *strpbrk()* 6304 Vim doesn't have a strpbrk() function. But you can do: > 6305 :let sepidx = match(line, '[.,;: \t]') 6306< *strcasestr()* 6307 Vim doesn't have a strcasestr() function. But you can add 6308 "\c" to the pattern to ignore case: > 6309 :let idx = match(haystack, '\cneedle') 6310< 6311 If {start} is given, the search starts from byte index 6312 {start} in a String or item {start} in a |List|. 6313 The result, however, is still the index counted from the 6314 first character/item. Example: > 6315 :echo match("testing", "ing", 2) 6316< result is again "4". > 6317 :echo match("testing", "ing", 4) 6318< result is again "4". > 6319 :echo match("testing", "t", 2) 6320< result is "3". 6321 For a String, if {start} > 0 then it is like the string starts 6322 {start} bytes later, thus "^" will match at {start}. Except 6323 when {count} is given, then it's like matches before the 6324 {start} byte are ignored (this is a bit complicated to keep it 6325 backwards compatible). 6326 For a String, if {start} < 0, it will be set to 0. For a list 6327 the index is counted from the end. 6328 If {start} is out of range ({start} > strlen({expr}) for a 6329 String or {start} > len({expr}) for a |List|) -1 is returned. 6330 6331 When {count} is given use the {count}'th match. When a match 6332 is found in a String the search for the next one starts one 6333 character further. Thus this example results in 1: > 6334 echo match("testing", "..", 0, 2) 6335< In a |List| the search continues in the next item. 6336 Note that when {count} is added the way {start} works changes, 6337 see above. 6338 6339 See |pattern| for the patterns that are accepted. 6340 The 'ignorecase' option is used to set the ignore-caseness of 6341 the pattern. 'smartcase' is NOT used. The matching is always 6342 done like 'magic' is set and 'cpoptions' is empty. 6343 6344 *matchadd()* *E798* *E799* *E801* *E957* 6345matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]]) 6346 Defines a pattern to be highlighted in the current window (a 6347 "match"). It will be highlighted with {group}. Returns an 6348 identification number (ID), which can be used to delete the 6349 match using |matchdelete()|. 6350 Matching is case sensitive and magic, unless case sensitivity 6351 or magicness are explicitly overridden in {pattern}. The 6352 'magic', 'smartcase' and 'ignorecase' options are not used. 6353 The "Conceal" value is special, it causes the match to be 6354 concealed. 6355 6356 The optional {priority} argument assigns a priority to the 6357 match. A match with a high priority will have its 6358 highlighting overrule that of a match with a lower priority. 6359 A priority is specified as an integer (negative numbers are no 6360 exception). If the {priority} argument is not specified, the 6361 default priority is 10. The priority of 'hlsearch' is zero, 6362 hence all matches with a priority greater than zero will 6363 overrule it. Syntax highlighting (see 'syntax') is a separate 6364 mechanism, and regardless of the chosen priority a match will 6365 always overrule syntax highlighting. 6366 6367 The optional {id} argument allows the request for a specific 6368 match ID. If a specified ID is already taken, an error 6369 message will appear and the match will not be added. An ID 6370 is specified as a positive integer (zero excluded). IDs 1, 2 6371 and 3 are reserved for |:match|, |:2match| and |:3match|, 6372 respectively. If the {id} argument is not specified or -1, 6373 |matchadd()| automatically chooses a free ID. 6374 6375 The optional {dict} argument allows for further custom 6376 values. Currently this is used to specify a match specific 6377 conceal character that will be shown for |hl-Conceal| 6378 highlighted matches. The dict can have the following members: 6379 6380 conceal Special character to show instead of the 6381 match (only for |hl-Conceal| highlighted 6382 matches, see |:syn-cchar|) 6383 window Instead of the current window use the 6384 window with this number or window ID. 6385 6386 The number of matches is not limited, as it is the case with 6387 the |:match| commands. 6388 6389 Example: > 6390 :highlight MyGroup ctermbg=green guibg=green 6391 :let m = matchadd("MyGroup", "TODO") 6392< Deletion of the pattern: > 6393 :call matchdelete(m) 6394 6395< A list of matches defined by |matchadd()| and |:match| are 6396 available from |getmatches()|. All matches can be deleted in 6397 one operation by |clearmatches()|. 6398 6399 *matchaddpos()* 6400matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) 6401 Same as |matchadd()|, but requires a list of positions {pos} 6402 instead of a pattern. This command is faster than |matchadd()| 6403 because it does not require to handle regular expressions and 6404 sets buffer line boundaries to redraw screen. It is supposed 6405 to be used when fast match additions and deletions are 6406 required, for example to highlight matching parentheses. 6407 6408 The list {pos} can contain one of these items: 6409 - A number. This whole line will be highlighted. The first 6410 line has number 1. 6411 - A list with one number, e.g., [23]. The whole line with this 6412 number will be highlighted. 6413 - A list with two numbers, e.g., [23, 11]. The first number is 6414 the line number, the second one is the column number (first 6415 column is 1, the value must correspond to the byte index as 6416 |col()| would return). The character at this position will 6417 be highlighted. 6418 - A list with three numbers, e.g., [23, 11, 3]. As above, but 6419 the third number gives the length of the highlight in bytes. 6420 6421 The maximum number of positions is 8. 6422 6423 Example: > 6424 :highlight MyGroup ctermbg=green guibg=green 6425 :let m = matchaddpos("MyGroup", [[23, 24], 34]) 6426< Deletion of the pattern: > 6427 :call matchdelete(m) 6428 6429< Matches added by |matchaddpos()| are returned by 6430 |getmatches()| with an entry "pos1", "pos2", etc., with the 6431 value a list like the {pos} item. 6432 6433matcharg({nr}) *matcharg()* 6434 Selects the {nr} match item, as set with a |:match|, 6435 |:2match| or |:3match| command. 6436 Return a |List| with two elements: 6437 The name of the highlight group used 6438 The pattern used. 6439 When {nr} is not 1, 2 or 3 returns an empty |List|. 6440 When there is no match item set returns ['', '']. 6441 This is useful to save and restore a |:match|. 6442 Highlighting matches using the |:match| commands are limited 6443 to three matches. |matchadd()| does not have this limitation. 6444 6445matchdelete({id}) *matchdelete()* *E802* *E803* 6446 Deletes a match with ID {id} previously defined by |matchadd()| 6447 or one of the |:match| commands. Returns 0 if successful, 6448 otherwise -1. See example for |matchadd()|. All matches can 6449 be deleted in one operation by |clearmatches()|. 6450 6451matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()* 6452 Same as |match()|, but return the index of first character 6453 after the match. Example: > 6454 :echo matchend("testing", "ing") 6455< results in "7". 6456 *strspn()* *strcspn()* 6457 Vim doesn't have a strspn() or strcspn() function, but you can 6458 do it with matchend(): > 6459 :let span = matchend(line, '[a-zA-Z]') 6460 :let span = matchend(line, '[^a-zA-Z]') 6461< Except that -1 is returned when there are no matches. 6462 6463 The {start}, if given, has the same meaning as for |match()|. > 6464 :echo matchend("testing", "ing", 2) 6465< results in "7". > 6466 :echo matchend("testing", "ing", 5) 6467< result is "-1". 6468 When {expr} is a |List| the result is equal to |match()|. 6469 6470matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()* 6471 Same as |match()|, but return a |List|. The first item in the 6472 list is the matched string, same as what matchstr() would 6473 return. Following items are submatches, like "\1", "\2", etc. 6474 in |:substitute|. When an optional submatch didn't match an 6475 empty string is used. Example: > 6476 echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)') 6477< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', ''] 6478 When there is no match an empty list is returned. 6479 6480matchstr({expr}, {pat} [, {start} [, {count}]]) *matchstr()* 6481 Same as |match()|, but return the matched string. Example: > 6482 :echo matchstr("testing", "ing") 6483< results in "ing". 6484 When there is no match "" is returned. 6485 The {start}, if given, has the same meaning as for |match()|. > 6486 :echo matchstr("testing", "ing", 2) 6487< results in "ing". > 6488 :echo matchstr("testing", "ing", 5) 6489< result is "". 6490 When {expr} is a |List| then the matching item is returned. 6491 The type isn't changed, it's not necessarily a String. 6492 6493matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()* 6494 Same as |matchstr()|, but return the matched string, the start 6495 position and the end position of the match. Example: > 6496 :echo matchstrpos("testing", "ing") 6497< results in ["ing", 4, 7]. 6498 When there is no match ["", -1, -1] is returned. 6499 The {start}, if given, has the same meaning as for |match()|. > 6500 :echo matchstrpos("testing", "ing", 2) 6501< results in ["ing", 4, 7]. > 6502 :echo matchstrpos("testing", "ing", 5) 6503< result is ["", -1, -1]. 6504 When {expr} is a |List| then the matching item, the index 6505 of first item where {pat} matches, the start position and the 6506 end position of the match are returned. > 6507 :echo matchstrpos([1, '__x'], '\a') 6508< result is ["x", 1, 2, 3]. 6509 The type isn't changed, it's not necessarily a String. 6510 6511 *max()* 6512max({expr}) Return the maximum value of all items in {expr}. 6513 {expr} can be a list or a dictionary. For a dictionary, 6514 it returns the maximum of all values in the dictionary. 6515 If {expr} is neither a list nor a dictionary, or one of the 6516 items in {expr} cannot be used as a Number this results in 6517 an error. An empty |List| or |Dictionary| results in zero. 6518 6519 *min()* 6520min({expr}) Return the minimum value of all items in {expr}. 6521 {expr} can be a list or a dictionary. For a dictionary, 6522 it returns the minimum of all values in the dictionary. 6523 If {expr} is neither a list nor a dictionary, or one of the 6524 items in {expr} cannot be used as a Number this results in 6525 an error. An empty |List| or |Dictionary| results in zero. 6526 6527 *mkdir()* *E739* 6528mkdir({name} [, {path} [, {prot}]]) 6529 Create directory {name}. 6530 6531 If {path} is "p" then intermediate directories are created as 6532 necessary. Otherwise it must be "". 6533 6534 If {prot} is given it is used to set the protection bits of 6535 the new directory. The default is 0755 (rwxr-xr-x: r/w for 6536 the user readable for others). Use 0700 to make it unreadable 6537 for others. This is only used for the last part of {name}. 6538 Thus if you create /tmp/foo/bar then /tmp/foo will be created 6539 with 0755. 6540 Example: > 6541 :call mkdir($HOME . "/tmp/foo/bar", "p", 0700) 6542 6543< This function is not available in the |sandbox|. 6544 6545 There is no error if the directory already exists and the "p" 6546 flag is passed (since patch 8.0.1708). However, without the 6547 "p" option the call will fail. 6548 6549 The function result is a Number, which is 1 if the call was 6550 successful or 0 if the directory creation failed or partly 6551 failed. 6552 6553 Not available on all systems. To check use: > 6554 :if exists("*mkdir") 6555< 6556 *mode()* 6557mode([expr]) Return a string that indicates the current mode. 6558 If [expr] is supplied and it evaluates to a non-zero Number or 6559 a non-empty String (|non-zero-arg|), then the full mode is 6560 returned, otherwise only the first letter is returned. 6561 6562 n Normal, Terminal-Normal 6563 no Operator-pending 6564 nov Operator-pending (forced characterwise |o_v|) 6565 noV Operator-pending (forced linewise |o_V|) 6566 noCTRL-V Operator-pending (forced blockwise |o_CTRL-V|); 6567 CTRL-V is one character 6568 niI Normal using |i_CTRL-O| in |Insert-mode| 6569 niR Normal using |i_CTRL-O| in |Replace-mode| 6570 niV Normal using |i_CTRL-O| in |Virtual-Replace-mode| 6571 v Visual by character 6572 V Visual by line 6573 CTRL-V Visual blockwise 6574 s Select by character 6575 S Select by line 6576 CTRL-S Select blockwise 6577 i Insert 6578 ic Insert mode completion |compl-generic| 6579 ix Insert mode |i_CTRL-X| completion 6580 R Replace |R| 6581 Rc Replace mode completion |compl-generic| 6582 Rv Virtual Replace |gR| 6583 Rx Replace mode |i_CTRL-X| completion 6584 c Command-line editing 6585 cv Vim Ex mode |gQ| 6586 ce Normal Ex mode |Q| 6587 r Hit-enter prompt 6588 rm The -- more -- prompt 6589 r? A |:confirm| query of some sort 6590 ! Shell or external command is executing 6591 t Terminal-Job mode: keys go to the job 6592 This is useful in the 'statusline' option or when used 6593 with |remote_expr()| In most other places it always returns 6594 "c" or "n". 6595 Note that in the future more modes and more specific modes may 6596 be added. It's better not to compare the whole string but only 6597 the leading character(s). 6598 Also see |visualmode()|. 6599 6600mzeval({expr}) *mzeval()* 6601 Evaluate MzScheme expression {expr} and return its result 6602 converted to Vim data structures. 6603 Numbers and strings are returned as they are. 6604 Pairs (including lists and improper lists) and vectors are 6605 returned as Vim |Lists|. 6606 Hash tables are represented as Vim |Dictionary| type with keys 6607 converted to strings. 6608 All other types are converted to string with display function. 6609 Examples: > 6610 :mz (define l (list 1 2 3)) 6611 :mz (define h (make-hash)) (hash-set! h "list" l) 6612 :echo mzeval("l") 6613 :echo mzeval("h") 6614< 6615 {only available when compiled with the |+mzscheme| feature} 6616 6617nextnonblank({lnum}) *nextnonblank()* 6618 Return the line number of the first line at or below {lnum} 6619 that is not blank. Example: > 6620 if getline(nextnonblank(1)) =~ "Java" 6621< When {lnum} is invalid or there is no non-blank line at or 6622 below it, zero is returned. 6623 See also |prevnonblank()|. 6624 6625nr2char({expr} [, {utf8}]) *nr2char()* 6626 Return a string with a single character, which has the number 6627 value {expr}. Examples: > 6628 nr2char(64) returns "@" 6629 nr2char(32) returns " " 6630< When {utf8} is omitted or zero, the current 'encoding' is used. 6631 Example for "utf-8": > 6632 nr2char(300) returns I with bow character 6633< With {utf8} set to 1, always return utf-8 characters. 6634 Note that a NUL character in the file is specified with 6635 nr2char(10), because NULs are represented with newline 6636 characters. nr2char(0) is a real NUL and terminates the 6637 string, thus results in an empty string. 6638 6639or({expr}, {expr}) *or()* 6640 Bitwise OR on the two arguments. The arguments are converted 6641 to a number. A List, Dict or Float argument causes an error. 6642 Example: > 6643 :let bits = or(bits, 0x80) 6644 6645 6646pathshorten({expr}) *pathshorten()* 6647 Shorten directory names in the path {expr} and return the 6648 result. The tail, the file name, is kept as-is. The other 6649 components in the path are reduced to single letters. Leading 6650 '~' and '.' characters are kept. Example: > 6651 :echo pathshorten('~/.vim/autoload/myfile.vim') 6652< ~/.v/a/myfile.vim ~ 6653 It doesn't matter if the path exists or not. 6654 6655perleval({expr}) *perleval()* 6656 Evaluate Perl expression {expr} in scalar context and return 6657 its result converted to Vim data structures. If value can't be 6658 converted, it is returned as a string Perl representation. 6659 Note: If you want an array or hash, {expr} must return a 6660 reference to it. 6661 Example: > 6662 :echo perleval('[1 .. 4]') 6663< [1, 2, 3, 4] 6664 {only available when compiled with the |+perl| feature} 6665 6666pow({x}, {y}) *pow()* 6667 Return the power of {x} to the exponent {y} as a |Float|. 6668 {x} and {y} must evaluate to a |Float| or a |Number|. 6669 Examples: > 6670 :echo pow(3, 3) 6671< 27.0 > 6672 :echo pow(2, 16) 6673< 65536.0 > 6674 :echo pow(32, 0.20) 6675< 2.0 6676 {only available when compiled with the |+float| feature} 6677 6678prevnonblank({lnum}) *prevnonblank()* 6679 Return the line number of the first line at or above {lnum} 6680 that is not blank. Example: > 6681 let ind = indent(prevnonblank(v:lnum - 1)) 6682< When {lnum} is invalid or there is no non-blank line at or 6683 above it, zero is returned. 6684 Also see |nextnonblank()|. 6685 6686 6687printf({fmt}, {expr1} ...) *printf()* 6688 Return a String with {fmt}, where "%" items are replaced by 6689 the formatted form of their respective arguments. Example: > 6690 printf("%4d: E%d %.30s", lnum, errno, msg) 6691< May result in: 6692 " 99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~ 6693 6694 Often used items are: 6695 %s string 6696 %6S string right-aligned in 6 display cells 6697 %6s string right-aligned in 6 bytes 6698 %.9s string truncated to 9 bytes 6699 %c single byte 6700 %d decimal number 6701 %5d decimal number padded with spaces to 5 characters 6702 %x hex number 6703 %04x hex number padded with zeros to at least 4 characters 6704 %X hex number using upper case letters 6705 %o octal number 6706 %08b binary number padded with zeros to at least 8 chars 6707 %f floating point number as 12.23, inf, -inf or nan 6708 %F floating point number as 12.23, INF, -INF or NAN 6709 %e floating point number as 1.23e3, inf, -inf or nan 6710 %E floating point number as 1.23E3, INF, -INF or NAN 6711 %g floating point number, as %f or %e depending on value 6712 %G floating point number, as %F or %E depending on value 6713 %% the % character itself 6714 6715 Conversion specifications start with '%' and end with the 6716 conversion type. All other characters are copied unchanged to 6717 the result. 6718 6719 The "%" starts a conversion specification. The following 6720 arguments appear in sequence: 6721 6722 % [flags] [field-width] [.precision] type 6723 6724 flags 6725 Zero or more of the following flags: 6726 6727 # The value should be converted to an "alternate 6728 form". For c, d, and s conversions, this option 6729 has no effect. For o conversions, the precision 6730 of the number is increased to force the first 6731 character of the output string to a zero (except 6732 if a zero value is printed with an explicit 6733 precision of zero). 6734 For b and B conversions, a non-zero result has 6735 the string "0b" (or "0B" for B conversions) 6736 prepended to it. 6737 For x and X conversions, a non-zero result has 6738 the string "0x" (or "0X" for X conversions) 6739 prepended to it. 6740 6741 0 (zero) Zero padding. For all conversions the converted 6742 value is padded on the left with zeros rather 6743 than blanks. If a precision is given with a 6744 numeric conversion (d, b, B, o, x, and X), the 0 6745 flag is ignored. 6746 6747 - A negative field width flag; the converted value 6748 is to be left adjusted on the field boundary. 6749 The converted value is padded on the right with 6750 blanks, rather than on the left with blanks or 6751 zeros. A - overrides a 0 if both are given. 6752 6753 ' ' (space) A blank should be left before a positive 6754 number produced by a signed conversion (d). 6755 6756 + A sign must always be placed before a number 6757 produced by a signed conversion. A + overrides 6758 a space if both are used. 6759 6760 field-width 6761 An optional decimal digit string specifying a minimum 6762 field width. If the converted value has fewer bytes 6763 than the field width, it will be padded with spaces on 6764 the left (or right, if the left-adjustment flag has 6765 been given) to fill out the field width. 6766 6767 .precision 6768 An optional precision, in the form of a period '.' 6769 followed by an optional digit string. If the digit 6770 string is omitted, the precision is taken as zero. 6771 This gives the minimum number of digits to appear for 6772 d, o, x, and X conversions, or the maximum number of 6773 bytes to be printed from a string for s conversions. 6774 For floating point it is the number of digits after 6775 the decimal point. 6776 6777 type 6778 A character that specifies the type of conversion to 6779 be applied, see below. 6780 6781 A field width or precision, or both, may be indicated by an 6782 asterisk '*' instead of a digit string. In this case, a 6783 Number argument supplies the field width or precision. A 6784 negative field width is treated as a left adjustment flag 6785 followed by a positive field width; a negative precision is 6786 treated as though it were missing. Example: > 6787 :echo printf("%d: %.*s", nr, width, line) 6788< This limits the length of the text used from "line" to 6789 "width" bytes. 6790 6791 The conversion specifiers and their meanings are: 6792 6793 *printf-d* *printf-b* *printf-B* *printf-o* 6794 *printf-x* *printf-X* 6795 dbBoxX The Number argument is converted to signed decimal 6796 (d), unsigned binary (b and B), unsigned octal (o), or 6797 unsigned hexadecimal (x and X) notation. The letters 6798 "abcdef" are used for x conversions; the letters 6799 "ABCDEF" are used for X conversions. 6800 The precision, if any, gives the minimum number of 6801 digits that must appear; if the converted value 6802 requires fewer digits, it is padded on the left with 6803 zeros. 6804 In no case does a non-existent or small field width 6805 cause truncation of a numeric field; if the result of 6806 a conversion is wider than the field width, the field 6807 is expanded to contain the conversion result. 6808 The 'h' modifier indicates the argument is 16 bits. 6809 The 'l' modifier indicates the argument is 32 bits. 6810 The 'L' modifier indicates the argument is 64 bits. 6811 Generally, these modifiers are not useful. They are 6812 ignored when type is known from the argument. 6813 6814 i alias for d 6815 D alias for ld 6816 U alias for lu 6817 O alias for lo 6818 6819 *printf-c* 6820 c The Number argument is converted to a byte, and the 6821 resulting character is written. 6822 6823 *printf-s* 6824 s The text of the String argument is used. If a 6825 precision is specified, no more bytes than the number 6826 specified are used. 6827 If the argument is not a String type, it is 6828 automatically converted to text with the same format 6829 as ":echo". 6830 *printf-S* 6831 S The text of the String argument is used. If a 6832 precision is specified, no more display cells than the 6833 number specified are used. 6834 6835 *printf-f* *E807* 6836 f F The Float argument is converted into a string of the 6837 form 123.456. The precision specifies the number of 6838 digits after the decimal point. When the precision is 6839 zero the decimal point is omitted. When the precision 6840 is not specified 6 is used. A really big number 6841 (out of range or dividing by zero) results in "inf" 6842 or "-inf" with %f (INF or -INF with %F). 6843 "0.0 / 0.0" results in "nan" with %f (NAN with %F). 6844 Example: > 6845 echo printf("%.2f", 12.115) 6846< 12.12 6847 Note that roundoff depends on the system libraries. 6848 Use |round()| when in doubt. 6849 6850 *printf-e* *printf-E* 6851 e E The Float argument is converted into a string of the 6852 form 1.234e+03 or 1.234E+03 when using 'E'. The 6853 precision specifies the number of digits after the 6854 decimal point, like with 'f'. 6855 6856 *printf-g* *printf-G* 6857 g G The Float argument is converted like with 'f' if the 6858 value is between 0.001 (inclusive) and 10000000.0 6859 (exclusive). Otherwise 'e' is used for 'g' and 'E' 6860 for 'G'. When no precision is specified superfluous 6861 zeroes and '+' signs are removed, except for the zero 6862 immediately after the decimal point. Thus 10000000.0 6863 results in 1.0e7. 6864 6865 *printf-%* 6866 % A '%' is written. No argument is converted. The 6867 complete conversion specification is "%%". 6868 6869 When a Number argument is expected a String argument is also 6870 accepted and automatically converted. 6871 When a Float or String argument is expected a Number argument 6872 is also accepted and automatically converted. 6873 Any other argument type results in an error message. 6874 6875 *E766* *E767* 6876 The number of {exprN} arguments must exactly match the number 6877 of "%" items. If there are not sufficient or too many 6878 arguments an error is given. Up to 18 arguments can be used. 6879 6880 6881prompt_setcallback({buf}, {expr}) *prompt_setcallback()* 6882 Set prompt callback for buffer {buf} to {expr}. When {expr} 6883 is an empty string the callback is removed. This has only 6884 effect if {buf} has 'buftype' set to "prompt". 6885 6886 The callback is invoked when pressing Enter. The current 6887 buffer will always be the prompt buffer. A new line for a 6888 prompt is added before invoking the callback, thus the prompt 6889 for which the callback was invoked will be in the last but one 6890 line. 6891 If the callback wants to add text to the buffer, it must 6892 insert it above the last line, since that is where the current 6893 prompt is. This can also be done asynchronously. 6894 The callback is invoked with one argument, which is the text 6895 that was entered at the prompt. This can be an empty string 6896 if the user only typed Enter. 6897 Example: > 6898 call prompt_setcallback(bufnr(''), function('s:TextEntered')) 6899 func s:TextEntered(text) 6900 if a:text == 'exit' || a:text == 'quit' 6901 stopinsert 6902 close 6903 else 6904 call append(line('$') - 1, 'Entered: "' . a:text . '"') 6905 " Reset 'modified' to allow the buffer to be closed. 6906 set nomodified 6907 endif 6908 endfunc 6909 6910prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()* 6911 Set a callback for buffer {buf} to {expr}. When {expr} is an 6912 empty string the callback is removed. This has only effect if 6913 {buf} has 'buftype' set to "prompt". 6914 6915 This callback will be invoked when pressing CTRL-C in Insert 6916 mode. Without setting a callback Vim will exit Insert mode, 6917 as in any buffer. 6918 6919prompt_setprompt({buf}, {text}) *prompt_setprompt()* 6920 Set prompt for buffer {buf} to {text}. You most likely want 6921 {text} to end in a space. 6922 The result is only visible if {buf} has 'buftype' set to 6923 "prompt". Example: > 6924 call prompt_setprompt(bufnr(''), 'command: ') 6925< 6926 *prop_add()* *E965* 6927prop_add({lnum}, {col}, {props}) 6928 Attach a text property at position {lnum}, {col}. {col} is 6929 counted in bytes, use one for the first column. 6930 If {lnum} is invalid an error is given. *E966* 6931 If {col} is invalid an error is given. *E964* 6932 6933 {props} is a dictionary with these fields: 6934 length length of text in bytes, can only be used 6935 for a property that does not continue in 6936 another line; can be zero 6937 end_lnum line number for the end of text 6938 end_col column just after the text; not used when 6939 "length" is present; when {col} and "end_col" 6940 are equal, and "end_lnum" is omitted or equal 6941 to {lnum}, this is a zero-width text property 6942 bufnr buffer to add the property to; when omitted 6943 the current buffer is used 6944 id user defined ID for the property; when omitted 6945 zero is used 6946 type name of the text property type 6947 All fields except "type" are optional. 6948 6949 It is an error when both "length" and "end_lnum" or "end_col" 6950 are given. Either use "length" or "end_col" for a property 6951 within one line, or use "end_lnum" and "end_col" for a 6952 property that spans more than one line. 6953 When neither "length" nor "end_col" are given the property 6954 will be zero-width. That means it will not be highlighted but 6955 will move with the text, as a kind of mark. 6956 The property can end exactly at the last character of the 6957 text, or just after it. In the last case, if text is appended 6958 to the line, the text property size will increase, also when 6959 the property type does not have "end_incl" set. 6960 6961 "type" will first be looked up in the buffer the property is 6962 added to. When not found, the global property types are used. 6963 If not found an error is given. 6964 6965 See |text-properties| for information about text properties. 6966 6967 6968prop_clear({lnum} [, {lnum-end} [, {props}]]) *prop_clear()* 6969 Remove all text properties from line {lnum}. 6970 When {lnum-end} is given, remove all text properties from line 6971 {lnum} to {lnum-end} (inclusive). 6972 6973 When {props} contains a "bufnr" item use this buffer, 6974 otherwise use the current buffer. 6975 6976 See |text-properties| for information about text properties. 6977 6978 *prop_find()* 6979prop_find({props} [, {direction}]) 6980 NOT IMPLEMENTED YET 6981 Search for a text property as specified with {props}: 6982 id property with this ID 6983 type property with this type name 6984 bufnr buffer to search in; when present a 6985 start position with "lnum" and "col" 6986 must be given; when omitted the 6987 current buffer is used 6988 lnum start in this line (when omitted start 6989 at the cursor) 6990 col start at this column (when omitted 6991 and "lnum" is given: use column 1, 6992 otherwise start at the cursor) 6993 skipstart do not look for a match at the start 6994 position 6995 6996 {direction} can be "f" for forward and "b" for backward. When 6997 omitted forward search is performed. 6998 6999 If a match is found then a Dict is returned with the entries 7000 as with prop_list(), and additionally an "lnum" entry. 7001 If no match is found then an empty Dict is returned. 7002 7003 See |text-properties| for information about text properties. 7004 7005 7006prop_list({lnum} [, {props}]) *prop_list()* 7007 Return a List with all text properties in line {lnum}. 7008 7009 When {props} contains a "bufnr" item, use this buffer instead 7010 of the current buffer. 7011 7012 The properties are ordered by starting column and priority. 7013 Each property is a Dict with these entries: 7014 col starting column 7015 length length in bytes, one more if line break is 7016 included 7017 id property ID 7018 type name of the property type, omitted if 7019 the type was deleted 7020 start when TRUE property starts in this line 7021 end when TRUE property ends in this line 7022 7023 When "start" is zero the property started in a previous line, 7024 the current one is a continuation. 7025 When "end" is zero the property continues in the next line. 7026 The line break after this line is included. 7027 7028 See |text-properties| for information about text properties. 7029 7030 7031 *prop_remove()* *E968* 7032prop_remove({props} [, {lnum} [, {lnum-end}]]) 7033 Remove a matching text property from line {lnum}. When 7034 {lnum-end} is given, remove matching text properties from line 7035 {lnum} to {lnum-end} (inclusive). 7036 When {lnum} is omitted remove matching text properties from 7037 all lines. 7038 7039 {props} is a dictionary with these fields: 7040 id remove text properties with this ID 7041 type remove text properties with this type name 7042 bufnr use this buffer instead of the current one 7043 all when TRUE remove all matching text properties, 7044 not just the first one 7045 A property matches when either "id" or "type" matches. 7046 7047 Returns the number of properties that were removed. 7048 7049 See |text-properties| for information about text properties. 7050 7051 7052prop_type_add({name}, {props}) *prop_type_add()* *E969* *E970* 7053 Add a text property type {name}. If a property type with this 7054 name already exists an error is given. 7055 {props} is a dictionary with these optional fields: 7056 bufnr define the property only for this buffer; this 7057 avoids name collisions and automatically 7058 clears the property types when the buffer is 7059 deleted. 7060 highlight name of highlight group to use 7061 priority when a character has multiple text 7062 properties the one with the highest priority 7063 will be used; negative values can be used, the 7064 default priority is zero 7065 start_incl when TRUE inserts at the start position will 7066 be included in the text property 7067 end_incl when TRUE inserts at the end position will be 7068 included in the text property 7069 7070 See |text-properties| for information about text properties. 7071 7072 7073prop_type_change({name}, {props}) *prop_type_change()* 7074 Change properties of an existing text property type. If a 7075 property with this name does not exist an error is given. 7076 The {props} argument is just like |prop_type_add()|. 7077 7078 See |text-properties| for information about text properties. 7079 7080 7081prop_type_delete({name} [, {props}]) *prop_type_delete()* 7082 Remove the text property type {name}. When text properties 7083 using the type {name} are still in place, they will not have 7084 an effect and can no longer be removed by name. 7085 7086 {props} can contain a "bufnr" item. When it is given, delete 7087 a property type from this buffer instead of from the global 7088 property types. 7089 7090 When text property type {name} is not found there is no error. 7091 7092 See |text-properties| for information about text properties. 7093 7094 7095prop_type_get([{name} [, {props}]) *prop_type_get()* 7096 Returns the properties of property type {name}. This is a 7097 dictionary with the same fields as was given to 7098 prop_type_add(). 7099 When the property type {name} does not exist, an empty 7100 dictionary is returned. 7101 7102 {props} can contain a "bufnr" item. When it is given, use 7103 this buffer instead of the global property types. 7104 7105 See |text-properties| for information about text properties. 7106 7107 7108prop_type_list([{props}]) *prop_type_list()* 7109 Returns a list with all property type names. 7110 7111 {props} can contain a "bufnr" item. When it is given, use 7112 this buffer instead of the global property types. 7113 7114 See |text-properties| for information about text properties. 7115 7116 7117pumvisible() *pumvisible()* 7118 Returns non-zero when the popup menu is visible, zero 7119 otherwise. See |ins-completion-menu|. 7120 This can be used to avoid some things that would remove the 7121 popup menu. 7122 7123py3eval({expr}) *py3eval()* 7124 Evaluate Python expression {expr} and return its result 7125 converted to Vim data structures. 7126 Numbers and strings are returned as they are (strings are 7127 copied though, Unicode strings are additionally converted to 7128 'encoding'). 7129 Lists are represented as Vim |List| type. 7130 Dictionaries are represented as Vim |Dictionary| type with 7131 keys converted to strings. 7132 {only available when compiled with the |+python3| feature} 7133 7134 *E858* *E859* 7135pyeval({expr}) *pyeval()* 7136 Evaluate Python expression {expr} and return its result 7137 converted to Vim data structures. 7138 Numbers and strings are returned as they are (strings are 7139 copied though). 7140 Lists are represented as Vim |List| type. 7141 Dictionaries are represented as Vim |Dictionary| type, 7142 non-string keys result in error. 7143 {only available when compiled with the |+python| feature} 7144 7145pyxeval({expr}) *pyxeval()* 7146 Evaluate Python expression {expr} and return its result 7147 converted to Vim data structures. 7148 Uses Python 2 or 3, see |python_x| and 'pyxversion'. 7149 See also: |pyeval()|, |py3eval()| 7150 {only available when compiled with the |+python| or the 7151 |+python3| feature} 7152 7153 *E726* *E727* 7154range({expr} [, {max} [, {stride}]]) *range()* 7155 Returns a |List| with Numbers: 7156 - If only {expr} is specified: [0, 1, ..., {expr} - 1] 7157 - If {max} is specified: [{expr}, {expr} + 1, ..., {max}] 7158 - If {stride} is specified: [{expr}, {expr} + {stride}, ..., 7159 {max}] (increasing {expr} with {stride} each time, not 7160 producing a value past {max}). 7161 When the maximum is one before the start the result is an 7162 empty list. When the maximum is more than one before the 7163 start this is an error. 7164 Examples: > 7165 range(4) " [0, 1, 2, 3] 7166 range(2, 4) " [2, 3, 4] 7167 range(2, 9, 3) " [2, 5, 8] 7168 range(2, -2, -1) " [2, 1, 0, -1, -2] 7169 range(0) " [] 7170 range(2, 0) " error! 7171< 7172 *readfile()* 7173readfile({fname} [, {type} [, {max}]]) 7174 Read file {fname} and return a |List|, each line of the file 7175 as an item. Lines are broken at NL characters. Macintosh 7176 files separated with CR will result in a single long line 7177 (unless a NL appears somewhere). 7178 All NUL characters are replaced with a NL character. 7179 When {type} contains "b" binary mode is used: 7180 - When the last line ends in a NL an extra empty list item is 7181 added. 7182 - No CR characters are removed. 7183 When {type} contains "B" a |Blob| is returned with the binary 7184 data of the file unmodified. 7185 Otherwise: 7186 - CR characters that appear before a NL are removed. 7187 - Whether the last line ends in a NL or not does not matter. 7188 - When 'encoding' is Unicode any UTF-8 byte order mark is 7189 removed from the text. 7190 When {max} is given this specifies the maximum number of lines 7191 to be read. Useful if you only want to check the first ten 7192 lines of a file: > 7193 :for line in readfile(fname, '', 10) 7194 : if line =~ 'Date' | echo line | endif 7195 :endfor 7196< When {max} is negative -{max} lines from the end of the file 7197 are returned, or as many as there are. 7198 When {max} is zero the result is an empty list. 7199 Note that without {max} the whole file is read into memory. 7200 Also note that there is no recognition of encoding. Read a 7201 file into a buffer if you need to. 7202 When the file can't be opened an error message is given and 7203 the result is an empty list. 7204 Also see |writefile()|. 7205 7206reg_executing() *reg_executing()* 7207 Returns the single letter name of the register being executed. 7208 Returns an empty string when no register is being executed. 7209 See |@|. 7210 7211reg_recording() *reg_recording()* 7212 Returns the single letter name of the register being recorded. 7213 Returns an empty string string when not recording. See |q|. 7214 7215reltime([{start} [, {end}]]) *reltime()* 7216 Return an item that represents a time value. The format of 7217 the item depends on the system. It can be passed to 7218 |reltimestr()| to convert it to a string or |reltimefloat()| 7219 to convert to a Float. 7220 Without an argument it returns the current time. 7221 With one argument is returns the time passed since the time 7222 specified in the argument. 7223 With two arguments it returns the time passed between {start} 7224 and {end}. 7225 The {start} and {end} arguments must be values returned by 7226 reltime(). 7227 {only available when compiled with the |+reltime| feature} 7228 7229reltimefloat({time}) *reltimefloat()* 7230 Return a Float that represents the time value of {time}. 7231 Example: > 7232 let start = reltime() 7233 call MyFunction() 7234 let seconds = reltimefloat(reltime(start)) 7235< See the note of reltimestr() about overhead. 7236 Also see |profiling|. 7237 {only available when compiled with the |+reltime| feature} 7238 7239reltimestr({time}) *reltimestr()* 7240 Return a String that represents the time value of {time}. 7241 This is the number of seconds, a dot and the number of 7242 microseconds. Example: > 7243 let start = reltime() 7244 call MyFunction() 7245 echo reltimestr(reltime(start)) 7246< Note that overhead for the commands will be added to the time. 7247 The accuracy depends on the system. 7248 Leading spaces are used to make the string align nicely. You 7249 can use split() to remove it. > 7250 echo split(reltimestr(reltime(start)))[0] 7251< Also see |profiling|. 7252 {only available when compiled with the |+reltime| feature} 7253 7254 *remote_expr()* *E449* 7255remote_expr({server}, {string} [, {idvar} [, {timeout}]]) 7256 Send the {string} to {server}. The string is sent as an 7257 expression and the result is returned after evaluation. 7258 The result must be a String or a |List|. A |List| is turned 7259 into a String by joining the items with a line break in 7260 between (not at the end), like with join(expr, "\n"). 7261 If {idvar} is present and not empty, it is taken as the name 7262 of a variable and a {serverid} for later use with 7263 |remote_read()| is stored there. 7264 If {timeout} is given the read times out after this many 7265 seconds. Otherwise a timeout of 600 seconds is used. 7266 See also |clientserver| |RemoteReply|. 7267 This function is not available in the |sandbox|. 7268 {only available when compiled with the |+clientserver| feature} 7269 Note: Any errors will cause a local error message to be issued 7270 and the result will be the empty string. 7271 7272 Variables will be evaluated in the global namespace, 7273 independent of a function currently being active. Except 7274 when in debug mode, then local function variables and 7275 arguments can be evaluated. 7276 7277 Examples: > 7278 :echo remote_expr("gvim", "2+2") 7279 :echo remote_expr("gvim1", "b:current_syntax") 7280< 7281 7282remote_foreground({server}) *remote_foreground()* 7283 Move the Vim server with the name {server} to the foreground. 7284 This works like: > 7285 remote_expr({server}, "foreground()") 7286< Except that on Win32 systems the client does the work, to work 7287 around the problem that the OS doesn't always allow the server 7288 to bring itself to the foreground. 7289 Note: This does not restore the window if it was minimized, 7290 like foreground() does. 7291 This function is not available in the |sandbox|. 7292 {only in the Win32, Athena, Motif and GTK GUI versions and the 7293 Win32 console version} 7294 7295 7296remote_peek({serverid} [, {retvar}]) *remote_peek()* 7297 Returns a positive number if there are available strings 7298 from {serverid}. Copies any reply string into the variable 7299 {retvar} if specified. {retvar} must be a string with the 7300 name of a variable. 7301 Returns zero if none are available. 7302 Returns -1 if something is wrong. 7303 See also |clientserver|. 7304 This function is not available in the |sandbox|. 7305 {only available when compiled with the |+clientserver| feature} 7306 Examples: > 7307 :let repl = "" 7308 :echo "PEEK: ".remote_peek(id, "repl").": ".repl 7309 7310remote_read({serverid}, [{timeout}]) *remote_read()* 7311 Return the oldest available reply from {serverid} and consume 7312 it. Unless a {timeout} in seconds is given, it blocks until a 7313 reply is available. 7314 See also |clientserver|. 7315 This function is not available in the |sandbox|. 7316 {only available when compiled with the |+clientserver| feature} 7317 Example: > 7318 :echo remote_read(id) 7319< 7320 *remote_send()* *E241* 7321remote_send({server}, {string} [, {idvar}]) 7322 Send the {string} to {server}. The string is sent as input 7323 keys and the function returns immediately. At the Vim server 7324 the keys are not mapped |:map|. 7325 If {idvar} is present, it is taken as the name of a variable 7326 and a {serverid} for later use with remote_read() is stored 7327 there. 7328 See also |clientserver| |RemoteReply|. 7329 This function is not available in the |sandbox|. 7330 {only available when compiled with the |+clientserver| feature} 7331 7332 Note: Any errors will be reported in the server and may mess 7333 up the display. 7334 Examples: > 7335 :echo remote_send("gvim", ":DropAndReply ".file, "serverid"). 7336 \ remote_read(serverid) 7337 7338 :autocmd NONE RemoteReply * 7339 \ echo remote_read(expand("<amatch>")) 7340 :echo remote_send("gvim", ":sleep 10 | echo ". 7341 \ 'server2client(expand("<client>"), "HELLO")<CR>') 7342< 7343 *remote_startserver()* *E941* *E942* 7344remote_startserver({name}) 7345 Become the server {name}. This fails if already running as a 7346 server, when |v:servername| is not empty. 7347 {only available when compiled with the |+clientserver| feature} 7348 7349remove({list}, {idx} [, {end}]) *remove()* 7350 Without {end}: Remove the item at {idx} from |List| {list} and 7351 return the item. 7352 With {end}: Remove items from {idx} to {end} (inclusive) and 7353 return a List with these items. When {idx} points to the same 7354 item as {end} a list with one item is returned. When {end} 7355 points to an item before {idx} this is an error. 7356 See |list-index| for possible values of {idx} and {end}. 7357 Example: > 7358 :echo "last item: " . remove(mylist, -1) 7359 :call remove(mylist, 0, 9) 7360< 7361 Use |delete()| to remove a file. 7362 7363remove({blob}, {idx} [, {end}]) 7364 Without {end}: Remove the byte at {idx} from |Blob| {blob} and 7365 return the byte. 7366 With {end}: Remove bytes from {idx} to {end} (inclusive) and 7367 return a |Blob| with these bytes. When {idx} points to the same 7368 byte as {end} a |Blob| with one byte is returned. When {end} 7369 points to a byte before {idx} this is an error. 7370 Example: > 7371 :echo "last byte: " . remove(myblob, -1) 7372 :call remove(mylist, 0, 9) 7373 7374remove({dict}, {key}) 7375 Remove the entry from {dict} with key {key}. Example: > 7376 :echo "removed " . remove(dict, "one") 7377< If there is no {key} in {dict} this is an error. 7378 7379rename({from}, {to}) *rename()* 7380 Rename the file by the name {from} to the name {to}. This 7381 should also work to move files across file systems. The 7382 result is a Number, which is 0 if the file was renamed 7383 successfully, and non-zero when the renaming failed. 7384 NOTE: If {to} exists it is overwritten without warning. 7385 This function is not available in the |sandbox|. 7386 7387repeat({expr}, {count}) *repeat()* 7388 Repeat {expr} {count} times and return the concatenated 7389 result. Example: > 7390 :let separator = repeat('-', 80) 7391< When {count} is zero or negative the result is empty. 7392 When {expr} is a |List| the result is {expr} concatenated 7393 {count} times. Example: > 7394 :let longlist = repeat(['a', 'b'], 3) 7395< Results in ['a', 'b', 'a', 'b', 'a', 'b']. 7396 7397 7398resolve({filename}) *resolve()* *E655* 7399 On MS-Windows, when {filename} is a shortcut (a .lnk file), 7400 returns the path the shortcut points to in a simplified form. 7401 When {filename} is a symbolic link or junction point, return 7402 the full path to the target. If the target of junction is 7403 removed, return {filename}. 7404 On Unix, repeat resolving symbolic links in all path 7405 components of {filename} and return the simplified result. 7406 To cope with link cycles, resolving of symbolic links is 7407 stopped after 100 iterations. 7408 On other systems, return the simplified {filename}. 7409 The simplification step is done as by |simplify()|. 7410 resolve() keeps a leading path component specifying the 7411 current directory (provided the result is still a relative 7412 path name) and also keeps a trailing path separator. 7413 7414 *reverse()* 7415reverse({object}) 7416 Reverse the order of items in {object} in-place. 7417 {object} can be a |List| or a |Blob|. 7418 Returns {object}. 7419 If you want an object to remain unmodified make a copy first: > 7420 :let revlist = reverse(copy(mylist)) 7421 7422round({expr}) *round()* 7423 Round off {expr} to the nearest integral value and return it 7424 as a |Float|. If {expr} lies halfway between two integral 7425 values, then use the larger one (away from zero). 7426 {expr} must evaluate to a |Float| or a |Number|. 7427 Examples: > 7428 echo round(0.456) 7429< 0.0 > 7430 echo round(4.5) 7431< 5.0 > 7432 echo round(-4.5) 7433< -5.0 7434 {only available when compiled with the |+float| feature} 7435 7436rubyeval({expr}) *rubyeval()* 7437 Evaluate Ruby expression {expr} and return its result 7438 converted to Vim data structures. 7439 Numbers, floats and strings are returned as they are (strings 7440 are copied though). 7441 Arrays are represented as Vim |List| type. 7442 Hashes are represented as Vim |Dictionary| type. 7443 Other objects are represented as strings resulted from their 7444 "Object#to_s" method. 7445 {only available when compiled with the |+ruby| feature} 7446 7447screenattr({row}, {col}) *screenattr()* 7448 Like |screenchar()|, but return the attribute. This is a rather 7449 arbitrary number that can only be used to compare to the 7450 attribute at other positions. 7451 7452screenchar({row}, {col}) *screenchar()* 7453 The result is a Number, which is the character at position 7454 [row, col] on the screen. This works for every possible 7455 screen position, also status lines, window separators and the 7456 command line. The top left position is row one, column one 7457 The character excludes composing characters. For double-byte 7458 encodings it may only be the first byte. 7459 This is mainly to be used for testing. 7460 Returns -1 when row or col is out of range. 7461 7462screencol() *screencol()* 7463 The result is a Number, which is the current screen column of 7464 the cursor. The leftmost column has number 1. 7465 This function is mainly used for testing. 7466 7467 Note: Always returns the current screen column, thus if used 7468 in a command (e.g. ":echo screencol()") it will return the 7469 column inside the command line, which is 1 when the command is 7470 executed. To get the cursor position in the file use one of 7471 the following mappings: > 7472 nnoremap <expr> GG ":echom ".screencol()."\n" 7473 nnoremap <silent> GG :echom screencol()<CR> 7474< 7475screenrow() *screenrow()* 7476 The result is a Number, which is the current screen row of the 7477 cursor. The top line has number one. 7478 This function is mainly used for testing. 7479 Alternatively you can use |winline()|. 7480 7481 Note: Same restrictions as with |screencol()|. 7482 7483search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()* 7484 Search for regexp pattern {pattern}. The search starts at the 7485 cursor position (you can use |cursor()| to set it). 7486 7487 When a match has been found its line number is returned. 7488 If there is no match a 0 is returned and the cursor doesn't 7489 move. No error message is given. 7490 7491 {flags} is a String, which can contain these character flags: 7492 'b' search Backward instead of forward 7493 'c' accept a match at the Cursor position 7494 'e' move to the End of the match 7495 'n' do Not move the cursor 7496 'p' return number of matching sub-Pattern (see below) 7497 's' Set the ' mark at the previous location of the cursor 7498 'w' Wrap around the end of the file 7499 'W' don't Wrap around the end of the file 7500 'z' start searching at the cursor column instead of zero 7501 If neither 'w' or 'W' is given, the 'wrapscan' option applies. 7502 7503 If the 's' flag is supplied, the ' mark is set, only if the 7504 cursor is moved. The 's' flag cannot be combined with the 'n' 7505 flag. 7506 7507 'ignorecase', 'smartcase' and 'magic' are used. 7508 7509 When the 'z' flag is not given, searching always starts in 7510 column zero and then matches before the cursor are skipped. 7511 When the 'c' flag is present in 'cpo' the next search starts 7512 after the match. Without the 'c' flag the next search starts 7513 one column further. 7514 7515 When the {stopline} argument is given then the search stops 7516 after searching this line. This is useful to restrict the 7517 search to a range of lines. Examples: > 7518 let match = search('(', 'b', line("w0")) 7519 let end = search('END', '', line("w$")) 7520< When {stopline} is used and it is not zero this also implies 7521 that the search does not wrap around the end of the file. 7522 A zero value is equal to not giving the argument. 7523 7524 When the {timeout} argument is given the search stops when 7525 more than this many milliseconds have passed. Thus when 7526 {timeout} is 500 the search stops after half a second. 7527 The value must not be negative. A zero value is like not 7528 giving the argument. 7529 {only available when compiled with the |+reltime| feature} 7530 7531 *search()-sub-match* 7532 With the 'p' flag the returned value is one more than the 7533 first sub-match in \(\). One if none of them matched but the 7534 whole pattern did match. 7535 To get the column number too use |searchpos()|. 7536 7537 The cursor will be positioned at the match, unless the 'n' 7538 flag is used. 7539 7540 Example (goes over all files in the argument list): > 7541 :let n = 1 7542 :while n <= argc() " loop over all files in arglist 7543 : exe "argument " . n 7544 : " start at the last char in the file and wrap for the 7545 : " first search to find match at start of file 7546 : normal G$ 7547 : let flags = "w" 7548 : while search("foo", flags) > 0 7549 : s/foo/bar/g 7550 : let flags = "W" 7551 : endwhile 7552 : update " write the file if modified 7553 : let n = n + 1 7554 :endwhile 7555< 7556 Example for using some flags: > 7557 :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe') 7558< This will search for the keywords "if", "else", and "endif" 7559 under or after the cursor. Because of the 'p' flag, it 7560 returns 1, 2, or 3 depending on which keyword is found, or 0 7561 if the search fails. With the cursor on the first word of the 7562 line: 7563 if (foo == 0) | let foo = foo + 1 | endif ~ 7564 the function returns 1. Without the 'c' flag, the function 7565 finds the "endif" and returns 3. The same thing happens 7566 without the 'e' flag if the cursor is on the "f" of "if". 7567 The 'n' flag tells the function not to move the cursor. 7568 7569 7570searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()* 7571 Search for the declaration of {name}. 7572 7573 With a non-zero {global} argument it works like |gD|, find 7574 first match in the file. Otherwise it works like |gd|, find 7575 first match in the function. 7576 7577 With a non-zero {thisblock} argument matches in a {} block 7578 that ends before the cursor position are ignored. Avoids 7579 finding variable declarations only valid in another scope. 7580 7581 Moves the cursor to the found match. 7582 Returns zero for success, non-zero for failure. 7583 Example: > 7584 if searchdecl('myvar') == 0 7585 echo getline('.') 7586 endif 7587< 7588 *searchpair()* 7589searchpair({start}, {middle}, {end} [, {flags} [, {skip} 7590 [, {stopline} [, {timeout}]]]]) 7591 Search for the match of a nested start-end pair. This can be 7592 used to find the "endif" that matches an "if", while other 7593 if/endif pairs in between are ignored. 7594 The search starts at the cursor. The default is to search 7595 forward, include 'b' in {flags} to search backward. 7596 If a match is found, the cursor is positioned at it and the 7597 line number is returned. If no match is found 0 or -1 is 7598 returned and the cursor doesn't move. No error message is 7599 given. 7600 7601 {start}, {middle} and {end} are patterns, see |pattern|. They 7602 must not contain \( \) pairs. Use of \%( \) is allowed. When 7603 {middle} is not empty, it is found when searching from either 7604 direction, but only when not in a nested start-end pair. A 7605 typical use is: > 7606 searchpair('\<if\>', '\<else\>', '\<endif\>') 7607< By leaving {middle} empty the "else" is skipped. 7608 7609 {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with 7610 |search()|. Additionally: 7611 'r' Repeat until no more matches found; will find the 7612 outer pair. Implies the 'W' flag. 7613 'm' Return number of matches instead of line number with 7614 the match; will be > 1 when 'r' is used. 7615 Note: it's nearly always a good idea to use the 'W' flag, to 7616 avoid wrapping around the end of the file. 7617 7618 When a match for {start}, {middle} or {end} is found, the 7619 {skip} expression is evaluated with the cursor positioned on 7620 the start of the match. It should return non-zero if this 7621 match is to be skipped. E.g., because it is inside a comment 7622 or a string. 7623 When {skip} is omitted or empty, every match is accepted. 7624 When evaluating {skip} causes an error the search is aborted 7625 and -1 returned. 7626 {skip} can be a string, a lambda, a funcref or a partial. 7627 Anything else makes the function fail. 7628 7629 For {stopline} and {timeout} see |search()|. 7630 7631 The value of 'ignorecase' is used. 'magic' is ignored, the 7632 patterns are used like it's on. 7633 7634 The search starts exactly at the cursor. A match with 7635 {start}, {middle} or {end} at the next character, in the 7636 direction of searching, is the first one found. Example: > 7637 if 1 7638 if 2 7639 endif 2 7640 endif 1 7641< When starting at the "if 2", with the cursor on the "i", and 7642 searching forwards, the "endif 2" is found. When starting on 7643 the character just before the "if 2", the "endif 1" will be 7644 found. That's because the "if 2" will be found first, and 7645 then this is considered to be a nested if/endif from "if 2" to 7646 "endif 2". 7647 When searching backwards and {end} is more than one character, 7648 it may be useful to put "\zs" at the end of the pattern, so 7649 that when the cursor is inside a match with the end it finds 7650 the matching start. 7651 7652 Example, to find the "endif" command in a Vim script: > 7653 7654 :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W', 7655 \ 'getline(".") =~ "^\\s*\""') 7656 7657< The cursor must be at or after the "if" for which a match is 7658 to be found. Note that single-quote strings are used to avoid 7659 having to double the backslashes. The skip expression only 7660 catches comments at the start of a line, not after a command. 7661 Also, a word "en" or "if" halfway a line is considered a 7662 match. 7663 Another example, to search for the matching "{" of a "}": > 7664 7665 :echo searchpair('{', '', '}', 'bW') 7666 7667< This works when the cursor is at or before the "}" for which a 7668 match is to be found. To reject matches that syntax 7669 highlighting recognized as strings: > 7670 7671 :echo searchpair('{', '', '}', 'bW', 7672 \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"') 7673< 7674 *searchpairpos()* 7675searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} 7676 [, {stopline} [, {timeout}]]]]) 7677 Same as |searchpair()|, but returns a |List| with the line and 7678 column position of the match. The first element of the |List| 7679 is the line number and the second element is the byte index of 7680 the column position of the match. If no match is found, 7681 returns [0, 0]. > 7682 7683 :let [lnum,col] = searchpairpos('{', '', '}', 'n') 7684< 7685 See |match-parens| for a bigger and more useful example. 7686 7687searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()* 7688 Same as |search()|, but returns a |List| with the line and 7689 column position of the match. The first element of the |List| 7690 is the line number and the second element is the byte index of 7691 the column position of the match. If no match is found, 7692 returns [0, 0]. 7693 Example: > 7694 :let [lnum, col] = searchpos('mypattern', 'n') 7695 7696< When the 'p' flag is given then there is an extra item with 7697 the sub-pattern match number |search()-sub-match|. Example: > 7698 :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np') 7699< In this example "submatch" is 2 when a lowercase letter is 7700 found |/\l|, 3 when an uppercase letter is found |/\u|. 7701 7702server2client({clientid}, {string}) *server2client()* 7703 Send a reply string to {clientid}. The most recent {clientid} 7704 that sent a string can be retrieved with expand("<client>"). 7705 {only available when compiled with the |+clientserver| feature} 7706 Note: 7707 This id has to be stored before the next command can be 7708 received. I.e. before returning from the received command and 7709 before calling any commands that waits for input. 7710 See also |clientserver|. 7711 Example: > 7712 :echo server2client(expand("<client>"), "HELLO") 7713< 7714serverlist() *serverlist()* 7715 Return a list of available server names, one per line. 7716 When there are no servers or the information is not available 7717 an empty string is returned. See also |clientserver|. 7718 {only available when compiled with the |+clientserver| feature} 7719 Example: > 7720 :echo serverlist() 7721< 7722setbufline({expr}, {lnum}, {text}) *setbufline()* 7723 Set line {lnum} to {text} in buffer {expr}. To insert 7724 lines use |append()|. Any text properties in {lnum} are 7725 cleared. 7726 7727 For the use of {expr}, see |bufname()| above. 7728 7729 {lnum} is used like with |setline()|. 7730 This works like |setline()| for the specified buffer. 7731 On success 0 is returned, on failure 1 is returned. 7732 7733 If {expr} is not a valid buffer or {lnum} is not valid, an 7734 error message is given. 7735 7736setbufvar({expr}, {varname}, {val}) *setbufvar()* 7737 Set option or local variable {varname} in buffer {expr} to 7738 {val}. 7739 This also works for a global or local window option, but it 7740 doesn't work for a global or local window variable. 7741 For a local window option the global value is unchanged. 7742 For the use of {expr}, see |bufname()| above. 7743 Note that the variable name without "b:" must be used. 7744 Examples: > 7745 :call setbufvar(1, "&mod", 1) 7746 :call setbufvar("todo", "myvar", "foobar") 7747< This function is not available in the |sandbox|. 7748 7749setcharsearch({dict}) *setcharsearch()* 7750 Set the current character search information to {dict}, 7751 which contains one or more of the following entries: 7752 7753 char character which will be used for a subsequent 7754 |,| or |;| command; an empty string clears the 7755 character search 7756 forward direction of character search; 1 for forward, 7757 0 for backward 7758 until type of character search; 1 for a |t| or |T| 7759 character search, 0 for an |f| or |F| 7760 character search 7761 7762 This can be useful to save/restore a user's character search 7763 from a script: > 7764 :let prevsearch = getcharsearch() 7765 :" Perform a command which clobbers user's search 7766 :call setcharsearch(prevsearch) 7767< Also see |getcharsearch()|. 7768 7769setcmdpos({pos}) *setcmdpos()* 7770 Set the cursor position in the command line to byte position 7771 {pos}. The first position is 1. 7772 Use |getcmdpos()| to obtain the current position. 7773 Only works while editing the command line, thus you must use 7774 |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='. For 7775 |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is 7776 set after the command line is set to the expression. For 7777 |c_CTRL-R_=| it is set after evaluating the expression but 7778 before inserting the resulting text. 7779 When the number is too big the cursor is put at the end of the 7780 line. A number smaller than one has undefined results. 7781 Returns 0 when successful, 1 when not editing the command 7782 line. 7783 7784setfperm({fname}, {mode}) *setfperm()* *chmod* 7785 Set the file permissions for {fname} to {mode}. 7786 {mode} must be a string with 9 characters. It is of the form 7787 "rwxrwxrwx", where each group of "rwx" flags represent, in 7788 turn, the permissions of the owner of the file, the group the 7789 file belongs to, and other users. A '-' character means the 7790 permission is off, any other character means on. Multi-byte 7791 characters are not supported. 7792 7793 For example "rw-r-----" means read-write for the user, 7794 readable by the group, not accessible by others. "xx-x-----" 7795 would do the same thing. 7796 7797 Returns non-zero for success, zero for failure. 7798 7799 To read permissions see |getfperm()|. 7800 7801 7802setline({lnum}, {text}) *setline()* 7803 Set line {lnum} of the current buffer to {text}. To insert 7804 lines use |append()|. To set lines in another buffer use 7805 |setbufline()|. Any text properties in {lnum} are cleared. 7806 7807 {lnum} is used like with |getline()|. 7808 When {lnum} is just below the last line the {text} will be 7809 added as a new line. 7810 7811 If this succeeds, 0 is returned. If this fails (most likely 7812 because {lnum} is invalid) 1 is returned. 7813 7814 Example: > 7815 :call setline(5, strftime("%c")) 7816 7817< When {text} is a |List| then line {lnum} and following lines 7818 will be set to the items in the list. Example: > 7819 :call setline(5, ['aaa', 'bbb', 'ccc']) 7820< This is equivalent to: > 7821 :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']] 7822 : call setline(n, l) 7823 :endfor 7824 7825< Note: The '[ and '] marks are not set. 7826 7827setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()* 7828 Create or replace or add to the location list for window {nr}. 7829 {nr} can be the window number or the |window-ID|. 7830 When {nr} is zero the current window is used. 7831 7832 For a location list window, the displayed location list is 7833 modified. For an invalid window number {nr}, -1 is returned. 7834 Otherwise, same as |setqflist()|. 7835 Also see |location-list|. 7836 7837 If the optional {what} dictionary argument is supplied, then 7838 only the items listed in {what} are set. Refer to |setqflist()| 7839 for the list of supported keys in {what}. 7840 7841setmatches({list}) *setmatches()* 7842 Restores a list of matches saved by |getmatches()|. Returns 0 7843 if successful, otherwise -1. All current matches are cleared 7844 before the list is restored. See example for |getmatches()|. 7845 7846 *setpos()* 7847setpos({expr}, {list}) 7848 Set the position for {expr}. Possible values: 7849 . the cursor 7850 'x mark x 7851 7852 {list} must be a |List| with four or five numbers: 7853 [bufnum, lnum, col, off] 7854 [bufnum, lnum, col, off, curswant] 7855 7856 "bufnum" is the buffer number. Zero can be used for the 7857 current buffer. When setting an uppercase mark "bufnum" is 7858 used for the mark position. For other marks it specifies the 7859 buffer to set the mark in. You can use the |bufnr()| function 7860 to turn a file name into a buffer number. 7861 For setting the cursor and the ' mark "bufnum" is ignored, 7862 since these are associated with a window, not a buffer. 7863 Does not change the jumplist. 7864 7865 "lnum" and "col" are the position in the buffer. The first 7866 column is 1. Use a zero "lnum" to delete a mark. If "col" is 7867 smaller than 1 then 1 is used. 7868 7869 The "off" number is only used when 'virtualedit' is set. Then 7870 it is the offset in screen columns from the start of the 7871 character. E.g., a position within a <Tab> or after the last 7872 character. 7873 7874 The "curswant" number is only used when setting the cursor 7875 position. It sets the preferred column for when moving the 7876 cursor vertically. When the "curswant" number is missing the 7877 preferred column is not set. When it is present and setting a 7878 mark position it is not used. 7879 7880 Note that for '< and '> changing the line number may result in 7881 the marks to be effectively be swapped, so that '< is always 7882 before '>. 7883 7884 Returns 0 when the position could be set, -1 otherwise. 7885 An error message is given if {expr} is invalid. 7886 7887 Also see |getpos()| and |getcurpos()|. 7888 7889 This does not restore the preferred column for moving 7890 vertically; if you set the cursor position with this, |j| and 7891 |k| motions will jump to previous columns! Use |cursor()| to 7892 also set the preferred column. Also see the "curswant" key in 7893 |winrestview()|. 7894 7895setqflist({list} [, {action} [, {what}]]) *setqflist()* 7896 Create or replace or add to the quickfix list. 7897 7898 When {what} is not present, use the items in {list}. Each 7899 item must be a dictionary. Non-dictionary items in {list} are 7900 ignored. Each dictionary item can contain the following 7901 entries: 7902 7903 bufnr buffer number; must be the number of a valid 7904 buffer 7905 filename name of a file; only used when "bufnr" is not 7906 present or it is invalid. 7907 module name of a module; if given it will be used in 7908 quickfix error window instead of the filename. 7909 lnum line number in the file 7910 pattern search pattern used to locate the error 7911 col column number 7912 vcol when non-zero: "col" is visual column 7913 when zero: "col" is byte index 7914 nr error number 7915 text description of the error 7916 type single-character error type, 'E', 'W', etc. 7917 valid recognized error message 7918 7919 The "col", "vcol", "nr", "type" and "text" entries are 7920 optional. Either "lnum" or "pattern" entry can be used to 7921 locate a matching error line. 7922 If the "filename" and "bufnr" entries are not present or 7923 neither the "lnum" or "pattern" entries are present, then the 7924 item will not be handled as an error line. 7925 If both "pattern" and "lnum" are present then "pattern" will 7926 be used. 7927 If the "valid" entry is not supplied, then the valid flag is 7928 set when "bufnr" is a valid buffer or "filename" exists. 7929 If you supply an empty {list}, the quickfix list will be 7930 cleared. 7931 Note that the list is not exactly the same as what 7932 |getqflist()| returns. 7933 7934 {action} values: *E927* 7935 'a' The items from {list} are added to the existing 7936 quickfix list. If there is no existing list, then a 7937 new list is created. 7938 7939 'r' The items from the current quickfix list are replaced 7940 with the items from {list}. This can also be used to 7941 clear the list: > 7942 :call setqflist([], 'r') 7943< 7944 'f' All the quickfix lists in the quickfix stack are 7945 freed. 7946 7947 If {action} is not present or is set to ' ', then a new list 7948 is created. The new quickfix list is added after the current 7949 quickfix list in the stack and all the following lists are 7950 freed. To add a new quickfix list at the end of the stack, 7951 set "nr" in {what} to "$". 7952 7953 If the optional {what} dictionary argument is supplied, then 7954 only the items listed in {what} are set. The first {list} 7955 argument is ignored. The following items can be specified in 7956 {what}: 7957 context quickfix list context. See |quickfix-context| 7958 efm errorformat to use when parsing text from 7959 "lines". If this is not present, then the 7960 'errorformat' option value is used. 7961 See |quickfix-parse| 7962 id quickfix list identifier |quickfix-ID| 7963 idx index of the current entry in the quickfix 7964 list specified by 'id' or 'nr'. If set to '$', 7965 then the last entry in the list is set as the 7966 current entry. See |quickfix-index| 7967 items list of quickfix entries. Same as the {list} 7968 argument. 7969 lines use 'errorformat' to parse a list of lines and 7970 add the resulting entries to the quickfix list 7971 {nr} or {id}. Only a |List| value is supported. 7972 See |quickfix-parse| 7973 nr list number in the quickfix stack; zero 7974 means the current quickfix list and "$" means 7975 the last quickfix list. 7976 title quickfix list title text. See |quickfix-title| 7977 Unsupported keys in {what} are ignored. 7978 If the "nr" item is not present, then the current quickfix list 7979 is modified. When creating a new quickfix list, "nr" can be 7980 set to a value one greater than the quickfix stack size. 7981 When modifying a quickfix list, to guarantee that the correct 7982 list is modified, "id" should be used instead of "nr" to 7983 specify the list. 7984 7985 Examples (See also |setqflist-examples|): > 7986 :call setqflist([], 'r', {'title': 'My search'}) 7987 :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'}) 7988 :call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]}) 7989< 7990 Returns zero for success, -1 for failure. 7991 7992 This function can be used to create a quickfix list 7993 independent of the 'errorformat' setting. Use a command like 7994 `:cc 1` to jump to the first position. 7995 7996 7997 *setreg()* 7998setreg({regname}, {value} [, {options}]) 7999 Set the register {regname} to {value}. 8000 {value} may be any value returned by |getreg()|, including 8001 a |List|. 8002 If {options} contains "a" or {regname} is upper case, 8003 then the value is appended. 8004 {options} can also contain a register type specification: 8005 "c" or "v" |characterwise| mode 8006 "l" or "V" |linewise| mode 8007 "b" or "<CTRL-V>" |blockwise-visual| mode 8008 If a number immediately follows "b" or "<CTRL-V>" then this is 8009 used as the width of the selection - if it is not specified 8010 then the width of the block is set to the number of characters 8011 in the longest line (counting a <Tab> as 1 character). 8012 8013 If {options} contains no register settings, then the default 8014 is to use character mode unless {value} ends in a <NL> for 8015 string {value} and linewise mode for list {value}. Blockwise 8016 mode is never selected automatically. 8017 Returns zero for success, non-zero for failure. 8018 8019 *E883* 8020 Note: you may not use |List| containing more than one item to 8021 set search and expression registers. Lists containing no 8022 items act like empty strings. 8023 8024 Examples: > 8025 :call setreg(v:register, @*) 8026 :call setreg('*', @%, 'ac') 8027 :call setreg('a', "1\n2\n3", 'b5') 8028 8029< This example shows using the functions to save and restore a 8030 register: > 8031 :let var_a = getreg('a', 1, 1) 8032 :let var_amode = getregtype('a') 8033 .... 8034 :call setreg('a', var_a, var_amode) 8035< Note: you may not reliably restore register value 8036 without using the third argument to |getreg()| as without it 8037 newlines are represented as newlines AND Nul bytes are 8038 represented as newlines as well, see |NL-used-for-Nul|. 8039 8040 You can also change the type of a register by appending 8041 nothing: > 8042 :call setreg('a', '', 'al') 8043 8044settabvar({tabnr}, {varname}, {val}) *settabvar()* 8045 Set tab-local variable {varname} to {val} in tab page {tabnr}. 8046 |t:var| 8047 Note that the variable name without "t:" must be used. 8048 Tabs are numbered starting with one. 8049 This function is not available in the |sandbox|. 8050 8051settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()* 8052 Set option or local variable {varname} in window {winnr} to 8053 {val}. 8054 Tabs are numbered starting with one. For the current tabpage 8055 use |setwinvar()|. 8056 {winnr} can be the window number or the |window-ID|. 8057 When {winnr} is zero the current window is used. 8058 This also works for a global or local buffer option, but it 8059 doesn't work for a global or local buffer variable. 8060 For a local buffer option the global value is unchanged. 8061 Note that the variable name without "w:" must be used. 8062 Examples: > 8063 :call settabwinvar(1, 1, "&list", 0) 8064 :call settabwinvar(3, 2, "myvar", "foobar") 8065< This function is not available in the |sandbox|. 8066 8067settagstack({nr}, {dict} [, {action}]) *settagstack()* 8068 Modify the tag stack of the window {nr} using {dict}. 8069 {nr} can be the window number or the |window-ID|. 8070 8071 For a list of supported items in {dict}, refer to 8072 |gettagstack()| 8073 *E962* 8074 If {action} is not present or is set to 'r', then the tag 8075 stack is replaced. If {action} is set to 'a', then new entries 8076 from {dict} are pushed onto the tag stack. 8077 8078 Returns zero for success, -1 for failure. 8079 8080 Examples: 8081 Set current index of the tag stack to 4: > 8082 call settagstack(1005, {'curidx' : 4}) 8083 8084< Empty the tag stack of window 3: > 8085 call settagstack(3, {'items' : []}) 8086 8087< Push a new item onto the tag stack: > 8088 let pos = [bufnr('myfile.txt'), 10, 1, 0] 8089 let newtag = [{'tagname' : 'mytag', 'from' : pos}] 8090 call settagstack(2, {'items' : newtag}, 'a') 8091 8092< Save and restore the tag stack: > 8093 let stack = gettagstack(1003) 8094 " do something else 8095 call settagstack(1003, stack) 8096 unlet stack 8097< 8098setwinvar({nr}, {varname}, {val}) *setwinvar()* 8099 Like |settabwinvar()| for the current tab page. 8100 Examples: > 8101 :call setwinvar(1, "&list", 0) 8102 :call setwinvar(2, "myvar", "foobar") 8103 8104sha256({string}) *sha256()* 8105 Returns a String with 64 hex characters, which is the SHA256 8106 checksum of {string}. 8107 {only available when compiled with the |+cryptv| feature} 8108 8109shellescape({string} [, {special}]) *shellescape()* 8110 Escape {string} for use as a shell command argument. 8111 On MS-Windows and MS-DOS, when 'shellslash' is not set, it 8112 will enclose {string} in double quotes and double all double 8113 quotes within {string}. 8114 Otherwise it will enclose {string} in single quotes and 8115 replace all "'" with "'\''". 8116 8117 When the {special} argument is present and it's a non-zero 8118 Number or a non-empty String (|non-zero-arg|), then special 8119 items such as "!", "%", "#" and "<cword>" will be preceded by 8120 a backslash. This backslash will be removed again by the |:!| 8121 command. 8122 8123 The "!" character will be escaped (again with a |non-zero-arg| 8124 {special}) when 'shell' contains "csh" in the tail. That is 8125 because for csh and tcsh "!" is used for history replacement 8126 even when inside single quotes. 8127 8128 With a |non-zero-arg| {special} the <NL> character is also 8129 escaped. When 'shell' containing "csh" in the tail it's 8130 escaped a second time. 8131 8132 Example of use with a |:!| command: > 8133 :exe '!dir ' . shellescape(expand('<cfile>'), 1) 8134< This results in a directory listing for the file under the 8135 cursor. Example of use with |system()|: > 8136 :call system("chmod +w -- " . shellescape(expand("%"))) 8137< See also |::S|. 8138 8139 8140shiftwidth([{col}]) *shiftwidth()* 8141 Returns the effective value of 'shiftwidth'. This is the 8142 'shiftwidth' value unless it is zero, in which case it is the 8143 'tabstop' value. This function was introduced with patch 8144 7.3.694 in 2012, everybody should have it by now (however it 8145 did not allow for the optional {col} argument until 8.1.542). 8146 8147 When there is one argument {col} this is used as column number 8148 for which to return the 'shiftwidth' value. This matters for the 8149 'vartabstop' feature. If the 'vartabstop' setting is enabled and 8150 no {col} argument is given, column 1 will be assumed. 8151 8152sign_define({name} [, {dict}]) *sign_define()* 8153 Define a new sign named {name} or modify the attributes of an 8154 existing sign. This is similar to the |:sign-define| command. 8155 8156 Prefix {name} with a unique text to avoid name collisions. 8157 There is no {group} like with placing signs. 8158 8159 The {name} can be a String or a Number. The optional {dict} 8160 argument specifies the sign attributes. The following values 8161 are supported: 8162 icon full path to the bitmap file for the sign. 8163 linehl highlight group used for the whole line the 8164 sign is placed in. 8165 text text that is displayed when there is no icon 8166 or the GUI is not being used. 8167 texthl highlight group used for the text item 8168 8169 If the sign named {name} already exists, then the attributes 8170 of the sign are updated. 8171 8172 Returns 0 on success and -1 on failure. 8173 8174 Examples: > 8175 call sign_define("mySign", {"text" : "=>", "texthl" : 8176 \ "Error", "linehl" : "Search"}) 8177< 8178sign_getdefined([{name}]) *sign_getdefined()* 8179 Get a list of defined signs and their attributes. 8180 This is similar to the |:sign-list| command. 8181 8182 If the {name} is not supplied, then a list of all the defined 8183 signs is returned. Otherwise the attribute of the specified 8184 sign is returned. 8185 8186 Each list item in the returned value is a dictionary with the 8187 following entries: 8188 icon full path to the bitmap file of the sign 8189 linehl highlight group used for the whole line the 8190 sign is placed in. 8191 name name of the sign 8192 text text that is displayed when there is no icon 8193 or the GUI is not being used. 8194 texthl highlight group used for the text item 8195 8196 Returns an empty List if there are no signs and when {name} is 8197 not found. 8198 8199 Examples: > 8200 " Get a list of all the defined signs 8201 echo sign_getdefined() 8202 8203 " Get the attribute of the sign named mySign 8204 echo sign_getdefined("mySign") 8205< 8206sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()* 8207 Return a list of signs placed in a buffer or all the buffers. 8208 This is similar to the |:sign-place-list| command. 8209 8210 If the optional buffer name {expr} is specified, then only the 8211 list of signs placed in that buffer is returned. For the use 8212 of {expr}, see |bufname()|. The optional {dict} can contain 8213 the following entries: 8214 group select only signs in this group 8215 id select sign with this identifier 8216 lnum select signs placed in this line. For the use 8217 of {lnum}, see |line()|. 8218 If {group} is '*', then signs in all the groups including the 8219 global group are returned. If {group} is not supplied or is an 8220 empty string, then only signs in the global group are 8221 returned. If no arguments are supplied, then signs in the 8222 global group placed in all the buffers are returned. 8223 See |sign-group|. 8224 8225 Each list item in the returned value is a dictionary with the 8226 following entries: 8227 bufnr number of the buffer with the sign 8228 signs list of signs placed in {bufnr}. Each list 8229 item is a dictionary with the below listed 8230 entries 8231 8232 The dictionary for each sign contains the following entries: 8233 group sign group. Set to '' for the global group. 8234 id identifier of the sign 8235 lnum line number where the sign is placed 8236 name name of the defined sign 8237 priority sign priority 8238 8239 The returned signs in a buffer are ordered by their line 8240 number. 8241 8242 Returns an empty list on failure or if there are no placed 8243 signs. 8244 8245 Examples: > 8246 " Get a List of signs placed in eval.c in the 8247 " global group 8248 echo sign_getplaced("eval.c") 8249 8250 " Get a List of signs in group 'g1' placed in eval.c 8251 echo sign_getplaced("eval.c", {'group' : 'g1'}) 8252 8253 " Get a List of signs placed at line 10 in eval.c 8254 echo sign_getplaced("eval.c", {'lnum' : 10}) 8255 8256 " Get sign with identifier 10 placed in a.py 8257 echo sign_getplaced("a.py", {'id' : 10}) 8258 8259 " Get sign with id 20 in group 'g1' placed in a.py 8260 echo sign_getplaced("a.py", {'group' : 'g1', 8261 \ 'id' : 20}) 8262 8263 " Get a List of all the placed signs 8264 echo sign_getplaced() 8265< 8266 *sign_jump()* 8267sign_jump({id}, {group}, {expr}) 8268 Open the buffer {expr} or jump to the window that contains 8269 {expr} and position the cursor at sign {id} in group {group}. 8270 This is similar to the |:sign-jump| command. 8271 8272 For the use of {expr}, see |bufname()|. 8273 8274 Returns the line number of the sign. Returns -1 if the 8275 arguments are invalid. 8276 8277 Example: > 8278 " Jump to sign 10 in the current buffer 8279 call sign_jump(10, '', '') 8280< 8281 *sign_place()* 8282sign_place({id}, {group}, {name}, {expr} [, {dict}]) 8283 Place the sign defined as {name} at line {lnum} in file {expr} 8284 and assign {id} and {group} to sign. This is similar to the 8285 |:sign-place| command. 8286 8287 If the sign identifier {id} is zero, then a new identifier is 8288 allocated. Otherwise the specified number is used. {group} is 8289 the sign group name. To use the global sign group, use an 8290 empty string. {group} functions as a namespace for {id}, thus 8291 two groups can use the same IDs. Refer to |sign-identifier| 8292 and |sign-group| for more information. 8293 8294 {name} refers to a defined sign. 8295 {expr} refers to a buffer name or number. For the accepted 8296 values, see |bufname()|. 8297 8298 The optional {dict} argument supports the following entries: 8299 lnum line number in the buffer {expr} where 8300 the sign is to be placed. For the 8301 accepted values, see |line()|. 8302 priority priority of the sign. See 8303 |sign-priority| for more information. 8304 8305 If the optional {dict} is not specified, then it modifies the 8306 placed sign {id} in group {group} to use the defined sign 8307 {name}. 8308 8309 Returns the sign identifier on success and -1 on failure. 8310 8311 Examples: > 8312 " Place a sign named sign1 with id 5 at line 20 in 8313 " buffer json.c 8314 call sign_place(5, '', 'sign1', 'json.c', 8315 \ {'lnum' : 20}) 8316 8317 " Updates sign 5 in buffer json.c to use sign2 8318 call sign_place(5, '', 'sign2', 'json.c') 8319 8320 " Place a sign named sign3 at line 30 in 8321 " buffer json.c with a new identifier 8322 let id = sign_place(0, '', 'sign3', 'json.c', 8323 \ {'lnum' : 30}) 8324 8325 " Place a sign named sign4 with id 10 in group 'g3' 8326 " at line 40 in buffer json.c with priority 90 8327 call sign_place(10, 'g3', 'sign4', 'json.c', 8328 \ {'lnum' : 40, 'priority' : 90}) 8329< 8330sign_undefine([{name}]) *sign_undefine()* 8331 Deletes a previously defined sign {name}. This is similar to 8332 the |:sign-undefine| command. If {name} is not supplied, then 8333 deletes all the defined signs. 8334 8335 Returns 0 on success and -1 on failure. 8336 8337 Examples: > 8338 " Delete a sign named mySign 8339 call sign_undefine("mySign") 8340 8341 " Delete all the signs 8342 call sign_undefine() 8343< 8344sign_unplace({group} [, {dict}]) *sign_unplace()* 8345 Remove a previously placed sign in one or more buffers. This 8346 is similar to the |:sign-unplace| command. 8347 8348 {group} is the sign group name. To use the global sign group, 8349 use an empty string. If {group} is set to '*', then all the 8350 groups including the global group are used. 8351 The signs in {group} are selected based on the entries in 8352 {dict}. The following optional entries in {dict} are 8353 supported: 8354 buffer buffer name or number. See |bufname()|. 8355 id sign identifier 8356 If {dict} is not supplied, then all the signs in {group} are 8357 removed. 8358 8359 Returns 0 on success and -1 on failure. 8360 8361 Examples: > 8362 " Remove sign 10 from buffer a.vim 8363 call sign_unplace('', {'buffer' : "a.vim", 'id' : 10}) 8364 8365 " Remove sign 20 in group 'g1' from buffer 3 8366 call sign_unplace('g1', {'buffer' : 3, 'id' : 20}) 8367 8368 " Remove all the signs in group 'g2' from buffer 10 8369 call sign_unplace('g2', {'buffer' : 10}) 8370 8371 " Remove sign 30 in group 'g3' from all the buffers 8372 call sign_unplace('g3', {'id' : 30}) 8373 8374 " Remove all the signs placed in buffer 5 8375 call sign_unplace('*', {'buffer' : 5}) 8376 8377 " Remove the signs in group 'g4' from all the buffers 8378 call sign_unplace('g4') 8379 8380 " Remove sign 40 from all the buffers 8381 call sign_unplace('*', {'id' : 40}) 8382 8383 " Remove all the placed signs from all the buffers 8384 call sign_unplace('*') 8385< 8386simplify({filename}) *simplify()* 8387 Simplify the file name as much as possible without changing 8388 the meaning. Shortcuts (on MS-Windows) or symbolic links (on 8389 Unix) are not resolved. If the first path component in 8390 {filename} designates the current directory, this will be 8391 valid for the result as well. A trailing path separator is 8392 not removed either. 8393 Example: > 8394 simplify("./dir/.././/file/") == "./file/" 8395< Note: The combination "dir/.." is only removed if "dir" is 8396 a searchable directory or does not exist. On Unix, it is also 8397 removed when "dir" is a symbolic link within the same 8398 directory. In order to resolve all the involved symbolic 8399 links before simplifying the path name, use |resolve()|. 8400 8401 8402sin({expr}) *sin()* 8403 Return the sine of {expr}, measured in radians, as a |Float|. 8404 {expr} must evaluate to a |Float| or a |Number|. 8405 Examples: > 8406 :echo sin(100) 8407< -0.506366 > 8408 :echo sin(-4.01) 8409< 0.763301 8410 {only available when compiled with the |+float| feature} 8411 8412 8413sinh({expr}) *sinh()* 8414 Return the hyperbolic sine of {expr} as a |Float| in the range 8415 [-inf, inf]. 8416 {expr} must evaluate to a |Float| or a |Number|. 8417 Examples: > 8418 :echo sinh(0.5) 8419< 0.521095 > 8420 :echo sinh(-0.9) 8421< -1.026517 8422 {only available when compiled with the |+float| feature} 8423 8424 8425sort({list} [, {func} [, {dict}]]) *sort()* *E702* 8426 Sort the items in {list} in-place. Returns {list}. 8427 8428 If you want a list to remain unmodified make a copy first: > 8429 :let sortedlist = sort(copy(mylist)) 8430 8431< When {func} is omitted, is empty or zero, then sort() uses the 8432 string representation of each item to sort on. Numbers sort 8433 after Strings, |Lists| after Numbers. For sorting text in the 8434 current buffer use |:sort|. 8435 8436 When {func} is given and it is '1' or 'i' then case is 8437 ignored. 8438 8439 When {func} is given and it is 'n' then all items will be 8440 sorted numerical (Implementation detail: This uses the 8441 strtod() function to parse numbers, Strings, Lists, Dicts and 8442 Funcrefs will be considered as being 0). 8443 8444 When {func} is given and it is 'N' then all items will be 8445 sorted numerical. This is like 'n' but a string containing 8446 digits will be used as the number they represent. 8447 8448 When {func} is given and it is 'f' then all items will be 8449 sorted numerical. All values must be a Number or a Float. 8450 8451 When {func} is a |Funcref| or a function name, this function 8452 is called to compare items. The function is invoked with two 8453 items as argument and must return zero if they are equal, 1 or 8454 bigger if the first one sorts after the second one, -1 or 8455 smaller if the first one sorts before the second one. 8456 8457 {dict} is for functions with the "dict" attribute. It will be 8458 used to set the local variable "self". |Dictionary-function| 8459 8460 The sort is stable, items which compare equal (as number or as 8461 string) will keep their relative position. E.g., when sorting 8462 on numbers, text strings will sort next to each other, in the 8463 same order as they were originally. 8464 8465 Also see |uniq()|. 8466 8467 Example: > 8468 func MyCompare(i1, i2) 8469 return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1 8470 endfunc 8471 let sortedlist = sort(mylist, "MyCompare") 8472< A shorter compare version for this specific simple case, which 8473 ignores overflow: > 8474 func MyCompare(i1, i2) 8475 return a:i1 - a:i2 8476 endfunc 8477< 8478 *soundfold()* 8479soundfold({word}) 8480 Return the sound-folded equivalent of {word}. Uses the first 8481 language in 'spelllang' for the current window that supports 8482 soundfolding. 'spell' must be set. When no sound folding is 8483 possible the {word} is returned unmodified. 8484 This can be used for making spelling suggestions. Note that 8485 the method can be quite slow. 8486 8487 *spellbadword()* 8488spellbadword([{sentence}]) 8489 Without argument: The result is the badly spelled word under 8490 or after the cursor. The cursor is moved to the start of the 8491 bad word. When no bad word is found in the cursor line the 8492 result is an empty string and the cursor doesn't move. 8493 8494 With argument: The result is the first word in {sentence} that 8495 is badly spelled. If there are no spelling mistakes the 8496 result is an empty string. 8497 8498 The return value is a list with two items: 8499 - The badly spelled word or an empty string. 8500 - The type of the spelling error: 8501 "bad" spelling mistake 8502 "rare" rare word 8503 "local" word only valid in another region 8504 "caps" word should start with Capital 8505 Example: > 8506 echo spellbadword("the quik brown fox") 8507< ['quik', 'bad'] ~ 8508 8509 The spelling information for the current window is used. The 8510 'spell' option must be set and the value of 'spelllang' is 8511 used. 8512 8513 *spellsuggest()* 8514spellsuggest({word} [, {max} [, {capital}]]) 8515 Return a |List| with spelling suggestions to replace {word}. 8516 When {max} is given up to this number of suggestions are 8517 returned. Otherwise up to 25 suggestions are returned. 8518 8519 When the {capital} argument is given and it's non-zero only 8520 suggestions with a leading capital will be given. Use this 8521 after a match with 'spellcapcheck'. 8522 8523 {word} can be a badly spelled word followed by other text. 8524 This allows for joining two words that were split. The 8525 suggestions also include the following text, thus you can 8526 replace a line. 8527 8528 {word} may also be a good word. Similar words will then be 8529 returned. {word} itself is not included in the suggestions, 8530 although it may appear capitalized. 8531 8532 The spelling information for the current window is used. The 8533 'spell' option must be set and the values of 'spelllang' and 8534 'spellsuggest' are used. 8535 8536 8537split({expr} [, {pattern} [, {keepempty}]]) *split()* 8538 Make a |List| out of {expr}. When {pattern} is omitted or 8539 empty each white-separated sequence of characters becomes an 8540 item. 8541 Otherwise the string is split where {pattern} matches, 8542 removing the matched characters. 'ignorecase' is not used 8543 here, add \c to ignore case. |/\c| 8544 When the first or last item is empty it is omitted, unless the 8545 {keepempty} argument is given and it's non-zero. 8546 Other empty items are kept when {pattern} matches at least one 8547 character or when {keepempty} is non-zero. 8548 Example: > 8549 :let words = split(getline('.'), '\W\+') 8550< To split a string in individual characters: > 8551 :for c in split(mystring, '\zs') 8552< If you want to keep the separator you can also use '\zs' at 8553 the end of the pattern: > 8554 :echo split('abc:def:ghi', ':\zs') 8555< ['abc:', 'def:', 'ghi'] ~ 8556 Splitting a table where the first element can be empty: > 8557 :let items = split(line, ':', 1) 8558< The opposite function is |join()|. 8559 8560 8561sqrt({expr}) *sqrt()* 8562 Return the non-negative square root of Float {expr} as a 8563 |Float|. 8564 {expr} must evaluate to a |Float| or a |Number|. When {expr} 8565 is negative the result is NaN (Not a Number). 8566 Examples: > 8567 :echo sqrt(100) 8568< 10.0 > 8569 :echo sqrt(-4.01) 8570< nan 8571 "nan" may be different, it depends on system libraries. 8572 {only available when compiled with the |+float| feature} 8573 8574 8575str2float({expr}) *str2float()* 8576 Convert String {expr} to a Float. This mostly works the same 8577 as when using a floating point number in an expression, see 8578 |floating-point-format|. But it's a bit more permissive. 8579 E.g., "1e40" is accepted, while in an expression you need to 8580 write "1.0e40". The hexadecimal form "0x123" is also 8581 accepted, but not others, like binary or octal. 8582 Text after the number is silently ignored. 8583 The decimal point is always '.', no matter what the locale is 8584 set to. A comma ends the number: "12,345.67" is converted to 8585 12.0. You can strip out thousands separators with 8586 |substitute()|: > 8587 let f = str2float(substitute(text, ',', '', 'g')) 8588< {only available when compiled with the |+float| feature} 8589 8590 8591str2nr({expr} [, {base}]) *str2nr()* 8592 Convert string {expr} to a number. 8593 {base} is the conversion base, it can be 2, 8, 10 or 16. 8594 When {base} is omitted base 10 is used. This also means that 8595 a leading zero doesn't cause octal conversion to be used, as 8596 with the default String to Number conversion. 8597 When {base} is 16 a leading "0x" or "0X" is ignored. With a 8598 different base the result will be zero. Similarly, when 8599 {base} is 8 a leading "0" is ignored, and when {base} is 2 a 8600 leading "0b" or "0B" is ignored. 8601 Text after the number is silently ignored. 8602 8603 8604strchars({expr} [, {skipcc}]) *strchars()* 8605 The result is a Number, which is the number of characters 8606 in String {expr}. 8607 When {skipcc} is omitted or zero, composing characters are 8608 counted separately. 8609 When {skipcc} set to 1, Composing characters are ignored. 8610 Also see |strlen()|, |strdisplaywidth()| and |strwidth()|. 8611 8612 {skipcc} is only available after 7.4.755. For backward 8613 compatibility, you can define a wrapper function: > 8614 if has("patch-7.4.755") 8615 function s:strchars(str, skipcc) 8616 return strchars(a:str, a:skipcc) 8617 endfunction 8618 else 8619 function s:strchars(str, skipcc) 8620 if a:skipcc 8621 return strlen(substitute(a:str, ".", "x", "g")) 8622 else 8623 return strchars(a:str) 8624 endif 8625 endfunction 8626 endif 8627< 8628strcharpart({src}, {start} [, {len}]) *strcharpart()* 8629 Like |strpart()| but using character index and length instead 8630 of byte index and length. 8631 When a character index is used where a character does not 8632 exist it is assumed to be one character. For example: > 8633 strcharpart('abc', -1, 2) 8634< results in 'a'. 8635 8636strdisplaywidth({expr} [, {col}]) *strdisplaywidth()* 8637 The result is a Number, which is the number of display cells 8638 String {expr} occupies on the screen when it starts at {col} 8639 (first column is zero). When {col} is omitted zero is used. 8640 Otherwise it is the screen column where to start. This 8641 matters for Tab characters. 8642 The option settings of the current window are used. This 8643 matters for anything that's displayed differently, such as 8644 'tabstop' and 'display'. 8645 When {expr} contains characters with East Asian Width Class 8646 Ambiguous, this function's return value depends on 'ambiwidth'. 8647 Also see |strlen()|, |strwidth()| and |strchars()|. 8648 8649strftime({format} [, {time}]) *strftime()* 8650 The result is a String, which is a formatted date and time, as 8651 specified by the {format} string. The given {time} is used, 8652 or the current time if no time is given. The accepted 8653 {format} depends on your system, thus this is not portable! 8654 See the manual page of the C function strftime() for the 8655 format. The maximum length of the result is 80 characters. 8656 See also |localtime()| and |getftime()|. 8657 The language can be changed with the |:language| command. 8658 Examples: > 8659 :echo strftime("%c") Sun Apr 27 11:49:23 1997 8660 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25 8661 :echo strftime("%y%m%d %T") 970427 11:53:55 8662 :echo strftime("%H:%M") 11:55 8663 :echo strftime("%c", getftime("file.c")) 8664 Show mod time of file.c. 8665< Not available on all systems. To check use: > 8666 :if exists("*strftime") 8667 8668strgetchar({str}, {index}) *strgetchar()* 8669 Get character {index} from {str}. This uses a character 8670 index, not a byte index. Composing characters are considered 8671 separate characters here. 8672 Also see |strcharpart()| and |strchars()|. 8673 8674stridx({haystack}, {needle} [, {start}]) *stridx()* 8675 The result is a Number, which gives the byte index in 8676 {haystack} of the first occurrence of the String {needle}. 8677 If {start} is specified, the search starts at index {start}. 8678 This can be used to find a second match: > 8679 :let colon1 = stridx(line, ":") 8680 :let colon2 = stridx(line, ":", colon1 + 1) 8681< The search is done case-sensitive. 8682 For pattern searches use |match()|. 8683 -1 is returned if the {needle} does not occur in {haystack}. 8684 See also |strridx()|. 8685 Examples: > 8686 :echo stridx("An Example", "Example") 3 8687 :echo stridx("Starting point", "Start") 0 8688 :echo stridx("Starting point", "start") -1 8689< *strstr()* *strchr()* 8690 stridx() works similar to the C function strstr(). When used 8691 with a single character it works similar to strchr(). 8692 8693 *string()* 8694string({expr}) Return {expr} converted to a String. If {expr} is a Number, 8695 Float, String, Blob or a composition of them, then the result 8696 can be parsed back with |eval()|. 8697 {expr} type result ~ 8698 String 'string' (single quotes are doubled) 8699 Number 123 8700 Float 123.123456 or 1.123456e8 8701 Funcref function('name') 8702 Blob 0z00112233.44556677.8899 8703 List [item, item] 8704 Dictionary {key: value, key: value} 8705 8706 When a List or Dictionary has a recursive reference it is 8707 replaced by "[...]" or "{...}". Using eval() on the result 8708 will then fail. 8709 8710 Also see |strtrans()|. 8711 8712 *strlen()* 8713strlen({expr}) The result is a Number, which is the length of the String 8714 {expr} in bytes. 8715 If the argument is a Number it is first converted to a String. 8716 For other types an error is given. 8717 If you want to count the number of multi-byte characters use 8718 |strchars()|. 8719 Also see |len()|, |strdisplaywidth()| and |strwidth()|. 8720 8721strpart({src}, {start} [, {len}]) *strpart()* 8722 The result is a String, which is part of {src}, starting from 8723 byte {start}, with the byte length {len}. 8724 To count characters instead of bytes use |strcharpart()|. 8725 8726 When bytes are selected which do not exist, this doesn't 8727 result in an error, the bytes are simply omitted. 8728 If {len} is missing, the copy continues from {start} till the 8729 end of the {src}. > 8730 strpart("abcdefg", 3, 2) == "de" 8731 strpart("abcdefg", -2, 4) == "ab" 8732 strpart("abcdefg", 5, 4) == "fg" 8733 strpart("abcdefg", 3) == "defg" 8734 8735< Note: To get the first character, {start} must be 0. For 8736 example, to get three bytes under and after the cursor: > 8737 strpart(getline("."), col(".") - 1, 3) 8738< 8739strridx({haystack}, {needle} [, {start}]) *strridx()* 8740 The result is a Number, which gives the byte index in 8741 {haystack} of the last occurrence of the String {needle}. 8742 When {start} is specified, matches beyond this index are 8743 ignored. This can be used to find a match before a previous 8744 match: > 8745 :let lastcomma = strridx(line, ",") 8746 :let comma2 = strridx(line, ",", lastcomma - 1) 8747< The search is done case-sensitive. 8748 For pattern searches use |match()|. 8749 -1 is returned if the {needle} does not occur in {haystack}. 8750 If the {needle} is empty the length of {haystack} is returned. 8751 See also |stridx()|. Examples: > 8752 :echo strridx("an angry armadillo", "an") 3 8753< *strrchr()* 8754 When used with a single character it works similar to the C 8755 function strrchr(). 8756 8757strtrans({expr}) *strtrans()* 8758 The result is a String, which is {expr} with all unprintable 8759 characters translated into printable characters |'isprint'|. 8760 Like they are shown in a window. Example: > 8761 echo strtrans(@a) 8762< This displays a newline in register a as "^@" instead of 8763 starting a new line. 8764 8765strwidth({expr}) *strwidth()* 8766 The result is a Number, which is the number of display cells 8767 String {expr} occupies. A Tab character is counted as one 8768 cell, alternatively use |strdisplaywidth()|. 8769 When {expr} contains characters with East Asian Width Class 8770 Ambiguous, this function's return value depends on 'ambiwidth'. 8771 Also see |strlen()|, |strdisplaywidth()| and |strchars()|. 8772 8773submatch({nr} [, {list}]) *submatch()* *E935* 8774 Only for an expression in a |:substitute| command or 8775 substitute() function. 8776 Returns the {nr}'th submatch of the matched text. When {nr} 8777 is 0 the whole matched text is returned. 8778 Note that a NL in the string can stand for a line break of a 8779 multi-line match or a NUL character in the text. 8780 Also see |sub-replace-expression|. 8781 8782 If {list} is present and non-zero then submatch() returns 8783 a list of strings, similar to |getline()| with two arguments. 8784 NL characters in the text represent NUL characters in the 8785 text. 8786 Only returns more than one item for |:substitute|, inside 8787 |substitute()| this list will always contain one or zero 8788 items, since there are no real line breaks. 8789 8790 When substitute() is used recursively only the submatches in 8791 the current (deepest) call can be obtained. 8792 8793 Examples: > 8794 :s/\d\+/\=submatch(0) + 1/ 8795 :echo substitute(text, '\d\+', '\=submatch(0) + 1', '') 8796< This finds the first number in the line and adds one to it. 8797 A line break is included as a newline character. 8798 8799substitute({expr}, {pat}, {sub}, {flags}) *substitute()* 8800 The result is a String, which is a copy of {expr}, in which 8801 the first match of {pat} is replaced with {sub}. 8802 When {flags} is "g", all matches of {pat} in {expr} are 8803 replaced. Otherwise {flags} should be "". 8804 8805 This works like the ":substitute" command (without any flags). 8806 But the matching with {pat} is always done like the 'magic' 8807 option is set and 'cpoptions' is empty (to make scripts 8808 portable). 'ignorecase' is still relevant, use |/\c| or |/\C| 8809 if you want to ignore or match case and ignore 'ignorecase'. 8810 'smartcase' is not used. See |string-match| for how {pat} is 8811 used. 8812 8813 A "~" in {sub} is not replaced with the previous {sub}. 8814 Note that some codes in {sub} have a special meaning 8815 |sub-replace-special|. For example, to replace something with 8816 "\n" (two characters), use "\\\\n" or '\\n'. 8817 8818 When {pat} does not match in {expr}, {expr} is returned 8819 unmodified. 8820 8821 Example: > 8822 :let &path = substitute(&path, ",\\=[^,]*$", "", "") 8823< This removes the last component of the 'path' option. > 8824 :echo substitute("testing", ".*", "\\U\\0", "") 8825< results in "TESTING". 8826 8827 When {sub} starts with "\=", the remainder is interpreted as 8828 an expression. See |sub-replace-expression|. Example: > 8829 :echo substitute(s, '%\(\x\x\)', 8830 \ '\=nr2char("0x" . submatch(1))', 'g') 8831 8832< When {sub} is a Funcref that function is called, with one 8833 optional argument. Example: > 8834 :echo substitute(s, '%\(\x\x\)', SubNr, 'g') 8835< The optional argument is a list which contains the whole 8836 matched string and up to nine submatches, like what 8837 |submatch()| returns. Example: > 8838 :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g') 8839 8840swapinfo({fname}) *swapinfo()* 8841 The result is a dictionary, which holds information about the 8842 swapfile {fname}. The available fields are: 8843 version Vim version 8844 user user name 8845 host host name 8846 fname original file name 8847 pid PID of the Vim process that created the swap 8848 file 8849 mtime last modification time in seconds 8850 inode Optional: INODE number of the file 8851 dirty 1 if file was modified, 0 if not 8852 Note that "user" and "host" are truncated to at most 39 bytes. 8853 In case of failure an "error" item is added with the reason: 8854 Cannot open file: file not found or in accessible 8855 Cannot read file: cannot read first block 8856 Not a swap file: does not contain correct block ID 8857 Magic number mismatch: Info in first block is invalid 8858 8859swapname({expr}) *swapname()* 8860 The result is the swap file path of the buffer {expr}. 8861 For the use of {expr}, see |bufname()| above. 8862 If buffer {expr} is the current buffer, the result is equal to 8863 |:swapname| (unless no swap file). 8864 If buffer {expr} has no swap file, returns an empty string. 8865 8866synID({lnum}, {col}, {trans}) *synID()* 8867 The result is a Number, which is the syntax ID at the position 8868 {lnum} and {col} in the current window. 8869 The syntax ID can be used with |synIDattr()| and 8870 |synIDtrans()| to obtain syntax information about text. 8871 8872 {col} is 1 for the leftmost column, {lnum} is 1 for the first 8873 line. 'synmaxcol' applies, in a longer line zero is returned. 8874 Note that when the position is after the last character, 8875 that's where the cursor can be in Insert mode, synID() returns 8876 zero. 8877 8878 When {trans} is |TRUE|, transparent items are reduced to the 8879 item that they reveal. This is useful when wanting to know 8880 the effective color. When {trans} is |FALSE|, the transparent 8881 item is returned. This is useful when wanting to know which 8882 syntax item is effective (e.g. inside parens). 8883 Warning: This function can be very slow. Best speed is 8884 obtained by going through the file in forward direction. 8885 8886 Example (echoes the name of the syntax item under the cursor): > 8887 :echo synIDattr(synID(line("."), col("."), 1), "name") 8888< 8889 8890synIDattr({synID}, {what} [, {mode}]) *synIDattr()* 8891 The result is a String, which is the {what} attribute of 8892 syntax ID {synID}. This can be used to obtain information 8893 about a syntax item. 8894 {mode} can be "gui", "cterm" or "term", to get the attributes 8895 for that mode. When {mode} is omitted, or an invalid value is 8896 used, the attributes for the currently active highlighting are 8897 used (GUI, cterm or term). 8898 Use synIDtrans() to follow linked highlight groups. 8899 {what} result 8900 "name" the name of the syntax item 8901 "fg" foreground color (GUI: color name used to set 8902 the color, cterm: color number as a string, 8903 term: empty string) 8904 "bg" background color (as with "fg") 8905 "font" font name (only available in the GUI) 8906 |highlight-font| 8907 "sp" special color (as with "fg") |highlight-guisp| 8908 "fg#" like "fg", but for the GUI and the GUI is 8909 running the name in "#RRGGBB" form 8910 "bg#" like "fg#" for "bg" 8911 "sp#" like "fg#" for "sp" 8912 "bold" "1" if bold 8913 "italic" "1" if italic 8914 "reverse" "1" if reverse 8915 "inverse" "1" if inverse (= reverse) 8916 "standout" "1" if standout 8917 "underline" "1" if underlined 8918 "undercurl" "1" if undercurled 8919 "strike" "1" if strikethrough 8920 8921 Example (echoes the color of the syntax item under the 8922 cursor): > 8923 :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg") 8924< 8925synIDtrans({synID}) *synIDtrans()* 8926 The result is a Number, which is the translated syntax ID of 8927 {synID}. This is the syntax group ID of what is being used to 8928 highlight the character. Highlight links given with 8929 ":highlight link" are followed. 8930 8931synconcealed({lnum}, {col}) *synconcealed()* 8932 The result is a List with currently three items: 8933 1. The first item in the list is 0 if the character at the 8934 position {lnum} and {col} is not part of a concealable 8935 region, 1 if it is. 8936 2. The second item in the list is a string. If the first item 8937 is 1, the second item contains the text which will be 8938 displayed in place of the concealed text, depending on the 8939 current setting of 'conceallevel' and 'listchars'. 8940 3. The third and final item in the list is a number 8941 representing the specific syntax region matched in the 8942 line. When the character is not concealed the value is 8943 zero. This allows detection of the beginning of a new 8944 concealable region if there are two consecutive regions 8945 with the same replacement character. For an example, if 8946 the text is "123456" and both "23" and "45" are concealed 8947 and replaced by the character "X", then: 8948 call returns ~ 8949 synconcealed(lnum, 1) [0, '', 0] 8950 synconcealed(lnum, 2) [1, 'X', 1] 8951 synconcealed(lnum, 3) [1, 'X', 1] 8952 synconcealed(lnum, 4) [1, 'X', 2] 8953 synconcealed(lnum, 5) [1, 'X', 2] 8954 synconcealed(lnum, 6) [0, '', 0] 8955 8956 8957synstack({lnum}, {col}) *synstack()* 8958 Return a |List|, which is the stack of syntax items at the 8959 position {lnum} and {col} in the current window. Each item in 8960 the List is an ID like what |synID()| returns. 8961 The first item in the List is the outer region, following are 8962 items contained in that one. The last one is what |synID()| 8963 returns, unless not the whole item is highlighted or it is a 8964 transparent item. 8965 This function is useful for debugging a syntax file. 8966 Example that shows the syntax stack under the cursor: > 8967 for id in synstack(line("."), col(".")) 8968 echo synIDattr(id, "name") 8969 endfor 8970< When the position specified with {lnum} and {col} is invalid 8971 nothing is returned. The position just after the last 8972 character in a line and the first column in an empty line are 8973 valid positions. 8974 8975system({expr} [, {input}]) *system()* *E677* 8976 Get the output of the shell command {expr} as a string. See 8977 |systemlist()| to get the output as a List. 8978 8979 When {input} is given and is a string this string is written 8980 to a file and passed as stdin to the command. The string is 8981 written as-is, you need to take care of using the correct line 8982 separators yourself. 8983 If {input} is given and is a |List| it is written to the file 8984 in a way |writefile()| does with {binary} set to "b" (i.e. 8985 with a newline between each list item with newlines inside 8986 list items converted to NULs). 8987 When {input} is given and is a number that is a valid id for 8988 an existing buffer then the content of the buffer is written 8989 to the file line by line, each line terminated by a NL and 8990 NULs characters where the text has a NL. 8991 8992 Pipes are not used, the 'shelltemp' option is not used. 8993 8994 When prepended by |:silent| the terminal will not be set to 8995 cooked mode. This is meant to be used for commands that do 8996 not need the user to type. It avoids stray characters showing 8997 up on the screen which require |CTRL-L| to remove. > 8998 :silent let f = system('ls *.vim') 8999< 9000 Note: Use |shellescape()| or |::S| with |expand()| or 9001 |fnamemodify()| to escape special characters in a command 9002 argument. Newlines in {expr} may cause the command to fail. 9003 The characters in 'shellquote' and 'shellxquote' may also 9004 cause trouble. 9005 This is not to be used for interactive commands. 9006 9007 The result is a String. Example: > 9008 :let files = system("ls " . shellescape(expand('%:h'))) 9009 :let files = system('ls ' . expand('%:h:S')) 9010 9011< To make the result more system-independent, the shell output 9012 is filtered to replace <CR> with <NL> for Macintosh, and 9013 <CR><NL> with <NL> for DOS-like systems. 9014 To avoid the string being truncated at a NUL, all NUL 9015 characters are replaced with SOH (0x01). 9016 9017 The command executed is constructed using several options: 9018 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote' 9019 ({tmp} is an automatically generated file name). 9020 For Unix and OS/2 braces are put around {expr} to allow for 9021 concatenated commands. 9022 9023 The command will be executed in "cooked" mode, so that a 9024 CTRL-C will interrupt the command (on Unix at least). 9025 9026 The resulting error code can be found in |v:shell_error|. 9027 This function will fail in |restricted-mode|. 9028 9029 Note that any wrong value in the options mentioned above may 9030 make the function fail. It has also been reported to fail 9031 when using a security agent application. 9032 Unlike ":!cmd" there is no automatic check for changed files. 9033 Use |:checktime| to force a check. 9034 9035 9036systemlist({expr} [, {input}]) *systemlist()* 9037 Same as |system()|, but returns a |List| with lines (parts of 9038 output separated by NL) with NULs transformed into NLs. Output 9039 is the same as |readfile()| will output with {binary} argument 9040 set to "b". Note that on MS-Windows you may get trailing CR 9041 characters. 9042 9043 Returns an empty string on error. 9044 9045 9046tabpagebuflist([{arg}]) *tabpagebuflist()* 9047 The result is a |List|, where each item is the number of the 9048 buffer associated with each window in the current tab page. 9049 {arg} specifies the number of the tab page to be used. When 9050 omitted the current tab page is used. 9051 When {arg} is invalid the number zero is returned. 9052 To get a list of all buffers in all tabs use this: > 9053 let buflist = [] 9054 for i in range(tabpagenr('$')) 9055 call extend(buflist, tabpagebuflist(i + 1)) 9056 endfor 9057< Note that a buffer may appear in more than one window. 9058 9059 9060tabpagenr([{arg}]) *tabpagenr()* 9061 The result is a Number, which is the number of the current 9062 tab page. The first tab page has number 1. 9063 When the optional argument is "$", the number of the last tab 9064 page is returned (the tab page count). 9065 The number can be used with the |:tab| command. 9066 9067 9068tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()* 9069 Like |winnr()| but for tab page {tabarg}. 9070 {tabarg} specifies the number of tab page to be used. 9071 {arg} is used like with |winnr()|: 9072 - When omitted the current window number is returned. This is 9073 the window which will be used when going to this tab page. 9074 - When "$" the number of windows is returned. 9075 - When "#" the previous window nr is returned. 9076 Useful examples: > 9077 tabpagewinnr(1) " current window of tab page 1 9078 tabpagewinnr(4, '$') " number of windows in tab page 4 9079< When {tabarg} is invalid zero is returned. 9080 9081 *tagfiles()* 9082tagfiles() Returns a |List| with the file names used to search for tags 9083 for the current buffer. This is the 'tags' option expanded. 9084 9085 9086taglist({expr} [, {filename}]) *taglist()* 9087 Returns a list of tags matching the regular expression {expr}. 9088 9089 If {filename} is passed it is used to prioritize the results 9090 in the same way that |:tselect| does. See |tag-priority|. 9091 {filename} should be the full path of the file. 9092 9093 Each list item is a dictionary with at least the following 9094 entries: 9095 name Name of the tag. 9096 filename Name of the file where the tag is 9097 defined. It is either relative to the 9098 current directory or a full path. 9099 cmd Ex command used to locate the tag in 9100 the file. 9101 kind Type of the tag. The value for this 9102 entry depends on the language specific 9103 kind values. Only available when 9104 using a tags file generated by 9105 Exuberant ctags or hdrtag. 9106 static A file specific tag. Refer to 9107 |static-tag| for more information. 9108 More entries may be present, depending on the content of the 9109 tags file: access, implementation, inherits and signature. 9110 Refer to the ctags documentation for information about these 9111 fields. For C code the fields "struct", "class" and "enum" 9112 may appear, they give the name of the entity the tag is 9113 contained in. 9114 9115 The ex-command "cmd" can be either an ex search pattern, a 9116 line number or a line number followed by a byte number. 9117 9118 If there are no matching tags, then an empty list is returned. 9119 9120 To get an exact tag match, the anchors '^' and '$' should be 9121 used in {expr}. This also make the function work faster. 9122 Refer to |tag-regexp| for more information about the tag 9123 search regular expression pattern. 9124 9125 Refer to |'tags'| for information about how the tags file is 9126 located by Vim. Refer to |tags-file-format| for the format of 9127 the tags file generated by the different ctags tools. 9128 9129tan({expr}) *tan()* 9130 Return the tangent of {expr}, measured in radians, as a |Float| 9131 in the range [-inf, inf]. 9132 {expr} must evaluate to a |Float| or a |Number|. 9133 Examples: > 9134 :echo tan(10) 9135< 0.648361 > 9136 :echo tan(-4.01) 9137< -1.181502 9138 {only available when compiled with the |+float| feature} 9139 9140 9141tanh({expr}) *tanh()* 9142 Return the hyperbolic tangent of {expr} as a |Float| in the 9143 range [-1, 1]. 9144 {expr} must evaluate to a |Float| or a |Number|. 9145 Examples: > 9146 :echo tanh(0.5) 9147< 0.462117 > 9148 :echo tanh(-1) 9149< -0.761594 9150 {only available when compiled with the |+float| feature} 9151 9152 9153tempname() *tempname()* *temp-file-name* 9154 The result is a String, which is the name of a file that 9155 doesn't exist. It can be used for a temporary file. The name 9156 is different for at least 26 consecutive calls. Example: > 9157 :let tmpfile = tempname() 9158 :exe "redir > " . tmpfile 9159< For Unix, the file will be in a private directory |tempfile|. 9160 For MS-Windows forward slashes are used when the 'shellslash' 9161 option is set or when 'shellcmdflag' starts with '-'. 9162 9163 *term_dumpdiff()* 9164term_dumpdiff({filename}, {filename} [, {options}]) 9165 Open a new window displaying the difference between the two 9166 files. The files must have been created with 9167 |term_dumpwrite()|. 9168 Returns the buffer number or zero when the diff fails. 9169 Also see |terminal-diff|. 9170 NOTE: this does not work with double-width characters yet. 9171 9172 The top part of the buffer contains the contents of the first 9173 file, the bottom part of the buffer contains the contents of 9174 the second file. The middle part shows the differences. 9175 The parts are separated by a line of equals. 9176 9177 If the {options} argument is present, it must be a Dict with 9178 these possible members: 9179 "term_name" name to use for the buffer name, instead 9180 of the first file name. 9181 "term_rows" vertical size to use for the terminal, 9182 instead of using 'termwinsize' 9183 "term_cols" horizontal size to use for the terminal, 9184 instead of using 'termwinsize' 9185 "vertical" split the window vertically 9186 "curwin" use the current window, do not split the 9187 window; fails if the current buffer 9188 cannot be |abandon|ed 9189 "norestore" do not add the terminal window to a 9190 session file 9191 9192 Each character in the middle part indicates a difference. If 9193 there are multiple differences only the first in this list is 9194 used: 9195 X different character 9196 w different width 9197 f different foreground color 9198 b different background color 9199 a different attribute 9200 + missing position in first file 9201 - missing position in second file 9202 9203 Using the "s" key the top and bottom parts are swapped. This 9204 makes it easy to spot a difference. 9205 9206 *term_dumpload()* 9207term_dumpload({filename} [, {options}]) 9208 Open a new window displaying the contents of {filename} 9209 The file must have been created with |term_dumpwrite()|. 9210 Returns the buffer number or zero when it fails. 9211 Also see |terminal-diff|. 9212 9213 For {options} see |term_dumpdiff()|. 9214 9215 *term_dumpwrite()* 9216term_dumpwrite({buf}, {filename} [, {options}]) 9217 Dump the contents of the terminal screen of {buf} in the file 9218 {filename}. This uses a format that can be used with 9219 |term_dumpload()| and |term_dumpdiff()|. 9220 If the job in the terminal already finished an error is given: 9221 *E958* 9222 If {filename} already exists an error is given: *E953* 9223 Also see |terminal-diff|. 9224 9225 {options} is a dictionary with these optional entries: 9226 "rows" maximum number of rows to dump 9227 "columns" maximum number of columns to dump 9228 9229term_getaltscreen({buf}) *term_getaltscreen()* 9230 Returns 1 if the terminal of {buf} is using the alternate 9231 screen. 9232 {buf} is used as with |term_getsize()|. 9233 {only available when compiled with the |+terminal| feature} 9234 9235term_getansicolors({buf}) *term_getansicolors()* 9236 Get the ANSI color palette in use by terminal {buf}. 9237 Returns a List of length 16 where each element is a String 9238 representing a color in hexadecimal "#rrggbb" format. 9239 Also see |term_setansicolors()| and |g:terminal_ansi_colors|. 9240 If neither was used returns the default colors. 9241 9242 {buf} is used as with |term_getsize()|. If the buffer does not 9243 exist or is not a terminal window, an empty list is returned. 9244 {only available when compiled with the |+terminal| feature and 9245 with GUI enabled and/or the |+termguicolors| feature} 9246 9247term_getattr({attr}, {what}) *term_getattr()* 9248 Given {attr}, a value returned by term_scrape() in the "attr" 9249 item, return whether {what} is on. {what} can be one of: 9250 bold 9251 italic 9252 underline 9253 strike 9254 reverse 9255 {only available when compiled with the |+terminal| feature} 9256 9257term_getcursor({buf}) *term_getcursor()* 9258 Get the cursor position of terminal {buf}. Returns a list with 9259 two numbers and a dictionary: [row, col, dict]. 9260 9261 "row" and "col" are one based, the first screen cell is row 9262 1, column 1. This is the cursor position of the terminal 9263 itself, not of the Vim window. 9264 9265 "dict" can have these members: 9266 "visible" one when the cursor is visible, zero when it 9267 is hidden. 9268 "blink" one when the cursor is blinking, zero when it 9269 is not blinking. 9270 "shape" 1 for a block cursor, 2 for underline and 3 9271 for a vertical bar. 9272 9273 {buf} must be the buffer number of a terminal window. If the 9274 buffer does not exist or is not a terminal window, an empty 9275 list is returned. 9276 {only available when compiled with the |+terminal| feature} 9277 9278term_getjob({buf}) *term_getjob()* 9279 Get the Job associated with terminal window {buf}. 9280 {buf} is used as with |term_getsize()|. 9281 Returns |v:null| when there is no job. 9282 {only available when compiled with the |+terminal| feature} 9283 9284term_getline({buf}, {row}) *term_getline()* 9285 Get a line of text from the terminal window of {buf}. 9286 {buf} is used as with |term_getsize()|. 9287 9288 The first line has {row} one. When {row} is "." the cursor 9289 line is used. When {row} is invalid an empty string is 9290 returned. 9291 9292 To get attributes of each character use |term_scrape()|. 9293 {only available when compiled with the |+terminal| feature} 9294 9295term_getscrolled({buf}) *term_getscrolled()* 9296 Return the number of lines that scrolled to above the top of 9297 terminal {buf}. This is the offset between the row number 9298 used for |term_getline()| and |getline()|, so that: > 9299 term_getline(buf, N) 9300< is equal to: > 9301 getline(N + term_getscrolled(buf)) 9302< (if that line exists). 9303 9304 {buf} is used as with |term_getsize()|. 9305 {only available when compiled with the |+terminal| feature} 9306 9307term_getsize({buf}) *term_getsize()* 9308 Get the size of terminal {buf}. Returns a list with two 9309 numbers: [rows, cols]. This is the size of the terminal, not 9310 the window containing the terminal. 9311 9312 {buf} must be the buffer number of a terminal window. Use an 9313 empty string for the current buffer. If the buffer does not 9314 exist or is not a terminal window, an empty list is returned. 9315 {only available when compiled with the |+terminal| feature} 9316 9317term_getstatus({buf}) *term_getstatus()* 9318 Get the status of terminal {buf}. This returns a comma 9319 separated list of these items: 9320 running job is running 9321 finished job has finished 9322 normal in Terminal-Normal mode 9323 One of "running" or "finished" is always present. 9324 9325 {buf} must be the buffer number of a terminal window. If the 9326 buffer does not exist or is not a terminal window, an empty 9327 string is returned. 9328 {only available when compiled with the |+terminal| feature} 9329 9330term_gettitle({buf}) *term_gettitle()* 9331 Get the title of terminal {buf}. This is the title that the 9332 job in the terminal has set. 9333 9334 {buf} must be the buffer number of a terminal window. If the 9335 buffer does not exist or is not a terminal window, an empty 9336 string is returned. 9337 {only available when compiled with the |+terminal| feature} 9338 9339term_gettty({buf} [, {input}]) *term_gettty()* 9340 Get the name of the controlling terminal associated with 9341 terminal window {buf}. {buf} is used as with |term_getsize()|. 9342 9343 When {input} is omitted or 0, return the name for writing 9344 (stdout). When {input} is 1 return the name for reading 9345 (stdin). On UNIX, both return same name. 9346 {only available when compiled with the |+terminal| feature} 9347 9348term_list() *term_list()* 9349 Return a list with the buffer numbers of all buffers for 9350 terminal windows. 9351 {only available when compiled with the |+terminal| feature} 9352 9353term_scrape({buf}, {row}) *term_scrape()* 9354 Get the contents of {row} of terminal screen of {buf}. 9355 For {buf} see |term_getsize()|. 9356 9357 The first line has {row} one. When {row} is "." the cursor 9358 line is used. When {row} is invalid an empty string is 9359 returned. 9360 9361 Return a List containing a Dict for each screen cell: 9362 "chars" character(s) at the cell 9363 "fg" foreground color as #rrggbb 9364 "bg" background color as #rrggbb 9365 "attr" attributes of the cell, use |term_getattr()| 9366 to get the individual flags 9367 "width" cell width: 1 or 2 9368 {only available when compiled with the |+terminal| feature} 9369 9370term_sendkeys({buf}, {keys}) *term_sendkeys()* 9371 Send keystrokes {keys} to terminal {buf}. 9372 {buf} is used as with |term_getsize()|. 9373 9374 {keys} are translated as key sequences. For example, "\<c-x>" 9375 means the character CTRL-X. 9376 {only available when compiled with the |+terminal| feature} 9377 9378term_setansicolors({buf}, {colors}) *term_setansicolors()* 9379 Set the ANSI color palette used by terminal {buf}. 9380 {colors} must be a List of 16 valid color names or hexadecimal 9381 color codes, like those accepted by |highlight-guifg|. 9382 Also see |term_getansicolors()| and |g:terminal_ansi_colors|. 9383 9384 The colors normally are: 9385 0 black 9386 1 dark red 9387 2 dark green 9388 3 brown 9389 4 dark blue 9390 5 dark magenta 9391 6 dark cyan 9392 7 light grey 9393 8 dark grey 9394 9 red 9395 10 green 9396 11 yellow 9397 12 blue 9398 13 magenta 9399 14 cyan 9400 15 white 9401 9402 These colors are used in the GUI and in the terminal when 9403 'termguicolors' is set. When not using GUI colors (GUI mode 9404 or 'termguicolors'), the terminal window always uses the 16 9405 ANSI colors of the underlying terminal. 9406 {only available when compiled with the |+terminal| feature and 9407 with GUI enabled and/or the |+termguicolors| feature} 9408 9409term_setkill({buf}, {how}) *term_setkill()* 9410 When exiting Vim or trying to close the terminal window in 9411 another way, {how} defines whether the job in the terminal can 9412 be stopped. 9413 When {how} is empty (the default), the job will not be 9414 stopped, trying to exit will result in |E947|. 9415 Otherwise, {how} specifies what signal to send to the job. 9416 See |job_stop()| for the values. 9417 9418 After sending the signal Vim will wait for up to a second to 9419 check that the job actually stopped. 9420 9421term_setrestore({buf}, {command}) *term_setrestore()* 9422 Set the command to write in a session file to restore the job 9423 in this terminal. The line written in the session file is: > 9424 terminal ++curwin ++cols=%d ++rows=%d {command} 9425< Make sure to escape the command properly. 9426 9427 Use an empty {command} to run 'shell'. 9428 Use "NONE" to not restore this window. 9429 {only available when compiled with the |+terminal| feature} 9430 9431term_setsize({buf}, {rows}, {cols}) *term_setsize()* *E955* 9432 Set the size of terminal {buf}. The size of the window 9433 containing the terminal will also be adjusted, if possible. 9434 If {rows} or {cols} is zero or negative, that dimension is not 9435 changed. 9436 9437 {buf} must be the buffer number of a terminal window. Use an 9438 empty string for the current buffer. If the buffer does not 9439 exist or is not a terminal window, an error is given. 9440 {only available when compiled with the |+terminal| feature} 9441 9442term_start({cmd}, {options}) *term_start()* 9443 Open a terminal window and run {cmd} in it. 9444 9445 {cmd} can be a string or a List, like with |job_start()|. The 9446 string "NONE" can be used to open a terminal window without 9447 starting a job, the pty of the terminal can be used by a 9448 command like gdb. 9449 9450 Returns the buffer number of the terminal window. If {cmd} 9451 cannot be executed the window does open and shows an error 9452 message. 9453 If opening the window fails zero is returned. 9454 9455 {options} are similar to what is used for |job_start()|, see 9456 |job-options|. However, not all options can be used. These 9457 are supported: 9458 all timeout options 9459 "stoponexit", "cwd", "env" 9460 "callback", "out_cb", "err_cb", "exit_cb", "close_cb" 9461 "in_io", "in_top", "in_bot", "in_name", "in_buf" 9462 "out_io", "out_name", "out_buf", "out_modifiable", "out_msg" 9463 "err_io", "err_name", "err_buf", "err_modifiable", "err_msg" 9464 However, at least one of stdin, stdout or stderr must be 9465 connected to the terminal. When I/O is connected to the 9466 terminal then the callback function for that part is not used. 9467 9468 There are extra options: 9469 "term_name" name to use for the buffer name, instead 9470 of the command name. 9471 "term_rows" vertical size to use for the terminal, 9472 instead of using 'termwinsize' 9473 "term_cols" horizontal size to use for the terminal, 9474 instead of using 'termwinsize' 9475 "vertical" split the window vertically; note that 9476 other window position can be defined with 9477 command modifiers, such as |:belowright|. 9478 "curwin" use the current window, do not split the 9479 window; fails if the current buffer 9480 cannot be |abandon|ed 9481 "hidden" do not open a window 9482 "norestore" do not add the terminal window to a 9483 session file 9484 "term_kill" what to do when trying to close the 9485 terminal window, see |term_setkill()| 9486 "term_finish" What to do when the job is finished: 9487 "close": close any windows 9488 "open": open window if needed 9489 Note that "open" can be interruptive. 9490 See |term++close| and |term++open|. 9491 "term_opencmd" command to use for opening the window when 9492 "open" is used for "term_finish"; must 9493 have "%d" where the buffer number goes, 9494 e.g. "10split|buffer %d"; when not 9495 specified "botright sbuf %d" is used 9496 "eof_chars" Text to send after all buffer lines were 9497 written to the terminal. When not set 9498 CTRL-D is used on MS-Windows. For Python 9499 use CTRL-Z or "exit()". For a shell use 9500 "exit". A CR is always added. 9501 "ansi_colors" A list of 16 color names or hex codes 9502 defining the ANSI palette used in GUI 9503 color modes. See |g:terminal_ansi_colors|. 9504 "tty_type" (MS-Windows only): Specify which pty to 9505 use. See 'termwintype' for the values. 9506 9507 {only available when compiled with the |+terminal| feature} 9508 9509term_wait({buf} [, {time}]) *term_wait()* 9510 Wait for pending updates of {buf} to be handled. 9511 {buf} is used as with |term_getsize()|. 9512 {time} is how long to wait for updates to arrive in msec. If 9513 not set then 10 msec will be used. 9514 {only available when compiled with the |+terminal| feature} 9515 9516test_alloc_fail({id}, {countdown}, {repeat}) *test_alloc_fail()* 9517 This is for testing: If the memory allocation with {id} is 9518 called, then decrement {countdown}, and when it reaches zero 9519 let memory allocation fail {repeat} times. When {repeat} is 9520 smaller than one it fails one time. 9521 9522test_autochdir() *test_autochdir()* 9523 Set a flag to enable the effect of 'autochdir' before Vim 9524 startup has finished. 9525 9526test_feedinput({string}) *test_feedinput()* 9527 Characters in {string} are queued for processing as if they 9528 were typed by the user. This uses a low level input buffer. 9529 This function works only when with |+unix| or GUI is running. 9530 9531test_garbagecollect_now() *test_garbagecollect_now()* 9532 Like garbagecollect(), but executed right away. This must 9533 only be called directly to avoid any structure to exist 9534 internally, and |v:testing| must have been set before calling 9535 any function. 9536 9537test_ignore_error({expr}) *test_ignore_error()* 9538 Ignore any error containing {expr}. A normal message is given 9539 instead. 9540 This is only meant to be used in tests, where catching the 9541 error with try/catch cannot be used (because it skips over 9542 following code). 9543 {expr} is used literally, not as a pattern. 9544 When the {expr} is the string "RESET" then the list of ignored 9545 errors is made empty. 9546 9547test_null_blob() *test_null_blob()* 9548 Return a |Blob| that is null. Only useful for testing. 9549 9550test_null_channel() *test_null_channel()* 9551 Return a |Channel| that is null. Only useful for testing. 9552 {only available when compiled with the +channel feature} 9553 9554test_null_dict() *test_null_dict()* 9555 Return a |Dict| that is null. Only useful for testing. 9556 9557test_null_job() *test_null_job()* 9558 Return a |Job| that is null. Only useful for testing. 9559 {only available when compiled with the +job feature} 9560 9561test_null_list() *test_null_list()* 9562 Return a |List| that is null. Only useful for testing. 9563 9564test_null_partial() *test_null_partial()* 9565 Return a |Partial| that is null. Only useful for testing. 9566 9567test_null_string() *test_null_string()* 9568 Return a |String| that is null. Only useful for testing. 9569 9570test_option_not_set({name}) *test_option_not_set()* 9571 Reset the flag that indicates option {name} was set. Thus it 9572 looks like it still has the default value. Use like this: > 9573 set ambiwidth=double 9574 call test_option_not_set('ambiwidth') 9575< Now the 'ambiwidth' option behaves like it was never changed, 9576 even though the value is "double". 9577 Only to be used for testing! 9578 9579test_override({name}, {val}) *test_override()* 9580 Overrides certain parts of Vim's internal processing to be able 9581 to run tests. Only to be used for testing Vim! 9582 The override is enabled when {val} is non-zero and removed 9583 when {val} is zero. 9584 Current supported values for name are: 9585 9586 name effect when {val} is non-zero ~ 9587 redraw disable the redrawing() function 9588 redraw_flag ignore the RedrawingDisabled flag 9589 char_avail disable the char_avail() function 9590 starting reset the "starting" variable, see below 9591 nfa_fail makes the NFA regexp engine fail to force a 9592 fallback to the old engine 9593 ALL clear all overrides ({val} is not used) 9594 9595 "starting" is to be used when a test should behave like 9596 startup was done. Since the tests are run by sourcing a 9597 script the "starting" variable is non-zero. This is usually a 9598 good thing (tests run faster), but sometimes changes behavior 9599 in a way that the test doesn't work properly. 9600 When using: > 9601 call test_override('starting', 1) 9602< The value of "starting" is saved. It is restored by: > 9603 call test_override('starting', 0) 9604 9605test_refcount({expr}) *test_refcount()* 9606 Return the reference count of {expr}. When {expr} is of a 9607 type that does not have a reference count, returns -1. Only 9608 to be used for testing. 9609 9610test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()* 9611 Pretend using scrollbar {which} to move it to position 9612 {value}. {which} can be: 9613 left Left scrollbar of the current window 9614 right Right scrollbar of the current window 9615 hor Horizontal scrollbar 9616 9617 For the vertical scrollbars {value} can be 1 to the 9618 line-count of the buffer. For the horizontal scrollbar the 9619 {value} can be between 1 and the maximum line length, assuming 9620 'wrap' is not set. 9621 9622 When {dragging} is non-zero it's like dragging the scrollbar, 9623 otherwise it's like clicking in the scrollbar. 9624 Only works when the {which} scrollbar actually exists, 9625 obviously only when using the GUI. 9626 9627test_settime({expr}) *test_settime()* 9628 Set the time Vim uses internally. Currently only used for 9629 timestamps in the history, as they are used in viminfo, and 9630 for undo. 9631 Using a value of 1 makes Vim not sleep after a warning or 9632 error message. 9633 {expr} must evaluate to a number. When the value is zero the 9634 normal behavior is restored. 9635 9636 *timer_info()* 9637timer_info([{id}]) 9638 Return a list with information about timers. 9639 When {id} is given only information about this timer is 9640 returned. When timer {id} does not exist an empty list is 9641 returned. 9642 When {id} is omitted information about all timers is returned. 9643 9644 For each timer the information is stored in a Dictionary with 9645 these items: 9646 "id" the timer ID 9647 "time" time the timer was started with 9648 "remaining" time until the timer fires 9649 "repeat" number of times the timer will still fire; 9650 -1 means forever 9651 "callback" the callback 9652 "paused" 1 if the timer is paused, 0 otherwise 9653 9654 {only available when compiled with the |+timers| feature} 9655 9656timer_pause({timer}, {paused}) *timer_pause()* 9657 Pause or unpause a timer. A paused timer does not invoke its 9658 callback when its time expires. Unpausing a timer may cause 9659 the callback to be invoked almost immediately if enough time 9660 has passed. 9661 9662 Pausing a timer is useful to avoid the callback to be called 9663 for a short time. 9664 9665 If {paused} evaluates to a non-zero Number or a non-empty 9666 String, then the timer is paused, otherwise it is unpaused. 9667 See |non-zero-arg|. 9668 9669 {only available when compiled with the |+timers| feature} 9670 9671 *timer_start()* *timer* *timers* 9672timer_start({time}, {callback} [, {options}]) 9673 Create a timer and return the timer ID. 9674 9675 {time} is the waiting time in milliseconds. This is the 9676 minimum time before invoking the callback. When the system is 9677 busy or Vim is not waiting for input the time will be longer. 9678 9679 {callback} is the function to call. It can be the name of a 9680 function or a |Funcref|. It is called with one argument, which 9681 is the timer ID. The callback is only invoked when Vim is 9682 waiting for input. 9683 9684 {options} is a dictionary. Supported entries: 9685 "repeat" Number of times to repeat calling the 9686 callback. -1 means forever. When not present 9687 the callback will be called once. 9688 If the timer causes an error three times in a 9689 row the repeat is cancelled. This avoids that 9690 Vim becomes unusable because of all the error 9691 messages. 9692 9693 Example: > 9694 func MyHandler(timer) 9695 echo 'Handler called' 9696 endfunc 9697 let timer = timer_start(500, 'MyHandler', 9698 \ {'repeat': 3}) 9699< This will invoke MyHandler() three times at 500 msec 9700 intervals. 9701 9702 {only available when compiled with the |+timers| feature} 9703 9704timer_stop({timer}) *timer_stop()* 9705 Stop a timer. The timer callback will no longer be invoked. 9706 {timer} is an ID returned by timer_start(), thus it must be a 9707 Number. If {timer} does not exist there is no error. 9708 9709 {only available when compiled with the |+timers| feature} 9710 9711timer_stopall() *timer_stopall()* 9712 Stop all timers. The timer callbacks will no longer be 9713 invoked. Useful if some timers is misbehaving. If there are 9714 no timers there is no error. 9715 9716 {only available when compiled with the |+timers| feature} 9717 9718tolower({expr}) *tolower()* 9719 The result is a copy of the String given, with all uppercase 9720 characters turned into lowercase (just like applying |gu| to 9721 the string). 9722 9723toupper({expr}) *toupper()* 9724 The result is a copy of the String given, with all lowercase 9725 characters turned into uppercase (just like applying |gU| to 9726 the string). 9727 9728tr({src}, {fromstr}, {tostr}) *tr()* 9729 The result is a copy of the {src} string with all characters 9730 which appear in {fromstr} replaced by the character in that 9731 position in the {tostr} string. Thus the first character in 9732 {fromstr} is translated into the first character in {tostr} 9733 and so on. Exactly like the unix "tr" command. 9734 This code also deals with multibyte characters properly. 9735 9736 Examples: > 9737 echo tr("hello there", "ht", "HT") 9738< returns "Hello THere" > 9739 echo tr("<blob>", "<>", "{}") 9740< returns "{blob}" 9741 9742trim({text} [, {mask}]) *trim()* 9743 Return {text} as a String where any character in {mask} is 9744 removed from the beginning and end of {text}. 9745 If {mask} is not given, {mask} is all characters up to 0x20, 9746 which includes Tab, space, NL and CR, plus the non-breaking 9747 space character 0xa0. 9748 This code deals with multibyte characters properly. 9749 9750 Examples: > 9751 echo trim(" some text ") 9752< returns "some text" > 9753 echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL" 9754< returns "RESERVE_TAIL" > 9755 echo trim("rm<Xrm<>X>rrm", "rm<>") 9756< returns "Xrm<>X" (characters in the middle are not removed) 9757 9758trunc({expr}) *trunc()* 9759 Return the largest integral value with magnitude less than or 9760 equal to {expr} as a |Float| (truncate towards zero). 9761 {expr} must evaluate to a |Float| or a |Number|. 9762 Examples: > 9763 echo trunc(1.456) 9764< 1.0 > 9765 echo trunc(-5.456) 9766< -5.0 > 9767 echo trunc(4.0) 9768< 4.0 9769 {only available when compiled with the |+float| feature} 9770 9771 *type()* 9772type({expr}) The result is a Number representing the type of {expr}. 9773 Instead of using the number directly, it is better to use the 9774 v:t_ variable that has the value: 9775 Number: 0 |v:t_number| 9776 String: 1 |v:t_string| 9777 Funcref: 2 |v:t_func| 9778 List: 3 |v:t_list| 9779 Dictionary: 4 |v:t_dict| 9780 Float: 5 |v:t_float| 9781 Boolean: 6 |v:t_bool| (v:false and v:true) 9782 None: 7 |v:t_none| (v:null and v:none) 9783 Job: 8 |v:t_job| 9784 Channel: 9 |v:t_channel| 9785 Blob: 10 |v:t_blob| 9786 For backward compatibility, this method can be used: > 9787 :if type(myvar) == type(0) 9788 :if type(myvar) == type("") 9789 :if type(myvar) == type(function("tr")) 9790 :if type(myvar) == type([]) 9791 :if type(myvar) == type({}) 9792 :if type(myvar) == type(0.0) 9793 :if type(myvar) == type(v:false) 9794 :if type(myvar) == type(v:none) 9795< To check if the v:t_ variables exist use this: > 9796 :if exists('v:t_number') 9797 9798undofile({name}) *undofile()* 9799 Return the name of the undo file that would be used for a file 9800 with name {name} when writing. This uses the 'undodir' 9801 option, finding directories that exist. It does not check if 9802 the undo file exists. 9803 {name} is always expanded to the full path, since that is what 9804 is used internally. 9805 If {name} is empty undofile() returns an empty string, since a 9806 buffer without a file name will not write an undo file. 9807 Useful in combination with |:wundo| and |:rundo|. 9808 When compiled without the |+persistent_undo| option this always 9809 returns an empty string. 9810 9811undotree() *undotree()* 9812 Return the current state of the undo tree in a dictionary with 9813 the following items: 9814 "seq_last" The highest undo sequence number used. 9815 "seq_cur" The sequence number of the current position in 9816 the undo tree. This differs from "seq_last" 9817 when some changes were undone. 9818 "time_cur" Time last used for |:earlier| and related 9819 commands. Use |strftime()| to convert to 9820 something readable. 9821 "save_last" Number of the last file write. Zero when no 9822 write yet. 9823 "save_cur" Number of the current position in the undo 9824 tree. 9825 "synced" Non-zero when the last undo block was synced. 9826 This happens when waiting from input from the 9827 user. See |undo-blocks|. 9828 "entries" A list of dictionaries with information about 9829 undo blocks. 9830 9831 The first item in the "entries" list is the oldest undo item. 9832 Each List item is a Dictionary with these items: 9833 "seq" Undo sequence number. Same as what appears in 9834 |:undolist|. 9835 "time" Timestamp when the change happened. Use 9836 |strftime()| to convert to something readable. 9837 "newhead" Only appears in the item that is the last one 9838 that was added. This marks the last change 9839 and where further changes will be added. 9840 "curhead" Only appears in the item that is the last one 9841 that was undone. This marks the current 9842 position in the undo tree, the block that will 9843 be used by a redo command. When nothing was 9844 undone after the last change this item will 9845 not appear anywhere. 9846 "save" Only appears on the last block before a file 9847 write. The number is the write count. The 9848 first write has number 1, the last one the 9849 "save_last" mentioned above. 9850 "alt" Alternate entry. This is again a List of undo 9851 blocks. Each item may again have an "alt" 9852 item. 9853 9854uniq({list} [, {func} [, {dict}]]) *uniq()* *E882* 9855 Remove second and succeeding copies of repeated adjacent 9856 {list} items in-place. Returns {list}. If you want a list 9857 to remain unmodified make a copy first: > 9858 :let newlist = uniq(copy(mylist)) 9859< The default compare function uses the string representation of 9860 each item. For the use of {func} and {dict} see |sort()|. 9861 9862values({dict}) *values()* 9863 Return a |List| with all the values of {dict}. The |List| is 9864 in arbitrary order. Also see |items()| and |keys()|. 9865 9866 9867virtcol({expr}) *virtcol()* 9868 The result is a Number, which is the screen column of the file 9869 position given with {expr}. That is, the last screen position 9870 occupied by the character at that position, when the screen 9871 would be of unlimited width. When there is a <Tab> at the 9872 position, the returned Number will be the column at the end of 9873 the <Tab>. For example, for a <Tab> in column 1, with 'ts' 9874 set to 8, it returns 8. |conceal| is ignored. 9875 For the byte position use |col()|. 9876 For the use of {expr} see |col()|. 9877 When 'virtualedit' is used {expr} can be [lnum, col, off], where 9878 "off" is the offset in screen columns from the start of the 9879 character. E.g., a position within a <Tab> or after the last 9880 character. When "off" is omitted zero is used. 9881 When Virtual editing is active in the current mode, a position 9882 beyond the end of the line can be returned. |'virtualedit'| 9883 The accepted positions are: 9884 . the cursor position 9885 $ the end of the cursor line (the result is the 9886 number of displayed characters in the cursor line 9887 plus one) 9888 'x position of mark x (if the mark is not set, 0 is 9889 returned) 9890 v In Visual mode: the start of the Visual area (the 9891 cursor is the end). When not in Visual mode 9892 returns the cursor position. Differs from |'<| in 9893 that it's updated right away. 9894 Note that only marks in the current file can be used. 9895 Examples: > 9896 virtcol(".") with text "foo^Lbar", with cursor on the "^L", returns 5 9897 virtcol("$") with text "foo^Lbar", returns 9 9898 virtcol("'t") with text " there", with 't at 'h', returns 6 9899< The first column is 1. 0 is returned for an error. 9900 A more advanced example that echoes the maximum length of 9901 all lines: > 9902 echo max(map(range(1, line('$')), "virtcol([v:val, '$'])")) 9903 9904 9905visualmode([expr]) *visualmode()* 9906 The result is a String, which describes the last Visual mode 9907 used in the current buffer. Initially it returns an empty 9908 string, but once Visual mode has been used, it returns "v", 9909 "V", or "<CTRL-V>" (a single CTRL-V character) for 9910 character-wise, line-wise, or block-wise Visual mode 9911 respectively. 9912 Example: > 9913 :exe "normal " . visualmode() 9914< This enters the same Visual mode as before. It is also useful 9915 in scripts if you wish to act differently depending on the 9916 Visual mode that was used. 9917 If Visual mode is active, use |mode()| to get the Visual mode 9918 (e.g., in a |:vmap|). 9919 If [expr] is supplied and it evaluates to a non-zero Number or 9920 a non-empty String, then the Visual mode will be cleared and 9921 the old value is returned. See |non-zero-arg|. 9922 9923wildmenumode() *wildmenumode()* 9924 Returns |TRUE| when the wildmenu is active and |FALSE| 9925 otherwise. See 'wildmenu' and 'wildmode'. 9926 This can be used in mappings to handle the 'wildcharm' option 9927 gracefully. (Makes only sense with |mapmode-c| mappings). 9928 9929 For example to make <c-j> work like <down> in wildmode, use: > 9930 :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>" 9931< 9932 (Note, this needs the 'wildcharm' option set appropriately). 9933 9934 9935win_findbuf({bufnr}) *win_findbuf()* 9936 Returns a list with |window-ID|s for windows that contain 9937 buffer {bufnr}. When there is none the list is empty. 9938 9939win_getid([{win} [, {tab}]]) *win_getid()* 9940 Get the |window-ID| for the specified window. 9941 When {win} is missing use the current window. 9942 With {win} this is the window number. The top window has 9943 number 1. 9944 Without {tab} use the current tab, otherwise the tab with 9945 number {tab}. The first tab has number one. 9946 Return zero if the window cannot be found. 9947 9948win_gotoid({expr}) *win_gotoid()* 9949 Go to window with ID {expr}. This may also change the current 9950 tabpage. 9951 Return 1 if successful, 0 if the window cannot be found. 9952 9953win_id2tabwin({expr}) *win_id2tabwin()* 9954 Return a list with the tab number and window number of window 9955 with ID {expr}: [tabnr, winnr]. 9956 Return [0, 0] if the window cannot be found. 9957 9958win_id2win({expr}) *win_id2win()* 9959 Return the window number of window with ID {expr}. 9960 Return 0 if the window cannot be found in the current tabpage. 9961 9962win_screenpos({nr}) *win_screenpos()* 9963 Return the screen position of window {nr} as a list with two 9964 numbers: [row, col]. The first window always has position 9965 [1, 1], unless there is a tabline, then it is [2, 1]. 9966 {nr} can be the window number or the |window-ID|. 9967 Return [0, 0] if the window cannot be found in the current 9968 tabpage. 9969 9970 *winbufnr()* 9971winbufnr({nr}) The result is a Number, which is the number of the buffer 9972 associated with window {nr}. {nr} can be the window number or 9973 the |window-ID|. 9974 When {nr} is zero, the number of the buffer in the current 9975 window is returned. 9976 When window {nr} doesn't exist, -1 is returned. 9977 Example: > 9978 :echo "The file in the current window is " . bufname(winbufnr(0)) 9979< 9980 *wincol()* 9981wincol() The result is a Number, which is the virtual column of the 9982 cursor in the window. This is counting screen cells from the 9983 left side of the window. The leftmost column is one. 9984 9985winheight({nr}) *winheight()* 9986 The result is a Number, which is the height of window {nr}. 9987 {nr} can be the window number or the |window-ID|. 9988 When {nr} is zero, the height of the current window is 9989 returned. When window {nr} doesn't exist, -1 is returned. 9990 An existing window always has a height of zero or more. 9991 This excludes any window toolbar line. 9992 Examples: > 9993 :echo "The current window has " . winheight(0) . " lines." 9994< 9995winlayout([{tabnr}]) *winlayout()* 9996 The result is a nested List containing the layout of windows 9997 in a tabpage. 9998 9999 Without {tabnr} use the current tabpage, otherwise the tabpage 10000 with number {tabnr}. If the tabpage {tabnr} is not found, 10001 returns an empty list. 10002 10003 For a leaf window, it returns: 10004 ['leaf', {winid}] 10005 For horizontally split windows, which form a column, it 10006 returns: 10007 ['col', [{nested list of windows}]] 10008 For vertically split windows, which form a row, it returns: 10009 ['row', [{nested list of windows}]] 10010 10011 Example: > 10012 " Only one window in the tab page 10013 :echo winlayout() 10014 ['leaf', 1000] 10015 " Two horizontally split windows 10016 :echo winlayout() 10017 ['col', [['leaf', 1000], ['leaf', 1001]]] 10018 " Three horizontally split windows, with two 10019 " vertically split windows in the middle window 10020 :echo winlayout(2) 10021 ['col', [['leaf', 1002], ['row', ['leaf', 1003], 10022 ['leaf', 1001]]], ['leaf', 1000]] 10023< 10024 *winline()* 10025winline() The result is a Number, which is the screen line of the cursor 10026 in the window. This is counting screen lines from the top of 10027 the window. The first line is one. 10028 If the cursor was moved the view on the file will be updated 10029 first, this may cause a scroll. 10030 10031 *winnr()* 10032winnr([{arg}]) The result is a Number, which is the number of the current 10033 window. The top window has number 1. 10034 When the optional argument is "$", the number of the 10035 last window is returned (the window count). > 10036 let window_count = winnr('$') 10037< When the optional argument is "#", the number of the last 10038 accessed window is returned (where |CTRL-W_p| goes to). 10039 If there is no previous window or it is in another tab page 0 10040 is returned. 10041 The number can be used with |CTRL-W_w| and ":wincmd w" 10042 |:wincmd|. 10043 Also see |tabpagewinnr()| and |win_getid()|. 10044 10045 *winrestcmd()* 10046winrestcmd() Returns a sequence of |:resize| commands that should restore 10047 the current window sizes. Only works properly when no windows 10048 are opened or closed and the current window and tab page is 10049 unchanged. 10050 Example: > 10051 :let cmd = winrestcmd() 10052 :call MessWithWindowSizes() 10053 :exe cmd 10054< 10055 *winrestview()* 10056winrestview({dict}) 10057 Uses the |Dictionary| returned by |winsaveview()| to restore 10058 the view of the current window. 10059 Note: The {dict} does not have to contain all values, that are 10060 returned by |winsaveview()|. If values are missing, those 10061 settings won't be restored. So you can use: > 10062 :call winrestview({'curswant': 4}) 10063< 10064 This will only set the curswant value (the column the cursor 10065 wants to move on vertical movements) of the cursor to column 5 10066 (yes, that is 5), while all other settings will remain the 10067 same. This is useful, if you set the cursor position manually. 10068 10069 If you have changed the values the result is unpredictable. 10070 If the window size changed the result won't be the same. 10071 10072 *winsaveview()* 10073winsaveview() Returns a |Dictionary| that contains information to restore 10074 the view of the current window. Use |winrestview()| to 10075 restore the view. 10076 This is useful if you have a mapping that jumps around in the 10077 buffer and you want to go back to the original view. 10078 This does not save fold information. Use the 'foldenable' 10079 option to temporarily switch off folding, so that folds are 10080 not opened when moving around. This may have side effects. 10081 The return value includes: 10082 lnum cursor line number 10083 col cursor column (Note: the first column 10084 zero, as opposed to what getpos() 10085 returns) 10086 coladd cursor column offset for 'virtualedit' 10087 curswant column for vertical movement 10088 topline first line in the window 10089 topfill filler lines, only in diff mode 10090 leftcol first column displayed 10091 skipcol columns skipped 10092 Note that no option values are saved. 10093 10094 10095winwidth({nr}) *winwidth()* 10096 The result is a Number, which is the width of window {nr}. 10097 {nr} can be the window number or the |window-ID|. 10098 When {nr} is zero, the width of the current window is 10099 returned. When window {nr} doesn't exist, -1 is returned. 10100 An existing window always has a width of zero or more. 10101 Examples: > 10102 :echo "The current window has " . winwidth(0) . " columns." 10103 :if winwidth(0) <= 50 10104 : 50 wincmd | 10105 :endif 10106< For getting the terminal or screen size, see the 'columns' 10107 option. 10108 10109 10110wordcount() *wordcount()* 10111 The result is a dictionary of byte/chars/word statistics for 10112 the current buffer. This is the same info as provided by 10113 |g_CTRL-G| 10114 The return value includes: 10115 bytes Number of bytes in the buffer 10116 chars Number of chars in the buffer 10117 words Number of words in the buffer 10118 cursor_bytes Number of bytes before cursor position 10119 (not in Visual mode) 10120 cursor_chars Number of chars before cursor position 10121 (not in Visual mode) 10122 cursor_words Number of words before cursor position 10123 (not in Visual mode) 10124 visual_bytes Number of bytes visually selected 10125 (only in Visual mode) 10126 visual_chars Number of chars visually selected 10127 (only in Visual mode) 10128 visual_words Number of words visually selected 10129 (only in Visual mode) 10130 10131 10132 *writefile()* 10133writefile({object}, {fname} [, {flags}]) 10134 When {object} is a |List| write it to file {fname}. Each list 10135 item is separated with a NL. Each list item must be a String 10136 or Number. 10137 When {flags} contains "b" then binary mode is used: There will 10138 not be a NL after the last list item. An empty item at the 10139 end does cause the last line in the file to end in a NL. 10140 10141 When {object} is a |Blob| write the bytes to file {fname} 10142 unmodified. 10143 10144 When {flags} contains "a" then append mode is used, lines are 10145 appended to the file: > 10146 :call writefile(["foo"], "event.log", "a") 10147 :call writefile(["bar"], "event.log", "a") 10148< 10149 When {flags} contains "s" then fsync() is called after writing 10150 the file. This flushes the file to disk, if possible. This 10151 takes more time but avoids losing the file if the system 10152 crashes. 10153 When {flags} does not contain "S" or "s" then fsync() is 10154 called if the 'fsync' option is set. 10155 When {flags} contains "S" then fsync() is not called, even 10156 when 'fsync' is set. 10157 10158 All NL characters are replaced with a NUL character. 10159 Inserting CR characters needs to be done before passing {list} 10160 to writefile(). 10161 An existing file is overwritten, if possible. 10162 When the write fails -1 is returned, otherwise 0. There is an 10163 error message if the file can't be created or when writing 10164 fails. 10165 Also see |readfile()|. 10166 To copy a file byte for byte: > 10167 :let fl = readfile("foo", "b") 10168 :call writefile(fl, "foocopy", "b") 10169 10170 10171xor({expr}, {expr}) *xor()* 10172 Bitwise XOR on the two arguments. The arguments are converted 10173 to a number. A List, Dict or Float argument causes an error. 10174 Example: > 10175 :let bits = xor(bits, 0x80) 10176< 10177 10178 10179 *feature-list* 10180There are four types of features: 101811. Features that are only supported when they have been enabled when Vim 10182 was compiled |+feature-list|. Example: > 10183 :if has("cindent") 101842. Features that are only supported when certain conditions have been met. 10185 Example: > 10186 :if has("gui_running") 10187< *has-patch* 101883. Beyond a certain version or at a certain version and including a specific 10189 patch. The "patch-7.4.248" feature means that the Vim version is 7.5 or 10190 later, or it is version 7.4 and patch 248 was included. Example: > 10191 :if has("patch-7.4.248") 10192< Note that it's possible for patch 248 to be omitted even though 249 is 10193 included. Only happens when cherry-picking patches. 10194 Note that this form only works for patch 7.4.237 and later, before that 10195 you need to check for the patch and the v:version. Example (checking 10196 version 6.2.148 or later): > 10197 :if v:version > 602 || (v:version == 602 && has("patch148")) 10198 10199Hint: To find out if Vim supports backslashes in a file name (MS-Windows), 10200use: `if exists('+shellslash')` 10201 10202 10203acl Compiled with |ACL| support. 10204all_builtin_terms Compiled with all builtin terminals enabled. 10205amiga Amiga version of Vim. 10206arabic Compiled with Arabic support |Arabic|. 10207arp Compiled with ARP support (Amiga). 10208autocmd Compiled with autocommand support. (always true) 10209autochdir Compiled with support for 'autochdir' 10210autoservername Automatically enable |clientserver| 10211balloon_eval Compiled with |balloon-eval| support. 10212balloon_multiline GUI supports multiline balloons. 10213beos BeOS version of Vim. 10214browse Compiled with |:browse| support, and browse() will 10215 work. 10216browsefilter Compiled with support for |browsefilter|. 10217bsd Compiled on an OS in the BSD family (excluding macOS). 10218builtin_terms Compiled with some builtin terminals. 10219byte_offset Compiled with support for 'o' in 'statusline' 10220cindent Compiled with 'cindent' support. 10221clientserver Compiled with remote invocation support |clientserver|. 10222clipboard Compiled with 'clipboard' support. 10223cmdline_compl Compiled with |cmdline-completion| support. 10224cmdline_hist Compiled with |cmdline-history| support. 10225cmdline_info Compiled with 'showcmd' and 'ruler' support. 10226comments Compiled with |'comments'| support. 10227compatible Compiled to be very Vi compatible. 10228conpty Platform where |ConPTY| can be used. 10229cryptv Compiled with encryption support |encryption|. 10230cscope Compiled with |cscope| support. 10231cursorbind Compiled with |'cursorbind'| (always true) 10232debug Compiled with "DEBUG" defined. 10233dialog_con Compiled with console dialog support. 10234dialog_gui Compiled with GUI dialog support. 10235diff Compiled with |vimdiff| and 'diff' support. 10236digraphs Compiled with support for digraphs. 10237directx Compiled with support for DirectX and 'renderoptions'. 10238dnd Compiled with support for the "~ register |quote_~|. 10239ebcdic Compiled on a machine with ebcdic character set. 10240emacs_tags Compiled with support for Emacs tags. 10241eval Compiled with expression evaluation support. Always 10242 true, of course! 10243ex_extra |+ex_extra| (always true) 10244extra_search Compiled with support for |'incsearch'| and 10245 |'hlsearch'| 10246farsi Compiled with Farsi support |farsi|. 10247file_in_path Compiled with support for |gf| and |<cfile>| 10248filterpipe When 'shelltemp' is off pipes are used for shell 10249 read/write/filter commands 10250find_in_path Compiled with support for include file searches 10251 |+find_in_path|. 10252float Compiled with support for |Float|. 10253fname_case Case in file names matters (for Amiga, MS-DOS, and 10254 Windows this is not present). 10255folding Compiled with |folding| support. 10256footer Compiled with GUI footer support. |gui-footer| 10257fork Compiled to use fork()/exec() instead of system(). 10258gettext Compiled with message translation |multi-lang| 10259gui Compiled with GUI enabled. 10260gui_athena Compiled with Athena GUI. 10261gui_gnome Compiled with Gnome support (gui_gtk is also defined). 10262gui_gtk Compiled with GTK+ GUI (any version). 10263gui_gtk2 Compiled with GTK+ 2 GUI (gui_gtk is also defined). 10264gui_gtk3 Compiled with GTK+ 3 GUI (gui_gtk is also defined). 10265gui_mac Compiled with Macintosh GUI. 10266gui_motif Compiled with Motif GUI. 10267gui_photon Compiled with Photon GUI. 10268gui_running Vim is running in the GUI, or it will start soon. 10269gui_win32 Compiled with MS Windows Win32 GUI. 10270gui_win32s idem, and Win32s system being used (Windows 3.1) 10271hangul_input Compiled with Hangul input support. |hangul| 10272hpux HP-UX version of Vim. 10273iconv Can use iconv() for conversion. 10274insert_expand Compiled with support for CTRL-X expansion commands in 10275 Insert mode. 10276jumplist Compiled with |jumplist| support. 10277keymap Compiled with 'keymap' support. 10278lambda Compiled with |lambda| support. 10279langmap Compiled with 'langmap' support. 10280libcall Compiled with |libcall()| support. 10281linebreak Compiled with 'linebreak', 'breakat', 'showbreak' and 10282 'breakindent' support. 10283linux Linux version of Vim. 10284lispindent Compiled with support for lisp indenting. 10285listcmds Compiled with commands for the buffer list |:files| 10286 and the argument list |arglist|. 10287localmap Compiled with local mappings and abbr. |:map-local| 10288lua Compiled with Lua interface |Lua|. 10289mac Any Macintosh version of Vim cf. osx 10290macunix Synonym for osxdarwin 10291menu Compiled with support for |:menu|. 10292mksession Compiled with support for |:mksession|. 10293modify_fname Compiled with file name modifiers. |filename-modifiers| 10294mouse Compiled with support mouse. 10295mouse_dec Compiled with support for Dec terminal mouse. 10296mouse_gpm Compiled with support for gpm (Linux console mouse) 10297mouse_netterm Compiled with support for netterm mouse. 10298mouse_pterm Compiled with support for qnx pterm mouse. 10299mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) 10300mouse_sgr Compiled with support for sgr mouse. 10301mouse_urxvt Compiled with support for urxvt mouse. 10302mouse_xterm Compiled with support for xterm mouse. 10303mouseshape Compiled with support for 'mouseshape'. 10304multi_byte Compiled with support for 'encoding' (always true) 10305multi_byte_encoding 'encoding' is set to a multi-byte encoding. 10306multi_byte_ime Compiled with support for IME input method. 10307multi_lang Compiled with support for multiple languages. 10308mzscheme Compiled with MzScheme interface |mzscheme|. 10309netbeans_enabled Compiled with support for |netbeans| and connected. 10310netbeans_intg Compiled with support for |netbeans|. 10311num64 Compiled with 64-bit |Number| support. 10312ole Compiled with OLE automation support for Win32. 10313osx Compiled for macOS cf. mac 10314osxdarwin Compiled for macOS, with |mac-darwin-feature| 10315packages Compiled with |packages| support. 10316path_extra Compiled with up/downwards search in 'path' and 'tags' 10317perl Compiled with Perl interface. 10318persistent_undo Compiled with support for persistent undo history. 10319postscript Compiled with PostScript file printing. 10320printer Compiled with |:hardcopy| support. 10321profile Compiled with |:profile| support. 10322python Python 2.x interface available. |has-python| 10323python_compiled Compiled with Python 2.x interface. |has-python| 10324python_dynamic Python 2.x interface is dynamically loaded. |has-python| 10325python3 Python 3.x interface available. |has-python| 10326python3_compiled Compiled with Python 3.x interface. |has-python| 10327python3_dynamic Python 3.x interface is dynamically loaded. |has-python| 10328pythonx Compiled with |python_x| interface. |has-pythonx| 10329qnx QNX version of Vim. 10330quickfix Compiled with |quickfix| support. 10331reltime Compiled with |reltime()| support. 10332rightleft Compiled with 'rightleft' support. 10333ruby Compiled with Ruby interface |ruby|. 10334scrollbind Compiled with 'scrollbind' support. (always true) 10335showcmd Compiled with 'showcmd' support. 10336signs Compiled with |:sign| support. 10337smartindent Compiled with 'smartindent' support. 10338spell Compiled with spell checking support |spell|. 10339startuptime Compiled with |--startuptime| support. 10340statusline Compiled with support for 'statusline', 'rulerformat' 10341 and special formats of 'titlestring' and 'iconstring'. 10342sun SunOS version of Vim. 10343sun_workshop Support for Sun |workshop| has been removed. 10344syntax Compiled with syntax highlighting support |syntax|. 10345syntax_items There are active syntax highlighting items for the 10346 current buffer. 10347system Compiled to use system() instead of fork()/exec(). 10348tag_binary Compiled with binary searching in tags files 10349 |tag-binary-search|. 10350tag_old_static Compiled with support for old static tags 10351 |tag-old-static|. 10352tcl Compiled with Tcl interface. 10353termguicolors Compiled with true color in terminal support. 10354terminal Compiled with |terminal| support. 10355terminfo Compiled with terminfo instead of termcap. 10356termresponse Compiled with support for |t_RV| and |v:termresponse|. 10357textobjects Compiled with support for |text-objects|. 10358textprop Compiled with support for |text-properties|. 10359tgetent Compiled with tgetent support, able to use a termcap 10360 or terminfo file. 10361timers Compiled with |timer_start()| support. 10362title Compiled with window title support |'title'|. 10363toolbar Compiled with support for |gui-toolbar|. 10364ttyin input is a terminal (tty) 10365ttyout output is a terminal (tty) 10366unix Unix version of Vim. *+unix* 10367unnamedplus Compiled with support for "unnamedplus" in 'clipboard' 10368user_commands User-defined commands. 10369vcon Win32: Virtual console support is working, can use 10370 'termguicolors'. Also see |+vtp|. 10371vertsplit Compiled with vertically split windows |:vsplit|. 10372 (always true) 10373vim_starting True while initial source'ing takes place. |startup| 10374 *vim_starting* 10375viminfo Compiled with viminfo support. 10376virtualedit Compiled with 'virtualedit' option. (always true) 10377visual Compiled with Visual mode. (always true) 10378visualextra Compiled with extra Visual mode commands. (always 10379 true) |blockwise-operators|. 10380vms VMS version of Vim. 10381vreplace Compiled with |gR| and |gr| commands. (always true) 10382vtp Compiled for vcon support |+vtp| (check vcon to find 10383 out if it works in the current console). 10384wildignore Compiled with 'wildignore' option. 10385wildmenu Compiled with 'wildmenu' option. 10386win16 old version for MS-Windows 3.1 (always false) 10387win32 Win32 version of Vim (MS-Windows 95 and later, 32 or 10388 64 bits) 10389win32unix Win32 version of Vim, using Unix files (Cygwin) 10390win64 Win64 version of Vim (MS-Windows 64 bit). 10391win95 Win32 version for MS-Windows 95/98/ME (always false) 10392winaltkeys Compiled with 'winaltkeys' option. 10393windows Compiled with support for more than one window. 10394 (always true) 10395writebackup Compiled with 'writebackup' default on. 10396xfontset Compiled with X fontset support |xfontset|. 10397xim Compiled with X input method support |xim|. 10398xpm Compiled with pixmap support. 10399xpm_w32 Compiled with pixmap support for Win32. (Only for 10400 backward compatibility. Use "xpm" instead.) 10401xsmp Compiled with X session management support. 10402xsmp_interact Compiled with interactive X session management support. 10403xterm_clipboard Compiled with support for xterm clipboard. 10404xterm_save Compiled with support for saving and restoring the 10405 xterm screen. 10406x11 Compiled with X11 support. 10407 10408 *string-match* 10409Matching a pattern in a String 10410 10411A regexp pattern as explained at |pattern| is normally used to find a match in 10412the buffer lines. When a pattern is used to find a match in a String, almost 10413everything works in the same way. The difference is that a String is handled 10414like it is one line. When it contains a "\n" character, this is not seen as a 10415line break for the pattern. It can be matched with a "\n" in the pattern, or 10416with ".". Example: > 10417 :let a = "aaaa\nxxxx" 10418 :echo matchstr(a, "..\n..") 10419 aa 10420 xx 10421 :echo matchstr(a, "a.x") 10422 a 10423 x 10424 10425Don't forget that "^" will only match at the first character of the String and 10426"$" at the last character of the string. They don't match after or before a 10427"\n". 10428 10429============================================================================== 104305. Defining functions *user-functions* 10431 10432New functions can be defined. These can be called just like builtin 10433functions. The function executes a sequence of Ex commands. Normal mode 10434commands can be executed with the |:normal| command. 10435 10436The function name must start with an uppercase letter, to avoid confusion with 10437builtin functions. To prevent from using the same name in different scripts 10438avoid obvious, short names. A good habit is to start the function name with 10439the name of the script, e.g., "HTMLcolor()". 10440 10441It's also possible to use curly braces, see |curly-braces-names|. And the 10442|autoload| facility is useful to define a function only when it's called. 10443 10444 *local-function* 10445A function local to a script must start with "s:". A local script function 10446can only be called from within the script and from functions, user commands 10447and autocommands defined in the script. It is also possible to call the 10448function from a mapping defined in the script, but then |<SID>| must be used 10449instead of "s:" when the mapping is expanded outside of the script. 10450There are only script-local functions, no buffer-local or window-local 10451functions. 10452 10453 *:fu* *:function* *E128* *E129* *E123* 10454:fu[nction] List all functions and their arguments. 10455 10456:fu[nction] {name} List function {name}. 10457 {name} can also be a |Dictionary| entry that is a 10458 |Funcref|: > 10459 :function dict.init 10460 10461:fu[nction] /{pattern} List functions with a name matching {pattern}. 10462 Example that lists all functions ending with "File": > 10463 :function /File$ 10464< 10465 *:function-verbose* 10466When 'verbose' is non-zero, listing a function will also display where it was 10467last defined. Example: > 10468 10469 :verbose function SetFileTypeSH 10470 function SetFileTypeSH(name) 10471 Last set from /usr/share/vim/vim-7.0/filetype.vim 10472< 10473See |:verbose-cmd| for more information. 10474 10475 *E124* *E125* *E853* *E884* 10476:fu[nction][!] {name}([arguments]) [range] [abort] [dict] [closure] 10477 Define a new function by the name {name}. The body of 10478 the function follows in the next lines, until the 10479 matching |:endfunction|. 10480 10481 The name must be made of alphanumeric characters and 10482 '_', and must start with a capital or "s:" (see 10483 above). Note that using "b:" or "g:" is not allowed. 10484 (since patch 7.4.260 E884 is given if the function 10485 name has a colon in the name, e.g. for "foo:bar()". 10486 Before that patch no error was given). 10487 10488 {name} can also be a |Dictionary| entry that is a 10489 |Funcref|: > 10490 :function dict.init(arg) 10491< "dict" must be an existing dictionary. The entry 10492 "init" is added if it didn't exist yet. Otherwise [!] 10493 is required to overwrite an existing function. The 10494 result is a |Funcref| to a numbered function. The 10495 function can only be used with a |Funcref| and will be 10496 deleted if there are no more references to it. 10497 *E127* *E122* 10498 When a function by this name already exists and [!] is 10499 not used an error message is given. There is one 10500 exception: When sourcing a script again, a function 10501 that was previously defined in that script will be 10502 silently replaced. 10503 When [!] is used, an existing function is silently 10504 replaced. Unless it is currently being executed, that 10505 is an error. 10506 NOTE: Use ! wisely. If used without care it can cause 10507 an existing function to be replaced unexpectedly, 10508 which is hard to debug. 10509 10510 For the {arguments} see |function-argument|. 10511 10512 *:func-range* *a:firstline* *a:lastline* 10513 When the [range] argument is added, the function is 10514 expected to take care of a range itself. The range is 10515 passed as "a:firstline" and "a:lastline". If [range] 10516 is excluded, ":{range}call" will call the function for 10517 each line in the range, with the cursor on the start 10518 of each line. See |function-range-example|. 10519 The cursor is still moved to the first line of the 10520 range, as is the case with all Ex commands. 10521 *:func-abort* 10522 When the [abort] argument is added, the function will 10523 abort as soon as an error is detected. 10524 *:func-dict* 10525 When the [dict] argument is added, the function must 10526 be invoked through an entry in a |Dictionary|. The 10527 local variable "self" will then be set to the 10528 dictionary. See |Dictionary-function|. 10529 *:func-closure* *E932* 10530 When the [closure] argument is added, the function 10531 can access variables and arguments from the outer 10532 scope. This is usually called a closure. In this 10533 example Bar() uses "x" from the scope of Foo(). It 10534 remains referenced even after Foo() returns: > 10535 :function! Foo() 10536 : let x = 0 10537 : function! Bar() closure 10538 : let x += 1 10539 : return x 10540 : endfunction 10541 : return funcref('Bar') 10542 :endfunction 10543 10544 :let F = Foo() 10545 :echo F() 10546< 1 > 10547 :echo F() 10548< 2 > 10549 :echo F() 10550< 3 10551 10552 *function-search-undo* 10553 The last used search pattern and the redo command "." 10554 will not be changed by the function. This also 10555 implies that the effect of |:nohlsearch| is undone 10556 when the function returns. 10557 10558 *:endf* *:endfunction* *E126* *E193* *W22* 10559:endf[unction] [argument] 10560 The end of a function definition. Best is to put it 10561 on a line by its own, without [argument]. 10562 10563 [argument] can be: 10564 | command command to execute next 10565 \n command command to execute next 10566 " comment always ignored 10567 anything else ignored, warning given when 10568 'verbose' is non-zero 10569 The support for a following command was added in Vim 10570 8.0.0654, before that any argument was silently 10571 ignored. 10572 10573 To be able to define a function inside an `:execute` 10574 command, use line breaks instead of |:bar|: > 10575 :exe "func Foo()\necho 'foo'\nendfunc" 10576< 10577 *:delf* *:delfunction* *E130* *E131* *E933* 10578:delf[unction][!] {name} 10579 Delete function {name}. 10580 {name} can also be a |Dictionary| entry that is a 10581 |Funcref|: > 10582 :delfunc dict.init 10583< This will remove the "init" entry from "dict". The 10584 function is deleted if there are no more references to 10585 it. 10586 With the ! there is no error if the function does not 10587 exist. 10588 *:retu* *:return* *E133* 10589:retu[rn] [expr] Return from a function. When "[expr]" is given, it is 10590 evaluated and returned as the result of the function. 10591 If "[expr]" is not given, the number 0 is returned. 10592 When a function ends without an explicit ":return", 10593 the number 0 is returned. 10594 Note that there is no check for unreachable lines, 10595 thus there is no warning if commands follow ":return". 10596 10597 If the ":return" is used after a |:try| but before the 10598 matching |:finally| (if present), the commands 10599 following the ":finally" up to the matching |:endtry| 10600 are executed first. This process applies to all 10601 nested ":try"s inside the function. The function 10602 returns at the outermost ":endtry". 10603 10604 *function-argument* *a:var* 10605An argument can be defined by giving its name. In the function this can then 10606be used as "a:name" ("a:" for argument). 10607 *a:0* *a:1* *a:000* *E740* *...* 10608Up to 20 arguments can be given, separated by commas. After the named 10609arguments an argument "..." can be specified, which means that more arguments 10610may optionally be following. In the function the extra arguments can be used 10611as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which 10612can be 0). "a:000" is set to a |List| that contains these arguments. Note 10613that "a:1" is the same as "a:000[0]". 10614 *E742* 10615The a: scope and the variables in it cannot be changed, they are fixed. 10616However, if a composite type is used, such as |List| or |Dictionary| , you can 10617change their contents. Thus you can pass a |List| to a function and have the 10618function add an item to it. If you want to make sure the function cannot 10619change a |List| or |Dictionary| use |:lockvar|. 10620 10621When not using "...", the number of arguments in a function call must be equal 10622to the number of named arguments. When using "...", the number of arguments 10623may be larger. 10624 10625It is also possible to define a function without any arguments. You must 10626still supply the () then. 10627 10628It is allowed to define another function inside a function body. 10629 10630 *local-variables* 10631Inside a function local variables can be used. These will disappear when the 10632function returns. Global variables need to be accessed with "g:". 10633 10634Example: > 10635 :function Table(title, ...) 10636 : echohl Title 10637 : echo a:title 10638 : echohl None 10639 : echo a:0 . " items:" 10640 : for s in a:000 10641 : echon ' ' . s 10642 : endfor 10643 :endfunction 10644 10645This function can then be called with: > 10646 call Table("Table", "line1", "line2") 10647 call Table("Empty Table") 10648 10649To return more than one value, return a |List|: > 10650 :function Compute(n1, n2) 10651 : if a:n2 == 0 10652 : return ["fail", 0] 10653 : endif 10654 : return ["ok", a:n1 / a:n2] 10655 :endfunction 10656 10657This function can then be called with: > 10658 :let [success, div] = Compute(102, 6) 10659 :if success == "ok" 10660 : echo div 10661 :endif 10662< 10663 *:cal* *:call* *E107* *E117* 10664:[range]cal[l] {name}([arguments]) 10665 Call a function. The name of the function and its arguments 10666 are as specified with |:function|. Up to 20 arguments can be 10667 used. The returned value is discarded. 10668 Without a range and for functions that accept a range, the 10669 function is called once. When a range is given the cursor is 10670 positioned at the start of the first line before executing the 10671 function. 10672 When a range is given and the function doesn't handle it 10673 itself, the function is executed for each line in the range, 10674 with the cursor in the first column of that line. The cursor 10675 is left at the last line (possibly moved by the last function 10676 call). The arguments are re-evaluated for each line. Thus 10677 this works: 10678 *function-range-example* > 10679 :function Mynumber(arg) 10680 : echo line(".") . " " . a:arg 10681 :endfunction 10682 :1,5call Mynumber(getline(".")) 10683< 10684 The "a:firstline" and "a:lastline" are defined anyway, they 10685 can be used to do something different at the start or end of 10686 the range. 10687 10688 Example of a function that handles the range itself: > 10689 10690 :function Cont() range 10691 : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ ' 10692 :endfunction 10693 :4,8call Cont() 10694< 10695 This function inserts the continuation character "\" in front 10696 of all the lines in the range, except the first one. 10697 10698 When the function returns a composite value it can be further 10699 dereferenced, but the range will not be used then. Example: > 10700 :4,8call GetDict().method() 10701< Here GetDict() gets the range but method() does not. 10702 10703 *E132* 10704The recursiveness of user functions is restricted with the |'maxfuncdepth'| 10705option. 10706 10707 10708AUTOMATICALLY LOADING FUNCTIONS ~ 10709 *autoload-functions* 10710When using many or large functions, it's possible to automatically define them 10711only when they are used. There are two methods: with an autocommand and with 10712the "autoload" directory in 'runtimepath'. 10713 10714 10715Using an autocommand ~ 10716 10717This is introduced in the user manual, section |41.14|. 10718 10719The autocommand is useful if you have a plugin that is a long Vim script file. 10720You can define the autocommand and quickly quit the script with |:finish|. 10721That makes Vim startup faster. The autocommand should then load the same file 10722again, setting a variable to skip the |:finish| command. 10723 10724Use the FuncUndefined autocommand event with a pattern that matches the 10725function(s) to be defined. Example: > 10726 10727 :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim 10728 10729The file "~/vim/bufnetfuncs.vim" should then define functions that start with 10730"BufNet". Also see |FuncUndefined|. 10731 10732 10733Using an autoload script ~ 10734 *autoload* *E746* 10735This is introduced in the user manual, section |41.15|. 10736 10737Using a script in the "autoload" directory is simpler, but requires using 10738exactly the right file name. A function that can be autoloaded has a name 10739like this: > 10740 10741 :call filename#funcname() 10742 10743When such a function is called, and it is not defined yet, Vim will search the 10744"autoload" directories in 'runtimepath' for a script file called 10745"filename.vim". For example "~/.vim/autoload/filename.vim". That file should 10746then define the function like this: > 10747 10748 function filename#funcname() 10749 echo "Done!" 10750 endfunction 10751 10752The file name and the name used before the # in the function must match 10753exactly, and the defined function must have the name exactly as it will be 10754called. 10755 10756It is possible to use subdirectories. Every # in the function name works like 10757a path separator. Thus when calling a function: > 10758 10759 :call foo#bar#func() 10760 10761Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'. 10762 10763This also works when reading a variable that has not been set yet: > 10764 10765 :let l = foo#bar#lvar 10766 10767However, when the autoload script was already loaded it won't be loaded again 10768for an unknown variable. 10769 10770When assigning a value to such a variable nothing special happens. This can 10771be used to pass settings to the autoload script before it's loaded: > 10772 10773 :let foo#bar#toggle = 1 10774 :call foo#bar#func() 10775 10776Note that when you make a mistake and call a function that is supposed to be 10777defined in an autoload script, but the script doesn't actually define the 10778function, the script will be sourced every time you try to call the function. 10779And you will get an error message every time. 10780 10781Also note that if you have two script files, and one calls a function in the 10782other and vice versa, before the used function is defined, it won't work. 10783Avoid using the autoload functionality at the toplevel. 10784 10785Hint: If you distribute a bunch of scripts you can pack them together with the 10786|vimball| utility. Also read the user manual |distribute-script|. 10787 10788============================================================================== 107896. Curly braces names *curly-braces-names* 10790 10791In most places where you can use a variable, you can use a "curly braces name" 10792variable. This is a regular variable name with one or more expressions 10793wrapped in braces {} like this: > 10794 my_{adjective}_variable 10795 10796When Vim encounters this, it evaluates the expression inside the braces, puts 10797that in place of the expression, and re-interprets the whole as a variable 10798name. So in the above example, if the variable "adjective" was set to 10799"noisy", then the reference would be to "my_noisy_variable", whereas if 10800"adjective" was set to "quiet", then it would be to "my_quiet_variable". 10801 10802One application for this is to create a set of variables governed by an option 10803value. For example, the statement > 10804 echo my_{&background}_message 10805 10806would output the contents of "my_dark_message" or "my_light_message" depending 10807on the current value of 'background'. 10808 10809You can use multiple brace pairs: > 10810 echo my_{adverb}_{adjective}_message 10811..or even nest them: > 10812 echo my_{ad{end_of_word}}_message 10813where "end_of_word" is either "verb" or "jective". 10814 10815However, the expression inside the braces must evaluate to a valid single 10816variable name, e.g. this is invalid: > 10817 :let foo='a + b' 10818 :echo c{foo}d 10819.. since the result of expansion is "ca + bd", which is not a variable name. 10820 10821 *curly-braces-function-names* 10822You can call and define functions by an evaluated name in a similar way. 10823Example: > 10824 :let func_end='whizz' 10825 :call my_func_{func_end}(parameter) 10826 10827This would call the function "my_func_whizz(parameter)". 10828 10829This does NOT work: > 10830 :let i = 3 10831 :let @{i} = '' " error 10832 :echo @{i} " error 10833 10834============================================================================== 108357. Commands *expression-commands* 10836 10837:let {var-name} = {expr1} *:let* *E18* 10838 Set internal variable {var-name} to the result of the 10839 expression {expr1}. The variable will get the type 10840 from the {expr}. If {var-name} didn't exist yet, it 10841 is created. 10842 10843:let {var-name}[{idx}] = {expr1} *E689* 10844 Set a list item to the result of the expression 10845 {expr1}. {var-name} must refer to a list and {idx} 10846 must be a valid index in that list. For nested list 10847 the index can be repeated. 10848 This cannot be used to add an item to a |List|. 10849 This cannot be used to set a byte in a String. You 10850 can do that like this: > 10851 :let var = var[0:2] . 'X' . var[4:] 10852< When {var-name} is a |Blob| then {idx} can be the 10853 length of the blob, in which case one byte is 10854 appended. 10855 10856 *E711* *E719* 10857:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710* 10858 Set a sequence of items in a |List| to the result of 10859 the expression {expr1}, which must be a list with the 10860 correct number of items. 10861 {idx1} can be omitted, zero is used instead. 10862 {idx2} can be omitted, meaning the end of the list. 10863 When the selected range of items is partly past the 10864 end of the list, items will be added. 10865 10866 *:let+=* *:let-=* *:letstar=* 10867 *:let/=* *:let%=* *:let.=* *E734* 10868:let {var} += {expr1} Like ":let {var} = {var} + {expr1}". 10869:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}". 10870:let {var} *= {expr1} Like ":let {var} = {var} * {expr1}". 10871:let {var} /= {expr1} Like ":let {var} = {var} / {expr1}". 10872:let {var} %= {expr1} Like ":let {var} = {var} % {expr1}". 10873:let {var} .= {expr1} Like ":let {var} = {var} . {expr1}". 10874 These fail if {var} was not set yet and when the type 10875 of {var} and {expr1} don't fit the operator. 10876 10877 10878:let ${env-name} = {expr1} *:let-environment* *:let-$* 10879 Set environment variable {env-name} to the result of 10880 the expression {expr1}. The type is always String. 10881:let ${env-name} .= {expr1} 10882 Append {expr1} to the environment variable {env-name}. 10883 If the environment variable didn't exist yet this 10884 works like "=". 10885 10886:let @{reg-name} = {expr1} *:let-register* *:let-@* 10887 Write the result of the expression {expr1} in register 10888 {reg-name}. {reg-name} must be a single letter, and 10889 must be the name of a writable register (see 10890 |registers|). "@@" can be used for the unnamed 10891 register, "@/" for the search pattern. 10892 If the result of {expr1} ends in a <CR> or <NL>, the 10893 register will be linewise, otherwise it will be set to 10894 characterwise. 10895 This can be used to clear the last search pattern: > 10896 :let @/ = "" 10897< This is different from searching for an empty string, 10898 that would match everywhere. 10899 10900:let @{reg-name} .= {expr1} 10901 Append {expr1} to register {reg-name}. If the 10902 register was empty it's like setting it to {expr1}. 10903 10904:let &{option-name} = {expr1} *:let-option* *:let-&* 10905 Set option {option-name} to the result of the 10906 expression {expr1}. A String or Number value is 10907 always converted to the type of the option. 10908 For an option local to a window or buffer the effect 10909 is just like using the |:set| command: both the local 10910 value and the global value are changed. 10911 Example: > 10912 :let &path = &path . ',/usr/local/include' 10913< This also works for terminal codes in the form t_xx. 10914 But only for alphanumerical names. Example: > 10915 :let &t_k1 = "\<Esc>[234;" 10916< When the code does not exist yet it will be created as 10917 a terminal key code, there is no error. 10918 10919:let &{option-name} .= {expr1} 10920 For a string option: Append {expr1} to the value. 10921 Does not insert a comma like |:set+=|. 10922 10923:let &{option-name} += {expr1} 10924:let &{option-name} -= {expr1} 10925 For a number or boolean option: Add or subtract 10926 {expr1}. 10927 10928:let &l:{option-name} = {expr1} 10929:let &l:{option-name} .= {expr1} 10930:let &l:{option-name} += {expr1} 10931:let &l:{option-name} -= {expr1} 10932 Like above, but only set the local value of an option 10933 (if there is one). Works like |:setlocal|. 10934 10935:let &g:{option-name} = {expr1} 10936:let &g:{option-name} .= {expr1} 10937:let &g:{option-name} += {expr1} 10938:let &g:{option-name} -= {expr1} 10939 Like above, but only set the global value of an option 10940 (if there is one). Works like |:setglobal|. 10941 10942:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688* 10943 {expr1} must evaluate to a |List|. The first item in 10944 the list is assigned to {name1}, the second item to 10945 {name2}, etc. 10946 The number of names must match the number of items in 10947 the |List|. 10948 Each name can be one of the items of the ":let" 10949 command as mentioned above. 10950 Example: > 10951 :let [s, item] = GetItem(s) 10952< Detail: {expr1} is evaluated first, then the 10953 assignments are done in sequence. This matters if 10954 {name2} depends on {name1}. Example: > 10955 :let x = [0, 1] 10956 :let i = 0 10957 :let [i, x[i]] = [1, 2] 10958 :echo x 10959< The result is [0, 2]. 10960 10961:let [{name1}, {name2}, ...] .= {expr1} 10962:let [{name1}, {name2}, ...] += {expr1} 10963:let [{name1}, {name2}, ...] -= {expr1} 10964 Like above, but append/add/subtract the value for each 10965 |List| item. 10966 10967:let [{name}, ..., ; {lastname}] = {expr1} 10968 Like |:let-unpack| above, but the |List| may have more 10969 items than there are names. A list of the remaining 10970 items is assigned to {lastname}. If there are no 10971 remaining items {lastname} is set to an empty list. 10972 Example: > 10973 :let [a, b; rest] = ["aval", "bval", 3, 4] 10974< 10975:let [{name}, ..., ; {lastname}] .= {expr1} 10976:let [{name}, ..., ; {lastname}] += {expr1} 10977:let [{name}, ..., ; {lastname}] -= {expr1} 10978 Like above, but append/add/subtract the value for each 10979 |List| item. 10980 10981 *E121* 10982:let {var-name} .. List the value of variable {var-name}. Multiple 10983 variable names may be given. Special names recognized 10984 here: *E738* 10985 g: global variables 10986 b: local buffer variables 10987 w: local window variables 10988 t: local tab page variables 10989 s: script-local variables 10990 l: local function variables 10991 v: Vim variables. 10992 10993:let List the values of all variables. The type of the 10994 variable is indicated before the value: 10995 <nothing> String 10996 # Number 10997 * Funcref 10998 10999 11000:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795* 11001 Remove the internal variable {name}. Several variable 11002 names can be given, they are all removed. The name 11003 may also be a |List| or |Dictionary| item. 11004 With [!] no error message is given for non-existing 11005 variables. 11006 One or more items from a |List| can be removed: > 11007 :unlet list[3] " remove fourth item 11008 :unlet list[3:] " remove fourth item to last 11009< One item from a |Dictionary| can be removed at a time: > 11010 :unlet dict['two'] 11011 :unlet dict.two 11012< This is especially useful to clean up used global 11013 variables and script-local variables (these are not 11014 deleted when the script ends). Function-local 11015 variables are automatically deleted when the function 11016 ends. 11017 11018:unl[et] ${env-name} ... *:unlet-environment* *:unlet-$* 11019 Remove environment variable {env-name}. 11020 Can mix {name} and ${env-name} in one :unlet command. 11021 No error message is given for a non-existing 11022 variable, also without !. 11023 If the system does not support deleting an environment 11024 variable, it is made emtpy. 11025 11026:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv* 11027 Lock the internal variable {name}. Locking means that 11028 it can no longer be changed (until it is unlocked). 11029 A locked variable can be deleted: > 11030 :lockvar v 11031 :let v = 'asdf' " fails! 11032 :unlet v 11033< *E741* *E940* 11034 If you try to change a locked variable you get an 11035 error message: "E741: Value is locked: {name}". 11036 If you try to lock or unlock a built-in variable you 11037 get an error message: "E940: Cannot lock or unlock 11038 variable {name}". 11039 11040 [depth] is relevant when locking a |List| or 11041 |Dictionary|. It specifies how deep the locking goes: 11042 1 Lock the |List| or |Dictionary| itself, 11043 cannot add or remove items, but can 11044 still change their values. 11045 2 Also lock the values, cannot change 11046 the items. If an item is a |List| or 11047 |Dictionary|, cannot add or remove 11048 items, but can still change the 11049 values. 11050 3 Like 2 but for the |List| / 11051 |Dictionary| in the |List| / 11052 |Dictionary|, one level deeper. 11053 The default [depth] is 2, thus when {name} is a |List| 11054 or |Dictionary| the values cannot be changed. 11055 *E743* 11056 For unlimited depth use [!] and omit [depth]. 11057 However, there is a maximum depth of 100 to catch 11058 loops. 11059 11060 Note that when two variables refer to the same |List| 11061 and you lock one of them, the |List| will also be 11062 locked when used through the other variable. 11063 Example: > 11064 :let l = [0, 1, 2, 3] 11065 :let cl = l 11066 :lockvar l 11067 :let cl[1] = 99 " won't work! 11068< You may want to make a copy of a list to avoid this. 11069 See |deepcopy()|. 11070 11071 11072:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo* 11073 Unlock the internal variable {name}. Does the 11074 opposite of |:lockvar|. 11075 11076 11077:if {expr1} *:if* *:endif* *:en* *E171* *E579* *E580* 11078:en[dif] Execute the commands until the next matching ":else" 11079 or ":endif" if {expr1} evaluates to non-zero. 11080 11081 From Vim version 4.5 until 5.0, every Ex command in 11082 between the ":if" and ":endif" is ignored. These two 11083 commands were just to allow for future expansions in a 11084 backward compatible way. Nesting was allowed. Note 11085 that any ":else" or ":elseif" was ignored, the "else" 11086 part was not executed either. 11087 11088 You can use this to remain compatible with older 11089 versions: > 11090 :if version >= 500 11091 : version-5-specific-commands 11092 :endif 11093< The commands still need to be parsed to find the 11094 "endif". Sometimes an older Vim has a problem with a 11095 new command. For example, ":silent" is recognized as 11096 a ":substitute" command. In that case ":execute" can 11097 avoid problems: > 11098 :if version >= 600 11099 : execute "silent 1,$delete" 11100 :endif 11101< 11102 NOTE: The ":append" and ":insert" commands don't work 11103 properly in between ":if" and ":endif". 11104 11105 *:else* *:el* *E581* *E583* 11106:el[se] Execute the commands until the next matching ":else" 11107 or ":endif" if they previously were not being 11108 executed. 11109 11110 *:elseif* *:elsei* *E582* *E584* 11111:elsei[f] {expr1} Short for ":else" ":if", with the addition that there 11112 is no extra ":endif". 11113 11114:wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw* 11115 *E170* *E585* *E588* *E733* 11116:endw[hile] Repeat the commands between ":while" and ":endwhile", 11117 as long as {expr1} evaluates to non-zero. 11118 When an error is detected from a command inside the 11119 loop, execution continues after the "endwhile". 11120 Example: > 11121 :let lnum = 1 11122 :while lnum <= line("$") 11123 :call FixLine(lnum) 11124 :let lnum = lnum + 1 11125 :endwhile 11126< 11127 NOTE: The ":append" and ":insert" commands don't work 11128 properly inside a ":while" and ":for" loop. 11129 11130:for {var} in {object} *:for* *E690* *E732* 11131:endfo[r] *:endfo* *:endfor* 11132 Repeat the commands between ":for" and ":endfor" for 11133 each item in {object}. {object} can be a |List| or 11134 a |Blob|. Variable {var} is set to the value of each 11135 item. When an error is detected for a command inside 11136 the loop, execution continues after the "endfor". 11137 Changing {object} inside the loop affects what items 11138 are used. Make a copy if this is unwanted: > 11139 :for item in copy(mylist) 11140< 11141 When {object} is a |List| and not making a copy, Vim 11142 stores a reference to the next item in the |List| 11143 before executing the commands with the current item. 11144 Thus the current item can be removed without effect. 11145 Removing any later item means it will not be found. 11146 Thus the following example works (an inefficient way 11147 to make a |List| empty): > 11148 for item in mylist 11149 call remove(mylist, 0) 11150 endfor 11151< Note that reordering the |List| (e.g., with sort() or 11152 reverse()) may have unexpected effects. 11153 11154 When {object} is a |Blob|, Vim always makes a copy to 11155 iterate over. Unlike with |List|, modifying the 11156 |Blob| does not affect the iteration. 11157 11158:for [{var1}, {var2}, ...] in {listlist} 11159:endfo[r] 11160 Like ":for" above, but each item in {listlist} must be 11161 a list, of which each item is assigned to {var1}, 11162 {var2}, etc. Example: > 11163 :for [lnum, col] in [[1, 3], [2, 5], [3, 8]] 11164 :echo getline(lnum)[col] 11165 :endfor 11166< 11167 *:continue* *:con* *E586* 11168:con[tinue] When used inside a ":while" or ":for" loop, jumps back 11169 to the start of the loop. 11170 If it is used after a |:try| inside the loop but 11171 before the matching |:finally| (if present), the 11172 commands following the ":finally" up to the matching 11173 |:endtry| are executed first. This process applies to 11174 all nested ":try"s inside the loop. The outermost 11175 ":endtry" then jumps back to the start of the loop. 11176 11177 *:break* *:brea* *E587* 11178:brea[k] When used inside a ":while" or ":for" loop, skips to 11179 the command after the matching ":endwhile" or 11180 ":endfor". 11181 If it is used after a |:try| inside the loop but 11182 before the matching |:finally| (if present), the 11183 commands following the ":finally" up to the matching 11184 |:endtry| are executed first. This process applies to 11185 all nested ":try"s inside the loop. The outermost 11186 ":endtry" then jumps to the command after the loop. 11187 11188:try *:try* *:endt* *:endtry* *E600* *E601* *E602* 11189:endt[ry] Change the error handling for the commands between 11190 ":try" and ":endtry" including everything being 11191 executed across ":source" commands, function calls, 11192 or autocommand invocations. 11193 11194 When an error or interrupt is detected and there is 11195 a |:finally| command following, execution continues 11196 after the ":finally". Otherwise, or when the 11197 ":endtry" is reached thereafter, the next 11198 (dynamically) surrounding ":try" is checked for 11199 a corresponding ":finally" etc. Then the script 11200 processing is terminated. (Whether a function 11201 definition has an "abort" argument does not matter.) 11202 Example: > 11203 :try | edit too much | finally | echo "cleanup" | endtry 11204 :echo "impossible" " not reached, script terminated above 11205< 11206 Moreover, an error or interrupt (dynamically) inside 11207 ":try" and ":endtry" is converted to an exception. It 11208 can be caught as if it were thrown by a |:throw| 11209 command (see |:catch|). In this case, the script 11210 processing is not terminated. 11211 11212 The value "Vim:Interrupt" is used for an interrupt 11213 exception. An error in a Vim command is converted 11214 to a value of the form "Vim({command}):{errmsg}", 11215 other errors are converted to a value of the form 11216 "Vim:{errmsg}". {command} is the full command name, 11217 and {errmsg} is the message that is displayed if the 11218 error exception is not caught, always beginning with 11219 the error number. 11220 Examples: > 11221 :try | sleep 100 | catch /^Vim:Interrupt$/ | endtry 11222 :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry 11223< 11224 *:cat* *:catch* *E603* *E604* *E605* 11225:cat[ch] /{pattern}/ The following commands until the next |:catch|, 11226 |:finally|, or |:endtry| that belongs to the same 11227 |:try| as the ":catch" are executed when an exception 11228 matching {pattern} is being thrown and has not yet 11229 been caught by a previous ":catch". Otherwise, these 11230 commands are skipped. 11231 When {pattern} is omitted all errors are caught. 11232 Examples: > 11233 :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C) 11234 :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors 11235 :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts 11236 :catch /^Vim(write):/ " catch all errors in :write 11237 :catch /^Vim\%((\a\+)\)\=:E123:/ " catch error E123 11238 :catch /my-exception/ " catch user exception 11239 :catch /.*/ " catch everything 11240 :catch " same as /.*/ 11241< 11242 Another character can be used instead of / around the 11243 {pattern}, so long as it does not have a special 11244 meaning (e.g., '|' or '"') and doesn't occur inside 11245 {pattern}. 11246 Information about the exception is available in 11247 |v:exception|. Also see |throw-variables|. 11248 NOTE: It is not reliable to ":catch" the TEXT of 11249 an error message because it may vary in different 11250 locales. 11251 11252 *:fina* *:finally* *E606* *E607* 11253:fina[lly] The following commands until the matching |:endtry| 11254 are executed whenever the part between the matching 11255 |:try| and the ":finally" is left: either by falling 11256 through to the ":finally" or by a |:continue|, 11257 |:break|, |:finish|, or |:return|, or by an error or 11258 interrupt or exception (see |:throw|). 11259 11260 *:th* *:throw* *E608* 11261:th[row] {expr1} The {expr1} is evaluated and thrown as an exception. 11262 If the ":throw" is used after a |:try| but before the 11263 first corresponding |:catch|, commands are skipped 11264 until the first ":catch" matching {expr1} is reached. 11265 If there is no such ":catch" or if the ":throw" is 11266 used after a ":catch" but before the |:finally|, the 11267 commands following the ":finally" (if present) up to 11268 the matching |:endtry| are executed. If the ":throw" 11269 is after the ":finally", commands up to the ":endtry" 11270 are skipped. At the ":endtry", this process applies 11271 again for the next dynamically surrounding ":try" 11272 (which may be found in a calling function or sourcing 11273 script), until a matching ":catch" has been found. 11274 If the exception is not caught, the command processing 11275 is terminated. 11276 Example: > 11277 :try | throw "oops" | catch /^oo/ | echo "caught" | endtry 11278< Note that "catch" may need to be on a separate line 11279 for when an error causes the parsing to skip the whole 11280 line and not see the "|" that separates the commands. 11281 11282 *:ec* *:echo* 11283:ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The 11284 first {expr1} starts on a new line. 11285 Also see |:comment|. 11286 Use "\n" to start a new line. Use "\r" to move the 11287 cursor to the first column. 11288 Uses the highlighting set by the |:echohl| command. 11289 Cannot be followed by a comment. 11290 Example: > 11291 :echo "the value of 'shell' is" &shell 11292< *:echo-redraw* 11293 A later redraw may make the message disappear again. 11294 And since Vim mostly postpones redrawing until it's 11295 finished with a sequence of commands this happens 11296 quite often. To avoid that a command from before the 11297 ":echo" causes a redraw afterwards (redraws are often 11298 postponed until you type something), force a redraw 11299 with the |:redraw| command. Example: > 11300 :new | redraw | echo "there is a new window" 11301< 11302 *:echon* 11303:echon {expr1} .. Echoes each {expr1}, without anything added. Also see 11304 |:comment|. 11305 Uses the highlighting set by the |:echohl| command. 11306 Cannot be followed by a comment. 11307 Example: > 11308 :echon "the value of 'shell' is " &shell 11309< 11310 Note the difference between using ":echo", which is a 11311 Vim command, and ":!echo", which is an external shell 11312 command: > 11313 :!echo % --> filename 11314< The arguments of ":!" are expanded, see |:_%|. > 11315 :!echo "%" --> filename or "filename" 11316< Like the previous example. Whether you see the double 11317 quotes or not depends on your 'shell'. > 11318 :echo % --> nothing 11319< The '%' is an illegal character in an expression. > 11320 :echo "%" --> % 11321< This just echoes the '%' character. > 11322 :echo expand("%") --> filename 11323< This calls the expand() function to expand the '%'. 11324 11325 *:echoh* *:echohl* 11326:echoh[l] {name} Use the highlight group {name} for the following 11327 |:echo|, |:echon| and |:echomsg| commands. Also used 11328 for the |input()| prompt. Example: > 11329 :echohl WarningMsg | echo "Don't panic!" | echohl None 11330< Don't forget to set the group back to "None", 11331 otherwise all following echo's will be highlighted. 11332 11333 *:echom* *:echomsg* 11334:echom[sg] {expr1} .. Echo the expression(s) as a true message, saving the 11335 message in the |message-history|. 11336 Spaces are placed between the arguments as with the 11337 |:echo| command. But unprintable characters are 11338 displayed, not interpreted. 11339 The parsing works slightly different from |:echo|, 11340 more like |:execute|. All the expressions are first 11341 evaluated and concatenated before echoing anything. 11342 If expressions does not evaluate to a Number or 11343 String, string() is used to turn it into a string. 11344 Uses the highlighting set by the |:echohl| command. 11345 Example: > 11346 :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see." 11347< See |:echo-redraw| to avoid the message disappearing 11348 when the screen is redrawn. 11349 *:echoe* *:echoerr* 11350:echoe[rr] {expr1} .. Echo the expression(s) as an error message, saving the 11351 message in the |message-history|. When used in a 11352 script or function the line number will be added. 11353 Spaces are placed between the arguments as with the 11354 |:echomsg| command. When used inside a try conditional, 11355 the message is raised as an error exception instead 11356 (see |try-echoerr|). 11357 Example: > 11358 :echoerr "This script just failed!" 11359< If you just want a highlighted message use |:echohl|. 11360 And to get a beep: > 11361 :exe "normal \<Esc>" 11362< 11363 *:exe* *:execute* 11364:exe[cute] {expr1} .. Executes the string that results from the evaluation 11365 of {expr1} as an Ex command. 11366 Multiple arguments are concatenated, with a space in 11367 between. To avoid the extra space use the "." 11368 operator to concatenate strings into one argument. 11369 {expr1} is used as the processed command, command line 11370 editing keys are not recognized. 11371 Cannot be followed by a comment. 11372 Examples: > 11373 :execute "buffer" nextbuf 11374 :execute "normal" count . "w" 11375< 11376 ":execute" can be used to append a command to commands 11377 that don't accept a '|'. Example: > 11378 :execute '!ls' | echo "theend" 11379 11380< ":execute" is also a nice way to avoid having to type 11381 control characters in a Vim script for a ":normal" 11382 command: > 11383 :execute "normal ixxx\<Esc>" 11384< This has an <Esc> character, see |expr-string|. 11385 11386 Be careful to correctly escape special characters in 11387 file names. The |fnameescape()| function can be used 11388 for Vim commands, |shellescape()| for |:!| commands. 11389 Examples: > 11390 :execute "e " . fnameescape(filename) 11391 :execute "!ls " . shellescape(filename, 1) 11392< 11393 Note: The executed string may be any command-line, but 11394 starting or ending "if", "while" and "for" does not 11395 always work, because when commands are skipped the 11396 ":execute" is not evaluated and Vim loses track of 11397 where blocks start and end. Also "break" and 11398 "continue" should not be inside ":execute". 11399 This example does not work, because the ":execute" is 11400 not evaluated and Vim does not see the "while", and 11401 gives an error for finding an ":endwhile": > 11402 :if 0 11403 : execute 'while i > 5' 11404 : echo "test" 11405 : endwhile 11406 :endif 11407< 11408 It is allowed to have a "while" or "if" command 11409 completely in the executed string: > 11410 :execute 'while i < 5 | echo i | let i = i + 1 | endwhile' 11411< 11412 11413 *:exe-comment* 11414 ":execute", ":echo" and ":echon" cannot be followed by 11415 a comment directly, because they see the '"' as the 11416 start of a string. But, you can use '|' followed by a 11417 comment. Example: > 11418 :echo "foo" | "this is a comment 11419 11420============================================================================== 114218. Exception handling *exception-handling* 11422 11423The Vim script language comprises an exception handling feature. This section 11424explains how it can be used in a Vim script. 11425 11426Exceptions may be raised by Vim on an error or on interrupt, see 11427|catch-errors| and |catch-interrupt|. You can also explicitly throw an 11428exception by using the ":throw" command, see |throw-catch|. 11429 11430 11431TRY CONDITIONALS *try-conditionals* 11432 11433Exceptions can be caught or can cause cleanup code to be executed. You can 11434use a try conditional to specify catch clauses (that catch exceptions) and/or 11435a finally clause (to be executed for cleanup). 11436 A try conditional begins with a |:try| command and ends at the matching 11437|:endtry| command. In between, you can use a |:catch| command to start 11438a catch clause, or a |:finally| command to start a finally clause. There may 11439be none or multiple catch clauses, but there is at most one finally clause, 11440which must not be followed by any catch clauses. The lines before the catch 11441clauses and the finally clause is called a try block. > 11442 11443 :try 11444 : ... 11445 : ... TRY BLOCK 11446 : ... 11447 :catch /{pattern}/ 11448 : ... 11449 : ... CATCH CLAUSE 11450 : ... 11451 :catch /{pattern}/ 11452 : ... 11453 : ... CATCH CLAUSE 11454 : ... 11455 :finally 11456 : ... 11457 : ... FINALLY CLAUSE 11458 : ... 11459 :endtry 11460 11461The try conditional allows to watch code for exceptions and to take the 11462appropriate actions. Exceptions from the try block may be caught. Exceptions 11463from the try block and also the catch clauses may cause cleanup actions. 11464 When no exception is thrown during execution of the try block, the control 11465is transferred to the finally clause, if present. After its execution, the 11466script continues with the line following the ":endtry". 11467 When an exception occurs during execution of the try block, the remaining 11468lines in the try block are skipped. The exception is matched against the 11469patterns specified as arguments to the ":catch" commands. The catch clause 11470after the first matching ":catch" is taken, other catch clauses are not 11471executed. The catch clause ends when the next ":catch", ":finally", or 11472":endtry" command is reached - whatever is first. Then, the finally clause 11473(if present) is executed. When the ":endtry" is reached, the script execution 11474continues in the following line as usual. 11475 When an exception that does not match any of the patterns specified by the 11476":catch" commands is thrown in the try block, the exception is not caught by 11477that try conditional and none of the catch clauses is executed. Only the 11478finally clause, if present, is taken. The exception pends during execution of 11479the finally clause. It is resumed at the ":endtry", so that commands after 11480the ":endtry" are not executed and the exception might be caught elsewhere, 11481see |try-nesting|. 11482 When during execution of a catch clause another exception is thrown, the 11483remaining lines in that catch clause are not executed. The new exception is 11484not matched against the patterns in any of the ":catch" commands of the same 11485try conditional and none of its catch clauses is taken. If there is, however, 11486a finally clause, it is executed, and the exception pends during its 11487execution. The commands following the ":endtry" are not executed. The new 11488exception might, however, be caught elsewhere, see |try-nesting|. 11489 When during execution of the finally clause (if present) an exception is 11490thrown, the remaining lines in the finally clause are skipped. If the finally 11491clause has been taken because of an exception from the try block or one of the 11492catch clauses, the original (pending) exception is discarded. The commands 11493following the ":endtry" are not executed, and the exception from the finally 11494clause is propagated and can be caught elsewhere, see |try-nesting|. 11495 11496The finally clause is also executed, when a ":break" or ":continue" for 11497a ":while" loop enclosing the complete try conditional is executed from the 11498try block or a catch clause. Or when a ":return" or ":finish" is executed 11499from the try block or a catch clause of a try conditional in a function or 11500sourced script, respectively. The ":break", ":continue", ":return", or 11501":finish" pends during execution of the finally clause and is resumed when the 11502":endtry" is reached. It is, however, discarded when an exception is thrown 11503from the finally clause. 11504 When a ":break" or ":continue" for a ":while" loop enclosing the complete 11505try conditional or when a ":return" or ":finish" is encountered in the finally 11506clause, the rest of the finally clause is skipped, and the ":break", 11507":continue", ":return" or ":finish" is executed as usual. If the finally 11508clause has been taken because of an exception or an earlier ":break", 11509":continue", ":return", or ":finish" from the try block or a catch clause, 11510this pending exception or command is discarded. 11511 11512For examples see |throw-catch| and |try-finally|. 11513 11514 11515NESTING OF TRY CONDITIONALS *try-nesting* 11516 11517Try conditionals can be nested arbitrarily. That is, a complete try 11518conditional can be put into the try block, a catch clause, or the finally 11519clause of another try conditional. If the inner try conditional does not 11520catch an exception thrown in its try block or throws a new exception from one 11521of its catch clauses or its finally clause, the outer try conditional is 11522checked according to the rules above. If the inner try conditional is in the 11523try block of the outer try conditional, its catch clauses are checked, but 11524otherwise only the finally clause is executed. It does not matter for 11525nesting, whether the inner try conditional is directly contained in the outer 11526one, or whether the outer one sources a script or calls a function containing 11527the inner try conditional. 11528 11529When none of the active try conditionals catches an exception, just their 11530finally clauses are executed. Thereafter, the script processing terminates. 11531An error message is displayed in case of an uncaught exception explicitly 11532thrown by a ":throw" command. For uncaught error and interrupt exceptions 11533implicitly raised by Vim, the error message(s) or interrupt message are shown 11534as usual. 11535 11536For examples see |throw-catch|. 11537 11538 11539EXAMINING EXCEPTION HANDLING CODE *except-examine* 11540 11541Exception handling code can get tricky. If you are in doubt what happens, set 11542'verbose' to 13 or use the ":13verbose" command modifier when sourcing your 11543script file. Then you see when an exception is thrown, discarded, caught, or 11544finished. When using a verbosity level of at least 14, things pending in 11545a finally clause are also shown. This information is also given in debug mode 11546(see |debug-scripts|). 11547 11548 11549THROWING AND CATCHING EXCEPTIONS *throw-catch* 11550 11551You can throw any number or string as an exception. Use the |:throw| command 11552and pass the value to be thrown as argument: > 11553 :throw 4711 11554 :throw "string" 11555< *throw-expression* 11556You can also specify an expression argument. The expression is then evaluated 11557first, and the result is thrown: > 11558 :throw 4705 + strlen("string") 11559 :throw strpart("strings", 0, 6) 11560 11561An exception might be thrown during evaluation of the argument of the ":throw" 11562command. Unless it is caught there, the expression evaluation is abandoned. 11563The ":throw" command then does not throw a new exception. 11564 Example: > 11565 11566 :function! Foo(arg) 11567 : try 11568 : throw a:arg 11569 : catch /foo/ 11570 : endtry 11571 : return 1 11572 :endfunction 11573 : 11574 :function! Bar() 11575 : echo "in Bar" 11576 : return 4710 11577 :endfunction 11578 : 11579 :throw Foo("arrgh") + Bar() 11580 11581This throws "arrgh", and "in Bar" is not displayed since Bar() is not 11582executed. > 11583 :throw Foo("foo") + Bar() 11584however displays "in Bar" and throws 4711. 11585 11586Any other command that takes an expression as argument might also be 11587abandoned by an (uncaught) exception during the expression evaluation. The 11588exception is then propagated to the caller of the command. 11589 Example: > 11590 11591 :if Foo("arrgh") 11592 : echo "then" 11593 :else 11594 : echo "else" 11595 :endif 11596 11597Here neither of "then" or "else" is displayed. 11598 11599 *catch-order* 11600Exceptions can be caught by a try conditional with one or more |:catch| 11601commands, see |try-conditionals|. The values to be caught by each ":catch" 11602command can be specified as a pattern argument. The subsequent catch clause 11603gets executed when a matching exception is caught. 11604 Example: > 11605 11606 :function! Foo(value) 11607 : try 11608 : throw a:value 11609 : catch /^\d\+$/ 11610 : echo "Number thrown" 11611 : catch /.*/ 11612 : echo "String thrown" 11613 : endtry 11614 :endfunction 11615 : 11616 :call Foo(0x1267) 11617 :call Foo('string') 11618 11619The first call to Foo() displays "Number thrown", the second "String thrown". 11620An exception is matched against the ":catch" commands in the order they are 11621specified. Only the first match counts. So you should place the more 11622specific ":catch" first. The following order does not make sense: > 11623 11624 : catch /.*/ 11625 : echo "String thrown" 11626 : catch /^\d\+$/ 11627 : echo "Number thrown" 11628 11629The first ":catch" here matches always, so that the second catch clause is 11630never taken. 11631 11632 *throw-variables* 11633If you catch an exception by a general pattern, you may access the exact value 11634in the variable |v:exception|: > 11635 11636 : catch /^\d\+$/ 11637 : echo "Number thrown. Value is" v:exception 11638 11639You may also be interested where an exception was thrown. This is stored in 11640|v:throwpoint|. Note that "v:exception" and "v:throwpoint" are valid for the 11641exception most recently caught as long it is not finished. 11642 Example: > 11643 11644 :function! Caught() 11645 : if v:exception != "" 11646 : echo 'Caught "' . v:exception . '" in ' . v:throwpoint 11647 : else 11648 : echo 'Nothing caught' 11649 : endif 11650 :endfunction 11651 : 11652 :function! Foo() 11653 : try 11654 : try 11655 : try 11656 : throw 4711 11657 : finally 11658 : call Caught() 11659 : endtry 11660 : catch /.*/ 11661 : call Caught() 11662 : throw "oops" 11663 : endtry 11664 : catch /.*/ 11665 : call Caught() 11666 : finally 11667 : call Caught() 11668 : endtry 11669 :endfunction 11670 : 11671 :call Foo() 11672 11673This displays > 11674 11675 Nothing caught 11676 Caught "4711" in function Foo, line 4 11677 Caught "oops" in function Foo, line 10 11678 Nothing caught 11679 11680A practical example: The following command ":LineNumber" displays the line 11681number in the script or function where it has been used: > 11682 11683 :function! LineNumber() 11684 : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "") 11685 :endfunction 11686 :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry 11687< 11688 *try-nested* 11689An exception that is not caught by a try conditional can be caught by 11690a surrounding try conditional: > 11691 11692 :try 11693 : try 11694 : throw "foo" 11695 : catch /foobar/ 11696 : echo "foobar" 11697 : finally 11698 : echo "inner finally" 11699 : endtry 11700 :catch /foo/ 11701 : echo "foo" 11702 :endtry 11703 11704The inner try conditional does not catch the exception, just its finally 11705clause is executed. The exception is then caught by the outer try 11706conditional. The example displays "inner finally" and then "foo". 11707 11708 *throw-from-catch* 11709You can catch an exception and throw a new one to be caught elsewhere from the 11710catch clause: > 11711 11712 :function! Foo() 11713 : throw "foo" 11714 :endfunction 11715 : 11716 :function! Bar() 11717 : try 11718 : call Foo() 11719 : catch /foo/ 11720 : echo "Caught foo, throw bar" 11721 : throw "bar" 11722 : endtry 11723 :endfunction 11724 : 11725 :try 11726 : call Bar() 11727 :catch /.*/ 11728 : echo "Caught" v:exception 11729 :endtry 11730 11731This displays "Caught foo, throw bar" and then "Caught bar". 11732 11733 *rethrow* 11734There is no real rethrow in the Vim script language, but you may throw 11735"v:exception" instead: > 11736 11737 :function! Bar() 11738 : try 11739 : call Foo() 11740 : catch /.*/ 11741 : echo "Rethrow" v:exception 11742 : throw v:exception 11743 : endtry 11744 :endfunction 11745< *try-echoerr* 11746Note that this method cannot be used to "rethrow" Vim error or interrupt 11747exceptions, because it is not possible to fake Vim internal exceptions. 11748Trying so causes an error exception. You should throw your own exception 11749denoting the situation. If you want to cause a Vim error exception containing 11750the original error exception value, you can use the |:echoerr| command: > 11751 11752 :try 11753 : try 11754 : asdf 11755 : catch /.*/ 11756 : echoerr v:exception 11757 : endtry 11758 :catch /.*/ 11759 : echo v:exception 11760 :endtry 11761 11762This code displays 11763 11764 Vim(echoerr):Vim:E492: Not an editor command: asdf ~ 11765 11766 11767CLEANUP CODE *try-finally* 11768 11769Scripts often change global settings and restore them at their end. If the 11770user however interrupts the script by pressing CTRL-C, the settings remain in 11771an inconsistent state. The same may happen to you in the development phase of 11772a script when an error occurs or you explicitly throw an exception without 11773catching it. You can solve these problems by using a try conditional with 11774a finally clause for restoring the settings. Its execution is guaranteed on 11775normal control flow, on error, on an explicit ":throw", and on interrupt. 11776(Note that errors and interrupts from inside the try conditional are converted 11777to exceptions. When not caught, they terminate the script after the finally 11778clause has been executed.) 11779Example: > 11780 11781 :try 11782 : let s:saved_ts = &ts 11783 : set ts=17 11784 : 11785 : " Do the hard work here. 11786 : 11787 :finally 11788 : let &ts = s:saved_ts 11789 : unlet s:saved_ts 11790 :endtry 11791 11792This method should be used locally whenever a function or part of a script 11793changes global settings which need to be restored on failure or normal exit of 11794that function or script part. 11795 11796 *break-finally* 11797Cleanup code works also when the try block or a catch clause is left by 11798a ":continue", ":break", ":return", or ":finish". 11799 Example: > 11800 11801 :let first = 1 11802 :while 1 11803 : try 11804 : if first 11805 : echo "first" 11806 : let first = 0 11807 : continue 11808 : else 11809 : throw "second" 11810 : endif 11811 : catch /.*/ 11812 : echo v:exception 11813 : break 11814 : finally 11815 : echo "cleanup" 11816 : endtry 11817 : echo "still in while" 11818 :endwhile 11819 :echo "end" 11820 11821This displays "first", "cleanup", "second", "cleanup", and "end". > 11822 11823 :function! Foo() 11824 : try 11825 : return 4711 11826 : finally 11827 : echo "cleanup\n" 11828 : endtry 11829 : echo "Foo still active" 11830 :endfunction 11831 : 11832 :echo Foo() "returned by Foo" 11833 11834This displays "cleanup" and "4711 returned by Foo". You don't need to add an 11835extra ":return" in the finally clause. (Above all, this would override the 11836return value.) 11837 11838 *except-from-finally* 11839Using either of ":continue", ":break", ":return", ":finish", or ":throw" in 11840a finally clause is possible, but not recommended since it abandons the 11841cleanup actions for the try conditional. But, of course, interrupt and error 11842exceptions might get raised from a finally clause. 11843 Example where an error in the finally clause stops an interrupt from 11844working correctly: > 11845 11846 :try 11847 : try 11848 : echo "Press CTRL-C for interrupt" 11849 : while 1 11850 : endwhile 11851 : finally 11852 : unlet novar 11853 : endtry 11854 :catch /novar/ 11855 :endtry 11856 :echo "Script still running" 11857 :sleep 1 11858 11859If you need to put commands that could fail into a finally clause, you should 11860think about catching or ignoring the errors in these commands, see 11861|catch-errors| and |ignore-errors|. 11862 11863 11864CATCHING ERRORS *catch-errors* 11865 11866If you want to catch specific errors, you just have to put the code to be 11867watched in a try block and add a catch clause for the error message. The 11868presence of the try conditional causes all errors to be converted to an 11869exception. No message is displayed and |v:errmsg| is not set then. To find 11870the right pattern for the ":catch" command, you have to know how the format of 11871the error exception is. 11872 Error exceptions have the following format: > 11873 11874 Vim({cmdname}):{errmsg} 11875or > 11876 Vim:{errmsg} 11877 11878{cmdname} is the name of the command that failed; the second form is used when 11879the command name is not known. {errmsg} is the error message usually produced 11880when the error occurs outside try conditionals. It always begins with 11881a capital "E", followed by a two or three-digit error number, a colon, and 11882a space. 11883 11884Examples: 11885 11886The command > 11887 :unlet novar 11888normally produces the error message > 11889 E108: No such variable: "novar" 11890which is converted inside try conditionals to an exception > 11891 Vim(unlet):E108: No such variable: "novar" 11892 11893The command > 11894 :dwim 11895normally produces the error message > 11896 E492: Not an editor command: dwim 11897which is converted inside try conditionals to an exception > 11898 Vim:E492: Not an editor command: dwim 11899 11900You can catch all ":unlet" errors by a > 11901 :catch /^Vim(unlet):/ 11902or all errors for misspelled command names by a > 11903 :catch /^Vim:E492:/ 11904 11905Some error messages may be produced by different commands: > 11906 :function nofunc 11907and > 11908 :delfunction nofunc 11909both produce the error message > 11910 E128: Function name must start with a capital: nofunc 11911which is converted inside try conditionals to an exception > 11912 Vim(function):E128: Function name must start with a capital: nofunc 11913or > 11914 Vim(delfunction):E128: Function name must start with a capital: nofunc 11915respectively. You can catch the error by its number independently on the 11916command that caused it if you use the following pattern: > 11917 :catch /^Vim(\a\+):E128:/ 11918 11919Some commands like > 11920 :let x = novar 11921produce multiple error messages, here: > 11922 E121: Undefined variable: novar 11923 E15: Invalid expression: novar 11924Only the first is used for the exception value, since it is the most specific 11925one (see |except-several-errors|). So you can catch it by > 11926 :catch /^Vim(\a\+):E121:/ 11927 11928You can catch all errors related to the name "nofunc" by > 11929 :catch /\<nofunc\>/ 11930 11931You can catch all Vim errors in the ":write" and ":read" commands by > 11932 :catch /^Vim(\(write\|read\)):E\d\+:/ 11933 11934You can catch all Vim errors by the pattern > 11935 :catch /^Vim\((\a\+)\)\=:E\d\+:/ 11936< 11937 *catch-text* 11938NOTE: You should never catch the error message text itself: > 11939 :catch /No such variable/ 11940only works in the English locale, but not when the user has selected 11941a different language by the |:language| command. It is however helpful to 11942cite the message text in a comment: > 11943 :catch /^Vim(\a\+):E108:/ " No such variable 11944 11945 11946IGNORING ERRORS *ignore-errors* 11947 11948You can ignore errors in a specific Vim command by catching them locally: > 11949 11950 :try 11951 : write 11952 :catch 11953 :endtry 11954 11955But you are strongly recommended NOT to use this simple form, since it could 11956catch more than you want. With the ":write" command, some autocommands could 11957be executed and cause errors not related to writing, for instance: > 11958 11959 :au BufWritePre * unlet novar 11960 11961There could even be such errors you are not responsible for as a script 11962writer: a user of your script might have defined such autocommands. You would 11963then hide the error from the user. 11964 It is much better to use > 11965 11966 :try 11967 : write 11968 :catch /^Vim(write):/ 11969 :endtry 11970 11971which only catches real write errors. So catch only what you'd like to ignore 11972intentionally. 11973 11974For a single command that does not cause execution of autocommands, you could 11975even suppress the conversion of errors to exceptions by the ":silent!" 11976command: > 11977 :silent! nunmap k 11978This works also when a try conditional is active. 11979 11980 11981CATCHING INTERRUPTS *catch-interrupt* 11982 11983When there are active try conditionals, an interrupt (CTRL-C) is converted to 11984the exception "Vim:Interrupt". You can catch it like every exception. The 11985script is not terminated, then. 11986 Example: > 11987 11988 :function! TASK1() 11989 : sleep 10 11990 :endfunction 11991 11992 :function! TASK2() 11993 : sleep 20 11994 :endfunction 11995 11996 :while 1 11997 : let command = input("Type a command: ") 11998 : try 11999 : if command == "" 12000 : continue 12001 : elseif command == "END" 12002 : break 12003 : elseif command == "TASK1" 12004 : call TASK1() 12005 : elseif command == "TASK2" 12006 : call TASK2() 12007 : else 12008 : echo "\nIllegal command:" command 12009 : continue 12010 : endif 12011 : catch /^Vim:Interrupt$/ 12012 : echo "\nCommand interrupted" 12013 : " Caught the interrupt. Continue with next prompt. 12014 : endtry 12015 :endwhile 12016 12017You can interrupt a task here by pressing CTRL-C; the script then asks for 12018a new command. If you press CTRL-C at the prompt, the script is terminated. 12019 12020For testing what happens when CTRL-C would be pressed on a specific line in 12021your script, use the debug mode and execute the |>quit| or |>interrupt| 12022command on that line. See |debug-scripts|. 12023 12024 12025CATCHING ALL *catch-all* 12026 12027The commands > 12028 12029 :catch /.*/ 12030 :catch // 12031 :catch 12032 12033catch everything, error exceptions, interrupt exceptions and exceptions 12034explicitly thrown by the |:throw| command. This is useful at the top level of 12035a script in order to catch unexpected things. 12036 Example: > 12037 12038 :try 12039 : 12040 : " do the hard work here 12041 : 12042 :catch /MyException/ 12043 : 12044 : " handle known problem 12045 : 12046 :catch /^Vim:Interrupt$/ 12047 : echo "Script interrupted" 12048 :catch /.*/ 12049 : echo "Internal error (" . v:exception . ")" 12050 : echo " - occurred at " . v:throwpoint 12051 :endtry 12052 :" end of script 12053 12054Note: Catching all might catch more things than you want. Thus, you are 12055strongly encouraged to catch only for problems that you can really handle by 12056specifying a pattern argument to the ":catch". 12057 Example: Catching all could make it nearly impossible to interrupt a script 12058by pressing CTRL-C: > 12059 12060 :while 1 12061 : try 12062 : sleep 1 12063 : catch 12064 : endtry 12065 :endwhile 12066 12067 12068EXCEPTIONS AND AUTOCOMMANDS *except-autocmd* 12069 12070Exceptions may be used during execution of autocommands. Example: > 12071 12072 :autocmd User x try 12073 :autocmd User x throw "Oops!" 12074 :autocmd User x catch 12075 :autocmd User x echo v:exception 12076 :autocmd User x endtry 12077 :autocmd User x throw "Arrgh!" 12078 :autocmd User x echo "Should not be displayed" 12079 : 12080 :try 12081 : doautocmd User x 12082 :catch 12083 : echo v:exception 12084 :endtry 12085 12086This displays "Oops!" and "Arrgh!". 12087 12088 *except-autocmd-Pre* 12089For some commands, autocommands get executed before the main action of the 12090command takes place. If an exception is thrown and not caught in the sequence 12091of autocommands, the sequence and the command that caused its execution are 12092abandoned and the exception is propagated to the caller of the command. 12093 Example: > 12094 12095 :autocmd BufWritePre * throw "FAIL" 12096 :autocmd BufWritePre * echo "Should not be displayed" 12097 : 12098 :try 12099 : write 12100 :catch 12101 : echo "Caught:" v:exception "from" v:throwpoint 12102 :endtry 12103 12104Here, the ":write" command does not write the file currently being edited (as 12105you can see by checking 'modified'), since the exception from the BufWritePre 12106autocommand abandons the ":write". The exception is then caught and the 12107script displays: > 12108 12109 Caught: FAIL from BufWrite Auto commands for "*" 12110< 12111 *except-autocmd-Post* 12112For some commands, autocommands get executed after the main action of the 12113command has taken place. If this main action fails and the command is inside 12114an active try conditional, the autocommands are skipped and an error exception 12115is thrown that can be caught by the caller of the command. 12116 Example: > 12117 12118 :autocmd BufWritePost * echo "File successfully written!" 12119 : 12120 :try 12121 : write /i/m/p/o/s/s/i/b/l/e 12122 :catch 12123 : echo v:exception 12124 :endtry 12125 12126This just displays: > 12127 12128 Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e) 12129 12130If you really need to execute the autocommands even when the main action 12131fails, trigger the event from the catch clause. 12132 Example: > 12133 12134 :autocmd BufWritePre * set noreadonly 12135 :autocmd BufWritePost * set readonly 12136 : 12137 :try 12138 : write /i/m/p/o/s/s/i/b/l/e 12139 :catch 12140 : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e 12141 :endtry 12142< 12143You can also use ":silent!": > 12144 12145 :let x = "ok" 12146 :let v:errmsg = "" 12147 :autocmd BufWritePost * if v:errmsg != "" 12148 :autocmd BufWritePost * let x = "after fail" 12149 :autocmd BufWritePost * endif 12150 :try 12151 : silent! write /i/m/p/o/s/s/i/b/l/e 12152 :catch 12153 :endtry 12154 :echo x 12155 12156This displays "after fail". 12157 12158If the main action of the command does not fail, exceptions from the 12159autocommands will be catchable by the caller of the command: > 12160 12161 :autocmd BufWritePost * throw ":-(" 12162 :autocmd BufWritePost * echo "Should not be displayed" 12163 : 12164 :try 12165 : write 12166 :catch 12167 : echo v:exception 12168 :endtry 12169< 12170 *except-autocmd-Cmd* 12171For some commands, the normal action can be replaced by a sequence of 12172autocommands. Exceptions from that sequence will be catchable by the caller 12173of the command. 12174 Example: For the ":write" command, the caller cannot know whether the file 12175had actually been written when the exception occurred. You need to tell it in 12176some way. > 12177 12178 :if !exists("cnt") 12179 : let cnt = 0 12180 : 12181 : autocmd BufWriteCmd * if &modified 12182 : autocmd BufWriteCmd * let cnt = cnt + 1 12183 : autocmd BufWriteCmd * if cnt % 3 == 2 12184 : autocmd BufWriteCmd * throw "BufWriteCmdError" 12185 : autocmd BufWriteCmd * endif 12186 : autocmd BufWriteCmd * write | set nomodified 12187 : autocmd BufWriteCmd * if cnt % 3 == 0 12188 : autocmd BufWriteCmd * throw "BufWriteCmdError" 12189 : autocmd BufWriteCmd * endif 12190 : autocmd BufWriteCmd * echo "File successfully written!" 12191 : autocmd BufWriteCmd * endif 12192 :endif 12193 : 12194 :try 12195 : write 12196 :catch /^BufWriteCmdError$/ 12197 : if &modified 12198 : echo "Error on writing (file contents not changed)" 12199 : else 12200 : echo "Error after writing" 12201 : endif 12202 :catch /^Vim(write):/ 12203 : echo "Error on writing" 12204 :endtry 12205 12206When this script is sourced several times after making changes, it displays 12207first > 12208 File successfully written! 12209then > 12210 Error on writing (file contents not changed) 12211then > 12212 Error after writing 12213etc. 12214 12215 *except-autocmd-ill* 12216You cannot spread a try conditional over autocommands for different events. 12217The following code is ill-formed: > 12218 12219 :autocmd BufWritePre * try 12220 : 12221 :autocmd BufWritePost * catch 12222 :autocmd BufWritePost * echo v:exception 12223 :autocmd BufWritePost * endtry 12224 : 12225 :write 12226 12227 12228EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS *except-hier-param* 12229 12230Some programming languages allow to use hierarchies of exception classes or to 12231pass additional information with the object of an exception class. You can do 12232similar things in Vim. 12233 In order to throw an exception from a hierarchy, just throw the complete 12234class name with the components separated by a colon, for instance throw the 12235string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library. 12236 When you want to pass additional information with your exception class, add 12237it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)" 12238for an error when writing "myfile". 12239 With the appropriate patterns in the ":catch" command, you can catch for 12240base classes or derived classes of your hierarchy. Additional information in 12241parentheses can be cut out from |v:exception| with the ":substitute" command. 12242 Example: > 12243 12244 :function! CheckRange(a, func) 12245 : if a:a < 0 12246 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")" 12247 : endif 12248 :endfunction 12249 : 12250 :function! Add(a, b) 12251 : call CheckRange(a:a, "Add") 12252 : call CheckRange(a:b, "Add") 12253 : let c = a:a + a:b 12254 : if c < 0 12255 : throw "EXCEPT:MATHERR:OVERFLOW" 12256 : endif 12257 : return c 12258 :endfunction 12259 : 12260 :function! Div(a, b) 12261 : call CheckRange(a:a, "Div") 12262 : call CheckRange(a:b, "Div") 12263 : if (a:b == 0) 12264 : throw "EXCEPT:MATHERR:ZERODIV" 12265 : endif 12266 : return a:a / a:b 12267 :endfunction 12268 : 12269 :function! Write(file) 12270 : try 12271 : execute "write" fnameescape(a:file) 12272 : catch /^Vim(write):/ 12273 : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR" 12274 : endtry 12275 :endfunction 12276 : 12277 :try 12278 : 12279 : " something with arithmetics and I/O 12280 : 12281 :catch /^EXCEPT:MATHERR:RANGE/ 12282 : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "") 12283 : echo "Range error in" function 12284 : 12285 :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV 12286 : echo "Math error" 12287 : 12288 :catch /^EXCEPT:IO/ 12289 : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "") 12290 : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "") 12291 : if file !~ '^/' 12292 : let file = dir . "/" . file 12293 : endif 12294 : echo 'I/O error for "' . file . '"' 12295 : 12296 :catch /^EXCEPT/ 12297 : echo "Unspecified error" 12298 : 12299 :endtry 12300 12301The exceptions raised by Vim itself (on error or when pressing CTRL-C) use 12302a flat hierarchy: they are all in the "Vim" class. You cannot throw yourself 12303exceptions with the "Vim" prefix; they are reserved for Vim. 12304 Vim error exceptions are parameterized with the name of the command that 12305failed, if known. See |catch-errors|. 12306 12307 12308PECULIARITIES 12309 *except-compat* 12310The exception handling concept requires that the command sequence causing the 12311exception is aborted immediately and control is transferred to finally clauses 12312and/or a catch clause. 12313 12314In the Vim script language there are cases where scripts and functions 12315continue after an error: in functions without the "abort" flag or in a command 12316after ":silent!", control flow goes to the following line, and outside 12317functions, control flow goes to the line following the outermost ":endwhile" 12318or ":endif". On the other hand, errors should be catchable as exceptions 12319(thus, requiring the immediate abortion). 12320 12321This problem has been solved by converting errors to exceptions and using 12322immediate abortion (if not suppressed by ":silent!") only when a try 12323conditional is active. This is no restriction since an (error) exception can 12324be caught only from an active try conditional. If you want an immediate 12325termination without catching the error, just use a try conditional without 12326catch clause. (You can cause cleanup code being executed before termination 12327by specifying a finally clause.) 12328 12329When no try conditional is active, the usual abortion and continuation 12330behavior is used instead of immediate abortion. This ensures compatibility of 12331scripts written for Vim 6.1 and earlier. 12332 12333However, when sourcing an existing script that does not use exception handling 12334commands (or when calling one of its functions) from inside an active try 12335conditional of a new script, you might change the control flow of the existing 12336script on error. You get the immediate abortion on error and can catch the 12337error in the new script. If however the sourced script suppresses error 12338messages by using the ":silent!" command (checking for errors by testing 12339|v:errmsg| if appropriate), its execution path is not changed. The error is 12340not converted to an exception. (See |:silent|.) So the only remaining cause 12341where this happens is for scripts that don't care about errors and produce 12342error messages. You probably won't want to use such code from your new 12343scripts. 12344 12345 *except-syntax-err* 12346Syntax errors in the exception handling commands are never caught by any of 12347the ":catch" commands of the try conditional they belong to. Its finally 12348clauses, however, is executed. 12349 Example: > 12350 12351 :try 12352 : try 12353 : throw 4711 12354 : catch /\(/ 12355 : echo "in catch with syntax error" 12356 : catch 12357 : echo "inner catch-all" 12358 : finally 12359 : echo "inner finally" 12360 : endtry 12361 :catch 12362 : echo 'outer catch-all caught "' . v:exception . '"' 12363 : finally 12364 : echo "outer finally" 12365 :endtry 12366 12367This displays: > 12368 inner finally 12369 outer catch-all caught "Vim(catch):E54: Unmatched \(" 12370 outer finally 12371The original exception is discarded and an error exception is raised, instead. 12372 12373 *except-single-line* 12374The ":try", ":catch", ":finally", and ":endtry" commands can be put on 12375a single line, but then syntax errors may make it difficult to recognize the 12376"catch" line, thus you better avoid this. 12377 Example: > 12378 :try | unlet! foo # | catch | endtry 12379raises an error exception for the trailing characters after the ":unlet!" 12380argument, but does not see the ":catch" and ":endtry" commands, so that the 12381error exception is discarded and the "E488: Trailing characters" message gets 12382displayed. 12383 12384 *except-several-errors* 12385When several errors appear in a single command, the first error message is 12386usually the most specific one and therefor converted to the error exception. 12387 Example: > 12388 echo novar 12389causes > 12390 E121: Undefined variable: novar 12391 E15: Invalid expression: novar 12392The value of the error exception inside try conditionals is: > 12393 Vim(echo):E121: Undefined variable: novar 12394< *except-syntax-error* 12395But when a syntax error is detected after a normal error in the same command, 12396the syntax error is used for the exception being thrown. 12397 Example: > 12398 unlet novar # 12399causes > 12400 E108: No such variable: "novar" 12401 E488: Trailing characters 12402The value of the error exception inside try conditionals is: > 12403 Vim(unlet):E488: Trailing characters 12404This is done because the syntax error might change the execution path in a way 12405not intended by the user. Example: > 12406 try 12407 try | unlet novar # | catch | echo v:exception | endtry 12408 catch /.*/ 12409 echo "outer catch:" v:exception 12410 endtry 12411This displays "outer catch: Vim(unlet):E488: Trailing characters", and then 12412a "E600: Missing :endtry" error message is given, see |except-single-line|. 12413 12414============================================================================== 124159. Examples *eval-examples* 12416 12417Printing in Binary ~ 12418> 12419 :" The function Nr2Bin() returns the binary string representation of a number. 12420 :func Nr2Bin(nr) 12421 : let n = a:nr 12422 : let r = "" 12423 : while n 12424 : let r = '01'[n % 2] . r 12425 : let n = n / 2 12426 : endwhile 12427 : return r 12428 :endfunc 12429 12430 :" The function String2Bin() converts each character in a string to a 12431 :" binary string, separated with dashes. 12432 :func String2Bin(str) 12433 : let out = '' 12434 : for ix in range(strlen(a:str)) 12435 : let out = out . '-' . Nr2Bin(char2nr(a:str[ix])) 12436 : endfor 12437 : return out[1:] 12438 :endfunc 12439 12440Example of its use: > 12441 :echo Nr2Bin(32) 12442result: "100000" > 12443 :echo String2Bin("32") 12444result: "110011-110010" 12445 12446 12447Sorting lines ~ 12448 12449This example sorts lines with a specific compare function. > 12450 12451 :func SortBuffer() 12452 : let lines = getline(1, '$') 12453 : call sort(lines, function("Strcmp")) 12454 : call setline(1, lines) 12455 :endfunction 12456 12457As a one-liner: > 12458 :call setline(1, sort(getline(1, '$'), function("Strcmp"))) 12459 12460 12461scanf() replacement ~ 12462 *sscanf* 12463There is no sscanf() function in Vim. If you need to extract parts from a 12464line, you can use matchstr() and substitute() to do it. This example shows 12465how to get the file name, line number and column number out of a line like 12466"foobar.txt, 123, 45". > 12467 :" Set up the match bit 12468 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)' 12469 :"get the part matching the whole expression 12470 :let l = matchstr(line, mx) 12471 :"get each item out of the match 12472 :let file = substitute(l, mx, '\1', '') 12473 :let lnum = substitute(l, mx, '\2', '') 12474 :let col = substitute(l, mx, '\3', '') 12475 12476The input is in the variable "line", the results in the variables "file", 12477"lnum" and "col". (idea from Michael Geddes) 12478 12479 12480getting the scriptnames in a Dictionary ~ 12481 *scriptnames-dictionary* 12482The |:scriptnames| command can be used to get a list of all script files that 12483have been sourced. There is no equivalent function or variable for this 12484(because it's rarely needed). In case you need to manipulate the list this 12485code can be used: > 12486 " Get the output of ":scriptnames" in the scriptnames_output variable. 12487 let scriptnames_output = '' 12488 redir => scriptnames_output 12489 silent scriptnames 12490 redir END 12491 12492 " Split the output into lines and parse each line. Add an entry to the 12493 " "scripts" dictionary. 12494 let scripts = {} 12495 for line in split(scriptnames_output, "\n") 12496 " Only do non-blank lines. 12497 if line =~ '\S' 12498 " Get the first number in the line. 12499 let nr = matchstr(line, '\d\+') 12500 " Get the file name, remove the script number " 123: ". 12501 let name = substitute(line, '.\+:\s*', '', '') 12502 " Add an item to the Dictionary 12503 let scripts[nr] = name 12504 endif 12505 endfor 12506 unlet scriptnames_output 12507 12508============================================================================== 1250910. No +eval feature *no-eval-feature* 12510 12511When the |+eval| feature was disabled at compile time, none of the expression 12512evaluation commands are available. To prevent this from causing Vim scripts 12513to generate all kinds of errors, the ":if" and ":endif" commands are still 12514recognized, though the argument of the ":if" and everything between the ":if" 12515and the matching ":endif" is ignored. Nesting of ":if" blocks is allowed, but 12516only if the commands are at the start of the line. The ":else" command is not 12517recognized. 12518 12519Example of how to avoid executing commands when the |+eval| feature is 12520missing: > 12521 12522 :if 1 12523 : echo "Expression evaluation is compiled in" 12524 :else 12525 : echo "You will _never_ see this message" 12526 :endif 12527 12528To execute a command only when the |+eval| feature is disabled requires a trick, 12529as this example shows: > 12530 12531 silent! while 0 12532 set history=111 12533 silent! endwhile 12534 12535When the |+eval| feature is available the command is skipped because of the 12536"while 0". Without the |+eval| feature the "while 0" is an error, which is 12537silently ignored, and the command is executed. 12538 12539============================================================================== 1254011. The sandbox *eval-sandbox* *sandbox* *E48* 12541 12542The 'foldexpr', 'formatexpr', 'includeexpr', 'indentexpr', 'statusline' and 12543'foldtext' options may be evaluated in a sandbox. This means that you are 12544protected from these expressions having nasty side effects. This gives some 12545safety for when these options are set from a modeline. It is also used when 12546the command from a tags file is executed and for CTRL-R = in the command line. 12547The sandbox is also used for the |:sandbox| command. 12548 12549These items are not allowed in the sandbox: 12550 - changing the buffer text 12551 - defining or changing mapping, autocommands, user commands 12552 - setting certain options (see |option-summary|) 12553 - setting certain v: variables (see |v:var|) *E794* 12554 - executing a shell command 12555 - reading or writing a file 12556 - jumping to another buffer or editing a file 12557 - executing Python, Perl, etc. commands 12558This is not guaranteed 100% secure, but it should block most attacks. 12559 12560 *:san* *:sandbox* 12561:san[dbox] {cmd} Execute {cmd} in the sandbox. Useful to evaluate an 12562 option that may have been set from a modeline, e.g. 12563 'foldexpr'. 12564 12565 *sandbox-option* 12566A few options contain an expression. When this expression is evaluated it may 12567have to be done in the sandbox to avoid a security risk. But the sandbox is 12568restrictive, thus this only happens when the option was set from an insecure 12569location. Insecure in this context are: 12570- sourcing a .vimrc or .exrc in the current directory 12571- while executing in the sandbox 12572- value coming from a modeline 12573- executing a function that was defined in the sandbox 12574 12575Note that when in the sandbox and saving an option value and restoring it, the 12576option will still be marked as it was set in the sandbox. 12577 12578============================================================================== 1257912. Textlock *textlock* 12580 12581In a few situations it is not allowed to change the text in the buffer, jump 12582to another window and some other things that might confuse or break what Vim 12583is currently doing. This mostly applies to things that happen when Vim is 12584actually doing something else. For example, evaluating the 'balloonexpr' may 12585happen any moment the mouse cursor is resting at some position. 12586 12587This is not allowed when the textlock is active: 12588 - changing the buffer text 12589 - jumping to another buffer or window 12590 - editing another file 12591 - closing a window or quitting Vim 12592 - etc. 12593 12594============================================================================== 1259513. Testing *testing* 12596 12597Vim can be tested after building it, usually with "make test". 12598The tests are located in the directory "src/testdir". 12599 12600There are several types of tests added over time: 12601 test33.in oldest, don't add any more 12602 test_something.in old style tests 12603 test_something.vim new style tests 12604 12605 *new-style-testing* 12606New tests should be added as new style tests. These use functions such as 12607|assert_equal()| to keep the test commands and the expected result in one 12608place. 12609 *old-style-testing* 12610In some cases an old style test needs to be used. E.g. when testing Vim 12611without the |+eval| feature. 12612 12613Find more information in the file src/testdir/README.txt. 12614 12615 12616 vim:tw=78:ts=8:noet:ft=help:norl: 12617