1*eval.txt* For Vim version 8.1. Last change: 2019 Feb 03 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} 2524screenattr({row}, {col}) Number attribute at screen position 2525screenchar({row}, {col}) Number character at screen position 2526screencol() Number current cursor column 2527screenrow() Number current cursor row 2528search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) 2529 Number search for {pattern} 2530searchdecl({name} [, {global} [, {thisblock}]]) 2531 Number search for variable declaration 2532searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 2533 Number search for other end of start/end pair 2534searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 2535 List search for other end of start/end pair 2536searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) 2537 List search for {pattern} 2538server2client({clientid}, {string}) 2539 Number send reply string 2540serverlist() String get a list of available servers 2541setbufline({expr}, {lnum}, {text}) 2542 Number set line {lnum} to {text} in buffer 2543 {expr} 2544setbufvar({expr}, {varname}, {val}) 2545 none set {varname} in buffer {expr} to {val} 2546setcharsearch({dict}) Dict set character search from {dict} 2547setcmdpos({pos}) Number set cursor position in command-line 2548setfperm({fname}, {mode}) Number set {fname} file permissions to {mode} 2549setline({lnum}, {line}) Number set line {lnum} to {line} 2550setloclist({nr}, {list} [, {action} [, {what}]]) 2551 Number modify location list using {list} 2552setmatches({list}) Number restore a list of matches 2553setpos({expr}, {list}) Number set the {expr} position to {list} 2554setqflist({list} [, {action} [, {what}]]) 2555 Number modify quickfix list using {list} 2556setreg({n}, {v} [, {opt}]) Number set register to value and type 2557settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val} 2558settabwinvar({tabnr}, {winnr}, {varname}, {val}) 2559 none set {varname} in window {winnr} in tab 2560 page {tabnr} to {val} 2561settagstack({nr}, {dict} [, {action}]) 2562 Number modify tag stack using {dict} 2563setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val} 2564sha256({string}) String SHA256 checksum of {string} 2565shellescape({string} [, {special}]) 2566 String escape {string} for use as shell 2567 command argument 2568shiftwidth([{col}]) Number effective value of 'shiftwidth' 2569sign_define({name} [, {dict}]) Number define or update a sign 2570sign_getdefined([{name}]) List get a list of defined signs 2571sign_getplaced([{expr} [, {dict}]]) 2572 List get a list of placed signs 2573sign_jump({id}, {group}, {expr}) 2574 Number jump to a sign 2575sign_place({id}, {group}, {name}, {expr} [, {dict}]) 2576 Number place a sign 2577sign_undefine([{name}]) Number undefine a sign 2578sign_unplace({group} [, {dict}]) 2579 Number unplace a sign 2580simplify({filename}) String simplify filename as much as possible 2581sin({expr}) Float sine of {expr} 2582sinh({expr}) Float hyperbolic sine of {expr} 2583sort({list} [, {func} [, {dict}]]) 2584 List sort {list}, using {func} to compare 2585soundfold({word}) String sound-fold {word} 2586spellbadword() String badly spelled word at cursor 2587spellsuggest({word} [, {max} [, {capital}]]) 2588 List spelling suggestions 2589split({expr} [, {pat} [, {keepempty}]]) 2590 List make |List| from {pat} separated {expr} 2591sqrt({expr}) Float square root of {expr} 2592str2float({expr}) Float convert String to Float 2593str2nr({expr} [, {base}]) Number convert String to Number 2594strchars({expr} [, {skipcc}]) Number character length of the String {expr} 2595strcharpart({str}, {start} [, {len}]) 2596 String {len} characters of {str} at {start} 2597strdisplaywidth({expr} [, {col}]) Number display length of the String {expr} 2598strftime({format} [, {time}]) String time in specified format 2599strgetchar({str}, {index}) Number get char {index} from {str} 2600stridx({haystack}, {needle} [, {start}]) 2601 Number index of {needle} in {haystack} 2602string({expr}) String String representation of {expr} value 2603strlen({expr}) Number length of the String {expr} 2604strpart({str}, {start} [, {len}]) 2605 String {len} characters of {str} at {start} 2606strridx({haystack}, {needle} [, {start}]) 2607 Number last index of {needle} in {haystack} 2608strtrans({expr}) String translate string to make it printable 2609strwidth({expr}) Number display cell length of the String {expr} 2610submatch({nr} [, {list}]) String or List 2611 specific match in ":s" or substitute() 2612substitute({expr}, {pat}, {sub}, {flags}) 2613 String all {pat} in {expr} replaced with {sub} 2614swapinfo({fname}) Dict information about swap file {fname} 2615swapname({expr}) String swap file of buffer {expr} 2616synID({lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col} 2617synIDattr({synID}, {what} [, {mode}]) 2618 String attribute {what} of syntax ID {synID} 2619synIDtrans({synID}) Number translated syntax ID of {synID} 2620synconcealed({lnum}, {col}) List info about concealing 2621synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and {col} 2622system({expr} [, {input}]) String output of shell command/filter {expr} 2623systemlist({expr} [, {input}]) List output of shell command/filter {expr} 2624tabpagebuflist([{arg}]) List list of buffer numbers in tab page 2625tabpagenr([{arg}]) Number number of current or last tab page 2626tabpagewinnr({tabarg} [, {arg}]) Number number of current window in tab page 2627taglist({expr} [, {filename}]) List list of tags matching {expr} 2628tagfiles() List tags files used 2629tan({expr}) Float tangent of {expr} 2630tanh({expr}) Float hyperbolic tangent of {expr} 2631tempname() String name for a temporary file 2632term_dumpdiff({filename}, {filename} [, {options}]) 2633 Number display difference between two dumps 2634term_dumpload({filename} [, {options}]) 2635 Number displaying a screen dump 2636term_dumpwrite({buf}, {filename} [, {options}]) 2637 none dump terminal window contents 2638term_getaltscreen({buf}) Number get the alternate screen flag 2639term_getansicolors({buf}) List get ANSI palette in GUI color mode 2640term_getattr({attr}, {what}) Number get the value of attribute {what} 2641term_getcursor({buf}) List get the cursor position of a terminal 2642term_getjob({buf}) Job get the job associated with a terminal 2643term_getline({buf}, {row}) String get a line of text from a terminal 2644term_getscrolled({buf}) Number get the scroll count of a terminal 2645term_getsize({buf}) List get the size of a terminal 2646term_getstatus({buf}) String get the status of a terminal 2647term_gettitle({buf}) String get the title of a terminal 2648term_gettty({buf}, [{input}]) String get the tty name of a terminal 2649term_list() List get the list of terminal buffers 2650term_scrape({buf}, {row}) List get row of a terminal screen 2651term_sendkeys({buf}, {keys}) none send keystrokes to a terminal 2652term_setansicolors({buf}, {colors}) 2653 none set ANSI palette in GUI color mode 2654term_setkill({buf}, {how}) none set signal to stop job in terminal 2655term_setrestore({buf}, {command}) none set command to restore terminal 2656term_setsize({buf}, {rows}, {cols}) 2657 none set the size of a terminal 2658term_start({cmd}, {options}) Number open a terminal window and run a job 2659term_wait({buf} [, {time}]) Number wait for screen to be updated 2660test_alloc_fail({id}, {countdown}, {repeat}) 2661 none make memory allocation fail 2662test_autochdir() none enable 'autochdir' during startup 2663test_feedinput({string}) none add key sequence to input buffer 2664test_garbagecollect_now() none free memory right now for testing 2665test_ignore_error({expr}) none ignore a specific error 2666test_null_blob() Blob null value for testing 2667test_null_channel() Channel null value for testing 2668test_null_dict() Dict null value for testing 2669test_null_job() Job null value for testing 2670test_null_list() List null value for testing 2671test_null_partial() Funcref null value for testing 2672test_null_string() String null value for testing 2673test_option_not_set({name}) none reset flag indicating option was set 2674test_override({expr}, {val}) none test with Vim internal overrides 2675test_scrollbar({which}, {value}, {dragging}) 2676 none scroll in the GUI for testing 2677test_settime({expr}) none set current time for testing 2678timer_info([{id}]) List information about timers 2679timer_pause({id}, {pause}) none pause or unpause a timer 2680timer_start({time}, {callback} [, {options}]) 2681 Number create a timer 2682timer_stop({timer}) none stop a timer 2683timer_stopall() none stop all timers 2684tolower({expr}) String the String {expr} switched to lowercase 2685toupper({expr}) String the String {expr} switched to uppercase 2686tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr} 2687 to chars in {tostr} 2688trim({text} [, {mask}]) String trim characters in {mask} from {text} 2689trunc({expr}) Float truncate Float {expr} 2690type({name}) Number type of variable {name} 2691undofile({name}) String undo file name for {name} 2692undotree() List undo file tree 2693uniq({list} [, {func} [, {dict}]]) 2694 List remove adjacent duplicates from a list 2695values({dict}) List values in {dict} 2696virtcol({expr}) Number screen column of cursor or mark 2697visualmode([expr]) String last visual mode used 2698wildmenumode() Number whether 'wildmenu' mode is active 2699win_findbuf({bufnr}) List find windows containing {bufnr} 2700win_getid([{win} [, {tab}]]) Number get window ID for {win} in {tab} 2701win_gotoid({expr}) Number go to window with ID {expr} 2702win_id2tabwin({expr}) List get tab and window nr from window ID 2703win_id2win({expr}) Number get window nr from window ID 2704win_screenpos({nr}) List get screen position of window {nr} 2705winbufnr({nr}) Number buffer number of window {nr} 2706wincol() Number window column of the cursor 2707winheight({nr}) Number height of window {nr} 2708winlayout([{tabnr}]) List layout of windows in tab {tabnr} 2709winline() Number window line of the cursor 2710winnr([{expr}]) Number number of current window 2711winrestcmd() String returns command to restore window sizes 2712winrestview({dict}) none restore view of current window 2713winsaveview() Dict save view of current window 2714winwidth({nr}) Number width of window {nr} 2715wordcount() Dict get byte/char/word statistics 2716writefile({object}, {fname} [, {flags}]) 2717 Number write |Blob| or |List| of lines to file 2718xor({expr}, {expr}) Number bitwise XOR 2719 2720 2721abs({expr}) *abs()* 2722 Return the absolute value of {expr}. When {expr} evaluates to 2723 a |Float| abs() returns a |Float|. When {expr} can be 2724 converted to a |Number| abs() returns a |Number|. Otherwise 2725 abs() gives an error message and returns -1. 2726 Examples: > 2727 echo abs(1.456) 2728< 1.456 > 2729 echo abs(-5.456) 2730< 5.456 > 2731 echo abs(-4) 2732< 4 2733 {only available when compiled with the |+float| feature} 2734 2735 2736acos({expr}) *acos()* 2737 Return the arc cosine of {expr} measured in radians, as a 2738 |Float| in the range of [0, pi]. 2739 {expr} must evaluate to a |Float| or a |Number| in the range 2740 [-1, 1]. 2741 Examples: > 2742 :echo acos(0) 2743< 1.570796 > 2744 :echo acos(-0.5) 2745< 2.094395 2746 {only available when compiled with the |+float| feature} 2747 2748 2749add({object}, {expr}) *add()* 2750 Append the item {expr} to |List| or |Blob| {object}. Returns 2751 the resulting |List| or |Blob|. Examples: > 2752 :let alist = add([1, 2, 3], item) 2753 :call add(mylist, "woodstock") 2754< Note that when {expr} is a |List| it is appended as a single 2755 item. Use |extend()| to concatenate |Lists|. 2756 When {object} is a |Blob| then {expr} must be a number. 2757 Use |insert()| to add an item at another position. 2758 2759 2760and({expr}, {expr}) *and()* 2761 Bitwise AND on the two arguments. The arguments are converted 2762 to a number. A List, Dict or Float argument causes an error. 2763 Example: > 2764 :let flag = and(bits, 0x80) 2765 2766 2767append({lnum}, {text}) *append()* 2768 When {text} is a |List|: Append each item of the |List| as a 2769 text line below line {lnum} in the current buffer. 2770 Otherwise append {text} as one text line below line {lnum} in 2771 the current buffer. 2772 {lnum} can be zero to insert a line before the first one. 2773 Returns 1 for failure ({lnum} out of range or out of memory), 2774 0 for success. Example: > 2775 :let failed = append(line('$'), "# THE END") 2776 :let failed = append(0, ["Chapter 1", "the beginning"]) 2777 2778appendbufline({expr}, {lnum}, {text}) *appendbufline()* 2779 Like |append()| but append the text in buffer {expr}. 2780 2781 For the use of {expr}, see |bufname()|. 2782 2783 {lnum} is used like with |append()|. Note that using |line()| 2784 would use the current buffer, not the one appending to. 2785 Use "$" to append at the end of the buffer. 2786 2787 On success 0 is returned, on failure 1 is returned. 2788 2789 If {expr} is not a valid buffer or {lnum} is not valid, an 2790 error message is given. Example: > 2791 :let failed = appendbufline(13, 0, "# THE START") 2792< 2793 *argc()* 2794argc([{winid}]) 2795 The result is the number of files in the argument list. See 2796 |arglist|. 2797 If {winid} is not supplied, the argument list of the current 2798 window is used. 2799 If {winid} is -1, the global argument list is used. 2800 Otherwise {winid} specifies the window of which the argument 2801 list is used: either the window number or the window ID. 2802 Returns -1 if the {winid} argument is invalid. 2803 2804 *argidx()* 2805argidx() The result is the current index in the argument list. 0 is 2806 the first file. argc() - 1 is the last one. See |arglist|. 2807 2808 *arglistid()* 2809arglistid([{winnr} [, {tabnr}]]) 2810 Return the argument list ID. This is a number which 2811 identifies the argument list being used. Zero is used for the 2812 global argument list. See |arglist|. 2813 Returns -1 if the arguments are invalid. 2814 2815 Without arguments use the current window. 2816 With {winnr} only use this window in the current tab page. 2817 With {winnr} and {tabnr} use the window in the specified tab 2818 page. 2819 {winnr} can be the window number or the |window-ID|. 2820 2821 *argv()* 2822argv([{nr} [, {winid}]) 2823 The result is the {nr}th file in the argument list. See 2824 |arglist|. "argv(0)" is the first one. Example: > 2825 :let i = 0 2826 :while i < argc() 2827 : let f = escape(fnameescape(argv(i)), '.') 2828 : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>' 2829 : let i = i + 1 2830 :endwhile 2831< Without the {nr} argument, or when {nr} is -1, a |List| with 2832 the whole |arglist| is returned. 2833 2834 The {winid} argument specifies the window ID, see |argc()|. 2835 2836assert_beeps({cmd}) *assert_beeps()* 2837 Run {cmd} and add an error message to |v:errors| if it does 2838 NOT produce a beep or visual bell. 2839 Also see |assert_fails()| and |assert-return|. 2840 2841 *assert_equal()* 2842assert_equal({expected}, {actual} [, {msg}]) 2843 When {expected} and {actual} are not equal an error message is 2844 added to |v:errors| and 1 is returned. Otherwise zero is 2845 returned |assert-return|. 2846 There is no automatic conversion, the String "4" is different 2847 from the Number 4. And the number 4 is different from the 2848 Float 4.0. The value of 'ignorecase' is not used here, case 2849 always matters. 2850 When {msg} is omitted an error in the form "Expected 2851 {expected} but got {actual}" is produced. 2852 Example: > 2853 assert_equal('foo', 'bar') 2854< Will result in a string to be added to |v:errors|: 2855 test.vim line 12: Expected 'foo' but got 'bar' ~ 2856 2857 *assert_equalfile()* 2858assert_equalfile({fname-one}, {fname-two}) 2859 When the files {fname-one} and {fname-two} do not contain 2860 exactly the same text an error message is added to |v:errors|. 2861 Also see |assert-return|. 2862 When {fname-one} or {fname-two} does not exist the error will 2863 mention that. 2864 Mainly useful with |terminal-diff|. 2865 2866assert_exception({error} [, {msg}]) *assert_exception()* 2867 When v:exception does not contain the string {error} an error 2868 message is added to |v:errors|. Also see |assert-return|. 2869 This can be used to assert that a command throws an exception. 2870 Using the error number, followed by a colon, avoids problems 2871 with translations: > 2872 try 2873 commandthatfails 2874 call assert_false(1, 'command should have failed') 2875 catch 2876 call assert_exception('E492:') 2877 endtry 2878 2879assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()* 2880 Run {cmd} and add an error message to |v:errors| if it does 2881 NOT produce an error. Also see |assert-return|. 2882 When {error} is given it must match in |v:errmsg|. 2883 Note that beeping is not considered an error, and some failing 2884 commands only beep. Use |assert_beeps()| for those. 2885 2886assert_false({actual} [, {msg}]) *assert_false()* 2887 When {actual} is not false an error message is added to 2888 |v:errors|, like with |assert_equal()|. 2889 Also see |assert-return|. 2890 A value is false when it is zero. When {actual} is not a 2891 number the assert fails. 2892 When {msg} is omitted an error in the form 2893 "Expected False but got {actual}" is produced. 2894 2895assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()* 2896 This asserts number values. When {actual} is lower than 2897 {lower} or higher than {upper} an error message is added to 2898 |v:errors|. Also see |assert-return|. 2899 When {msg} is omitted an error in the form 2900 "Expected range {lower} - {upper}, but got {actual}" is 2901 produced. 2902 2903 *assert_match()* 2904assert_match({pattern}, {actual} [, {msg}]) 2905 When {pattern} does not match {actual} an error message is 2906 added to |v:errors|. Also see |assert-return|. 2907 2908 {pattern} is used as with |=~|: The matching is always done 2909 like 'magic' was set and 'cpoptions' is empty, no matter what 2910 the actual value of 'magic' or 'cpoptions' is. 2911 2912 {actual} is used as a string, automatic conversion applies. 2913 Use "^" and "$" to match with the start and end of the text. 2914 Use both to match the whole text. 2915 2916 When {msg} is omitted an error in the form 2917 "Pattern {pattern} does not match {actual}" is produced. 2918 Example: > 2919 assert_match('^f.*o$', 'foobar') 2920< Will result in a string to be added to |v:errors|: 2921 test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~ 2922 2923 *assert_notequal()* 2924assert_notequal({expected}, {actual} [, {msg}]) 2925 The opposite of `assert_equal()`: add an error message to 2926 |v:errors| when {expected} and {actual} are equal. 2927 Also see |assert-return|. 2928 2929 *assert_notmatch()* 2930assert_notmatch({pattern}, {actual} [, {msg}]) 2931 The opposite of `assert_match()`: add an error message to 2932 |v:errors| when {pattern} matches {actual}. 2933 Also see |assert-return|. 2934 2935assert_report({msg}) *assert_report()* 2936 Report a test failure directly, using {msg}. 2937 Always returns one. 2938 2939assert_true({actual} [, {msg}]) *assert_true()* 2940 When {actual} is not true an error message is added to 2941 |v:errors|, like with |assert_equal()|. 2942 Also see |assert-return|. 2943 A value is TRUE when it is a non-zero number. When {actual} 2944 is not a number the assert fails. 2945 When {msg} is omitted an error in the form "Expected True but 2946 got {actual}" is produced. 2947 2948asin({expr}) *asin()* 2949 Return the arc sine of {expr} measured in radians, as a |Float| 2950 in the range of [-pi/2, pi/2]. 2951 {expr} must evaluate to a |Float| or a |Number| in the range 2952 [-1, 1]. 2953 Examples: > 2954 :echo asin(0.8) 2955< 0.927295 > 2956 :echo asin(-0.5) 2957< -0.523599 2958 {only available when compiled with the |+float| feature} 2959 2960 2961atan({expr}) *atan()* 2962 Return the principal value of the arc tangent of {expr}, in 2963 the range [-pi/2, +pi/2] radians, as a |Float|. 2964 {expr} must evaluate to a |Float| or a |Number|. 2965 Examples: > 2966 :echo atan(100) 2967< 1.560797 > 2968 :echo atan(-4.01) 2969< -1.326405 2970 {only available when compiled with the |+float| feature} 2971 2972 2973atan2({expr1}, {expr2}) *atan2()* 2974 Return the arc tangent of {expr1} / {expr2}, measured in 2975 radians, as a |Float| in the range [-pi, pi]. 2976 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 2977 Examples: > 2978 :echo atan2(-1, 1) 2979< -0.785398 > 2980 :echo atan2(1, -1) 2981< 2.356194 2982 {only available when compiled with the |+float| feature} 2983 2984balloon_show({expr}) *balloon_show()* 2985 Show {expr} inside the balloon. For the GUI {expr} is used as 2986 a string. For a terminal {expr} can be a list, which contains 2987 the lines of the balloon. If {expr} is not a list it will be 2988 split with |balloon_split()|. 2989 2990 Example: > 2991 func GetBalloonContent() 2992 " initiate getting the content 2993 return '' 2994 endfunc 2995 set balloonexpr=GetBalloonContent() 2996 2997 func BalloonCallback(result) 2998 call balloon_show(a:result) 2999 endfunc 3000< 3001 The intended use is that fetching the content of the balloon 3002 is initiated from 'balloonexpr'. It will invoke an 3003 asynchronous method, in which a callback invokes 3004 balloon_show(). The 'balloonexpr' itself can return an 3005 empty string or a placeholder. 3006 3007 When showing a balloon is not possible nothing happens, no 3008 error message. 3009 {only available when compiled with the |+balloon_eval| or 3010 |+balloon_eval_term| feature} 3011 3012balloon_split({msg}) *balloon_split()* 3013 Split {msg} into lines to be displayed in a balloon. The 3014 splits are made for the current window size and optimize to 3015 show debugger output. 3016 Returns a |List| with the split lines. 3017 {only available when compiled with the |+balloon_eval_term| 3018 feature} 3019 3020 *browse()* 3021browse({save}, {title}, {initdir}, {default}) 3022 Put up a file requester. This only works when "has("browse")" 3023 returns |TRUE| (only in some GUI versions). 3024 The input fields are: 3025 {save} when |TRUE|, select file to write 3026 {title} title for the requester 3027 {initdir} directory to start browsing in 3028 {default} default file name 3029 When the "Cancel" button is hit, something went wrong, or 3030 browsing is not possible, an empty string is returned. 3031 3032 *browsedir()* 3033browsedir({title}, {initdir}) 3034 Put up a directory requester. This only works when 3035 "has("browse")" returns |TRUE| (only in some GUI versions). 3036 On systems where a directory browser is not supported a file 3037 browser is used. In that case: select a file in the directory 3038 to be used. 3039 The input fields are: 3040 {title} title for the requester 3041 {initdir} directory to start browsing in 3042 When the "Cancel" button is hit, something went wrong, or 3043 browsing is not possible, an empty string is returned. 3044 3045bufexists({expr}) *bufexists()* 3046 The result is a Number, which is |TRUE| if a buffer called 3047 {expr} exists. 3048 If the {expr} argument is a number, buffer numbers are used. 3049 Number zero is the alternate buffer for the current window. 3050 3051 If the {expr} argument is a string it must match a buffer name 3052 exactly. The name can be: 3053 - Relative to the current directory. 3054 - A full path. 3055 - The name of a buffer with 'buftype' set to "nofile". 3056 - A URL name. 3057 Unlisted buffers will be found. 3058 Note that help files are listed by their short name in the 3059 output of |:buffers|, but bufexists() requires using their 3060 long name to be able to find them. 3061 bufexists() may report a buffer exists, but to use the name 3062 with a |:buffer| command you may need to use |expand()|. Esp 3063 for MS-Windows 8.3 names in the form "c:\DOCUME~1" 3064 Use "bufexists(0)" to test for the existence of an alternate 3065 file name. 3066 *buffer_exists()* 3067 Obsolete name: buffer_exists(). 3068 3069buflisted({expr}) *buflisted()* 3070 The result is a Number, which is |TRUE| if a buffer called 3071 {expr} exists and is listed (has the 'buflisted' option set). 3072 The {expr} argument is used like with |bufexists()|. 3073 3074bufloaded({expr}) *bufloaded()* 3075 The result is a Number, which is |TRUE| if a buffer called 3076 {expr} exists and is loaded (shown in a window or hidden). 3077 The {expr} argument is used like with |bufexists()|. 3078 3079bufname({expr}) *bufname()* 3080 The result is the name of a buffer, as it is displayed by the 3081 ":ls" command. 3082 If {expr} is a Number, that buffer number's name is given. 3083 Number zero is the alternate buffer for the current window. 3084 If {expr} is a String, it is used as a |file-pattern| to match 3085 with the buffer names. This is always done like 'magic' is 3086 set and 'cpoptions' is empty. When there is more than one 3087 match an empty string is returned. 3088 "" or "%" can be used for the current buffer, "#" for the 3089 alternate buffer. 3090 A full match is preferred, otherwise a match at the start, end 3091 or middle of the buffer name is accepted. If you only want a 3092 full match then put "^" at the start and "$" at the end of the 3093 pattern. 3094 Listed buffers are found first. If there is a single match 3095 with a listed buffer, that one is returned. Next unlisted 3096 buffers are searched for. 3097 If the {expr} is a String, but you want to use it as a buffer 3098 number, force it to be a Number by adding zero to it: > 3099 :echo bufname("3" + 0) 3100< If the buffer doesn't exist, or doesn't have a name, an empty 3101 string is returned. > 3102 bufname("#") alternate buffer name 3103 bufname(3) name of buffer 3 3104 bufname("%") name of current buffer 3105 bufname("file2") name of buffer where "file2" matches. 3106< *buffer_name()* 3107 Obsolete name: buffer_name(). 3108 3109 *bufnr()* 3110bufnr({expr} [, {create}]) 3111 The result is the number of a buffer, as it is displayed by 3112 the ":ls" command. For the use of {expr}, see |bufname()| 3113 above. 3114 If the buffer doesn't exist, -1 is returned. Or, if the 3115 {create} argument is present and not zero, a new, unlisted, 3116 buffer is created and its number is returned. 3117 bufnr("$") is the last buffer: > 3118 :let last_buffer = bufnr("$") 3119< The result is a Number, which is the highest buffer number 3120 of existing buffers. Note that not all buffers with a smaller 3121 number necessarily exist, because ":bwipeout" may have removed 3122 them. Use bufexists() to test for the existence of a buffer. 3123 *buffer_number()* 3124 Obsolete name: buffer_number(). 3125 *last_buffer_nr()* 3126 Obsolete name for bufnr("$"): last_buffer_nr(). 3127 3128bufwinid({expr}) *bufwinid()* 3129 The result is a Number, which is the |window-ID| of the first 3130 window associated with buffer {expr}. For the use of {expr}, 3131 see |bufname()| above. If buffer {expr} doesn't exist or 3132 there is no such window, -1 is returned. Example: > 3133 3134 echo "A window containing buffer 1 is " . (bufwinid(1)) 3135< 3136 Only deals with the current tab page. 3137 3138bufwinnr({expr}) *bufwinnr()* 3139 The result is a Number, which is the number of the first 3140 window associated with buffer {expr}. For the use of {expr}, 3141 see |bufname()| above. If buffer {expr} doesn't exist or 3142 there is no such window, -1 is returned. Example: > 3143 3144 echo "A window containing buffer 1 is " . (bufwinnr(1)) 3145 3146< The number can be used with |CTRL-W_w| and ":wincmd w" 3147 |:wincmd|. 3148 Only deals with the current tab page. 3149 3150byte2line({byte}) *byte2line()* 3151 Return the line number that contains the character at byte 3152 count {byte} in the current buffer. This includes the 3153 end-of-line character, depending on the 'fileformat' option 3154 for the current buffer. The first character has byte count 3155 one. 3156 Also see |line2byte()|, |go| and |:goto|. 3157 {not available when compiled without the |+byte_offset| 3158 feature} 3159 3160byteidx({expr}, {nr}) *byteidx()* 3161 Return byte index of the {nr}'th character in the string 3162 {expr}. Use zero for the first character, it returns zero. 3163 This function is only useful when there are multibyte 3164 characters, otherwise the returned value is equal to {nr}. 3165 Composing characters are not counted separately, their byte 3166 length is added to the preceding base character. See 3167 |byteidxcomp()| below for counting composing characters 3168 separately. 3169 Example : > 3170 echo matchstr(str, ".", byteidx(str, 3)) 3171< will display the fourth character. Another way to do the 3172 same: > 3173 let s = strpart(str, byteidx(str, 3)) 3174 echo strpart(s, 0, byteidx(s, 1)) 3175< Also see |strgetchar()| and |strcharpart()|. 3176 3177 If there are less than {nr} characters -1 is returned. 3178 If there are exactly {nr} characters the length of the string 3179 in bytes is returned. 3180 3181byteidxcomp({expr}, {nr}) *byteidxcomp()* 3182 Like byteidx(), except that a composing character is counted 3183 as a separate character. Example: > 3184 let s = 'e' . nr2char(0x301) 3185 echo byteidx(s, 1) 3186 echo byteidxcomp(s, 1) 3187 echo byteidxcomp(s, 2) 3188< The first and third echo result in 3 ('e' plus composing 3189 character is 3 bytes), the second echo results in 1 ('e' is 3190 one byte). 3191 Only works different from byteidx() when 'encoding' is set to 3192 a Unicode encoding. 3193 3194call({func}, {arglist} [, {dict}]) *call()* *E699* 3195 Call function {func} with the items in |List| {arglist} as 3196 arguments. 3197 {func} can either be a |Funcref| or the name of a function. 3198 a:firstline and a:lastline are set to the cursor line. 3199 Returns the return value of the called function. 3200 {dict} is for functions with the "dict" attribute. It will be 3201 used to set the local variable "self". |Dictionary-function| 3202 3203ceil({expr}) *ceil()* 3204 Return the smallest integral value greater than or equal to 3205 {expr} as a |Float| (round up). 3206 {expr} must evaluate to a |Float| or a |Number|. 3207 Examples: > 3208 echo ceil(1.456) 3209< 2.0 > 3210 echo ceil(-5.456) 3211< -5.0 > 3212 echo ceil(4.0) 3213< 4.0 3214 {only available when compiled with the |+float| feature} 3215 3216ch_canread({handle}) *ch_canread()* 3217 Return non-zero when there is something to read from {handle}. 3218 {handle} can be a Channel or a Job that has a Channel. 3219 3220 This is useful to read from a channel at a convenient time, 3221 e.g. from a timer. 3222 3223 Note that messages are dropped when the channel does not have 3224 a callback. Add a close callback to avoid that. 3225 3226 {only available when compiled with the |+channel| feature} 3227 3228ch_close({handle}) *ch_close()* 3229 Close {handle}. See |channel-close|. 3230 {handle} can be a Channel or a Job that has a Channel. 3231 A close callback is not invoked. 3232 3233 {only available when compiled with the |+channel| feature} 3234 3235ch_close_in({handle}) *ch_close_in()* 3236 Close the "in" part of {handle}. See |channel-close-in|. 3237 {handle} can be a Channel or a Job that has a Channel. 3238 A close callback is not invoked. 3239 3240 {only available when compiled with the |+channel| feature} 3241 3242ch_evalexpr({handle}, {expr} [, {options}]) *ch_evalexpr()* 3243 Send {expr} over {handle}. The {expr} is encoded 3244 according to the type of channel. The function cannot be used 3245 with a raw channel. See |channel-use|. 3246 {handle} can be a Channel or a Job that has a Channel. 3247 *E917* 3248 {options} must be a Dictionary. It must not have a "callback" 3249 entry. It can have a "timeout" entry to specify the timeout 3250 for this specific request. 3251 3252 ch_evalexpr() waits for a response and returns the decoded 3253 expression. When there is an error or timeout it returns an 3254 empty string. 3255 3256 {only available when compiled with the |+channel| feature} 3257 3258ch_evalraw({handle}, {string} [, {options}]) *ch_evalraw()* 3259 Send {string} over {handle}. 3260 {handle} can be a Channel or a Job that has a Channel. 3261 3262 Works like |ch_evalexpr()|, but does not encode the request or 3263 decode the response. The caller is responsible for the 3264 correct contents. Also does not add a newline for a channel 3265 in NL mode, the caller must do that. The NL in the response 3266 is removed. 3267 Note that Vim does not know when the text received on a raw 3268 channel is complete, it may only return the first part and you 3269 need to use |ch_readraw()| to fetch the rest. 3270 See |channel-use|. 3271 3272 {only available when compiled with the |+channel| feature} 3273 3274ch_getbufnr({handle}, {what}) *ch_getbufnr()* 3275 Get the buffer number that {handle} is using for {what}. 3276 {handle} can be a Channel or a Job that has a Channel. 3277 {what} can be "err" for stderr, "out" for stdout or empty for 3278 socket output. 3279 Returns -1 when there is no buffer. 3280 {only available when compiled with the |+channel| feature} 3281 3282ch_getjob({channel}) *ch_getjob()* 3283 Get the Job associated with {channel}. 3284 If there is no job calling |job_status()| on the returned Job 3285 will result in "fail". 3286 3287 {only available when compiled with the |+channel| and 3288 |+job| features} 3289 3290ch_info({handle}) *ch_info()* 3291 Returns a Dictionary with information about {handle}. The 3292 items are: 3293 "id" number of the channel 3294 "status" "open", "buffered" or "closed", like 3295 ch_status() 3296 When opened with ch_open(): 3297 "hostname" the hostname of the address 3298 "port" the port of the address 3299 "sock_status" "open" or "closed" 3300 "sock_mode" "NL", "RAW", "JSON" or "JS" 3301 "sock_io" "socket" 3302 "sock_timeout" timeout in msec 3303 When opened with job_start(): 3304 "out_status" "open", "buffered" or "closed" 3305 "out_mode" "NL", "RAW", "JSON" or "JS" 3306 "out_io" "null", "pipe", "file" or "buffer" 3307 "out_timeout" timeout in msec 3308 "err_status" "open", "buffered" or "closed" 3309 "err_mode" "NL", "RAW", "JSON" or "JS" 3310 "err_io" "out", "null", "pipe", "file" or "buffer" 3311 "err_timeout" timeout in msec 3312 "in_status" "open" or "closed" 3313 "in_mode" "NL", "RAW", "JSON" or "JS" 3314 "in_io" "null", "pipe", "file" or "buffer" 3315 "in_timeout" timeout in msec 3316 3317ch_log({msg} [, {handle}]) *ch_log()* 3318 Write {msg} in the channel log file, if it was opened with 3319 |ch_logfile()|. 3320 When {handle} is passed the channel number is used for the 3321 message. 3322 {handle} can be a Channel or a Job that has a Channel. The 3323 Channel must be open for the channel number to be used. 3324 3325ch_logfile({fname} [, {mode}]) *ch_logfile()* 3326 Start logging channel activity to {fname}. 3327 When {fname} is an empty string: stop logging. 3328 3329 When {mode} is omitted or "a" append to the file. 3330 When {mode} is "w" start with an empty file. 3331 3332 Use |ch_log()| to write log messages. The file is flushed 3333 after every message, on Unix you can use "tail -f" to see what 3334 is going on in real time. 3335 3336 This function is not available in the |sandbox|. 3337 NOTE: the channel communication is stored in the file, be 3338 aware that this may contain confidential and privacy sensitive 3339 information, e.g. a password you type in a terminal window. 3340 3341 3342ch_open({address} [, {options}]) *ch_open()* 3343 Open a channel to {address}. See |channel|. 3344 Returns a Channel. Use |ch_status()| to check for failure. 3345 3346 {address} has the form "hostname:port", e.g., 3347 "localhost:8765". 3348 3349 If {options} is given it must be a |Dictionary|. 3350 See |channel-open-options|. 3351 3352 {only available when compiled with the |+channel| feature} 3353 3354ch_read({handle} [, {options}]) *ch_read()* 3355 Read from {handle} and return the received message. 3356 {handle} can be a Channel or a Job that has a Channel. 3357 For a NL channel this waits for a NL to arrive, except when 3358 there is nothing more to read (channel was closed). 3359 See |channel-more|. 3360 {only available when compiled with the |+channel| feature} 3361 3362ch_readblob({handle} [, {options}]) *ch_readblob()* 3363 Like ch_read() but reads binary data and returns a |Blob|. 3364 See |channel-more|. 3365 {only available when compiled with the |+channel| feature} 3366 3367ch_readraw({handle} [, {options}]) *ch_readraw()* 3368 Like ch_read() but for a JS and JSON channel does not decode 3369 the message. For a NL channel it does not block waiting for 3370 the NL to arrive, but otherwise works like ch_read(). 3371 See |channel-more|. 3372 {only available when compiled with the |+channel| feature} 3373 3374ch_sendexpr({handle}, {expr} [, {options}]) *ch_sendexpr()* 3375 Send {expr} over {handle}. The {expr} is encoded 3376 according to the type of channel. The function cannot be used 3377 with a raw channel. 3378 See |channel-use|. *E912* 3379 {handle} can be a Channel or a Job that has a Channel. 3380 3381 {only available when compiled with the |+channel| feature} 3382 3383ch_sendraw({handle}, {expr} [, {options}]) *ch_sendraw()* 3384 Send |String| or |Blob| {expr} over {handle}. 3385 Works like |ch_sendexpr()|, but does not encode the request or 3386 decode the response. The caller is responsible for the 3387 correct contents. Also does not add a newline for a channel 3388 in NL mode, the caller must do that. The NL in the response 3389 is removed. 3390 See |channel-use|. 3391 3392 {only available when compiled with the |+channel| feature} 3393 3394ch_setoptions({handle}, {options}) *ch_setoptions()* 3395 Set options on {handle}: 3396 "callback" the channel callback 3397 "timeout" default read timeout in msec 3398 "mode" mode for the whole channel 3399 See |ch_open()| for more explanation. 3400 {handle} can be a Channel or a Job that has a Channel. 3401 3402 Note that changing the mode may cause queued messages to be 3403 lost. 3404 3405 These options cannot be changed: 3406 "waittime" only applies to |ch_open()| 3407 3408ch_status({handle} [, {options}]) *ch_status()* 3409 Return the status of {handle}: 3410 "fail" failed to open the channel 3411 "open" channel can be used 3412 "buffered" channel can be read, not written to 3413 "closed" channel can not be used 3414 {handle} can be a Channel or a Job that has a Channel. 3415 "buffered" is used when the channel was closed but there is 3416 still data that can be obtained with |ch_read()|. 3417 3418 If {options} is given it can contain a "part" entry to specify 3419 the part of the channel to return the status for: "out" or 3420 "err". For example, to get the error status: > 3421 ch_status(job, {"part": "err"}) 3422< 3423changenr() *changenr()* 3424 Return the number of the most recent change. This is the same 3425 number as what is displayed with |:undolist| and can be used 3426 with the |:undo| command. 3427 When a change was made it is the number of that change. After 3428 redo it is the number of the redone change. After undo it is 3429 one less than the number of the undone change. 3430 3431char2nr({expr} [, {utf8}]) *char2nr()* 3432 Return number value of the first char in {expr}. Examples: > 3433 char2nr(" ") returns 32 3434 char2nr("ABC") returns 65 3435< When {utf8} is omitted or zero, the current 'encoding' is used. 3436 Example for "utf-8": > 3437 char2nr("á") returns 225 3438 char2nr("á"[0]) returns 195 3439< With {utf8} set to 1, always treat as utf-8 characters. 3440 A combining character is a separate character. 3441 |nr2char()| does the opposite. 3442 3443cindent({lnum}) *cindent()* 3444 Get the amount of indent for line {lnum} according the C 3445 indenting rules, as with 'cindent'. 3446 The indent is counted in spaces, the value of 'tabstop' is 3447 relevant. {lnum} is used just like in |getline()|. 3448 When {lnum} is invalid or Vim was not compiled the |+cindent| 3449 feature, -1 is returned. 3450 See |C-indenting|. 3451 3452clearmatches() *clearmatches()* 3453 Clears all matches previously defined by |matchadd()| and the 3454 |:match| commands. 3455 3456 *col()* 3457col({expr}) The result is a Number, which is the byte index of the column 3458 position given with {expr}. The accepted positions are: 3459 . the cursor position 3460 $ the end of the cursor line (the result is the 3461 number of bytes in the cursor line plus one) 3462 'x position of mark x (if the mark is not set, 0 is 3463 returned) 3464 v In Visual mode: the start of the Visual area (the 3465 cursor is the end). When not in Visual mode 3466 returns the cursor position. Differs from |'<| in 3467 that it's updated right away. 3468 Additionally {expr} can be [lnum, col]: a |List| with the line 3469 and column number. Most useful when the column is "$", to get 3470 the last column of a specific line. When "lnum" or "col" is 3471 out of range then col() returns zero. 3472 To get the line number use |line()|. To get both use 3473 |getpos()|. 3474 For the screen column position use |virtcol()|. 3475 Note that only marks in the current file can be used. 3476 Examples: > 3477 col(".") column of cursor 3478 col("$") length of cursor line plus one 3479 col("'t") column of mark t 3480 col("'" . markname) column of mark markname 3481< The first column is 1. 0 is returned for an error. 3482 For an uppercase mark the column may actually be in another 3483 buffer. 3484 For the cursor position, when 'virtualedit' is active, the 3485 column is one higher if the cursor is after the end of the 3486 line. This can be used to obtain the column in Insert mode: > 3487 :imap <F2> <C-O>:let save_ve = &ve<CR> 3488 \<C-O>:set ve=all<CR> 3489 \<C-O>:echo col(".") . "\n" <Bar> 3490 \let &ve = save_ve<CR> 3491< 3492 3493complete({startcol}, {matches}) *complete()* *E785* 3494 Set the matches for Insert mode completion. 3495 Can only be used in Insert mode. You need to use a mapping 3496 with CTRL-R = (see |i_CTRL-R|). It does not work after CTRL-O 3497 or with an expression mapping. 3498 {startcol} is the byte offset in the line where the completed 3499 text start. The text up to the cursor is the original text 3500 that will be replaced by the matches. Use col('.') for an 3501 empty string. "col('.') - 1" will replace one character by a 3502 match. 3503 {matches} must be a |List|. Each |List| item is one match. 3504 See |complete-items| for the kind of items that are possible. 3505 Note that the after calling this function you need to avoid 3506 inserting anything that would cause completion to stop. 3507 The match can be selected with CTRL-N and CTRL-P as usual with 3508 Insert mode completion. The popup menu will appear if 3509 specified, see |ins-completion-menu|. 3510 Example: > 3511 inoremap <F5> <C-R>=ListMonths()<CR> 3512 3513 func! ListMonths() 3514 call complete(col('.'), ['January', 'February', 'March', 3515 \ 'April', 'May', 'June', 'July', 'August', 'September', 3516 \ 'October', 'November', 'December']) 3517 return '' 3518 endfunc 3519< This isn't very useful, but it shows how it works. Note that 3520 an empty string is returned to avoid a zero being inserted. 3521 3522complete_add({expr}) *complete_add()* 3523 Add {expr} to the list of matches. Only to be used by the 3524 function specified with the 'completefunc' option. 3525 Returns 0 for failure (empty string or out of memory), 3526 1 when the match was added, 2 when the match was already in 3527 the list. 3528 See |complete-functions| for an explanation of {expr}. It is 3529 the same as one item in the list that 'omnifunc' would return. 3530 3531complete_check() *complete_check()* 3532 Check for a key typed while looking for completion matches. 3533 This is to be used when looking for matches takes some time. 3534 Returns |TRUE| when searching for matches is to be aborted, 3535 zero otherwise. 3536 Only to be used by the function specified with the 3537 'completefunc' option. 3538 3539 *confirm()* 3540confirm({msg} [, {choices} [, {default} [, {type}]]]) 3541 Confirm() offers the user a dialog, from which a choice can be 3542 made. It returns the number of the choice. For the first 3543 choice this is 1. 3544 Note: confirm() is only supported when compiled with dialog 3545 support, see |+dialog_con| and |+dialog_gui|. 3546 3547 {msg} is displayed in a |dialog| with {choices} as the 3548 alternatives. When {choices} is missing or empty, "&OK" is 3549 used (and translated). 3550 {msg} is a String, use '\n' to include a newline. Only on 3551 some systems the string is wrapped when it doesn't fit. 3552 3553 {choices} is a String, with the individual choices separated 3554 by '\n', e.g. > 3555 confirm("Save changes?", "&Yes\n&No\n&Cancel") 3556< The letter after the '&' is the shortcut key for that choice. 3557 Thus you can type 'c' to select "Cancel". The shortcut does 3558 not need to be the first letter: > 3559 confirm("file has been modified", "&Save\nSave &All") 3560< For the console, the first letter of each choice is used as 3561 the default shortcut key. 3562 3563 The optional {default} argument is the number of the choice 3564 that is made if the user hits <CR>. Use 1 to make the first 3565 choice the default one. Use 0 to not set a default. If 3566 {default} is omitted, 1 is used. 3567 3568 The optional {type} argument gives the type of dialog. This 3569 is only used for the icon of the GTK, Mac, Motif and Win32 3570 GUI. It can be one of these values: "Error", "Question", 3571 "Info", "Warning" or "Generic". Only the first character is 3572 relevant. When {type} is omitted, "Generic" is used. 3573 3574 If the user aborts the dialog by pressing <Esc>, CTRL-C, 3575 or another valid interrupt key, confirm() returns 0. 3576 3577 An example: > 3578 :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2) 3579 :if choice == 0 3580 : echo "make up your mind!" 3581 :elseif choice == 3 3582 : echo "tasteful" 3583 :else 3584 : echo "I prefer bananas myself." 3585 :endif 3586< In a GUI dialog, buttons are used. The layout of the buttons 3587 depends on the 'v' flag in 'guioptions'. If it is included, 3588 the buttons are always put vertically. Otherwise, confirm() 3589 tries to put the buttons in one horizontal line. If they 3590 don't fit, a vertical layout is used anyway. For some systems 3591 the horizontal layout is always used. 3592 3593 *copy()* 3594copy({expr}) Make a copy of {expr}. For Numbers and Strings this isn't 3595 different from using {expr} directly. 3596 When {expr} is a |List| a shallow copy is created. This means 3597 that the original |List| can be changed without changing the 3598 copy, and vice versa. But the items are identical, thus 3599 changing an item changes the contents of both |Lists|. 3600 A |Dictionary| is copied in a similar way as a |List|. 3601 Also see |deepcopy()|. 3602 3603cos({expr}) *cos()* 3604 Return the cosine of {expr}, measured in radians, as a |Float|. 3605 {expr} must evaluate to a |Float| or a |Number|. 3606 Examples: > 3607 :echo cos(100) 3608< 0.862319 > 3609 :echo cos(-4.01) 3610< -0.646043 3611 {only available when compiled with the |+float| feature} 3612 3613 3614cosh({expr}) *cosh()* 3615 Return the hyperbolic cosine of {expr} as a |Float| in the range 3616 [1, inf]. 3617 {expr} must evaluate to a |Float| or a |Number|. 3618 Examples: > 3619 :echo cosh(0.5) 3620< 1.127626 > 3621 :echo cosh(-0.5) 3622< -1.127626 3623 {only available when compiled with the |+float| feature} 3624 3625 3626count({comp}, {expr} [, {ic} [, {start}]]) *count()* 3627 Return the number of times an item with value {expr} appears 3628 in |String|, |List| or |Dictionary| {comp}. 3629 3630 If {start} is given then start with the item with this index. 3631 {start} can only be used with a |List|. 3632 3633 When {ic} is given and it's |TRUE| then case is ignored. 3634 3635 When {comp} is a string then the number of not overlapping 3636 occurrences of {expr} is returned. Zero is returned when 3637 {expr} is an empty string. 3638 3639 *cscope_connection()* 3640cscope_connection([{num} , {dbpath} [, {prepend}]]) 3641 Checks for the existence of a |cscope| connection. If no 3642 parameters are specified, then the function returns: 3643 0, if cscope was not available (not compiled in), or 3644 if there are no cscope connections; 3645 1, if there is at least one cscope connection. 3646 3647 If parameters are specified, then the value of {num} 3648 determines how existence of a cscope connection is checked: 3649 3650 {num} Description of existence check 3651 ----- ------------------------------ 3652 0 Same as no parameters (e.g., "cscope_connection()"). 3653 1 Ignore {prepend}, and use partial string matches for 3654 {dbpath}. 3655 2 Ignore {prepend}, and use exact string matches for 3656 {dbpath}. 3657 3 Use {prepend}, use partial string matches for both 3658 {dbpath} and {prepend}. 3659 4 Use {prepend}, use exact string matches for both 3660 {dbpath} and {prepend}. 3661 3662 Note: All string comparisons are case sensitive! 3663 3664 Examples. Suppose we had the following (from ":cs show"): > 3665 3666 # pid database name prepend path 3667 0 27664 cscope.out /usr/local 3668< 3669 Invocation Return Val ~ 3670 ---------- ---------- > 3671 cscope_connection() 1 3672 cscope_connection(1, "out") 1 3673 cscope_connection(2, "out") 0 3674 cscope_connection(3, "out") 0 3675 cscope_connection(3, "out", "local") 1 3676 cscope_connection(4, "out") 0 3677 cscope_connection(4, "out", "local") 0 3678 cscope_connection(4, "cscope.out", "/usr/local") 1 3679< 3680cursor({lnum}, {col} [, {off}]) *cursor()* 3681cursor({list}) 3682 Positions the cursor at the column (byte count) {col} in the 3683 line {lnum}. The first column is one. 3684 3685 When there is one argument {list} this is used as a |List| 3686 with two, three or four item: 3687 [{lnum}, {col}] 3688 [{lnum}, {col}, {off}] 3689 [{lnum}, {col}, {off}, {curswant}] 3690 This is like the return value of |getpos()| or |getcurpos()|, 3691 but without the first item. 3692 3693 Does not change the jumplist. 3694 If {lnum} is greater than the number of lines in the buffer, 3695 the cursor will be positioned at the last line in the buffer. 3696 If {lnum} is zero, the cursor will stay in the current line. 3697 If {col} is greater than the number of bytes in the line, 3698 the cursor will be positioned at the last character in the 3699 line. 3700 If {col} is zero, the cursor will stay in the current column. 3701 If {curswant} is given it is used to set the preferred column 3702 for vertical movement. Otherwise {col} is used. 3703 3704 When 'virtualedit' is used {off} specifies the offset in 3705 screen columns from the start of the character. E.g., a 3706 position within a <Tab> or after the last character. 3707 Returns 0 when the position could be set, -1 otherwise. 3708 3709debugbreak({pid}) *debugbreak()* 3710 Specifically used to interrupt a program being debugged. It 3711 will cause process {pid} to get a SIGTRAP. Behavior for other 3712 processes is undefined. See |terminal-debugger|. 3713 {only available on MS-Windows} 3714 3715deepcopy({expr} [, {noref}]) *deepcopy()* *E698* 3716 Make a copy of {expr}. For Numbers and Strings this isn't 3717 different from using {expr} directly. 3718 When {expr} is a |List| a full copy is created. This means 3719 that the original |List| can be changed without changing the 3720 copy, and vice versa. When an item is a |List| or 3721 |Dictionary|, a copy for it is made, recursively. Thus 3722 changing an item in the copy does not change the contents of 3723 the original |List|. 3724 A |Dictionary| is copied in a similar way as a |List|. 3725 When {noref} is omitted or zero a contained |List| or 3726 |Dictionary| is only copied once. All references point to 3727 this single copy. With {noref} set to 1 every occurrence of a 3728 |List| or |Dictionary| results in a new copy. This also means 3729 that a cyclic reference causes deepcopy() to fail. 3730 *E724* 3731 Nesting is possible up to 100 levels. When there is an item 3732 that refers back to a higher level making a deep copy with 3733 {noref} set to 1 will fail. 3734 Also see |copy()|. 3735 3736delete({fname} [, {flags}]) *delete()* 3737 Without {flags} or with {flags} empty: Deletes the file by the 3738 name {fname}. This also works when {fname} is a symbolic link. 3739 3740 When {flags} is "d": Deletes the directory by the name 3741 {fname}. This fails when directory {fname} is not empty. 3742 3743 When {flags} is "rf": Deletes the directory by the name 3744 {fname} and everything in it, recursively. BE CAREFUL! 3745 Note: on MS-Windows it is not possible to delete a directory 3746 that is being used. 3747 3748 A symbolic link itself is deleted, not what it points to. 3749 3750 The result is a Number, which is 0 if the delete operation was 3751 successful and -1 when the deletion failed or partly failed. 3752 3753 Use |remove()| to delete an item from a |List|. 3754 To delete a line from the buffer use |:delete| or 3755 |deletebufline()|. 3756 3757deletebufline({expr}, {first} [, {last}]) *deletebufline()* 3758 Delete lines {first} to {last} (inclusive) from buffer {expr}. 3759 If {last} is omitted then delete line {first} only. 3760 On success 0 is returned, on failure 1 is returned. 3761 3762 For the use of {expr}, see |bufname()| above. 3763 3764 {first} and {last} are used like with |getline()|. Note that 3765 when using |line()| this refers to the current buffer. Use "$" 3766 to refer to the last line in buffer {expr}. 3767 3768 *did_filetype()* 3769did_filetype() Returns |TRUE| when autocommands are being executed and the 3770 FileType event has been triggered at least once. Can be used 3771 to avoid triggering the FileType event again in the scripts 3772 that detect the file type. |FileType| 3773 Returns |FALSE| when `:setf FALLBACK` was used. 3774 When editing another file, the counter is reset, thus this 3775 really checks if the FileType event has been triggered for the 3776 current buffer. This allows an autocommand that starts 3777 editing another buffer to set 'filetype' and load a syntax 3778 file. 3779 3780diff_filler({lnum}) *diff_filler()* 3781 Returns the number of filler lines above line {lnum}. 3782 These are the lines that were inserted at this point in 3783 another diff'ed window. These filler lines are shown in the 3784 display but don't exist in the buffer. 3785 {lnum} is used like with |getline()|. Thus "." is the current 3786 line, "'m" mark m, etc. 3787 Returns 0 if the current window is not in diff mode. 3788 3789diff_hlID({lnum}, {col}) *diff_hlID()* 3790 Returns the highlight ID for diff mode at line {lnum} column 3791 {col} (byte index). When the current line does not have a 3792 diff change zero is returned. 3793 {lnum} is used like with |getline()|. Thus "." is the current 3794 line, "'m" mark m, etc. 3795 {col} is 1 for the leftmost column, {lnum} is 1 for the first 3796 line. 3797 The highlight ID can be used with |synIDattr()| to obtain 3798 syntax information about the highlighting. 3799 3800empty({expr}) *empty()* 3801 Return the Number 1 if {expr} is empty, zero otherwise. 3802 - A |List| or |Dictionary| is empty when it does not have any 3803 items. 3804 - A |String| is empty when its length is zero. 3805 - A |Number| and |Float| are empty when their value is zero. 3806 - |v:false|, |v:none| and |v:null| are empty, |v:true| is not. 3807 - A |Job| is empty when it failed to start. 3808 - A |Channel| is empty when it is closed. 3809 - A |Blob| is empty when its length is zero. 3810 3811 For a long |List| this is much faster than comparing the 3812 length with zero. 3813 3814escape({string}, {chars}) *escape()* 3815 Escape the characters in {chars} that occur in {string} with a 3816 backslash. Example: > 3817 :echo escape('c:\program files\vim', ' \') 3818< results in: > 3819 c:\\program\ files\\vim 3820< Also see |shellescape()| and |fnameescape()|. 3821 3822 *eval()* 3823eval({string}) Evaluate {string} and return the result. Especially useful to 3824 turn the result of |string()| back into the original value. 3825 This works for Numbers, Floats, Strings, Blobs and composites 3826 of them. Also works for |Funcref|s that refer to existing 3827 functions. 3828 3829eventhandler() *eventhandler()* 3830 Returns 1 when inside an event handler. That is that Vim got 3831 interrupted while waiting for the user to type a character, 3832 e.g., when dropping a file on Vim. This means interactive 3833 commands cannot be used. Otherwise zero is returned. 3834 3835executable({expr}) *executable()* 3836 This function checks if an executable with the name {expr} 3837 exists. {expr} must be the name of the program without any 3838 arguments. 3839 executable() uses the value of $PATH and/or the normal 3840 searchpath for programs. *PATHEXT* 3841 On MS-DOS and MS-Windows the ".exe", ".bat", etc. can 3842 optionally be included. Then the extensions in $PATHEXT are 3843 tried. Thus if "foo.exe" does not exist, "foo.exe.bat" can be 3844 found. If $PATHEXT is not set then ".exe;.com;.bat;.cmd" is 3845 used. A dot by itself can be used in $PATHEXT to try using 3846 the name without an extension. When 'shell' looks like a 3847 Unix shell, then the name is also tried without adding an 3848 extension. 3849 On MS-DOS and MS-Windows it only checks if the file exists and 3850 is not a directory, not if it's really executable. 3851 On MS-Windows an executable in the same directory as Vim is 3852 always found. Since this directory is added to $PATH it 3853 should also work to execute it |win32-PATH|. 3854 The result is a Number: 3855 1 exists 3856 0 does not exist 3857 -1 not implemented on this system 3858 |exepath()| can be used to get the full path of an executable. 3859 3860execute({command} [, {silent}]) *execute()* 3861 Execute an Ex command or commands and return the output as a 3862 string. 3863 {command} can be a string or a List. In case of a List the 3864 lines are executed one by one. 3865 This is equivalent to: > 3866 redir => var 3867 {command} 3868 redir END 3869< 3870 The optional {silent} argument can have these values: 3871 "" no `:silent` used 3872 "silent" `:silent` used 3873 "silent!" `:silent!` used 3874 The default is "silent". Note that with "silent!", unlike 3875 `:redir`, error messages are dropped. When using an external 3876 command the screen may be messed up, use `system()` instead. 3877 *E930* 3878 It is not possible to use `:redir` anywhere in {command}. 3879 3880 To get a list of lines use |split()| on the result: > 3881 split(execute('args'), "\n") 3882 3883< When used recursively the output of the recursive call is not 3884 included in the output of the higher level call. 3885 3886exepath({expr}) *exepath()* 3887 If {expr} is an executable and is either an absolute path, a 3888 relative path or found in $PATH, return the full path. 3889 Note that the current directory is used when {expr} starts 3890 with "./", which may be a problem for Vim: > 3891 echo exepath(v:progpath) 3892< If {expr} cannot be found in $PATH or is not executable then 3893 an empty string is returned. 3894 3895 *exists()* 3896exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined, 3897 zero otherwise. 3898 3899 For checking for a supported feature use |has()|. 3900 For checking if a file exists use |filereadable()|. 3901 3902 The {expr} argument is a string, which contains one of these: 3903 &option-name Vim option (only checks if it exists, 3904 not if it really works) 3905 +option-name Vim option that works. 3906 $ENVNAME environment variable (could also be 3907 done by comparing with an empty 3908 string) 3909 *funcname built-in function (see |functions|) 3910 or user defined function (see 3911 |user-functions|). Also works for a 3912 variable that is a Funcref. 3913 varname internal variable (see 3914 |internal-variables|). Also works 3915 for |curly-braces-names|, |Dictionary| 3916 entries, |List| items, etc. Beware 3917 that evaluating an index may cause an 3918 error message for an invalid 3919 expression. E.g.: > 3920 :let l = [1, 2, 3] 3921 :echo exists("l[5]") 3922< 0 > 3923 :echo exists("l[xx]") 3924< E121: Undefined variable: xx 3925 0 3926 :cmdname Ex command: built-in command, user 3927 command or command modifier |:command|. 3928 Returns: 3929 1 for match with start of a command 3930 2 full match with a command 3931 3 matches several user commands 3932 To check for a supported command 3933 always check the return value to be 2. 3934 :2match The |:2match| command. 3935 :3match The |:3match| command. 3936 #event autocommand defined for this event 3937 #event#pattern autocommand defined for this event and 3938 pattern (the pattern is taken 3939 literally and compared to the 3940 autocommand patterns character by 3941 character) 3942 #group autocommand group exists 3943 #group#event autocommand defined for this group and 3944 event. 3945 #group#event#pattern 3946 autocommand defined for this group, 3947 event and pattern. 3948 ##event autocommand for this event is 3949 supported. 3950 3951 Examples: > 3952 exists("&shortname") 3953 exists("$HOSTNAME") 3954 exists("*strftime") 3955 exists("*s:MyFunc") 3956 exists("bufcount") 3957 exists(":Make") 3958 exists("#CursorHold") 3959 exists("#BufReadPre#*.gz") 3960 exists("#filetypeindent") 3961 exists("#filetypeindent#FileType") 3962 exists("#filetypeindent#FileType#*") 3963 exists("##ColorScheme") 3964< There must be no space between the symbol (&/$/*/#) and the 3965 name. 3966 There must be no extra characters after the name, although in 3967 a few cases this is ignored. That may become more strict in 3968 the future, thus don't count on it! 3969 Working example: > 3970 exists(":make") 3971< NOT working example: > 3972 exists(":make install") 3973 3974< Note that the argument must be a string, not the name of the 3975 variable itself. For example: > 3976 exists(bufcount) 3977< This doesn't check for existence of the "bufcount" variable, 3978 but gets the value of "bufcount", and checks if that exists. 3979 3980exp({expr}) *exp()* 3981 Return the exponential of {expr} as a |Float| in the range 3982 [0, inf]. 3983 {expr} must evaluate to a |Float| or a |Number|. 3984 Examples: > 3985 :echo exp(2) 3986< 7.389056 > 3987 :echo exp(-1) 3988< 0.367879 3989 {only available when compiled with the |+float| feature} 3990 3991 3992expand({expr} [, {nosuf} [, {list}]]) *expand()* 3993 Expand wildcards and the following special keywords in {expr}. 3994 'wildignorecase' applies. 3995 3996 If {list} is given and it is |TRUE|, a List will be returned. 3997 Otherwise the result is a String and when there are several 3998 matches, they are separated by <NL> characters. [Note: in 3999 version 5.0 a space was used, which caused problems when a 4000 file name contains a space] 4001 4002 If the expansion fails, the result is an empty string. A name 4003 for a non-existing file is not included, unless {expr} does 4004 not start with '%', '#' or '<', see below. 4005 4006 When {expr} starts with '%', '#' or '<', the expansion is done 4007 like for the |cmdline-special| variables with their associated 4008 modifiers. Here is a short overview: 4009 4010 % current file name 4011 # alternate file name 4012 #n alternate file name n 4013 <cfile> file name under the cursor 4014 <afile> autocmd file name 4015 <abuf> autocmd buffer number (as a String!) 4016 <amatch> autocmd matched name 4017 <sfile> sourced script file or function name 4018 <slnum> sourced script line number or function 4019 line number 4020 <sflnum> script file line number, also when in 4021 a function 4022 <cword> word under the cursor 4023 <cWORD> WORD under the cursor 4024 <client> the {clientid} of the last received 4025 message |server2client()| 4026 Modifiers: 4027 :p expand to full path 4028 :h head (last path component removed) 4029 :t tail (last path component only) 4030 :r root (one extension removed) 4031 :e extension only 4032 4033 Example: > 4034 :let &tags = expand("%:p:h") . "/tags" 4035< Note that when expanding a string that starts with '%', '#' or 4036 '<', any following text is ignored. This does NOT work: > 4037 :let doesntwork = expand("%:h.bak") 4038< Use this: > 4039 :let doeswork = expand("%:h") . ".bak" 4040< Also note that expanding "<cfile>" and others only returns the 4041 referenced file name without further expansion. If "<cfile>" 4042 is "~/.cshrc", you need to do another expand() to have the 4043 "~/" expanded into the path of the home directory: > 4044 :echo expand(expand("<cfile>")) 4045< 4046 There cannot be white space between the variables and the 4047 following modifier. The |fnamemodify()| function can be used 4048 to modify normal file names. 4049 4050 When using '%' or '#', and the current or alternate file name 4051 is not defined, an empty string is used. Using "%:p" in a 4052 buffer with no name, results in the current directory, with a 4053 '/' added. 4054 4055 When {expr} does not start with '%', '#' or '<', it is 4056 expanded like a file name is expanded on the command line. 4057 'suffixes' and 'wildignore' are used, unless the optional 4058 {nosuf} argument is given and it is |TRUE|. 4059 Names for non-existing files are included. The "**" item can 4060 be used to search in a directory tree. For example, to find 4061 all "README" files in the current directory and below: > 4062 :echo expand("**/README") 4063< 4064 Expand() can also be used to expand variables and environment 4065 variables that are only known in a shell. But this can be 4066 slow, because a shell may be used to do the expansion. See 4067 |expr-env-expand|. 4068 The expanded variable is still handled like a list of file 4069 names. When an environment variable cannot be expanded, it is 4070 left unchanged. Thus ":echo expand('$FOOBAR')" results in 4071 "$FOOBAR". 4072 4073 See |glob()| for finding existing files. See |system()| for 4074 getting the raw output of an external command. 4075 4076extend({expr1}, {expr2} [, {expr3}]) *extend()* 4077 {expr1} and {expr2} must be both |Lists| or both 4078 |Dictionaries|. 4079 4080 If they are |Lists|: Append {expr2} to {expr1}. 4081 If {expr3} is given insert the items of {expr2} before item 4082 {expr3} in {expr1}. When {expr3} is zero insert before the 4083 first item. When {expr3} is equal to len({expr1}) then 4084 {expr2} is appended. 4085 Examples: > 4086 :echo sort(extend(mylist, [7, 5])) 4087 :call extend(mylist, [2, 3], 1) 4088< When {expr1} is the same List as {expr2} then the number of 4089 items copied is equal to the original length of the List. 4090 E.g., when {expr3} is 1 you get N new copies of the first item 4091 (where N is the original length of the List). 4092 Use |add()| to concatenate one item to a list. To concatenate 4093 two lists into a new list use the + operator: > 4094 :let newlist = [1, 2, 3] + [4, 5] 4095< 4096 If they are |Dictionaries|: 4097 Add all entries from {expr2} to {expr1}. 4098 If a key exists in both {expr1} and {expr2} then {expr3} is 4099 used to decide what to do: 4100 {expr3} = "keep": keep the value of {expr1} 4101 {expr3} = "force": use the value of {expr2} 4102 {expr3} = "error": give an error message *E737* 4103 When {expr3} is omitted then "force" is assumed. 4104 4105 {expr1} is changed when {expr2} is not empty. If necessary 4106 make a copy of {expr1} first. 4107 {expr2} remains unchanged. 4108 When {expr1} is locked and {expr2} is not empty the operation 4109 fails. 4110 Returns {expr1}. 4111 4112 4113feedkeys({string} [, {mode}]) *feedkeys()* 4114 Characters in {string} are queued for processing as if they 4115 come from a mapping or were typed by the user. 4116 4117 By default the string is added to the end of the typeahead 4118 buffer, thus if a mapping is still being executed the 4119 characters come after them. Use the 'i' flag to insert before 4120 other characters, they will be executed next, before any 4121 characters from a mapping. 4122 4123 The function does not wait for processing of keys contained in 4124 {string}. 4125 4126 To include special keys into {string}, use double-quotes 4127 and "\..." notation |expr-quote|. For example, 4128 feedkeys("\<CR>") simulates pressing of the <Enter> key. But 4129 feedkeys('\<CR>') pushes 5 characters. 4130 4131 {mode} is a String, which can contain these character flags: 4132 'm' Remap keys. This is default. If {mode} is absent, 4133 keys are remapped. 4134 'n' Do not remap keys. 4135 't' Handle keys as if typed; otherwise they are handled as 4136 if coming from a mapping. This matters for undo, 4137 opening folds, etc. 4138 'L' Lowlevel input. Only works for Unix or when using the 4139 GUI. Keys are used as if they were coming from the 4140 terminal. Other flags are not used. *E980* 4141 'i' Insert the string instead of appending (see above). 4142 'x' Execute commands until typeahead is empty. This is 4143 similar to using ":normal!". You can call feedkeys() 4144 several times without 'x' and then one time with 'x' 4145 (possibly with an empty {string}) to execute all the 4146 typeahead. Note that when Vim ends in Insert mode it 4147 will behave as if <Esc> is typed, to avoid getting 4148 stuck, waiting for a character to be typed before the 4149 script continues. 4150 Note that if you manage to call feedkeys() while 4151 executing commands, thus calling it recursively, then 4152 all typehead will be consumed by the last call. 4153 '!' When used with 'x' will not end Insert mode. Can be 4154 used in a test when a timer is set to exit Insert mode 4155 a little later. Useful for testing CursorHoldI. 4156 4157 Return value is always 0. 4158 4159filereadable({file}) *filereadable()* 4160 The result is a Number, which is |TRUE| when a file with the 4161 name {file} exists, and can be read. If {file} doesn't exist, 4162 or is a directory, the result is |FALSE|. {file} is any 4163 expression, which is used as a String. 4164 If you don't care about the file being readable you can use 4165 |glob()|. 4166 *file_readable()* 4167 Obsolete name: file_readable(). 4168 4169 4170filewritable({file}) *filewritable()* 4171 The result is a Number, which is 1 when a file with the 4172 name {file} exists, and can be written. If {file} doesn't 4173 exist, or is not writable, the result is 0. If {file} is a 4174 directory, and we can write to it, the result is 2. 4175 4176 4177filter({expr1}, {expr2}) *filter()* 4178 {expr1} must be a |List| or a |Dictionary|. 4179 For each item in {expr1} evaluate {expr2} and when the result 4180 is zero remove the item from the |List| or |Dictionary|. 4181 {expr2} must be a |string| or |Funcref|. 4182 4183 If {expr2} is a |string|, inside {expr2} |v:val| has the value 4184 of the current item. For a |Dictionary| |v:key| has the key 4185 of the current item and for a |List| |v:key| has the index of 4186 the current item. 4187 Examples: > 4188 call filter(mylist, 'v:val !~ "OLD"') 4189< Removes the items where "OLD" appears. > 4190 call filter(mydict, 'v:key >= 8') 4191< Removes the items with a key below 8. > 4192 call filter(var, 0) 4193< Removes all the items, thus clears the |List| or |Dictionary|. 4194 4195 Note that {expr2} is the result of expression and is then 4196 used as an expression again. Often it is good to use a 4197 |literal-string| to avoid having to double backslashes. 4198 4199 If {expr2} is a |Funcref| it must take two arguments: 4200 1. the key or the index of the current item. 4201 2. the value of the current item. 4202 The function must return |TRUE| if the item should be kept. 4203 Example that keeps the odd items of a list: > 4204 func Odd(idx, val) 4205 return a:idx % 2 == 1 4206 endfunc 4207 call filter(mylist, function('Odd')) 4208< It is shorter when using a |lambda|: > 4209 call filter(myList, {idx, val -> idx * val <= 42}) 4210< If you do not use "val" you can leave it out: > 4211 call filter(myList, {idx -> idx % 2 == 1}) 4212< 4213 The operation is done in-place. If you want a |List| or 4214 |Dictionary| to remain unmodified make a copy first: > 4215 :let l = filter(copy(mylist), 'v:val =~ "KEEP"') 4216 4217< Returns {expr1}, the |List| or |Dictionary| that was filtered. 4218 When an error is encountered while evaluating {expr2} no 4219 further items in {expr1} are processed. When {expr2} is a 4220 Funcref errors inside a function are ignored, unless it was 4221 defined with the "abort" flag. 4222 4223 4224finddir({name} [, {path} [, {count}]]) *finddir()* 4225 Find directory {name} in {path}. Supports both downwards and 4226 upwards recursive directory searches. See |file-searching| 4227 for the syntax of {path}. 4228 Returns the path of the first found match. When the found 4229 directory is below the current directory a relative path is 4230 returned. Otherwise a full path is returned. 4231 If {path} is omitted or empty then 'path' is used. 4232 If the optional {count} is given, find {count}'s occurrence of 4233 {name} in {path} instead of the first one. 4234 When {count} is negative return all the matches in a |List|. 4235 This is quite similar to the ex-command |:find|. 4236 {only available when compiled with the |+file_in_path| 4237 feature} 4238 4239findfile({name} [, {path} [, {count}]]) *findfile()* 4240 Just like |finddir()|, but find a file instead of a directory. 4241 Uses 'suffixesadd'. 4242 Example: > 4243 :echo findfile("tags.vim", ".;") 4244< Searches from the directory of the current file upwards until 4245 it finds the file "tags.vim". 4246 4247float2nr({expr}) *float2nr()* 4248 Convert {expr} to a Number by omitting the part after the 4249 decimal point. 4250 {expr} must evaluate to a |Float| or a Number. 4251 When the value of {expr} is out of range for a |Number| the 4252 result is truncated to 0x7fffffff or -0x7fffffff (or when 4253 64-bit Number support is enabled, 0x7fffffffffffffff or 4254 -0x7fffffffffffffff). NaN results in -0x80000000 (or when 4255 64-bit Number support is enabled, -0x8000000000000000). 4256 Examples: > 4257 echo float2nr(3.95) 4258< 3 > 4259 echo float2nr(-23.45) 4260< -23 > 4261 echo float2nr(1.0e100) 4262< 2147483647 (or 9223372036854775807) > 4263 echo float2nr(-1.0e150) 4264< -2147483647 (or -9223372036854775807) > 4265 echo float2nr(1.0e-100) 4266< 0 4267 {only available when compiled with the |+float| feature} 4268 4269 4270floor({expr}) *floor()* 4271 Return the largest integral value less than or equal to 4272 {expr} as a |Float| (round down). 4273 {expr} must evaluate to a |Float| or a |Number|. 4274 Examples: > 4275 echo floor(1.856) 4276< 1.0 > 4277 echo floor(-5.456) 4278< -6.0 > 4279 echo floor(4.0) 4280< 4.0 4281 {only available when compiled with the |+float| feature} 4282 4283 4284fmod({expr1}, {expr2}) *fmod()* 4285 Return the remainder of {expr1} / {expr2}, even if the 4286 division is not representable. Returns {expr1} - i * {expr2} 4287 for some integer i such that if {expr2} is non-zero, the 4288 result has the same sign as {expr1} and magnitude less than 4289 the magnitude of {expr2}. If {expr2} is zero, the value 4290 returned is zero. The value returned is a |Float|. 4291 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 4292 Examples: > 4293 :echo fmod(12.33, 1.22) 4294< 0.13 > 4295 :echo fmod(-12.33, 1.22) 4296< -0.13 4297 {only available when compiled with |+float| feature} 4298 4299 4300fnameescape({string}) *fnameescape()* 4301 Escape {string} for use as file name command argument. All 4302 characters that have a special meaning, such as '%' and '|' 4303 are escaped with a backslash. 4304 For most systems the characters escaped are 4305 " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash 4306 appears in a filename, it depends on the value of 'isfname'. 4307 A leading '+' and '>' is also escaped (special after |:edit| 4308 and |:write|). And a "-" by itself (special after |:cd|). 4309 Example: > 4310 :let fname = '+some str%nge|name' 4311 :exe "edit " . fnameescape(fname) 4312< results in executing: > 4313 edit \+some\ str\%nge\|name 4314 4315fnamemodify({fname}, {mods}) *fnamemodify()* 4316 Modify file name {fname} according to {mods}. {mods} is a 4317 string of characters like it is used for file names on the 4318 command line. See |filename-modifiers|. 4319 Example: > 4320 :echo fnamemodify("main.c", ":p:h") 4321< results in: > 4322 /home/mool/vim/vim/src 4323< Note: Environment variables don't work in {fname}, use 4324 |expand()| first then. 4325 4326foldclosed({lnum}) *foldclosed()* 4327 The result is a Number. If the line {lnum} is in a closed 4328 fold, the result is the number of the first line in that fold. 4329 If the line {lnum} is not in a closed fold, -1 is returned. 4330 4331foldclosedend({lnum}) *foldclosedend()* 4332 The result is a Number. If the line {lnum} is in a closed 4333 fold, the result is the number of the last line in that fold. 4334 If the line {lnum} is not in a closed fold, -1 is returned. 4335 4336foldlevel({lnum}) *foldlevel()* 4337 The result is a Number, which is the foldlevel of line {lnum} 4338 in the current buffer. For nested folds the deepest level is 4339 returned. If there is no fold at line {lnum}, zero is 4340 returned. It doesn't matter if the folds are open or closed. 4341 When used while updating folds (from 'foldexpr') -1 is 4342 returned for lines where folds are still to be updated and the 4343 foldlevel is unknown. As a special case the level of the 4344 previous line is usually available. 4345 4346 *foldtext()* 4347foldtext() Returns a String, to be displayed for a closed fold. This is 4348 the default function used for the 'foldtext' option and should 4349 only be called from evaluating 'foldtext'. It uses the 4350 |v:foldstart|, |v:foldend| and |v:folddashes| variables. 4351 The returned string looks like this: > 4352 +-- 45 lines: abcdef 4353< The number of leading dashes depends on the foldlevel. The 4354 "45" is the number of lines in the fold. "abcdef" is the text 4355 in the first non-blank line of the fold. Leading white space, 4356 "//" or "/*" and the text from the 'foldmarker' and 4357 'commentstring' options is removed. 4358 When used to draw the actual foldtext, the rest of the line 4359 will be filled with the fold char from the 'fillchars' 4360 setting. 4361 {not available when compiled without the |+folding| feature} 4362 4363foldtextresult({lnum}) *foldtextresult()* 4364 Returns the text that is displayed for the closed fold at line 4365 {lnum}. Evaluates 'foldtext' in the appropriate context. 4366 When there is no closed fold at {lnum} an empty string is 4367 returned. 4368 {lnum} is used like with |getline()|. Thus "." is the current 4369 line, "'m" mark m, etc. 4370 Useful when exporting folded text, e.g., to HTML. 4371 {not available when compiled without the |+folding| feature} 4372 4373 *foreground()* 4374foreground() Move the Vim window to the foreground. Useful when sent from 4375 a client to a Vim server. |remote_send()| 4376 On Win32 systems this might not work, the OS does not always 4377 allow a window to bring itself to the foreground. Use 4378 |remote_foreground()| instead. 4379 {only in the Win32, Athena, Motif and GTK GUI versions and the 4380 Win32 console version} 4381 4382 *funcref()* 4383funcref({name} [, {arglist}] [, {dict}]) 4384 Just like |function()|, but the returned Funcref will lookup 4385 the function by reference, not by name. This matters when the 4386 function {name} is redefined later. 4387 4388 Unlike |function()|, {name} must be an existing user function. 4389 Also for autoloaded functions. {name} cannot be a builtin 4390 function. 4391 4392 *function()* *E700* *E922* *E923* 4393function({name} [, {arglist}] [, {dict}]) 4394 Return a |Funcref| variable that refers to function {name}. 4395 {name} can be the name of a user defined function or an 4396 internal function. 4397 4398 {name} can also be a Funcref or a partial. When it is a 4399 partial the dict stored in it will be used and the {dict} 4400 argument is not allowed. E.g.: > 4401 let FuncWithArg = function(dict.Func, [arg]) 4402 let Broken = function(dict.Func, [arg], dict) 4403< 4404 When using the Funcref the function will be found by {name}, 4405 also when it was redefined later. Use |funcref()| to keep the 4406 same function. 4407 4408 When {arglist} or {dict} is present this creates a partial. 4409 That means the argument list and/or the dictionary is stored in 4410 the Funcref and will be used when the Funcref is called. 4411 4412 The arguments are passed to the function in front of other 4413 arguments. Example: > 4414 func Callback(arg1, arg2, name) 4415 ... 4416 let Func = function('Callback', ['one', 'two']) 4417 ... 4418 call Func('name') 4419< Invokes the function as with: > 4420 call Callback('one', 'two', 'name') 4421 4422< The function() call can be nested to add more arguments to the 4423 Funcref. The extra arguments are appended to the list of 4424 arguments. Example: > 4425 func Callback(arg1, arg2, name) 4426 ... 4427 let Func = function('Callback', ['one']) 4428 let Func2 = function(Func, ['two']) 4429 ... 4430 call Func2('name') 4431< Invokes the function as with: > 4432 call Callback('one', 'two', 'name') 4433 4434< The Dictionary is only useful when calling a "dict" function. 4435 In that case the {dict} is passed in as "self". Example: > 4436 function Callback() dict 4437 echo "called for " . self.name 4438 endfunction 4439 ... 4440 let context = {"name": "example"} 4441 let Func = function('Callback', context) 4442 ... 4443 call Func() " will echo: called for example 4444< The use of function() is not needed when there are no extra 4445 arguments, these two are equivalent: > 4446 let Func = function('Callback', context) 4447 let Func = context.Callback 4448 4449< The argument list and the Dictionary can be combined: > 4450 function Callback(arg1, count) dict 4451 ... 4452 let context = {"name": "example"} 4453 let Func = function('Callback', ['one'], context) 4454 ... 4455 call Func(500) 4456< Invokes the function as with: > 4457 call context.Callback('one', 500) 4458 4459 4460garbagecollect([{atexit}]) *garbagecollect()* 4461 Cleanup unused |Lists|, |Dictionaries|, |Channels| and |Jobs| 4462 that have circular references. 4463 4464 There is hardly ever a need to invoke this function, as it is 4465 automatically done when Vim runs out of memory or is waiting 4466 for the user to press a key after 'updatetime'. Items without 4467 circular references are always freed when they become unused. 4468 This is useful if you have deleted a very big |List| and/or 4469 |Dictionary| with circular references in a script that runs 4470 for a long time. 4471 4472 When the optional {atexit} argument is one, garbage 4473 collection will also be done when exiting Vim, if it wasn't 4474 done before. This is useful when checking for memory leaks. 4475 4476 The garbage collection is not done immediately but only when 4477 it's safe to perform. This is when waiting for the user to 4478 type a character. To force garbage collection immediately use 4479 |test_garbagecollect_now()|. 4480 4481get({list}, {idx} [, {default}]) *get()* 4482 Get item {idx} from |List| {list}. When this item is not 4483 available return {default}. Return zero when {default} is 4484 omitted. 4485get({blob}, {idx} [, {default}]) 4486 Get byte {idx} from |Blob| {blob}. When this byte is not 4487 available return {default}. Return -1 when {default} is 4488 omitted. 4489get({dict}, {key} [, {default}]) 4490 Get item with key {key} from |Dictionary| {dict}. When this 4491 item is not available return {default}. Return zero when 4492 {default} is omitted. 4493get({func}, {what}) 4494 Get an item with from Funcref {func}. Possible values for 4495 {what} are: 4496 "name" The function name 4497 "func" The function 4498 "dict" The dictionary 4499 "args" The list with arguments 4500 4501 *getbufinfo()* 4502getbufinfo([{expr}]) 4503getbufinfo([{dict}]) 4504 Get information about buffers as a List of Dictionaries. 4505 4506 Without an argument information about all the buffers is 4507 returned. 4508 4509 When the argument is a Dictionary only the buffers matching 4510 the specified criteria are returned. The following keys can 4511 be specified in {dict}: 4512 buflisted include only listed buffers. 4513 bufloaded include only loaded buffers. 4514 bufmodified include only modified buffers. 4515 4516 Otherwise, {expr} specifies a particular buffer to return 4517 information for. For the use of {expr}, see |bufname()| 4518 above. If the buffer is found the returned List has one item. 4519 Otherwise the result is an empty list. 4520 4521 Each returned List item is a dictionary with the following 4522 entries: 4523 bufnr buffer number. 4524 changed TRUE if the buffer is modified. 4525 changedtick number of changes made to the buffer. 4526 hidden TRUE if the buffer is hidden. 4527 listed TRUE if the buffer is listed. 4528 lnum current line number in buffer. 4529 loaded TRUE if the buffer is loaded. 4530 name full path to the file in the buffer. 4531 signs list of signs placed in the buffer. 4532 Each list item is a dictionary with 4533 the following fields: 4534 id sign identifier 4535 lnum line number 4536 name sign name 4537 variables a reference to the dictionary with 4538 buffer-local variables. 4539 windows list of |window-ID|s that display this 4540 buffer 4541 4542 Examples: > 4543 for buf in getbufinfo() 4544 echo buf.name 4545 endfor 4546 for buf in getbufinfo({'buflisted':1}) 4547 if buf.changed 4548 .... 4549 endif 4550 endfor 4551< 4552 To get buffer-local options use: > 4553 getbufvar({bufnr}, '&option_name') 4554 4555< 4556 *getbufline()* 4557getbufline({expr}, {lnum} [, {end}]) 4558 Return a |List| with the lines starting from {lnum} to {end} 4559 (inclusive) in the buffer {expr}. If {end} is omitted, a 4560 |List| with only the line {lnum} is returned. 4561 4562 For the use of {expr}, see |bufname()| above. 4563 4564 For {lnum} and {end} "$" can be used for the last line of the 4565 buffer. Otherwise a number must be used. 4566 4567 When {lnum} is smaller than 1 or bigger than the number of 4568 lines in the buffer, an empty |List| is returned. 4569 4570 When {end} is greater than the number of lines in the buffer, 4571 it is treated as {end} is set to the number of lines in the 4572 buffer. When {end} is before {lnum} an empty |List| is 4573 returned. 4574 4575 This function works only for loaded buffers. For unloaded and 4576 non-existing buffers, an empty |List| is returned. 4577 4578 Example: > 4579 :let lines = getbufline(bufnr("myfile"), 1, "$") 4580 4581getbufvar({expr}, {varname} [, {def}]) *getbufvar()* 4582 The result is the value of option or local buffer variable 4583 {varname} in buffer {expr}. Note that the name without "b:" 4584 must be used. 4585 When {varname} is empty returns a dictionary with all the 4586 buffer-local variables. 4587 When {varname} is equal to "&" returns a dictionary with all 4588 the buffer-local options. 4589 Otherwise, when {varname} starts with "&" returns the value of 4590 a buffer-local option. 4591 This also works for a global or buffer-local option, but it 4592 doesn't work for a global variable, window-local variable or 4593 window-local option. 4594 For the use of {expr}, see |bufname()| above. 4595 When the buffer or variable doesn't exist {def} or an empty 4596 string is returned, there is no error message. 4597 Examples: > 4598 :let bufmodified = getbufvar(1, "&mod") 4599 :echo "todo myvar = " . getbufvar("todo", "myvar") 4600< 4601getchangelist({expr}) *getchangelist()* 4602 Returns the |changelist| for the buffer {expr}. For the use 4603 of {expr}, see |bufname()| above. If buffer {expr} doesn't 4604 exist, an empty list is returned. 4605 4606 The returned list contains two entries: a list with the change 4607 locations and the current position in the list. Each 4608 entry in the change list is a dictionary with the following 4609 entries: 4610 col column number 4611 coladd column offset for 'virtualedit' 4612 lnum line number 4613 If buffer {expr} is the current buffer, then the current 4614 position refers to the position in the list. For other 4615 buffers, it is set to the length of the list. 4616 4617getchar([expr]) *getchar()* 4618 Get a single character from the user or input stream. 4619 If [expr] is omitted, wait until a character is available. 4620 If [expr] is 0, only get a character when one is available. 4621 Return zero otherwise. 4622 If [expr] is 1, only check if a character is available, it is 4623 not consumed. Return zero if no character available. 4624 4625 Without [expr] and when [expr] is 0 a whole character or 4626 special key is returned. If it is a single character, the 4627 result is a number. Use nr2char() to convert it to a String. 4628 Otherwise a String is returned with the encoded character. 4629 For a special key it's a String with a sequence of bytes 4630 starting with 0x80 (decimal: 128). This is the same value as 4631 the String "\<Key>", e.g., "\<Left>". The returned value is 4632 also a String when a modifier (shift, control, alt) was used 4633 that is not included in the character. 4634 4635 When [expr] is 0 and Esc is typed, there will be a short delay 4636 while Vim waits to see if this is the start of an escape 4637 sequence. 4638 4639 When [expr] is 1 only the first byte is returned. For a 4640 one-byte character it is the character itself as a number. 4641 Use nr2char() to convert it to a String. 4642 4643 Use getcharmod() to obtain any additional modifiers. 4644 4645 When the user clicks a mouse button, the mouse event will be 4646 returned. The position can then be found in |v:mouse_col|, 4647 |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|. This 4648 example positions the mouse as it would normally happen: > 4649 let c = getchar() 4650 if c == "\<LeftMouse>" && v:mouse_win > 0 4651 exe v:mouse_win . "wincmd w" 4652 exe v:mouse_lnum 4653 exe "normal " . v:mouse_col . "|" 4654 endif 4655< 4656 When using bracketed paste only the first character is 4657 returned, the rest of the pasted text is dropped. 4658 |xterm-bracketed-paste|. 4659 4660 There is no prompt, you will somehow have to make clear to the 4661 user that a character has to be typed. 4662 There is no mapping for the character. 4663 Key codes are replaced, thus when the user presses the <Del> 4664 key you get the code for the <Del> key, not the raw character 4665 sequence. Examples: > 4666 getchar() == "\<Del>" 4667 getchar() == "\<S-Left>" 4668< This example redefines "f" to ignore case: > 4669 :nmap f :call FindChar()<CR> 4670 :function FindChar() 4671 : let c = nr2char(getchar()) 4672 : while col('.') < col('$') - 1 4673 : normal l 4674 : if getline('.')[col('.') - 1] ==? c 4675 : break 4676 : endif 4677 : endwhile 4678 :endfunction 4679< 4680 You may also receive synthetic characters, such as 4681 |<CursorHold>|. Often you will want to ignore this and get 4682 another character: > 4683 :function GetKey() 4684 : let c = getchar() 4685 : while c == "\<CursorHold>" 4686 : let c = getchar() 4687 : endwhile 4688 : return c 4689 :endfunction 4690 4691getcharmod() *getcharmod()* 4692 The result is a Number which is the state of the modifiers for 4693 the last obtained character with getchar() or in another way. 4694 These values are added together: 4695 2 shift 4696 4 control 4697 8 alt (meta) 4698 16 meta (when it's different from ALT) 4699 32 mouse double click 4700 64 mouse triple click 4701 96 mouse quadruple click (== 32 + 64) 4702 128 command (Macintosh only) 4703 Only the modifiers that have not been included in the 4704 character itself are obtained. Thus Shift-a results in "A" 4705 without a modifier. 4706 4707getcharsearch() *getcharsearch()* 4708 Return the current character search information as a {dict} 4709 with the following entries: 4710 4711 char character previously used for a character 4712 search (|t|, |f|, |T|, or |F|); empty string 4713 if no character search has been performed 4714 forward direction of character search; 1 for forward, 4715 0 for backward 4716 until type of character search; 1 for a |t| or |T| 4717 character search, 0 for an |f| or |F| 4718 character search 4719 4720 This can be useful to always have |;| and |,| search 4721 forward/backward regardless of the direction of the previous 4722 character search: > 4723 :nnoremap <expr> ; getcharsearch().forward ? ';' : ',' 4724 :nnoremap <expr> , getcharsearch().forward ? ',' : ';' 4725< Also see |setcharsearch()|. 4726 4727getcmdline() *getcmdline()* 4728 Return the current command-line. Only works when the command 4729 line is being edited, thus requires use of |c_CTRL-\_e| or 4730 |c_CTRL-R_=|. 4731 Example: > 4732 :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR> 4733< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|. 4734 Returns an empty string when entering a password or using 4735 |inputsecret()|. 4736 4737getcmdpos() *getcmdpos()* 4738 Return the position of the cursor in the command line as a 4739 byte count. The first column is 1. 4740 Only works when editing the command line, thus requires use of 4741 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 4742 Returns 0 otherwise. 4743 Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|. 4744 4745getcmdtype() *getcmdtype()* 4746 Return the current command-line type. Possible return values 4747 are: 4748 : normal Ex command 4749 > debug mode command |debug-mode| 4750 / forward search command 4751 ? backward search command 4752 @ |input()| command 4753 - |:insert| or |:append| command 4754 = |i_CTRL-R_=| 4755 Only works when editing the command line, thus requires use of 4756 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 4757 Returns an empty string otherwise. 4758 Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|. 4759 4760getcmdwintype() *getcmdwintype()* 4761 Return the current |command-line-window| type. Possible return 4762 values are the same as |getcmdtype()|. Returns an empty string 4763 when not in the command-line window. 4764 4765getcompletion({pat}, {type} [, {filtered}]) *getcompletion()* 4766 Return a list of command-line completion matches. {type} 4767 specifies what for. The following completion types are 4768 supported: 4769 4770 arglist file names in argument list 4771 augroup autocmd groups 4772 buffer buffer names 4773 behave :behave suboptions 4774 color color schemes 4775 command Ex command (and arguments) 4776 compiler compilers 4777 cscope |:cscope| suboptions 4778 dir directory names 4779 environment environment variable names 4780 event autocommand events 4781 expression Vim expression 4782 file file and directory names 4783 file_in_path file and directory names in |'path'| 4784 filetype filetype names |'filetype'| 4785 function function name 4786 help help subjects 4787 highlight highlight groups 4788 history :history suboptions 4789 locale locale names (as output of locale -a) 4790 mapclear buffer argument 4791 mapping mapping name 4792 menu menus 4793 messages |:messages| suboptions 4794 option options 4795 packadd optional package |pack-add| names 4796 shellcmd Shell command 4797 sign |:sign| suboptions 4798 syntax syntax file names |'syntax'| 4799 syntime |:syntime| suboptions 4800 tag tags 4801 tag_listfiles tags, file names 4802 user user names 4803 var user variables 4804 4805 If {pat} is an empty string, then all the matches are returned. 4806 Otherwise only items matching {pat} are returned. See 4807 |wildcards| for the use of special characters in {pat}. 4808 4809 If the optional {filtered} flag is set to 1, then 'wildignore' 4810 is applied to filter the results. Otherwise all the matches 4811 are returned. The 'wildignorecase' option always applies. 4812 4813 If there are no matches, an empty list is returned. An 4814 invalid value for {type} produces an error. 4815 4816 *getcurpos()* 4817getcurpos() Get the position of the cursor. This is like getpos('.'), but 4818 includes an extra item in the list: 4819 [bufnum, lnum, col, off, curswant] ~ 4820 The "curswant" number is the preferred column when moving the 4821 cursor vertically. Also see |getpos()|. 4822 4823 This can be used to save and restore the cursor position: > 4824 let save_cursor = getcurpos() 4825 MoveTheCursorAround 4826 call setpos('.', save_cursor) 4827< Note that this only works within the window. See 4828 |winrestview()| for restoring more state. 4829 *getcwd()* 4830getcwd([{winnr} [, {tabnr}]]) 4831 The result is a String, which is the name of the current 4832 working directory. 4833 4834 With {winnr} return the local current directory of this window 4835 in the current tab page. {winnr} can be the window number or 4836 the |window-ID|. 4837 If {winnr} is -1 return the name of the global working 4838 directory. See also |haslocaldir()|. 4839 4840 With {winnr} and {tabnr} return the local current directory of 4841 the window in the specified tab page. 4842 Return an empty string if the arguments are invalid. 4843 4844getfsize({fname}) *getfsize()* 4845 The result is a Number, which is the size in bytes of the 4846 given file {fname}. 4847 If {fname} is a directory, 0 is returned. 4848 If the file {fname} can't be found, -1 is returned. 4849 If the size of {fname} is too big to fit in a Number then -2 4850 is returned. 4851 4852getfontname([{name}]) *getfontname()* 4853 Without an argument returns the name of the normal font being 4854 used. Like what is used for the Normal highlight group 4855 |hl-Normal|. 4856 With an argument a check is done whether {name} is a valid 4857 font name. If not then an empty string is returned. 4858 Otherwise the actual font name is returned, or {name} if the 4859 GUI does not support obtaining the real name. 4860 Only works when the GUI is running, thus not in your vimrc or 4861 gvimrc file. Use the |GUIEnter| autocommand to use this 4862 function just after the GUI has started. 4863 Note that the GTK GUI accepts any font name, thus checking for 4864 a valid name does not work. 4865 4866getfperm({fname}) *getfperm()* 4867 The result is a String, which is the read, write, and execute 4868 permissions of the given file {fname}. 4869 If {fname} does not exist or its directory cannot be read, an 4870 empty string is returned. 4871 The result is of the form "rwxrwxrwx", where each group of 4872 "rwx" flags represent, in turn, the permissions of the owner 4873 of the file, the group the file belongs to, and other users. 4874 If a user does not have a given permission the flag for this 4875 is replaced with the string "-". Examples: > 4876 :echo getfperm("/etc/passwd") 4877 :echo getfperm(expand("~/.vimrc")) 4878< This will hopefully (from a security point of view) display 4879 the string "rw-r--r--" or even "rw-------". 4880 4881 For setting permissions use |setfperm()|. 4882 4883getftime({fname}) *getftime()* 4884 The result is a Number, which is the last modification time of 4885 the given file {fname}. The value is measured as seconds 4886 since 1st Jan 1970, and may be passed to strftime(). See also 4887 |localtime()| and |strftime()|. 4888 If the file {fname} can't be found -1 is returned. 4889 4890getftype({fname}) *getftype()* 4891 The result is a String, which is a description of the kind of 4892 file of the given file {fname}. 4893 If {fname} does not exist an empty string is returned. 4894 Here is a table over different kinds of files and their 4895 results: 4896 Normal file "file" 4897 Directory "dir" 4898 Symbolic link "link" 4899 Block device "bdev" 4900 Character device "cdev" 4901 Socket "socket" 4902 FIFO "fifo" 4903 All other "other" 4904 Example: > 4905 getftype("/home") 4906< Note that a type such as "link" will only be returned on 4907 systems that support it. On some systems only "dir" and 4908 "file" are returned. On MS-Windows a symbolic link to a 4909 directory returns "dir" instead of "link". 4910 4911getjumplist([{winnr} [, {tabnr}]]) *getjumplist()* 4912 Returns the |jumplist| for the specified window. 4913 4914 Without arguments use the current window. 4915 With {winnr} only use this window in the current tab page. 4916 {winnr} can also be a |window-ID|. 4917 With {winnr} and {tabnr} use the window in the specified tab 4918 page. 4919 4920 The returned list contains two entries: a list with the jump 4921 locations and the last used jump position number in the list. 4922 Each entry in the jump location list is a dictionary with 4923 the following entries: 4924 bufnr buffer number 4925 col column number 4926 coladd column offset for 'virtualedit' 4927 filename filename if available 4928 lnum line number 4929 4930 *getline()* 4931getline({lnum} [, {end}]) 4932 Without {end} the result is a String, which is line {lnum} 4933 from the current buffer. Example: > 4934 getline(1) 4935< When {lnum} is a String that doesn't start with a 4936 digit, |line()| is called to translate the String into a Number. 4937 To get the line under the cursor: > 4938 getline(".") 4939< When {lnum} is smaller than 1 or bigger than the number of 4940 lines in the buffer, an empty string is returned. 4941 4942 When {end} is given the result is a |List| where each item is 4943 a line from the current buffer in the range {lnum} to {end}, 4944 including line {end}. 4945 {end} is used in the same way as {lnum}. 4946 Non-existing lines are silently omitted. 4947 When {end} is before {lnum} an empty |List| is returned. 4948 Example: > 4949 :let start = line('.') 4950 :let end = search("^$") - 1 4951 :let lines = getline(start, end) 4952 4953< To get lines from another buffer see |getbufline()| 4954 4955getloclist({nr} [, {what}]) *getloclist()* 4956 Returns a list with all the entries in the location list for 4957 window {nr}. {nr} can be the window number or the |window-ID|. 4958 When {nr} is zero the current window is used. 4959 4960 For a location list window, the displayed location list is 4961 returned. For an invalid window number {nr}, an empty list is 4962 returned. Otherwise, same as |getqflist()|. 4963 4964 If the optional {what} dictionary argument is supplied, then 4965 returns the items listed in {what} as a dictionary. Refer to 4966 |getqflist()| for the supported items in {what}. 4967 If {what} contains 'filewinid', then returns the id of the 4968 window used to display files from the location list. This 4969 field is applicable only when called from a location list 4970 window. See |location-list-file-window| for more details. 4971 4972getmatches() *getmatches()* 4973 Returns a |List| with all matches previously defined by 4974 |matchadd()| and the |:match| commands. |getmatches()| is 4975 useful in combination with |setmatches()|, as |setmatches()| 4976 can restore a list of matches saved by |getmatches()|. 4977 Example: > 4978 :echo getmatches() 4979< [{'group': 'MyGroup1', 'pattern': 'TODO', 4980 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 4981 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 4982 :let m = getmatches() 4983 :call clearmatches() 4984 :echo getmatches() 4985< [] > 4986 :call setmatches(m) 4987 :echo getmatches() 4988< [{'group': 'MyGroup1', 'pattern': 'TODO', 4989 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 4990 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 4991 :unlet m 4992< 4993 *getpid()* 4994getpid() Return a Number which is the process ID of the Vim process. 4995 On Unix and MS-Windows this is a unique number, until Vim 4996 exits. On MS-DOS it's always zero. 4997 4998 *getpos()* 4999getpos({expr}) Get the position for {expr}. For possible values of {expr} 5000 see |line()|. For getting the cursor position see 5001 |getcurpos()|. 5002 The result is a |List| with four numbers: 5003 [bufnum, lnum, col, off] 5004 "bufnum" is zero, unless a mark like '0 or 'A is used, then it 5005 is the buffer number of the mark. 5006 "lnum" and "col" are the position in the buffer. The first 5007 column is 1. 5008 The "off" number is zero, unless 'virtualedit' is used. Then 5009 it is the offset in screen columns from the start of the 5010 character. E.g., a position within a <Tab> or after the last 5011 character. 5012 Note that for '< and '> Visual mode matters: when it is "V" 5013 (visual line mode) the column of '< is zero and the column of 5014 '> is a large number. 5015 This can be used to save and restore the position of a mark: > 5016 let save_a_mark = getpos("'a") 5017 ... 5018 call setpos("'a", save_a_mark) 5019< Also see |getcurpos()| and |setpos()|. 5020 5021 5022getqflist([{what}]) *getqflist()* 5023 Returns a list with all the current quickfix errors. Each 5024 list item is a dictionary with these entries: 5025 bufnr number of buffer that has the file name, use 5026 bufname() to get the name 5027 module module name 5028 lnum line number in the buffer (first line is 1) 5029 col column number (first column is 1) 5030 vcol |TRUE|: "col" is visual column 5031 |FALSE|: "col" is byte index 5032 nr error number 5033 pattern search pattern used to locate the error 5034 text description of the error 5035 type type of the error, 'E', '1', etc. 5036 valid |TRUE|: recognized error message 5037 5038 When there is no error list or it's empty, an empty list is 5039 returned. Quickfix list entries with non-existing buffer 5040 number are returned with "bufnr" set to zero. 5041 5042 Useful application: Find pattern matches in multiple files and 5043 do something with them: > 5044 :vimgrep /theword/jg *.c 5045 :for d in getqflist() 5046 : echo bufname(d.bufnr) ':' d.lnum '=' d.text 5047 :endfor 5048< 5049 If the optional {what} dictionary argument is supplied, then 5050 returns only the items listed in {what} as a dictionary. The 5051 following string items are supported in {what}: 5052 changedtick get the total number of changes made 5053 to the list |quickfix-changedtick| 5054 context get the |quickfix-context| 5055 efm errorformat to use when parsing "lines". If 5056 not present, then the 'errorformat' option 5057 value is used. 5058 id get information for the quickfix list with 5059 |quickfix-ID|; zero means the id for the 5060 current list or the list specified by "nr" 5061 idx index of the current entry in the quickfix 5062 list specified by 'id' or 'nr'. 5063 See |quickfix-index| 5064 items quickfix list entries 5065 lines parse a list of lines using 'efm' and return 5066 the resulting entries. Only a |List| type is 5067 accepted. The current quickfix list is not 5068 modified. See |quickfix-parse|. 5069 nr get information for this quickfix list; zero 5070 means the current quickfix list and "$" means 5071 the last quickfix list 5072 size number of entries in the quickfix list 5073 title get the list title |quickfix-title| 5074 winid get the quickfix |window-ID| 5075 all all of the above quickfix properties 5076 Non-string items in {what} are ignored. To get the value of a 5077 particular item, set it to zero. 5078 If "nr" is not present then the current quickfix list is used. 5079 If both "nr" and a non-zero "id" are specified, then the list 5080 specified by "id" is used. 5081 To get the number of lists in the quickfix stack, set "nr" to 5082 "$" in {what}. The "nr" value in the returned dictionary 5083 contains the quickfix stack size. 5084 When "lines" is specified, all the other items except "efm" 5085 are ignored. The returned dictionary contains the entry 5086 "items" with the list of entries. 5087 5088 The returned dictionary contains the following entries: 5089 changedtick total number of changes made to the 5090 list |quickfix-changedtick| 5091 context quickfix list context. See |quickfix-context| 5092 If not present, set to "". 5093 id quickfix list ID |quickfix-ID|. If not 5094 present, set to 0. 5095 idx index of the current entry in the list. If not 5096 present, set to 0. 5097 items quickfix list entries. If not present, set to 5098 an empty list. 5099 nr quickfix list number. If not present, set to 0 5100 size number of entries in the quickfix list. If not 5101 present, set to 0. 5102 title quickfix list title text. If not present, set 5103 to "". 5104 winid quickfix |window-ID|. If not present, set to 0 5105 5106 Examples (See also |getqflist-examples|): > 5107 :echo getqflist({'all': 1}) 5108 :echo getqflist({'nr': 2, 'title': 1}) 5109 :echo getqflist({'lines' : ["F1:10:L10"]}) 5110< 5111getreg([{regname} [, 1 [, {list}]]]) *getreg()* 5112 The result is a String, which is the contents of register 5113 {regname}. Example: > 5114 :let cliptext = getreg('*') 5115< When {regname} was not set the result is an empty string. 5116 5117 getreg('=') returns the last evaluated value of the expression 5118 register. (For use in maps.) 5119 getreg('=', 1) returns the expression itself, so that it can 5120 be restored with |setreg()|. For other registers the extra 5121 argument is ignored, thus you can always give it. 5122 5123 If {list} is present and |TRUE|, the result type is changed 5124 to |List|. Each list item is one text line. Use it if you care 5125 about zero bytes possibly present inside register: without 5126 third argument both NLs and zero bytes are represented as NLs 5127 (see |NL-used-for-Nul|). 5128 When the register was not set an empty list is returned. 5129 5130 If {regname} is not specified, |v:register| is used. 5131 5132 5133getregtype([{regname}]) *getregtype()* 5134 The result is a String, which is type of register {regname}. 5135 The value will be one of: 5136 "v" for |characterwise| text 5137 "V" for |linewise| text 5138 "<CTRL-V>{width}" for |blockwise-visual| text 5139 "" for an empty or unknown register 5140 <CTRL-V> is one character with value 0x16. 5141 If {regname} is not specified, |v:register| is used. 5142 5143gettabinfo([{arg}]) *gettabinfo()* 5144 If {arg} is not specified, then information about all the tab 5145 pages is returned as a List. Each List item is a Dictionary. 5146 Otherwise, {arg} specifies the tab page number and information 5147 about that one is returned. If the tab page does not exist an 5148 empty List is returned. 5149 5150 Each List item is a Dictionary with the following entries: 5151 tabnr tab page number. 5152 variables a reference to the dictionary with 5153 tabpage-local variables 5154 windows List of |window-ID|s in the tag page. 5155 5156gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()* 5157 Get the value of a tab-local variable {varname} in tab page 5158 {tabnr}. |t:var| 5159 Tabs are numbered starting with one. 5160 When {varname} is empty a dictionary with all tab-local 5161 variables is returned. 5162 Note that the name without "t:" must be used. 5163 When the tab or variable doesn't exist {def} or an empty 5164 string is returned, there is no error message. 5165 5166gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()* 5167 Get the value of window-local variable {varname} in window 5168 {winnr} in tab page {tabnr}. 5169 When {varname} is empty a dictionary with all window-local 5170 variables is returned. 5171 When {varname} is equal to "&" get the values of all 5172 window-local options in a Dictionary. 5173 Otherwise, when {varname} starts with "&" get the value of a 5174 window-local option. 5175 Note that {varname} must be the name without "w:". 5176 Tabs are numbered starting with one. For the current tabpage 5177 use |getwinvar()|. 5178 {winnr} can be the window number or the |window-ID|. 5179 When {winnr} is zero the current window is used. 5180 This also works for a global option, buffer-local option and 5181 window-local option, but it doesn't work for a global variable 5182 or buffer-local variable. 5183 When the tab, window or variable doesn't exist {def} or an 5184 empty string is returned, there is no error message. 5185 Examples: > 5186 :let list_is_on = gettabwinvar(1, 2, '&list') 5187 :echo "myvar = " . gettabwinvar(3, 1, 'myvar') 5188< 5189 To obtain all window-local variables use: > 5190 gettabwinvar({tabnr}, {winnr}, '&') 5191 5192gettagstack([{nr}]) *gettagstack()* 5193 The result is a Dict, which is the tag stack of window {nr}. 5194 {nr} can be the window number or the |window-ID|. 5195 When {nr} is not specified, the current window is used. 5196 When window {nr} doesn't exist, an empty Dict is returned. 5197 5198 The returned dictionary contains the following entries: 5199 curidx Current index in the stack. When at 5200 top of the stack, set to (length + 1). 5201 Index of bottom of the stack is 1. 5202 items List of items in the stack. Each item 5203 is a dictionary containing the 5204 entries described below. 5205 length Number of entries in the stack. 5206 5207 Each item in the stack is a dictionary with the following 5208 entries: 5209 bufnr buffer number of the current jump 5210 from cursor position before the tag jump. 5211 See |getpos()| for the format of the 5212 returned list. 5213 matchnr current matching tag number. Used when 5214 multiple matching tags are found for a 5215 name. 5216 tagname name of the tag 5217 5218 See |tagstack| for more information about the tag stack. 5219 5220getwininfo([{winid}]) *getwininfo()* 5221 Returns information about windows as a List with Dictionaries. 5222 5223 If {winid} is given Information about the window with that ID 5224 is returned. If the window does not exist the result is an 5225 empty list. 5226 5227 Without {winid} information about all the windows in all the 5228 tab pages is returned. 5229 5230 Each List item is a Dictionary with the following entries: 5231 bufnr number of buffer in the window 5232 height window height (excluding winbar) 5233 loclist 1 if showing a location list 5234 {only with the +quickfix feature} 5235 quickfix 1 if quickfix or location list window 5236 {only with the +quickfix feature} 5237 terminal 1 if a terminal window 5238 {only with the +terminal feature} 5239 tabnr tab page number 5240 variables a reference to the dictionary with 5241 window-local variables 5242 width window width 5243 winbar 1 if the window has a toolbar, 0 5244 otherwise 5245 wincol leftmost screen column of the window, 5246 col from |win_screenpos()| 5247 winid |window-ID| 5248 winnr window number 5249 winrow topmost screen column of the window, 5250 row from |win_screenpos()| 5251 5252getwinpos([{timeout}]) *getwinpos()* 5253 The result is a list with two numbers, the result of 5254 getwinposx() and getwinposy() combined: 5255 [x-pos, y-pos] 5256 {timeout} can be used to specify how long to wait in msec for 5257 a response from the terminal. When omitted 100 msec is used. 5258 Use a longer time for a remote terminal. 5259 When using a value less than 10 and no response is received 5260 within that time, a previously reported position is returned, 5261 if available. This can be used to poll for the position and 5262 do some work in the meantime: > 5263 while 1 5264 let res = getwinpos(1) 5265 if res[0] >= 0 5266 break 5267 endif 5268 " Do some work here 5269 endwhile 5270< 5271 *getwinposx()* 5272getwinposx() The result is a Number, which is the X coordinate in pixels of 5273 the left hand side of the GUI Vim window. Also works for an 5274 xterm (uses a timeout of 100 msec). 5275 The result will be -1 if the information is not available. 5276 The value can be used with `:winpos`. 5277 5278 *getwinposy()* 5279getwinposy() The result is a Number, which is the Y coordinate in pixels of 5280 the top of the GUI Vim window. Also works for an xterm (uses 5281 a timeout of 100 msec). 5282 The result will be -1 if the information is not available. 5283 The value can be used with `:winpos`. 5284 5285getwinvar({winnr}, {varname} [, {def}]) *getwinvar()* 5286 Like |gettabwinvar()| for the current tabpage. 5287 Examples: > 5288 :let list_is_on = getwinvar(2, '&list') 5289 :echo "myvar = " . getwinvar(1, 'myvar') 5290< 5291glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()* 5292 Expand the file wildcards in {expr}. See |wildcards| for the 5293 use of special characters. 5294 5295 Unless the optional {nosuf} argument is given and is |TRUE|, 5296 the 'suffixes' and 'wildignore' options apply: Names matching 5297 one of the patterns in 'wildignore' will be skipped and 5298 'suffixes' affect the ordering of matches. 5299 'wildignorecase' always applies. 5300 5301 When {list} is present and it is |TRUE| the result is a List 5302 with all matching files. The advantage of using a List is, 5303 you also get filenames containing newlines correctly. 5304 Otherwise the result is a String and when there are several 5305 matches, they are separated by <NL> characters. 5306 5307 If the expansion fails, the result is an empty String or List. 5308 5309 A name for a non-existing file is not included. A symbolic 5310 link is only included if it points to an existing file. 5311 However, when the {alllinks} argument is present and it is 5312 |TRUE| then all symbolic links are included. 5313 5314 For most systems backticks can be used to get files names from 5315 any external command. Example: > 5316 :let tagfiles = glob("`find . -name tags -print`") 5317 :let &tags = substitute(tagfiles, "\n", ",", "g") 5318< The result of the program inside the backticks should be one 5319 item per line. Spaces inside an item are allowed. 5320 5321 See |expand()| for expanding special Vim variables. See 5322 |system()| for getting the raw output of an external command. 5323 5324glob2regpat({expr}) *glob2regpat()* 5325 Convert a file pattern, as used by glob(), into a search 5326 pattern. The result can be used to match with a string that 5327 is a file name. E.g. > 5328 if filename =~ glob2regpat('Make*.mak') 5329< This is equivalent to: > 5330 if filename =~ '^Make.*\.mak$' 5331< When {expr} is an empty string the result is "^$", match an 5332 empty string. 5333 Note that the result depends on the system. On MS-Windows 5334 a backslash usually means a path separator. 5335 5336 *globpath()* 5337globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 5338 Perform glob() on all directories in {path} and concatenate 5339 the results. Example: > 5340 :echo globpath(&rtp, "syntax/c.vim") 5341< 5342 {path} is a comma-separated list of directory names. Each 5343 directory name is prepended to {expr} and expanded like with 5344 |glob()|. A path separator is inserted when needed. 5345 To add a comma inside a directory name escape it with a 5346 backslash. Note that on MS-Windows a directory may have a 5347 trailing backslash, remove it if you put a comma after it. 5348 If the expansion fails for one of the directories, there is no 5349 error message. 5350 5351 Unless the optional {nosuf} argument is given and is |TRUE|, 5352 the 'suffixes' and 'wildignore' options apply: Names matching 5353 one of the patterns in 'wildignore' will be skipped and 5354 'suffixes' affect the ordering of matches. 5355 5356 When {list} is present and it is |TRUE| the result is a List 5357 with all matching files. The advantage of using a List is, you 5358 also get filenames containing newlines correctly. Otherwise 5359 the result is a String and when there are several matches, 5360 they are separated by <NL> characters. Example: > 5361 :echo globpath(&rtp, "syntax/c.vim", 0, 1) 5362< 5363 {alllinks} is used as with |glob()|. 5364 5365 The "**" item can be used to search in a directory tree. 5366 For example, to find all "README.txt" files in the directories 5367 in 'runtimepath' and below: > 5368 :echo globpath(&rtp, "**/README.txt") 5369< Upwards search and limiting the depth of "**" is not 5370 supported, thus using 'path' will not always work properly. 5371 5372 *has()* 5373has({feature}) The result is a Number, which is 1 if the feature {feature} is 5374 supported, zero otherwise. The {feature} argument is a 5375 string. See |feature-list| below. 5376 Also see |exists()|. 5377 5378 5379has_key({dict}, {key}) *has_key()* 5380 The result is a Number, which is 1 if |Dictionary| {dict} has 5381 an entry with key {key}. Zero otherwise. 5382 5383haslocaldir([{winnr} [, {tabnr}]]) *haslocaldir()* 5384 The result is a Number, which is 1 when the window has set a 5385 local path via |:lcd|, and 0 otherwise. 5386 5387 Without arguments use the current window. 5388 With {winnr} use this window in the current tab page. 5389 With {winnr} and {tabnr} use the window in the specified tab 5390 page. 5391 {winnr} can be the window number or the |window-ID|. 5392 Return 0 if the arguments are invalid. 5393 5394hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()* 5395 The result is a Number, which is 1 if there is a mapping that 5396 contains {what} in somewhere in the rhs (what it is mapped to) 5397 and this mapping exists in one of the modes indicated by 5398 {mode}. 5399 When {abbr} is there and it is |TRUE| use abbreviations 5400 instead of mappings. Don't forget to specify Insert and/or 5401 Command-line mode. 5402 Both the global mappings and the mappings local to the current 5403 buffer are checked for a match. 5404 If no matching mapping is found 0 is returned. 5405 The following characters are recognized in {mode}: 5406 n Normal mode 5407 v Visual mode 5408 o Operator-pending mode 5409 i Insert mode 5410 l Language-Argument ("r", "f", "t", etc.) 5411 c Command-line mode 5412 When {mode} is omitted, "nvo" is used. 5413 5414 This function is useful to check if a mapping already exists 5415 to a function in a Vim script. Example: > 5416 :if !hasmapto('\ABCdoit') 5417 : map <Leader>d \ABCdoit 5418 :endif 5419< This installs the mapping to "\ABCdoit" only if there isn't 5420 already a mapping to "\ABCdoit". 5421 5422histadd({history}, {item}) *histadd()* 5423 Add the String {item} to the history {history} which can be 5424 one of: *hist-names* 5425 "cmd" or ":" command line history 5426 "search" or "/" search pattern history 5427 "expr" or "=" typed expression history 5428 "input" or "@" input line history 5429 "debug" or ">" debug command history 5430 empty the current or last used history 5431 The {history} string does not need to be the whole name, one 5432 character is sufficient. 5433 If {item} does already exist in the history, it will be 5434 shifted to become the newest entry. 5435 The result is a Number: 1 if the operation was successful, 5436 otherwise 0 is returned. 5437 5438 Example: > 5439 :call histadd("input", strftime("%Y %b %d")) 5440 :let date=input("Enter date: ") 5441< This function is not available in the |sandbox|. 5442 5443histdel({history} [, {item}]) *histdel()* 5444 Clear {history}, i.e. delete all its entries. See |hist-names| 5445 for the possible values of {history}. 5446 5447 If the parameter {item} evaluates to a String, it is used as a 5448 regular expression. All entries matching that expression will 5449 be removed from the history (if there are any). 5450 Upper/lowercase must match, unless "\c" is used |/\c|. 5451 If {item} evaluates to a Number, it will be interpreted as 5452 an index, see |:history-indexing|. The respective entry will 5453 be removed if it exists. 5454 5455 The result is a Number: 1 for a successful operation, 5456 otherwise 0 is returned. 5457 5458 Examples: 5459 Clear expression register history: > 5460 :call histdel("expr") 5461< 5462 Remove all entries starting with "*" from the search history: > 5463 :call histdel("/", '^\*') 5464< 5465 The following three are equivalent: > 5466 :call histdel("search", histnr("search")) 5467 :call histdel("search", -1) 5468 :call histdel("search", '^'.histget("search", -1).'$') 5469< 5470 To delete the last search pattern and use the last-but-one for 5471 the "n" command and 'hlsearch': > 5472 :call histdel("search", -1) 5473 :let @/ = histget("search", -1) 5474 5475histget({history} [, {index}]) *histget()* 5476 The result is a String, the entry with Number {index} from 5477 {history}. See |hist-names| for the possible values of 5478 {history}, and |:history-indexing| for {index}. If there is 5479 no such entry, an empty String is returned. When {index} is 5480 omitted, the most recent item from the history is used. 5481 5482 Examples: 5483 Redo the second last search from history. > 5484 :execute '/' . histget("search", -2) 5485 5486< Define an Ex command ":H {num}" that supports re-execution of 5487 the {num}th entry from the output of |:history|. > 5488 :command -nargs=1 H execute histget("cmd", 0+<args>) 5489< 5490histnr({history}) *histnr()* 5491 The result is the Number of the current entry in {history}. 5492 See |hist-names| for the possible values of {history}. 5493 If an error occurred, -1 is returned. 5494 5495 Example: > 5496 :let inp_index = histnr("expr") 5497< 5498hlexists({name}) *hlexists()* 5499 The result is a Number, which is non-zero if a highlight group 5500 called {name} exists. This is when the group has been 5501 defined in some way. Not necessarily when highlighting has 5502 been defined for it, it may also have been used for a syntax 5503 item. 5504 *highlight_exists()* 5505 Obsolete name: highlight_exists(). 5506 5507 *hlID()* 5508hlID({name}) The result is a Number, which is the ID of the highlight group 5509 with name {name}. When the highlight group doesn't exist, 5510 zero is returned. 5511 This can be used to retrieve information about the highlight 5512 group. For example, to get the background color of the 5513 "Comment" group: > 5514 :echo synIDattr(synIDtrans(hlID("Comment")), "bg") 5515< *highlightID()* 5516 Obsolete name: highlightID(). 5517 5518hostname() *hostname()* 5519 The result is a String, which is the name of the machine on 5520 which Vim is currently running. Machine names greater than 5521 256 characters long are truncated. 5522 5523iconv({expr}, {from}, {to}) *iconv()* 5524 The result is a String, which is the text {expr} converted 5525 from encoding {from} to encoding {to}. 5526 When the conversion completely fails an empty string is 5527 returned. When some characters could not be converted they 5528 are replaced with "?". 5529 The encoding names are whatever the iconv() library function 5530 can accept, see ":!man 3 iconv". 5531 Most conversions require Vim to be compiled with the |+iconv| 5532 feature. Otherwise only UTF-8 to latin1 conversion and back 5533 can be done. 5534 This can be used to display messages with special characters, 5535 no matter what 'encoding' is set to. Write the message in 5536 UTF-8 and use: > 5537 echo iconv(utf8_str, "utf-8", &enc) 5538< Note that Vim uses UTF-8 for all Unicode encodings, conversion 5539 from/to UCS-2 is automatically changed to use UTF-8. You 5540 cannot use UCS-2 in a string anyway, because of the NUL bytes. 5541 {only available when compiled with the |+multi_byte| feature} 5542 5543 *indent()* 5544indent({lnum}) The result is a Number, which is indent of line {lnum} in the 5545 current buffer. The indent is counted in spaces, the value 5546 of 'tabstop' is relevant. {lnum} is used just like in 5547 |getline()|. 5548 When {lnum} is invalid -1 is returned. 5549 5550 5551index({object}, {expr} [, {start} [, {ic}]]) *index()* 5552 If {object} is a |List| return the lowest index where the item 5553 has a value equal to {expr}. There is no automatic 5554 conversion, so the String "4" is different from the Number 4. 5555 And the number 4 is different from the Float 4.0. The value 5556 of 'ignorecase' is not used here, case always matters. 5557 5558 If {object} is |Blob| return the lowest index where the byte 5559 value is equal to {expr}. 5560 5561 If {start} is given then start looking at the item with index 5562 {start} (may be negative for an item relative to the end). 5563 When {ic} is given and it is |TRUE|, ignore case. Otherwise 5564 case must match. 5565 -1 is returned when {expr} is not found in {object}. 5566 Example: > 5567 :let idx = index(words, "the") 5568 :if index(numbers, 123) >= 0 5569 5570 5571input({prompt} [, {text} [, {completion}]]) *input()* 5572 The result is a String, which is whatever the user typed on 5573 the command-line. The {prompt} argument is either a prompt 5574 string, or a blank string (for no prompt). A '\n' can be used 5575 in the prompt to start a new line. 5576 The highlighting set with |:echohl| is used for the prompt. 5577 The input is entered just like a command-line, with the same 5578 editing commands and mappings. There is a separate history 5579 for lines typed for input(). 5580 Example: > 5581 :if input("Coffee or beer? ") == "beer" 5582 : echo "Cheers!" 5583 :endif 5584< 5585 If the optional {text} argument is present and not empty, this 5586 is used for the default reply, as if the user typed this. 5587 Example: > 5588 :let color = input("Color? ", "white") 5589 5590< The optional {completion} argument specifies the type of 5591 completion supported for the input. Without it completion is 5592 not performed. The supported completion types are the same as 5593 that can be supplied to a user-defined command using the 5594 "-complete=" argument. Refer to |:command-completion| for 5595 more information. Example: > 5596 let fname = input("File: ", "", "file") 5597< 5598 NOTE: This function must not be used in a startup file, for 5599 the versions that only run in GUI mode (e.g., the Win32 GUI). 5600 Note: When input() is called from within a mapping it will 5601 consume remaining characters from that mapping, because a 5602 mapping is handled like the characters were typed. 5603 Use |inputsave()| before input() and |inputrestore()| 5604 after input() to avoid that. Another solution is to avoid 5605 that further characters follow in the mapping, e.g., by using 5606 |:execute| or |:normal|. 5607 5608 Example with a mapping: > 5609 :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR> 5610 :function GetFoo() 5611 : call inputsave() 5612 : let g:Foo = input("enter search pattern: ") 5613 : call inputrestore() 5614 :endfunction 5615 5616inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()* 5617 Like |input()|, but when the GUI is running and text dialogs 5618 are supported, a dialog window pops up to input the text. 5619 Example: > 5620 :let n = inputdialog("value for shiftwidth", shiftwidth()) 5621 :if n != "" 5622 : let &sw = n 5623 :endif 5624< When the dialog is cancelled {cancelreturn} is returned. When 5625 omitted an empty string is returned. 5626 Hitting <Enter> works like pressing the OK button. Hitting 5627 <Esc> works like pressing the Cancel button. 5628 NOTE: Command-line completion is not supported. 5629 5630inputlist({textlist}) *inputlist()* 5631 {textlist} must be a |List| of strings. This |List| is 5632 displayed, one string per line. The user will be prompted to 5633 enter a number, which is returned. 5634 The user can also select an item by clicking on it with the 5635 mouse. For the first string 0 is returned. When clicking 5636 above the first item a negative number is returned. When 5637 clicking on the prompt one more than the length of {textlist} 5638 is returned. 5639 Make sure {textlist} has less than 'lines' entries, otherwise 5640 it won't work. It's a good idea to put the entry number at 5641 the start of the string. And put a prompt in the first item. 5642 Example: > 5643 let color = inputlist(['Select color:', '1. red', 5644 \ '2. green', '3. blue']) 5645 5646inputrestore() *inputrestore()* 5647 Restore typeahead that was saved with a previous |inputsave()|. 5648 Should be called the same number of times inputsave() is 5649 called. Calling it more often is harmless though. 5650 Returns 1 when there is nothing to restore, 0 otherwise. 5651 5652inputsave() *inputsave()* 5653 Preserve typeahead (also from mappings) and clear it, so that 5654 a following prompt gets input from the user. Should be 5655 followed by a matching inputrestore() after the prompt. Can 5656 be used several times, in which case there must be just as 5657 many inputrestore() calls. 5658 Returns 1 when out of memory, 0 otherwise. 5659 5660inputsecret({prompt} [, {text}]) *inputsecret()* 5661 This function acts much like the |input()| function with but 5662 two exceptions: 5663 a) the user's response will be displayed as a sequence of 5664 asterisks ("*") thereby keeping the entry secret, and 5665 b) the user's response will not be recorded on the input 5666 |history| stack. 5667 The result is a String, which is whatever the user actually 5668 typed on the command-line in response to the issued prompt. 5669 NOTE: Command-line completion is not supported. 5670 5671insert({object}, {item} [, {idx}]) *insert()* 5672 When {object} is a |List| or a |Blob| insert {item} at the start 5673 of it. 5674 5675 If {idx} is specified insert {item} before the item with index 5676 {idx}. If {idx} is zero it goes before the first item, just 5677 like omitting {idx}. A negative {idx} is also possible, see 5678 |list-index|. -1 inserts just before the last item. 5679 5680 Returns the resulting |List| or |Blob|. Examples: > 5681 :let mylist = insert([2, 3, 5], 1) 5682 :call insert(mylist, 4, -1) 5683 :call insert(mylist, 6, len(mylist)) 5684< The last example can be done simpler with |add()|. 5685 Note that when {item} is a |List| it is inserted as a single 5686 item. Use |extend()| to concatenate |Lists|. 5687 5688invert({expr}) *invert()* 5689 Bitwise invert. The argument is converted to a number. A 5690 List, Dict or Float argument causes an error. Example: > 5691 :let bits = invert(bits) 5692 5693isdirectory({directory}) *isdirectory()* 5694 The result is a Number, which is |TRUE| when a directory 5695 with the name {directory} exists. If {directory} doesn't 5696 exist, or isn't a directory, the result is |FALSE|. {directory} 5697 is any expression, which is used as a String. 5698 5699islocked({expr}) *islocked()* *E786* 5700 The result is a Number, which is |TRUE| when {expr} is the 5701 name of a locked variable. 5702 {expr} must be the name of a variable, |List| item or 5703 |Dictionary| entry, not the variable itself! Example: > 5704 :let alist = [0, ['a', 'b'], 2, 3] 5705 :lockvar 1 alist 5706 :echo islocked('alist') " 1 5707 :echo islocked('alist[1]') " 0 5708 5709< When {expr} is a variable that does not exist you get an error 5710 message. Use |exists()| to check for existence. 5711 5712isnan({expr}) *isnan()* 5713 Return |TRUE| if {expr} is a float with value NaN. > 5714 echo isnan(0.0 / 0.0) 5715< 1 ~ 5716 5717 {only available when compiled with the |+float| feature} 5718 5719items({dict}) *items()* 5720 Return a |List| with all the key-value pairs of {dict}. Each 5721 |List| item is a list with two items: the key of a {dict} 5722 entry and the value of this entry. The |List| is in arbitrary 5723 order. Also see |keys()| and |values()|. 5724 Example: > 5725 for [key, value] in items(mydict) 5726 echo key . ': ' . value 5727 endfor 5728 5729job_getchannel({job}) *job_getchannel()* 5730 Get the channel handle that {job} is using. 5731 To check if the job has no channel: > 5732 if string(job_getchannel()) == 'channel fail' 5733< 5734 {only available when compiled with the |+job| feature} 5735 5736job_info([{job}]) *job_info()* 5737 Returns a Dictionary with information about {job}: 5738 "status" what |job_status()| returns 5739 "channel" what |job_getchannel()| returns 5740 "cmd" List of command arguments used to start the job 5741 "process" process ID 5742 "tty_in" terminal input name, empty when none 5743 "tty_out" terminal output name, empty when none 5744 "exitval" only valid when "status" is "dead" 5745 "exit_cb" function to be called on exit 5746 "stoponexit" |job-stoponexit| 5747 5748 Only in Unix: 5749 "termsig" the signal which terminated the process 5750 (See |job_stop()| for the values) 5751 only valid when "status" is "dead" 5752 5753 Without any arguments, returns a List with all Job objects. 5754 5755job_setoptions({job}, {options}) *job_setoptions()* 5756 Change options for {job}. Supported are: 5757 "stoponexit" |job-stoponexit| 5758 "exit_cb" |job-exit_cb| 5759 5760job_start({command} [, {options}]) *job_start()* 5761 Start a job and return a Job object. Unlike |system()| and 5762 |:!cmd| this does not wait for the job to finish. 5763 To start a job in a terminal window see |term_start()|. 5764 5765 If the job fails to start then |job_status()| on the returned 5766 Job object results in "fail" and none of the callbacks will be 5767 invoked. 5768 5769 {command} can be a String. This works best on MS-Windows. On 5770 Unix it is split up in white-separated parts to be passed to 5771 execvp(). Arguments in double quotes can contain white space. 5772 5773 {command} can be a List, where the first item is the executable 5774 and further items are the arguments. All items are converted 5775 to String. This works best on Unix. 5776 5777 On MS-Windows, job_start() makes a GUI application hidden. If 5778 want to show it, Use |:!start| instead. 5779 5780 The command is executed directly, not through a shell, the 5781 'shell' option is not used. To use the shell: > 5782 let job = job_start(["/bin/sh", "-c", "echo hello"]) 5783< Or: > 5784 let job = job_start('/bin/sh -c "echo hello"') 5785< Note that this will start two processes, the shell and the 5786 command it executes. If you don't want this use the "exec" 5787 shell command. 5788 5789 On Unix $PATH is used to search for the executable only when 5790 the command does not contain a slash. 5791 5792 The job will use the same terminal as Vim. If it reads from 5793 stdin the job and Vim will be fighting over input, that 5794 doesn't work. Redirect stdin and stdout to avoid problems: > 5795 let job = job_start(['sh', '-c', "myserver </dev/null >/dev/null"]) 5796< 5797 The returned Job object can be used to get the status with 5798 |job_status()| and stop the job with |job_stop()|. 5799 5800 Note that the job object will be deleted if there are no 5801 references to it. This closes the stdin and stderr, which may 5802 cause the job to fail with an error. To avoid this keep a 5803 reference to the job. Thus instead of: > 5804 call job_start('my-command') 5805< use: > 5806 let myjob = job_start('my-command') 5807< and unlet "myjob" once the job is not needed or is past the 5808 point where it would fail (e.g. when it prints a message on 5809 startup). Keep in mind that variables local to a function 5810 will cease to exist if the function returns. Use a 5811 script-local variable if needed: > 5812 let s:myjob = job_start('my-command') 5813< 5814 {options} must be a Dictionary. It can contain many optional 5815 items, see |job-options|. 5816 5817 {only available when compiled with the |+job| feature} 5818 5819job_status({job}) *job_status()* *E916* 5820 Returns a String with the status of {job}: 5821 "run" job is running 5822 "fail" job failed to start 5823 "dead" job died or was stopped after running 5824 5825 On Unix a non-existing command results in "dead" instead of 5826 "fail", because a fork happens before the failure can be 5827 detected. 5828 5829 If an exit callback was set with the "exit_cb" option and the 5830 job is now detected to be "dead" the callback will be invoked. 5831 5832 For more information see |job_info()|. 5833 5834 {only available when compiled with the |+job| feature} 5835 5836job_stop({job} [, {how}]) *job_stop()* 5837 Stop the {job}. This can also be used to signal the job. 5838 5839 When {how} is omitted or is "term" the job will be terminated. 5840 For Unix SIGTERM is sent. On MS-Windows the job will be 5841 terminated forcedly (there is no "gentle" way). 5842 This goes to the process group, thus children may also be 5843 affected. 5844 5845 Effect for Unix: 5846 "term" SIGTERM (default) 5847 "hup" SIGHUP 5848 "quit" SIGQUIT 5849 "int" SIGINT 5850 "kill" SIGKILL (strongest way to stop) 5851 number signal with that number 5852 5853 Effect for MS-Windows: 5854 "term" terminate process forcedly (default) 5855 "hup" CTRL_BREAK 5856 "quit" CTRL_BREAK 5857 "int" CTRL_C 5858 "kill" terminate process forcedly 5859 Others CTRL_BREAK 5860 5861 On Unix the signal is sent to the process group. This means 5862 that when the job is "sh -c command" it affects both the shell 5863 and the command. 5864 5865 The result is a Number: 1 if the operation could be executed, 5866 0 if "how" is not supported on the system. 5867 Note that even when the operation was executed, whether the 5868 job was actually stopped needs to be checked with 5869 |job_status()|. 5870 5871 If the status of the job is "dead", the signal will not be 5872 sent. This is to avoid to stop the wrong job (esp. on Unix, 5873 where process numbers are recycled). 5874 5875 When using "kill" Vim will assume the job will die and close 5876 the channel. 5877 5878 {only available when compiled with the |+job| feature} 5879 5880join({list} [, {sep}]) *join()* 5881 Join the items in {list} together into one String. 5882 When {sep} is specified it is put in between the items. If 5883 {sep} is omitted a single space is used. 5884 Note that {sep} is not added at the end. You might want to 5885 add it there too: > 5886 let lines = join(mylist, "\n") . "\n" 5887< String items are used as-is. |Lists| and |Dictionaries| are 5888 converted into a string like with |string()|. 5889 The opposite function is |split()|. 5890 5891js_decode({string}) *js_decode()* 5892 This is similar to |json_decode()| with these differences: 5893 - Object key names do not have to be in quotes. 5894 - Strings can be in single quotes. 5895 - Empty items in an array (between two commas) are allowed and 5896 result in v:none items. 5897 5898js_encode({expr}) *js_encode()* 5899 This is similar to |json_encode()| with these differences: 5900 - Object key names are not in quotes. 5901 - v:none items in an array result in an empty item between 5902 commas. 5903 For example, the Vim object: 5904 [1,v:none,{"one":1},v:none] ~ 5905 Will be encoded as: 5906 [1,,{one:1},,] ~ 5907 While json_encode() would produce: 5908 [1,null,{"one":1},null] ~ 5909 This encoding is valid for JavaScript. It is more efficient 5910 than JSON, especially when using an array with optional items. 5911 5912 5913json_decode({string}) *json_decode()* 5914 This parses a JSON formatted string and returns the equivalent 5915 in Vim values. See |json_encode()| for the relation between 5916 JSON and Vim values. 5917 The decoding is permissive: 5918 - A trailing comma in an array and object is ignored, e.g. 5919 "[1, 2, ]" is the same as "[1, 2]". 5920 - Integer keys are accepted in objects, e.g. {1:2} is the 5921 same as {"1":2}. 5922 - More floating point numbers are recognized, e.g. "1." for 5923 "1.0", or "001.2" for "1.2". Special floating point values 5924 "Infinity", "-Infinity" and "NaN" (capitalization ignored) 5925 are accepted. 5926 - Leading zeroes in integer numbers are ignored, e.g. "012" 5927 for "12" or "-012" for "-12". 5928 - Capitalization is ignored in literal names null, true or 5929 false, e.g. "NULL" for "null", "True" for "true". 5930 - Control characters U+0000 through U+001F which are not 5931 escaped in strings are accepted, e.g. " " (tab 5932 character in string) for "\t". 5933 - An empty JSON expression or made of only spaces is accepted 5934 and results in v:none. 5935 - Backslash in an invalid 2-character sequence escape is 5936 ignored, e.g. "\a" is decoded as "a". 5937 - A correct surrogate pair in JSON strings should normally be 5938 a 12 character sequence such as "\uD834\uDD1E", but 5939 json_decode() silently accepts truncated surrogate pairs 5940 such as "\uD834" or "\uD834\u" 5941 *E938* 5942 A duplicate key in an object, valid in rfc7159, is not 5943 accepted by json_decode() as the result must be a valid Vim 5944 type, e.g. this fails: {"a":"b", "a":"c"} 5945 5946 5947json_encode({expr}) *json_encode()* 5948 Encode {expr} as JSON and return this as a string. 5949 The encoding is specified in: 5950 https://tools.ietf.org/html/rfc7159.html 5951 Vim values are converted as follows: 5952 |Number| decimal number 5953 |Float| floating point number 5954 Float nan "NaN" 5955 Float inf "Infinity" 5956 Float -inf "-Infinity" 5957 |String| in double quotes (possibly null) 5958 |Funcref| not possible, error 5959 |List| as an array (possibly null); when 5960 used recursively: [] 5961 |Dict| as an object (possibly null); when 5962 used recursively: {} 5963 |Blob| as an array of the individual bytes 5964 v:false "false" 5965 v:true "true" 5966 v:none "null" 5967 v:null "null" 5968 Note that NaN and Infinity are passed on as values. This is 5969 missing in the JSON standard, but several implementations do 5970 allow it. If not then you will get an error. 5971 5972keys({dict}) *keys()* 5973 Return a |List| with all the keys of {dict}. The |List| is in 5974 arbitrary order. Also see |items()| and |values()|. 5975 5976 *len()* *E701* 5977len({expr}) The result is a Number, which is the length of the argument. 5978 When {expr} is a String or a Number the length in bytes is 5979 used, as with |strlen()|. 5980 When {expr} is a |List| the number of items in the |List| is 5981 returned. 5982 When {expr} is a |Blob| the number of bytes is returned. 5983 When {expr} is a |Dictionary| the number of entries in the 5984 |Dictionary| is returned. 5985 Otherwise an error is given. 5986 5987 *libcall()* *E364* *E368* 5988libcall({libname}, {funcname}, {argument}) 5989 Call function {funcname} in the run-time library {libname} 5990 with single argument {argument}. 5991 This is useful to call functions in a library that you 5992 especially made to be used with Vim. Since only one argument 5993 is possible, calling standard library functions is rather 5994 limited. 5995 The result is the String returned by the function. If the 5996 function returns NULL, this will appear as an empty string "" 5997 to Vim. 5998 If the function returns a number, use libcallnr()! 5999 If {argument} is a number, it is passed to the function as an 6000 int; if {argument} is a string, it is passed as a 6001 null-terminated string. 6002 This function will fail in |restricted-mode|. 6003 6004 libcall() allows you to write your own 'plug-in' extensions to 6005 Vim without having to recompile the program. It is NOT a 6006 means to call system functions! If you try to do so Vim will 6007 very probably crash. 6008 6009 For Win32, the functions you write must be placed in a DLL 6010 and use the normal C calling convention (NOT Pascal which is 6011 used in Windows System DLLs). The function must take exactly 6012 one parameter, either a character pointer or a long integer, 6013 and must return a character pointer or NULL. The character 6014 pointer returned must point to memory that will remain valid 6015 after the function has returned (e.g. in static data in the 6016 DLL). If it points to allocated memory, that memory will 6017 leak away. Using a static buffer in the function should work, 6018 it's then freed when the DLL is unloaded. 6019 6020 WARNING: If the function returns a non-valid pointer, Vim may 6021 crash! This also happens if the function returns a number, 6022 because Vim thinks it's a pointer. 6023 For Win32 systems, {libname} should be the filename of the DLL 6024 without the ".DLL" suffix. A full path is only required if 6025 the DLL is not in the usual places. 6026 For Unix: When compiling your own plugins, remember that the 6027 object code must be compiled as position-independent ('PIC'). 6028 {only in Win32 and some Unix versions, when the |+libcall| 6029 feature is present} 6030 Examples: > 6031 :echo libcall("libc.so", "getenv", "HOME") 6032< 6033 *libcallnr()* 6034libcallnr({libname}, {funcname}, {argument}) 6035 Just like |libcall()|, but used for a function that returns an 6036 int instead of a string. 6037 {only in Win32 on some Unix versions, when the |+libcall| 6038 feature is present} 6039 Examples: > 6040 :echo libcallnr("/usr/lib/libc.so", "getpid", "") 6041 :call libcallnr("libc.so", "printf", "Hello World!\n") 6042 :call libcallnr("libc.so", "sleep", 10) 6043< 6044 *line()* 6045line({expr}) The result is a Number, which is the line number of the file 6046 position given with {expr}. The accepted positions are: 6047 . the cursor position 6048 $ the last line in the current buffer 6049 'x position of mark x (if the mark is not set, 0 is 6050 returned) 6051 w0 first line visible in current window (one if the 6052 display isn't updated, e.g. in silent Ex mode) 6053 w$ last line visible in current window (this is one 6054 less than "w0" if no lines are visible) 6055 v In Visual mode: the start of the Visual area (the 6056 cursor is the end). When not in Visual mode 6057 returns the cursor position. Differs from |'<| in 6058 that it's updated right away. 6059 Note that a mark in another file can be used. The line number 6060 then applies to another buffer. 6061 To get the column number use |col()|. To get both use 6062 |getpos()|. 6063 Examples: > 6064 line(".") line number of the cursor 6065 line("'t") line number of mark t 6066 line("'" . marker) line number of mark marker 6067< 6068 To jump to the last known position when opening a file see 6069 |last-position-jump|. 6070 6071line2byte({lnum}) *line2byte()* 6072 Return the byte count from the start of the buffer for line 6073 {lnum}. This includes the end-of-line character, depending on 6074 the 'fileformat' option for the current buffer. The first 6075 line returns 1. 'encoding' matters, 'fileencoding' is ignored. 6076 This can also be used to get the byte count for the line just 6077 below the last line: > 6078 line2byte(line("$") + 1) 6079< This is the buffer size plus one. If 'fileencoding' is empty 6080 it is the file size plus one. 6081 When {lnum} is invalid, or the |+byte_offset| feature has been 6082 disabled at compile time, -1 is returned. 6083 Also see |byte2line()|, |go| and |:goto|. 6084 6085lispindent({lnum}) *lispindent()* 6086 Get the amount of indent for line {lnum} according the lisp 6087 indenting rules, as with 'lisp'. 6088 The indent is counted in spaces, the value of 'tabstop' is 6089 relevant. {lnum} is used just like in |getline()|. 6090 When {lnum} is invalid or Vim was not compiled the 6091 |+lispindent| feature, -1 is returned. 6092 6093localtime() *localtime()* 6094 Return the current time, measured as seconds since 1st Jan 6095 1970. See also |strftime()| and |getftime()|. 6096 6097 6098log({expr}) *log()* 6099 Return the natural logarithm (base e) of {expr} as a |Float|. 6100 {expr} must evaluate to a |Float| or a |Number| in the range 6101 (0, inf]. 6102 Examples: > 6103 :echo log(10) 6104< 2.302585 > 6105 :echo log(exp(5)) 6106< 5.0 6107 {only available when compiled with the |+float| feature} 6108 6109 6110log10({expr}) *log10()* 6111 Return the logarithm of Float {expr} to base 10 as a |Float|. 6112 {expr} must evaluate to a |Float| or a |Number|. 6113 Examples: > 6114 :echo log10(1000) 6115< 3.0 > 6116 :echo log10(0.01) 6117< -2.0 6118 {only available when compiled with the |+float| feature} 6119 6120luaeval({expr} [, {expr}]) *luaeval()* 6121 Evaluate Lua expression {expr} and return its result converted 6122 to Vim data structures. Second {expr} may hold additional 6123 argument accessible as _A inside first {expr}. 6124 Strings are returned as they are. 6125 Boolean objects are converted to numbers. 6126 Numbers are converted to |Float| values if vim was compiled 6127 with |+float| and to numbers otherwise. 6128 Dictionaries and lists obtained by vim.eval() are returned 6129 as-is. 6130 Other objects are returned as zero without any errors. 6131 See |lua-luaeval| for more details. 6132 {only available when compiled with the |+lua| feature} 6133 6134map({expr1}, {expr2}) *map()* 6135 {expr1} must be a |List| or a |Dictionary|. 6136 Replace each item in {expr1} with the result of evaluating 6137 {expr2}. {expr2} must be a |string| or |Funcref|. 6138 6139 If {expr2} is a |string|, inside {expr2} |v:val| has the value 6140 of the current item. For a |Dictionary| |v:key| has the key 6141 of the current item and for a |List| |v:key| has the index of 6142 the current item. 6143 Example: > 6144 :call map(mylist, '"> " . v:val . " <"') 6145< This puts "> " before and " <" after each item in "mylist". 6146 6147 Note that {expr2} is the result of an expression and is then 6148 used as an expression again. Often it is good to use a 6149 |literal-string| to avoid having to double backslashes. You 6150 still have to double ' quotes 6151 6152 If {expr2} is a |Funcref| it is called with two arguments: 6153 1. The key or the index of the current item. 6154 2. the value of the current item. 6155 The function must return the new value of the item. Example 6156 that changes each value by "key-value": > 6157 func KeyValue(key, val) 6158 return a:key . '-' . a:val 6159 endfunc 6160 call map(myDict, function('KeyValue')) 6161< It is shorter when using a |lambda|: > 6162 call map(myDict, {key, val -> key . '-' . val}) 6163< If you do not use "val" you can leave it out: > 6164 call map(myDict, {key -> 'item: ' . key}) 6165< 6166 The operation is done in-place. If you want a |List| or 6167 |Dictionary| to remain unmodified make a copy first: > 6168 :let tlist = map(copy(mylist), ' v:val . "\t"') 6169 6170< Returns {expr1}, the |List| or |Dictionary| that was filtered. 6171 When an error is encountered while evaluating {expr2} no 6172 further items in {expr1} are processed. When {expr2} is a 6173 Funcref errors inside a function are ignored, unless it was 6174 defined with the "abort" flag. 6175 6176 6177maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()* 6178 When {dict} is omitted or zero: Return the rhs of mapping 6179 {name} in mode {mode}. The returned String has special 6180 characters translated like in the output of the ":map" command 6181 listing. 6182 6183 When there is no mapping for {name}, an empty String is 6184 returned. When the mapping for {name} is empty, then "<Nop>" 6185 is returned. 6186 6187 The {name} can have special key names, like in the ":map" 6188 command. 6189 6190 {mode} can be one of these strings: 6191 "n" Normal 6192 "v" Visual (including Select) 6193 "o" Operator-pending 6194 "i" Insert 6195 "c" Cmd-line 6196 "s" Select 6197 "x" Visual 6198 "l" langmap |language-mapping| 6199 "t" Terminal-Job 6200 "" Normal, Visual and Operator-pending 6201 When {mode} is omitted, the modes for "" are used. 6202 6203 When {abbr} is there and it is |TRUE| use abbreviations 6204 instead of mappings. 6205 6206 When {dict} is there and it is |TRUE| return a dictionary 6207 containing all the information of the mapping with the 6208 following items: 6209 "lhs" The {lhs} of the mapping. 6210 "rhs" The {rhs} of the mapping as typed. 6211 "silent" 1 for a |:map-silent| mapping, else 0. 6212 "noremap" 1 if the {rhs} of the mapping is not remappable. 6213 "expr" 1 for an expression mapping (|:map-<expr>|). 6214 "buffer" 1 for a buffer local mapping (|:map-local|). 6215 "mode" Modes for which the mapping is defined. In 6216 addition to the modes mentioned above, these 6217 characters will be used: 6218 " " Normal, Visual and Operator-pending 6219 "!" Insert and Commandline mode 6220 (|mapmode-ic|) 6221 "sid" The script local ID, used for <sid> mappings 6222 (|<SID>|). 6223 "lnum" The line number in "sid", zero if unknown. 6224 "nowait" Do not wait for other, longer mappings. 6225 (|:map-<nowait>|). 6226 6227 The mappings local to the current buffer are checked first, 6228 then the global mappings. 6229 This function can be used to map a key even when it's already 6230 mapped, and have it do the original mapping too. Sketch: > 6231 exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n') 6232 6233 6234mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()* 6235 Check if there is a mapping that matches with {name} in mode 6236 {mode}. See |maparg()| for {mode} and special names in 6237 {name}. 6238 When {abbr} is there and it is |TRUE| use abbreviations 6239 instead of mappings. 6240 A match happens with a mapping that starts with {name} and 6241 with a mapping which is equal to the start of {name}. 6242 6243 matches mapping "a" "ab" "abc" ~ 6244 mapcheck("a") yes yes yes 6245 mapcheck("abc") yes yes yes 6246 mapcheck("ax") yes no no 6247 mapcheck("b") no no no 6248 6249 The difference with maparg() is that mapcheck() finds a 6250 mapping that matches with {name}, while maparg() only finds a 6251 mapping for {name} exactly. 6252 When there is no mapping that starts with {name}, an empty 6253 String is returned. If there is one, the RHS of that mapping 6254 is returned. If there are several mappings that start with 6255 {name}, the RHS of one of them is returned. This will be 6256 "<Nop>" if the RHS is empty. 6257 The mappings local to the current buffer are checked first, 6258 then the global mappings. 6259 This function can be used to check if a mapping can be added 6260 without being ambiguous. Example: > 6261 :if mapcheck("_vv") == "" 6262 : map _vv :set guifont=7x13<CR> 6263 :endif 6264< This avoids adding the "_vv" mapping when there already is a 6265 mapping for "_v" or for "_vvv". 6266 6267match({expr}, {pat} [, {start} [, {count}]]) *match()* 6268 When {expr} is a |List| then this returns the index of the 6269 first item where {pat} matches. Each item is used as a 6270 String, |Lists| and |Dictionaries| are used as echoed. 6271 6272 Otherwise, {expr} is used as a String. The result is a 6273 Number, which gives the index (byte offset) in {expr} where 6274 {pat} matches. 6275 6276 A match at the first character or |List| item returns zero. 6277 If there is no match -1 is returned. 6278 6279 For getting submatches see |matchlist()|. 6280 Example: > 6281 :echo match("testing", "ing") " results in 4 6282 :echo match([1, 'x'], '\a') " results in 1 6283< See |string-match| for how {pat} is used. 6284 *strpbrk()* 6285 Vim doesn't have a strpbrk() function. But you can do: > 6286 :let sepidx = match(line, '[.,;: \t]') 6287< *strcasestr()* 6288 Vim doesn't have a strcasestr() function. But you can add 6289 "\c" to the pattern to ignore case: > 6290 :let idx = match(haystack, '\cneedle') 6291< 6292 If {start} is given, the search starts from byte index 6293 {start} in a String or item {start} in a |List|. 6294 The result, however, is still the index counted from the 6295 first character/item. Example: > 6296 :echo match("testing", "ing", 2) 6297< result is again "4". > 6298 :echo match("testing", "ing", 4) 6299< result is again "4". > 6300 :echo match("testing", "t", 2) 6301< result is "3". 6302 For a String, if {start} > 0 then it is like the string starts 6303 {start} bytes later, thus "^" will match at {start}. Except 6304 when {count} is given, then it's like matches before the 6305 {start} byte are ignored (this is a bit complicated to keep it 6306 backwards compatible). 6307 For a String, if {start} < 0, it will be set to 0. For a list 6308 the index is counted from the end. 6309 If {start} is out of range ({start} > strlen({expr}) for a 6310 String or {start} > len({expr}) for a |List|) -1 is returned. 6311 6312 When {count} is given use the {count}'th match. When a match 6313 is found in a String the search for the next one starts one 6314 character further. Thus this example results in 1: > 6315 echo match("testing", "..", 0, 2) 6316< In a |List| the search continues in the next item. 6317 Note that when {count} is added the way {start} works changes, 6318 see above. 6319 6320 See |pattern| for the patterns that are accepted. 6321 The 'ignorecase' option is used to set the ignore-caseness of 6322 the pattern. 'smartcase' is NOT used. The matching is always 6323 done like 'magic' is set and 'cpoptions' is empty. 6324 6325 *matchadd()* *E798* *E799* *E801* *E957* 6326matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]]) 6327 Defines a pattern to be highlighted in the current window (a 6328 "match"). It will be highlighted with {group}. Returns an 6329 identification number (ID), which can be used to delete the 6330 match using |matchdelete()|. 6331 Matching is case sensitive and magic, unless case sensitivity 6332 or magicness are explicitly overridden in {pattern}. The 6333 'magic', 'smartcase' and 'ignorecase' options are not used. 6334 The "Conceal" value is special, it causes the match to be 6335 concealed. 6336 6337 The optional {priority} argument assigns a priority to the 6338 match. A match with a high priority will have its 6339 highlighting overrule that of a match with a lower priority. 6340 A priority is specified as an integer (negative numbers are no 6341 exception). If the {priority} argument is not specified, the 6342 default priority is 10. The priority of 'hlsearch' is zero, 6343 hence all matches with a priority greater than zero will 6344 overrule it. Syntax highlighting (see 'syntax') is a separate 6345 mechanism, and regardless of the chosen priority a match will 6346 always overrule syntax highlighting. 6347 6348 The optional {id} argument allows the request for a specific 6349 match ID. If a specified ID is already taken, an error 6350 message will appear and the match will not be added. An ID 6351 is specified as a positive integer (zero excluded). IDs 1, 2 6352 and 3 are reserved for |:match|, |:2match| and |:3match|, 6353 respectively. If the {id} argument is not specified or -1, 6354 |matchadd()| automatically chooses a free ID. 6355 6356 The optional {dict} argument allows for further custom 6357 values. Currently this is used to specify a match specific 6358 conceal character that will be shown for |hl-Conceal| 6359 highlighted matches. The dict can have the following members: 6360 6361 conceal Special character to show instead of the 6362 match (only for |hl-Conceal| highlighted 6363 matches, see |:syn-cchar|) 6364 window Instead of the current window use the 6365 window with this number or window ID. 6366 6367 The number of matches is not limited, as it is the case with 6368 the |:match| commands. 6369 6370 Example: > 6371 :highlight MyGroup ctermbg=green guibg=green 6372 :let m = matchadd("MyGroup", "TODO") 6373< Deletion of the pattern: > 6374 :call matchdelete(m) 6375 6376< A list of matches defined by |matchadd()| and |:match| are 6377 available from |getmatches()|. All matches can be deleted in 6378 one operation by |clearmatches()|. 6379 6380 *matchaddpos()* 6381matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) 6382 Same as |matchadd()|, but requires a list of positions {pos} 6383 instead of a pattern. This command is faster than |matchadd()| 6384 because it does not require to handle regular expressions and 6385 sets buffer line boundaries to redraw screen. It is supposed 6386 to be used when fast match additions and deletions are 6387 required, for example to highlight matching parentheses. 6388 6389 The list {pos} can contain one of these items: 6390 - A number. This whole line will be highlighted. The first 6391 line has number 1. 6392 - A list with one number, e.g., [23]. The whole line with this 6393 number will be highlighted. 6394 - A list with two numbers, e.g., [23, 11]. The first number is 6395 the line number, the second one is the column number (first 6396 column is 1, the value must correspond to the byte index as 6397 |col()| would return). The character at this position will 6398 be highlighted. 6399 - A list with three numbers, e.g., [23, 11, 3]. As above, but 6400 the third number gives the length of the highlight in bytes. 6401 6402 The maximum number of positions is 8. 6403 6404 Example: > 6405 :highlight MyGroup ctermbg=green guibg=green 6406 :let m = matchaddpos("MyGroup", [[23, 24], 34]) 6407< Deletion of the pattern: > 6408 :call matchdelete(m) 6409 6410< Matches added by |matchaddpos()| are returned by 6411 |getmatches()| with an entry "pos1", "pos2", etc., with the 6412 value a list like the {pos} item. 6413 6414matcharg({nr}) *matcharg()* 6415 Selects the {nr} match item, as set with a |:match|, 6416 |:2match| or |:3match| command. 6417 Return a |List| with two elements: 6418 The name of the highlight group used 6419 The pattern used. 6420 When {nr} is not 1, 2 or 3 returns an empty |List|. 6421 When there is no match item set returns ['', '']. 6422 This is useful to save and restore a |:match|. 6423 Highlighting matches using the |:match| commands are limited 6424 to three matches. |matchadd()| does not have this limitation. 6425 6426matchdelete({id}) *matchdelete()* *E802* *E803* 6427 Deletes a match with ID {id} previously defined by |matchadd()| 6428 or one of the |:match| commands. Returns 0 if successful, 6429 otherwise -1. See example for |matchadd()|. All matches can 6430 be deleted in one operation by |clearmatches()|. 6431 6432matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()* 6433 Same as |match()|, but return the index of first character 6434 after the match. Example: > 6435 :echo matchend("testing", "ing") 6436< results in "7". 6437 *strspn()* *strcspn()* 6438 Vim doesn't have a strspn() or strcspn() function, but you can 6439 do it with matchend(): > 6440 :let span = matchend(line, '[a-zA-Z]') 6441 :let span = matchend(line, '[^a-zA-Z]') 6442< Except that -1 is returned when there are no matches. 6443 6444 The {start}, if given, has the same meaning as for |match()|. > 6445 :echo matchend("testing", "ing", 2) 6446< results in "7". > 6447 :echo matchend("testing", "ing", 5) 6448< result is "-1". 6449 When {expr} is a |List| the result is equal to |match()|. 6450 6451matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()* 6452 Same as |match()|, but return a |List|. The first item in the 6453 list is the matched string, same as what matchstr() would 6454 return. Following items are submatches, like "\1", "\2", etc. 6455 in |:substitute|. When an optional submatch didn't match an 6456 empty string is used. Example: > 6457 echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)') 6458< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', ''] 6459 When there is no match an empty list is returned. 6460 6461matchstr({expr}, {pat} [, {start} [, {count}]]) *matchstr()* 6462 Same as |match()|, but return the matched string. Example: > 6463 :echo matchstr("testing", "ing") 6464< results in "ing". 6465 When there is no match "" is returned. 6466 The {start}, if given, has the same meaning as for |match()|. > 6467 :echo matchstr("testing", "ing", 2) 6468< results in "ing". > 6469 :echo matchstr("testing", "ing", 5) 6470< result is "". 6471 When {expr} is a |List| then the matching item is returned. 6472 The type isn't changed, it's not necessarily a String. 6473 6474matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()* 6475 Same as |matchstr()|, but return the matched string, the start 6476 position and the end position of the match. Example: > 6477 :echo matchstrpos("testing", "ing") 6478< results in ["ing", 4, 7]. 6479 When there is no match ["", -1, -1] is returned. 6480 The {start}, if given, has the same meaning as for |match()|. > 6481 :echo matchstrpos("testing", "ing", 2) 6482< results in ["ing", 4, 7]. > 6483 :echo matchstrpos("testing", "ing", 5) 6484< result is ["", -1, -1]. 6485 When {expr} is a |List| then the matching item, the index 6486 of first item where {pat} matches, the start position and the 6487 end position of the match are returned. > 6488 :echo matchstrpos([1, '__x'], '\a') 6489< result is ["x", 1, 2, 3]. 6490 The type isn't changed, it's not necessarily a String. 6491 6492 *max()* 6493max({expr}) Return the maximum value of all items in {expr}. 6494 {expr} can be a list or a dictionary. For a dictionary, 6495 it returns the maximum of all values in the dictionary. 6496 If {expr} is neither a list nor a dictionary, or one of the 6497 items in {expr} cannot be used as a Number this results in 6498 an error. An empty |List| or |Dictionary| results in zero. 6499 6500 *min()* 6501min({expr}) Return the minimum value of all items in {expr}. 6502 {expr} can be a list or a dictionary. For a dictionary, 6503 it returns the minimum of all values in the dictionary. 6504 If {expr} is neither a list nor a dictionary, or one of the 6505 items in {expr} cannot be used as a Number this results in 6506 an error. An empty |List| or |Dictionary| results in zero. 6507 6508 *mkdir()* *E739* 6509mkdir({name} [, {path} [, {prot}]]) 6510 Create directory {name}. 6511 6512 If {path} is "p" then intermediate directories are created as 6513 necessary. Otherwise it must be "". 6514 6515 If {prot} is given it is used to set the protection bits of 6516 the new directory. The default is 0755 (rwxr-xr-x: r/w for 6517 the user readable for others). Use 0700 to make it unreadable 6518 for others. This is only used for the last part of {name}. 6519 Thus if you create /tmp/foo/bar then /tmp/foo will be created 6520 with 0755. 6521 Example: > 6522 :call mkdir($HOME . "/tmp/foo/bar", "p", 0700) 6523 6524< This function is not available in the |sandbox|. 6525 6526 There is no error if the directory already exists and the "p" 6527 flag is passed (since patch 8.0.1708). However, without the 6528 "p" option the call will fail. 6529 6530 The function result is a Number, which is 1 if the call was 6531 successful or 0 if the directory creation failed or partly 6532 failed. 6533 6534 Not available on all systems. To check use: > 6535 :if exists("*mkdir") 6536< 6537 *mode()* 6538mode([expr]) Return a string that indicates the current mode. 6539 If [expr] is supplied and it evaluates to a non-zero Number or 6540 a non-empty String (|non-zero-arg|), then the full mode is 6541 returned, otherwise only the first letter is returned. 6542 6543 n Normal, Terminal-Normal 6544 no Operator-pending 6545 nov Operator-pending (forced characterwise |o_v|) 6546 noV Operator-pending (forced linewise |o_V|) 6547 noCTRL-V Operator-pending (forced blockwise |o_CTRL-V|); 6548 CTRL-V is one character 6549 niI Normal using |i_CTRL-O| in |Insert-mode| 6550 niR Normal using |i_CTRL-O| in |Replace-mode| 6551 niV Normal using |i_CTRL-O| in |Virtual-Replace-mode| 6552 v Visual by character 6553 V Visual by line 6554 CTRL-V Visual blockwise 6555 s Select by character 6556 S Select by line 6557 CTRL-S Select blockwise 6558 i Insert 6559 ic Insert mode completion |compl-generic| 6560 ix Insert mode |i_CTRL-X| completion 6561 R Replace |R| 6562 Rc Replace mode completion |compl-generic| 6563 Rv Virtual Replace |gR| 6564 Rx Replace mode |i_CTRL-X| completion 6565 c Command-line editing 6566 cv Vim Ex mode |gQ| 6567 ce Normal Ex mode |Q| 6568 r Hit-enter prompt 6569 rm The -- more -- prompt 6570 r? A |:confirm| query of some sort 6571 ! Shell or external command is executing 6572 t Terminal-Job mode: keys go to the job 6573 This is useful in the 'statusline' option or when used 6574 with |remote_expr()| In most other places it always returns 6575 "c" or "n". 6576 Note that in the future more modes and more specific modes may 6577 be added. It's better not to compare the whole string but only 6578 the leading character(s). 6579 Also see |visualmode()|. 6580 6581mzeval({expr}) *mzeval()* 6582 Evaluate MzScheme expression {expr} and return its result 6583 converted to Vim data structures. 6584 Numbers and strings are returned as they are. 6585 Pairs (including lists and improper lists) and vectors are 6586 returned as Vim |Lists|. 6587 Hash tables are represented as Vim |Dictionary| type with keys 6588 converted to strings. 6589 All other types are converted to string with display function. 6590 Examples: > 6591 :mz (define l (list 1 2 3)) 6592 :mz (define h (make-hash)) (hash-set! h "list" l) 6593 :echo mzeval("l") 6594 :echo mzeval("h") 6595< 6596 {only available when compiled with the |+mzscheme| feature} 6597 6598nextnonblank({lnum}) *nextnonblank()* 6599 Return the line number of the first line at or below {lnum} 6600 that is not blank. Example: > 6601 if getline(nextnonblank(1)) =~ "Java" 6602< When {lnum} is invalid or there is no non-blank line at or 6603 below it, zero is returned. 6604 See also |prevnonblank()|. 6605 6606nr2char({expr} [, {utf8}]) *nr2char()* 6607 Return a string with a single character, which has the number 6608 value {expr}. Examples: > 6609 nr2char(64) returns "@" 6610 nr2char(32) returns " " 6611< When {utf8} is omitted or zero, the current 'encoding' is used. 6612 Example for "utf-8": > 6613 nr2char(300) returns I with bow character 6614< With {utf8} set to 1, always return utf-8 characters. 6615 Note that a NUL character in the file is specified with 6616 nr2char(10), because NULs are represented with newline 6617 characters. nr2char(0) is a real NUL and terminates the 6618 string, thus results in an empty string. 6619 6620or({expr}, {expr}) *or()* 6621 Bitwise OR on the two arguments. The arguments are converted 6622 to a number. A List, Dict or Float argument causes an error. 6623 Example: > 6624 :let bits = or(bits, 0x80) 6625 6626 6627pathshorten({expr}) *pathshorten()* 6628 Shorten directory names in the path {expr} and return the 6629 result. The tail, the file name, is kept as-is. The other 6630 components in the path are reduced to single letters. Leading 6631 '~' and '.' characters are kept. Example: > 6632 :echo pathshorten('~/.vim/autoload/myfile.vim') 6633< ~/.v/a/myfile.vim ~ 6634 It doesn't matter if the path exists or not. 6635 6636perleval({expr}) *perleval()* 6637 Evaluate Perl expression {expr} in scalar context and return 6638 its result converted to Vim data structures. If value can't be 6639 converted, it is returned as a string Perl representation. 6640 Note: If you want an array or hash, {expr} must return a 6641 reference to it. 6642 Example: > 6643 :echo perleval('[1 .. 4]') 6644< [1, 2, 3, 4] 6645 {only available when compiled with the |+perl| feature} 6646 6647pow({x}, {y}) *pow()* 6648 Return the power of {x} to the exponent {y} as a |Float|. 6649 {x} and {y} must evaluate to a |Float| or a |Number|. 6650 Examples: > 6651 :echo pow(3, 3) 6652< 27.0 > 6653 :echo pow(2, 16) 6654< 65536.0 > 6655 :echo pow(32, 0.20) 6656< 2.0 6657 {only available when compiled with the |+float| feature} 6658 6659prevnonblank({lnum}) *prevnonblank()* 6660 Return the line number of the first line at or above {lnum} 6661 that is not blank. Example: > 6662 let ind = indent(prevnonblank(v:lnum - 1)) 6663< When {lnum} is invalid or there is no non-blank line at or 6664 above it, zero is returned. 6665 Also see |nextnonblank()|. 6666 6667 6668printf({fmt}, {expr1} ...) *printf()* 6669 Return a String with {fmt}, where "%" items are replaced by 6670 the formatted form of their respective arguments. Example: > 6671 printf("%4d: E%d %.30s", lnum, errno, msg) 6672< May result in: 6673 " 99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~ 6674 6675 Often used items are: 6676 %s string 6677 %6S string right-aligned in 6 display cells 6678 %6s string right-aligned in 6 bytes 6679 %.9s string truncated to 9 bytes 6680 %c single byte 6681 %d decimal number 6682 %5d decimal number padded with spaces to 5 characters 6683 %x hex number 6684 %04x hex number padded with zeros to at least 4 characters 6685 %X hex number using upper case letters 6686 %o octal number 6687 %08b binary number padded with zeros to at least 8 chars 6688 %f floating point number as 12.23, inf, -inf or nan 6689 %F floating point number as 12.23, INF, -INF or NAN 6690 %e floating point number as 1.23e3, inf, -inf or nan 6691 %E floating point number as 1.23E3, INF, -INF or NAN 6692 %g floating point number, as %f or %e depending on value 6693 %G floating point number, as %F or %E depending on value 6694 %% the % character itself 6695 6696 Conversion specifications start with '%' and end with the 6697 conversion type. All other characters are copied unchanged to 6698 the result. 6699 6700 The "%" starts a conversion specification. The following 6701 arguments appear in sequence: 6702 6703 % [flags] [field-width] [.precision] type 6704 6705 flags 6706 Zero or more of the following flags: 6707 6708 # The value should be converted to an "alternate 6709 form". For c, d, and s conversions, this option 6710 has no effect. For o conversions, the precision 6711 of the number is increased to force the first 6712 character of the output string to a zero (except 6713 if a zero value is printed with an explicit 6714 precision of zero). 6715 For b and B conversions, a non-zero result has 6716 the string "0b" (or "0B" for B conversions) 6717 prepended to it. 6718 For x and X conversions, a non-zero result has 6719 the string "0x" (or "0X" for X conversions) 6720 prepended to it. 6721 6722 0 (zero) Zero padding. For all conversions the converted 6723 value is padded on the left with zeros rather 6724 than blanks. If a precision is given with a 6725 numeric conversion (d, b, B, o, x, and X), the 0 6726 flag is ignored. 6727 6728 - A negative field width flag; the converted value 6729 is to be left adjusted on the field boundary. 6730 The converted value is padded on the right with 6731 blanks, rather than on the left with blanks or 6732 zeros. A - overrides a 0 if both are given. 6733 6734 ' ' (space) A blank should be left before a positive 6735 number produced by a signed conversion (d). 6736 6737 + A sign must always be placed before a number 6738 produced by a signed conversion. A + overrides 6739 a space if both are used. 6740 6741 field-width 6742 An optional decimal digit string specifying a minimum 6743 field width. If the converted value has fewer bytes 6744 than the field width, it will be padded with spaces on 6745 the left (or right, if the left-adjustment flag has 6746 been given) to fill out the field width. 6747 6748 .precision 6749 An optional precision, in the form of a period '.' 6750 followed by an optional digit string. If the digit 6751 string is omitted, the precision is taken as zero. 6752 This gives the minimum number of digits to appear for 6753 d, o, x, and X conversions, or the maximum number of 6754 bytes to be printed from a string for s conversions. 6755 For floating point it is the number of digits after 6756 the decimal point. 6757 6758 type 6759 A character that specifies the type of conversion to 6760 be applied, see below. 6761 6762 A field width or precision, or both, may be indicated by an 6763 asterisk '*' instead of a digit string. In this case, a 6764 Number argument supplies the field width or precision. A 6765 negative field width is treated as a left adjustment flag 6766 followed by a positive field width; a negative precision is 6767 treated as though it were missing. Example: > 6768 :echo printf("%d: %.*s", nr, width, line) 6769< This limits the length of the text used from "line" to 6770 "width" bytes. 6771 6772 The conversion specifiers and their meanings are: 6773 6774 *printf-d* *printf-b* *printf-B* *printf-o* 6775 *printf-x* *printf-X* 6776 dbBoxX The Number argument is converted to signed decimal 6777 (d), unsigned binary (b and B), unsigned octal (o), or 6778 unsigned hexadecimal (x and X) notation. The letters 6779 "abcdef" are used for x conversions; the letters 6780 "ABCDEF" are used for X conversions. 6781 The precision, if any, gives the minimum number of 6782 digits that must appear; if the converted value 6783 requires fewer digits, it is padded on the left with 6784 zeros. 6785 In no case does a non-existent or small field width 6786 cause truncation of a numeric field; if the result of 6787 a conversion is wider than the field width, the field 6788 is expanded to contain the conversion result. 6789 The 'h' modifier indicates the argument is 16 bits. 6790 The 'l' modifier indicates the argument is 32 bits. 6791 The 'L' modifier indicates the argument is 64 bits. 6792 Generally, these modifiers are not useful. They are 6793 ignored when type is known from the argument. 6794 6795 i alias for d 6796 D alias for ld 6797 U alias for lu 6798 O alias for lo 6799 6800 *printf-c* 6801 c The Number argument is converted to a byte, and the 6802 resulting character is written. 6803 6804 *printf-s* 6805 s The text of the String argument is used. If a 6806 precision is specified, no more bytes than the number 6807 specified are used. 6808 If the argument is not a String type, it is 6809 automatically converted to text with the same format 6810 as ":echo". 6811 *printf-S* 6812 S The text of the String argument is used. If a 6813 precision is specified, no more display cells than the 6814 number specified are used. Without the |+multi_byte| 6815 feature works just like 's'. 6816 6817 *printf-f* *E807* 6818 f F The Float argument is converted into a string of the 6819 form 123.456. The precision specifies the number of 6820 digits after the decimal point. When the precision is 6821 zero the decimal point is omitted. When the precision 6822 is not specified 6 is used. A really big number 6823 (out of range or dividing by zero) results in "inf" 6824 or "-inf" with %f (INF or -INF with %F). 6825 "0.0 / 0.0" results in "nan" with %f (NAN with %F). 6826 Example: > 6827 echo printf("%.2f", 12.115) 6828< 12.12 6829 Note that roundoff depends on the system libraries. 6830 Use |round()| when in doubt. 6831 6832 *printf-e* *printf-E* 6833 e E The Float argument is converted into a string of the 6834 form 1.234e+03 or 1.234E+03 when using 'E'. The 6835 precision specifies the number of digits after the 6836 decimal point, like with 'f'. 6837 6838 *printf-g* *printf-G* 6839 g G The Float argument is converted like with 'f' if the 6840 value is between 0.001 (inclusive) and 10000000.0 6841 (exclusive). Otherwise 'e' is used for 'g' and 'E' 6842 for 'G'. When no precision is specified superfluous 6843 zeroes and '+' signs are removed, except for the zero 6844 immediately after the decimal point. Thus 10000000.0 6845 results in 1.0e7. 6846 6847 *printf-%* 6848 % A '%' is written. No argument is converted. The 6849 complete conversion specification is "%%". 6850 6851 When a Number argument is expected a String argument is also 6852 accepted and automatically converted. 6853 When a Float or String argument is expected a Number argument 6854 is also accepted and automatically converted. 6855 Any other argument type results in an error message. 6856 6857 *E766* *E767* 6858 The number of {exprN} arguments must exactly match the number 6859 of "%" items. If there are not sufficient or too many 6860 arguments an error is given. Up to 18 arguments can be used. 6861 6862 6863prompt_setcallback({buf}, {expr}) *prompt_setcallback()* 6864 Set prompt callback for buffer {buf} to {expr}. When {expr} 6865 is an empty string the callback is removed. This has only 6866 effect if {buf} has 'buftype' set to "prompt". 6867 6868 The callback is invoked when pressing Enter. The current 6869 buffer will always be the prompt buffer. A new line for a 6870 prompt is added before invoking the callback, thus the prompt 6871 for which the callback was invoked will be in the last but one 6872 line. 6873 If the callback wants to add text to the buffer, it must 6874 insert it above the last line, since that is where the current 6875 prompt is. This can also be done asynchronously. 6876 The callback is invoked with one argument, which is the text 6877 that was entered at the prompt. This can be an empty string 6878 if the user only typed Enter. 6879 Example: > 6880 call prompt_setcallback(bufnr(''), function('s:TextEntered')) 6881 func s:TextEntered(text) 6882 if a:text == 'exit' || a:text == 'quit' 6883 stopinsert 6884 close 6885 else 6886 call append(line('$') - 1, 'Entered: "' . a:text . '"') 6887 " Reset 'modified' to allow the buffer to be closed. 6888 set nomodified 6889 endif 6890 endfunc 6891 6892prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()* 6893 Set a callback for buffer {buf} to {expr}. When {expr} is an 6894 empty string the callback is removed. This has only effect if 6895 {buf} has 'buftype' set to "prompt". 6896 6897 This callback will be invoked when pressing CTRL-C in Insert 6898 mode. Without setting a callback Vim will exit Insert mode, 6899 as in any buffer. 6900 6901prompt_setprompt({buf}, {text}) *prompt_setprompt()* 6902 Set prompt for buffer {buf} to {text}. You most likely want 6903 {text} to end in a space. 6904 The result is only visible if {buf} has 'buftype' set to 6905 "prompt". Example: > 6906 call prompt_setprompt(bufnr(''), 'command: ') 6907< 6908 *prop_add()* *E965* 6909prop_add({lnum}, {col}, {props}) 6910 Attach a text property at position {lnum}, {col}. {col} is 6911 counted in bytes, use one for the first column. 6912 If {lnum} is invalid an error is given. *E966* 6913 If {col} is invalid an error is given. *E964* 6914 6915 {props} is a dictionary with these fields: 6916 length length of text in bytes, can only be used 6917 for a property that does not continue in 6918 another line; can be zero 6919 end_lnum line number for the end of text 6920 end_col column just after the text; not used when 6921 "length" is present; when {col} and "end_col" 6922 are equal, and "end_lnum" is omitted or equal 6923 to {lnum}, this is a zero-width text property 6924 bufnr buffer to add the property to; when omitted 6925 the current buffer is used 6926 id user defined ID for the property; when omitted 6927 zero is used 6928 type name of the text property type 6929 All fields except "type" are optional. 6930 6931 It is an error when both "length" and "end_lnum" or "end_col" 6932 are given. Either use "length" or "end_col" for a property 6933 within one line, or use "end_lnum" and "end_col" for a 6934 property that spans more than one line. 6935 When neither "length" nor "end_col" are given the property 6936 will be zero-width. That means it will not be highlighted but 6937 will move with the text, as a kind of mark. 6938 The property can end exactly at the last character of the 6939 text, or just after it. In the last case, if text is appended 6940 to the line, the text property size will increase, also when 6941 the property type does not have "end_incl" set. 6942 6943 "type" will first be looked up in the buffer the property is 6944 added to. When not found, the global property types are used. 6945 If not found an error is given. 6946 6947 See |text-properties| for information about text properties. 6948 6949 6950prop_clear({lnum} [, {lnum-end} [, {props}]]) *prop_clear()* 6951 Remove all text properties from line {lnum}. 6952 When {lnum-end} is given, remove all text properties from line 6953 {lnum} to {lnum-end} (inclusive). 6954 6955 When {props} contains a "bufnr" item use this buffer, 6956 otherwise use the current buffer. 6957 6958 See |text-properties| for information about text properties. 6959 6960 *prop_find()* 6961prop_find({props} [, {direction}]) 6962 NOT IMPLEMENTED YET 6963 Search for a text property as specified with {props}: 6964 id property with this ID 6965 type property with this type name 6966 bufnr buffer to search in; when present a 6967 start position with "lnum" and "col" 6968 must be given; when omitted the 6969 current buffer is used 6970 lnum start in this line (when omitted start 6971 at the cursor) 6972 col start at this column (when omitted 6973 and "lnum" is given: use column 1, 6974 otherwise start at the cursor) 6975 skipstart do not look for a match at the start 6976 position 6977 6978 {direction} can be "f" for forward and "b" for backward. When 6979 omitted forward search is performed. 6980 6981 If a match is found then a Dict is returned with the entries 6982 as with prop_list(), and additionally an "lnum" entry. 6983 If no match is found then an empty Dict is returned. 6984 6985 See |text-properties| for information about text properties. 6986 6987 6988prop_list({lnum} [, {props}]) *prop_list()* 6989 Return a List with all text properties in line {lnum}. 6990 6991 When {props} contains a "bufnr" item, use this buffer instead 6992 of the current buffer. 6993 6994 The properties are ordered by starting column and priority. 6995 Each property is a Dict with these entries: 6996 col starting column 6997 length length in bytes, one more if line break is 6998 included 6999 id property ID 7000 type name of the property type, omitted if 7001 the type was deleted 7002 start when TRUE property starts in this line 7003 end when TRUE property ends in this line 7004 7005 When "start" is zero the property started in a previous line, 7006 the current one is a continuation. 7007 When "end" is zero the property continues in the next line. 7008 The line break after this line is included. 7009 7010 See |text-properties| for information about text properties. 7011 7012 7013 *prop_remove()* *E968* 7014prop_remove({props} [, {lnum} [, {lnum-end}]]) 7015 Remove a matching text property from line {lnum}. When 7016 {lnum-end} is given, remove matching text properties from line 7017 {lnum} to {lnum-end} (inclusive). 7018 When {lnum} is omitted remove matching text properties from 7019 all lines. 7020 7021 {props} is a dictionary with these fields: 7022 id remove text properties with this ID 7023 type remove text properties with this type name 7024 bufnr use this buffer instead of the current one 7025 all when TRUE remove all matching text properties, 7026 not just the first one 7027 A property matches when either "id" or "type" matches. 7028 7029 Returns the number of properties that were removed. 7030 7031 See |text-properties| for information about text properties. 7032 7033 7034prop_type_add({name}, {props}) *prop_type_add()* *E969* *E970* 7035 Add a text property type {name}. If a property type with this 7036 name already exists an error is given. 7037 {props} is a dictionary with these optional fields: 7038 bufnr define the property only for this buffer; this 7039 avoids name collisions and automatically 7040 clears the property types when the buffer is 7041 deleted. 7042 highlight name of highlight group to use 7043 priority when a character has multiple text 7044 properties the one with the highest priority 7045 will be used; negative values can be used, the 7046 default priority is zero 7047 start_incl when TRUE inserts at the start position will 7048 be included in the text property 7049 end_incl when TRUE inserts at the end position will be 7050 included in the text property 7051 7052 See |text-properties| for information about text properties. 7053 7054 7055prop_type_change({name}, {props}) *prop_type_change()* 7056 Change properties of an existing text property type. If a 7057 property with this name does not exist an error is given. 7058 The {props} argument is just like |prop_type_add()|. 7059 7060 See |text-properties| for information about text properties. 7061 7062 7063prop_type_delete({name} [, {props}]) *prop_type_delete()* 7064 Remove the text property type {name}. When text properties 7065 using the type {name} are still in place, they will not have 7066 an effect and can no longer be removed by name. 7067 7068 {props} can contain a "bufnr" item. When it is given, delete 7069 a property type from this buffer instead of from the global 7070 property types. 7071 7072 When text property type {name} is not found there is no error. 7073 7074 See |text-properties| for information about text properties. 7075 7076 7077prop_type_get([{name} [, {props}]) *prop_type_get()* 7078 Returns the properties of property type {name}. This is a 7079 dictionary with the same fields as was given to 7080 prop_type_add(). 7081 When the property type {name} does not exist, an empty 7082 dictionary is returned. 7083 7084 {props} can contain a "bufnr" item. When it is given, use 7085 this buffer instead of the global property types. 7086 7087 See |text-properties| for information about text properties. 7088 7089 7090prop_type_list([{props}]) *prop_type_list()* 7091 Returns a list with all property type names. 7092 7093 {props} can contain a "bufnr" item. When it is given, use 7094 this buffer instead of the global property types. 7095 7096 See |text-properties| for information about text properties. 7097 7098 7099pumvisible() *pumvisible()* 7100 Returns non-zero when the popup menu is visible, zero 7101 otherwise. See |ins-completion-menu|. 7102 This can be used to avoid some things that would remove the 7103 popup menu. 7104 7105py3eval({expr}) *py3eval()* 7106 Evaluate Python expression {expr} and return its result 7107 converted to Vim data structures. 7108 Numbers and strings are returned as they are (strings are 7109 copied though, Unicode strings are additionally converted to 7110 'encoding'). 7111 Lists are represented as Vim |List| type. 7112 Dictionaries are represented as Vim |Dictionary| type with 7113 keys converted to strings. 7114 {only available when compiled with the |+python3| feature} 7115 7116 *E858* *E859* 7117pyeval({expr}) *pyeval()* 7118 Evaluate Python expression {expr} and return its result 7119 converted to Vim data structures. 7120 Numbers and strings are returned as they are (strings are 7121 copied though). 7122 Lists are represented as Vim |List| type. 7123 Dictionaries are represented as Vim |Dictionary| type, 7124 non-string keys result in error. 7125 {only available when compiled with the |+python| feature} 7126 7127pyxeval({expr}) *pyxeval()* 7128 Evaluate Python expression {expr} and return its result 7129 converted to Vim data structures. 7130 Uses Python 2 or 3, see |python_x| and 'pyxversion'. 7131 See also: |pyeval()|, |py3eval()| 7132 {only available when compiled with the |+python| or the 7133 |+python3| feature} 7134 7135 *E726* *E727* 7136range({expr} [, {max} [, {stride}]]) *range()* 7137 Returns a |List| with Numbers: 7138 - If only {expr} is specified: [0, 1, ..., {expr} - 1] 7139 - If {max} is specified: [{expr}, {expr} + 1, ..., {max}] 7140 - If {stride} is specified: [{expr}, {expr} + {stride}, ..., 7141 {max}] (increasing {expr} with {stride} each time, not 7142 producing a value past {max}). 7143 When the maximum is one before the start the result is an 7144 empty list. When the maximum is more than one before the 7145 start this is an error. 7146 Examples: > 7147 range(4) " [0, 1, 2, 3] 7148 range(2, 4) " [2, 3, 4] 7149 range(2, 9, 3) " [2, 5, 8] 7150 range(2, -2, -1) " [2, 1, 0, -1, -2] 7151 range(0) " [] 7152 range(2, 0) " error! 7153< 7154 *readfile()* 7155readfile({fname} [, {type} [, {max}]]) 7156 Read file {fname} and return a |List|, each line of the file 7157 as an item. Lines are broken at NL characters. Macintosh 7158 files separated with CR will result in a single long line 7159 (unless a NL appears somewhere). 7160 All NUL characters are replaced with a NL character. 7161 When {type} contains "b" binary mode is used: 7162 - When the last line ends in a NL an extra empty list item is 7163 added. 7164 - No CR characters are removed. 7165 When {type} contains "B" a |Blob| is returned with the binary 7166 data of the file unmodified. 7167 Otherwise: 7168 - CR characters that appear before a NL are removed. 7169 - Whether the last line ends in a NL or not does not matter. 7170 - When 'encoding' is Unicode any UTF-8 byte order mark is 7171 removed from the text. 7172 When {max} is given this specifies the maximum number of lines 7173 to be read. Useful if you only want to check the first ten 7174 lines of a file: > 7175 :for line in readfile(fname, '', 10) 7176 : if line =~ 'Date' | echo line | endif 7177 :endfor 7178< When {max} is negative -{max} lines from the end of the file 7179 are returned, or as many as there are. 7180 When {max} is zero the result is an empty list. 7181 Note that without {max} the whole file is read into memory. 7182 Also note that there is no recognition of encoding. Read a 7183 file into a buffer if you need to. 7184 When the file can't be opened an error message is given and 7185 the result is an empty list. 7186 Also see |writefile()|. 7187 7188reg_executing() *reg_executing()* 7189 Returns the single letter name of the register being executed. 7190 Returns an empty string when no register is being executed. 7191 See |@|. 7192 7193reg_recording() *reg_recording()* 7194 Returns the single letter name of the register being recorded. 7195 Returns an empty string string when not recording. See |q|. 7196 7197reltime([{start} [, {end}]]) *reltime()* 7198 Return an item that represents a time value. The format of 7199 the item depends on the system. It can be passed to 7200 |reltimestr()| to convert it to a string or |reltimefloat()| 7201 to convert to a Float. 7202 Without an argument it returns the current time. 7203 With one argument is returns the time passed since the time 7204 specified in the argument. 7205 With two arguments it returns the time passed between {start} 7206 and {end}. 7207 The {start} and {end} arguments must be values returned by 7208 reltime(). 7209 {only available when compiled with the |+reltime| feature} 7210 7211reltimefloat({time}) *reltimefloat()* 7212 Return a Float that represents the time value of {time}. 7213 Example: > 7214 let start = reltime() 7215 call MyFunction() 7216 let seconds = reltimefloat(reltime(start)) 7217< See the note of reltimestr() about overhead. 7218 Also see |profiling|. 7219 {only available when compiled with the |+reltime| feature} 7220 7221reltimestr({time}) *reltimestr()* 7222 Return a String that represents the time value of {time}. 7223 This is the number of seconds, a dot and the number of 7224 microseconds. Example: > 7225 let start = reltime() 7226 call MyFunction() 7227 echo reltimestr(reltime(start)) 7228< Note that overhead for the commands will be added to the time. 7229 The accuracy depends on the system. 7230 Leading spaces are used to make the string align nicely. You 7231 can use split() to remove it. > 7232 echo split(reltimestr(reltime(start)))[0] 7233< Also see |profiling|. 7234 {only available when compiled with the |+reltime| feature} 7235 7236 *remote_expr()* *E449* 7237remote_expr({server}, {string} [, {idvar} [, {timeout}]]) 7238 Send the {string} to {server}. The string is sent as an 7239 expression and the result is returned after evaluation. 7240 The result must be a String or a |List|. A |List| is turned 7241 into a String by joining the items with a line break in 7242 between (not at the end), like with join(expr, "\n"). 7243 If {idvar} is present and not empty, it is taken as the name 7244 of a variable and a {serverid} for later use with 7245 |remote_read()| is stored there. 7246 If {timeout} is given the read times out after this many 7247 seconds. Otherwise a timeout of 600 seconds is used. 7248 See also |clientserver| |RemoteReply|. 7249 This function is not available in the |sandbox|. 7250 {only available when compiled with the |+clientserver| feature} 7251 Note: Any errors will cause a local error message to be issued 7252 and the result will be the empty string. 7253 7254 Variables will be evaluated in the global namespace, 7255 independent of a function currently being active. Except 7256 when in debug mode, then local function variables and 7257 arguments can be evaluated. 7258 7259 Examples: > 7260 :echo remote_expr("gvim", "2+2") 7261 :echo remote_expr("gvim1", "b:current_syntax") 7262< 7263 7264remote_foreground({server}) *remote_foreground()* 7265 Move the Vim server with the name {server} to the foreground. 7266 This works like: > 7267 remote_expr({server}, "foreground()") 7268< Except that on Win32 systems the client does the work, to work 7269 around the problem that the OS doesn't always allow the server 7270 to bring itself to the foreground. 7271 Note: This does not restore the window if it was minimized, 7272 like foreground() does. 7273 This function is not available in the |sandbox|. 7274 {only in the Win32, Athena, Motif and GTK GUI versions and the 7275 Win32 console version} 7276 7277 7278remote_peek({serverid} [, {retvar}]) *remote_peek()* 7279 Returns a positive number if there are available strings 7280 from {serverid}. Copies any reply string into the variable 7281 {retvar} if specified. {retvar} must be a string with the 7282 name of a variable. 7283 Returns zero if none are available. 7284 Returns -1 if something is wrong. 7285 See also |clientserver|. 7286 This function is not available in the |sandbox|. 7287 {only available when compiled with the |+clientserver| feature} 7288 Examples: > 7289 :let repl = "" 7290 :echo "PEEK: ".remote_peek(id, "repl").": ".repl 7291 7292remote_read({serverid}, [{timeout}]) *remote_read()* 7293 Return the oldest available reply from {serverid} and consume 7294 it. Unless a {timeout} in seconds is given, it blocks until a 7295 reply is available. 7296 See also |clientserver|. 7297 This function is not available in the |sandbox|. 7298 {only available when compiled with the |+clientserver| feature} 7299 Example: > 7300 :echo remote_read(id) 7301< 7302 *remote_send()* *E241* 7303remote_send({server}, {string} [, {idvar}]) 7304 Send the {string} to {server}. The string is sent as input 7305 keys and the function returns immediately. At the Vim server 7306 the keys are not mapped |:map|. 7307 If {idvar} is present, it is taken as the name of a variable 7308 and a {serverid} for later use with remote_read() is stored 7309 there. 7310 See also |clientserver| |RemoteReply|. 7311 This function is not available in the |sandbox|. 7312 {only available when compiled with the |+clientserver| feature} 7313 7314 Note: Any errors will be reported in the server and may mess 7315 up the display. 7316 Examples: > 7317 :echo remote_send("gvim", ":DropAndReply ".file, "serverid"). 7318 \ remote_read(serverid) 7319 7320 :autocmd NONE RemoteReply * 7321 \ echo remote_read(expand("<amatch>")) 7322 :echo remote_send("gvim", ":sleep 10 | echo ". 7323 \ 'server2client(expand("<client>"), "HELLO")<CR>') 7324< 7325 *remote_startserver()* *E941* *E942* 7326remote_startserver({name}) 7327 Become the server {name}. This fails if already running as a 7328 server, when |v:servername| is not empty. 7329 {only available when compiled with the |+clientserver| feature} 7330 7331remove({list}, {idx} [, {end}]) *remove()* 7332 Without {end}: Remove the item at {idx} from |List| {list} and 7333 return the item. 7334 With {end}: Remove items from {idx} to {end} (inclusive) and 7335 return a List with these items. When {idx} points to the same 7336 item as {end} a list with one item is returned. When {end} 7337 points to an item before {idx} this is an error. 7338 See |list-index| for possible values of {idx} and {end}. 7339 Example: > 7340 :echo "last item: " . remove(mylist, -1) 7341 :call remove(mylist, 0, 9) 7342< 7343 Use |delete()| to remove a file. 7344 7345remove({blob}, {idx} [, {end}]) 7346 Without {end}: Remove the byte at {idx} from |Blob| {blob} and 7347 return the byte. 7348 With {end}: Remove bytes from {idx} to {end} (inclusive) and 7349 return a |Blob| with these bytes. When {idx} points to the same 7350 byte as {end} a |Blob| with one byte is returned. When {end} 7351 points to a byte before {idx} this is an error. 7352 Example: > 7353 :echo "last byte: " . remove(myblob, -1) 7354 :call remove(mylist, 0, 9) 7355 7356remove({dict}, {key}) 7357 Remove the entry from {dict} with key {key}. Example: > 7358 :echo "removed " . remove(dict, "one") 7359< If there is no {key} in {dict} this is an error. 7360 7361rename({from}, {to}) *rename()* 7362 Rename the file by the name {from} to the name {to}. This 7363 should also work to move files across file systems. The 7364 result is a Number, which is 0 if the file was renamed 7365 successfully, and non-zero when the renaming failed. 7366 NOTE: If {to} exists it is overwritten without warning. 7367 This function is not available in the |sandbox|. 7368 7369repeat({expr}, {count}) *repeat()* 7370 Repeat {expr} {count} times and return the concatenated 7371 result. Example: > 7372 :let separator = repeat('-', 80) 7373< When {count} is zero or negative the result is empty. 7374 When {expr} is a |List| the result is {expr} concatenated 7375 {count} times. Example: > 7376 :let longlist = repeat(['a', 'b'], 3) 7377< Results in ['a', 'b', 'a', 'b', 'a', 'b']. 7378 7379 7380resolve({filename}) *resolve()* *E655* 7381 On MS-Windows, when {filename} is a shortcut (a .lnk file), 7382 returns the path the shortcut points to in a simplified form. 7383 On Unix, repeat resolving symbolic links in all path 7384 components of {filename} and return the simplified result. 7385 To cope with link cycles, resolving of symbolic links is 7386 stopped after 100 iterations. 7387 On other systems, return the simplified {filename}. 7388 The simplification step is done as by |simplify()|. 7389 resolve() keeps a leading path component specifying the 7390 current directory (provided the result is still a relative 7391 path name) and also keeps a trailing path separator. 7392 7393 *reverse()* 7394reverse({object}) 7395 Reverse the order of items in {object} in-place. 7396 {object} can be a |List| or a |Blob|. 7397 Returns {object}. 7398 If you want an object to remain unmodified make a copy first: > 7399 :let revlist = reverse(copy(mylist)) 7400 7401round({expr}) *round()* 7402 Round off {expr} to the nearest integral value and return it 7403 as a |Float|. If {expr} lies halfway between two integral 7404 values, then use the larger one (away from zero). 7405 {expr} must evaluate to a |Float| or a |Number|. 7406 Examples: > 7407 echo round(0.456) 7408< 0.0 > 7409 echo round(4.5) 7410< 5.0 > 7411 echo round(-4.5) 7412< -5.0 7413 {only available when compiled with the |+float| feature} 7414 7415screenattr({row}, {col}) *screenattr()* 7416 Like |screenchar()|, but return the attribute. This is a rather 7417 arbitrary number that can only be used to compare to the 7418 attribute at other positions. 7419 7420screenchar({row}, {col}) *screenchar()* 7421 The result is a Number, which is the character at position 7422 [row, col] on the screen. This works for every possible 7423 screen position, also status lines, window separators and the 7424 command line. The top left position is row one, column one 7425 The character excludes composing characters. For double-byte 7426 encodings it may only be the first byte. 7427 This is mainly to be used for testing. 7428 Returns -1 when row or col is out of range. 7429 7430screencol() *screencol()* 7431 The result is a Number, which is the current screen column of 7432 the cursor. The leftmost column has number 1. 7433 This function is mainly used for testing. 7434 7435 Note: Always returns the current screen column, thus if used 7436 in a command (e.g. ":echo screencol()") it will return the 7437 column inside the command line, which is 1 when the command is 7438 executed. To get the cursor position in the file use one of 7439 the following mappings: > 7440 nnoremap <expr> GG ":echom ".screencol()."\n" 7441 nnoremap <silent> GG :echom screencol()<CR> 7442< 7443screenrow() *screenrow()* 7444 The result is a Number, which is the current screen row of the 7445 cursor. The top line has number one. 7446 This function is mainly used for testing. 7447 Alternatively you can use |winline()|. 7448 7449 Note: Same restrictions as with |screencol()|. 7450 7451search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()* 7452 Search for regexp pattern {pattern}. The search starts at the 7453 cursor position (you can use |cursor()| to set it). 7454 7455 When a match has been found its line number is returned. 7456 If there is no match a 0 is returned and the cursor doesn't 7457 move. No error message is given. 7458 7459 {flags} is a String, which can contain these character flags: 7460 'b' search Backward instead of forward 7461 'c' accept a match at the Cursor position 7462 'e' move to the End of the match 7463 'n' do Not move the cursor 7464 'p' return number of matching sub-Pattern (see below) 7465 's' Set the ' mark at the previous location of the cursor 7466 'w' Wrap around the end of the file 7467 'W' don't Wrap around the end of the file 7468 'z' start searching at the cursor column instead of zero 7469 If neither 'w' or 'W' is given, the 'wrapscan' option applies. 7470 7471 If the 's' flag is supplied, the ' mark is set, only if the 7472 cursor is moved. The 's' flag cannot be combined with the 'n' 7473 flag. 7474 7475 'ignorecase', 'smartcase' and 'magic' are used. 7476 7477 When the 'z' flag is not given, searching always starts in 7478 column zero and then matches before the cursor are skipped. 7479 When the 'c' flag is present in 'cpo' the next search starts 7480 after the match. Without the 'c' flag the next search starts 7481 one column further. 7482 7483 When the {stopline} argument is given then the search stops 7484 after searching this line. This is useful to restrict the 7485 search to a range of lines. Examples: > 7486 let match = search('(', 'b', line("w0")) 7487 let end = search('END', '', line("w$")) 7488< When {stopline} is used and it is not zero this also implies 7489 that the search does not wrap around the end of the file. 7490 A zero value is equal to not giving the argument. 7491 7492 When the {timeout} argument is given the search stops when 7493 more than this many milliseconds have passed. Thus when 7494 {timeout} is 500 the search stops after half a second. 7495 The value must not be negative. A zero value is like not 7496 giving the argument. 7497 {only available when compiled with the |+reltime| feature} 7498 7499 *search()-sub-match* 7500 With the 'p' flag the returned value is one more than the 7501 first sub-match in \(\). One if none of them matched but the 7502 whole pattern did match. 7503 To get the column number too use |searchpos()|. 7504 7505 The cursor will be positioned at the match, unless the 'n' 7506 flag is used. 7507 7508 Example (goes over all files in the argument list): > 7509 :let n = 1 7510 :while n <= argc() " loop over all files in arglist 7511 : exe "argument " . n 7512 : " start at the last char in the file and wrap for the 7513 : " first search to find match at start of file 7514 : normal G$ 7515 : let flags = "w" 7516 : while search("foo", flags) > 0 7517 : s/foo/bar/g 7518 : let flags = "W" 7519 : endwhile 7520 : update " write the file if modified 7521 : let n = n + 1 7522 :endwhile 7523< 7524 Example for using some flags: > 7525 :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe') 7526< This will search for the keywords "if", "else", and "endif" 7527 under or after the cursor. Because of the 'p' flag, it 7528 returns 1, 2, or 3 depending on which keyword is found, or 0 7529 if the search fails. With the cursor on the first word of the 7530 line: 7531 if (foo == 0) | let foo = foo + 1 | endif ~ 7532 the function returns 1. Without the 'c' flag, the function 7533 finds the "endif" and returns 3. The same thing happens 7534 without the 'e' flag if the cursor is on the "f" of "if". 7535 The 'n' flag tells the function not to move the cursor. 7536 7537 7538searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()* 7539 Search for the declaration of {name}. 7540 7541 With a non-zero {global} argument it works like |gD|, find 7542 first match in the file. Otherwise it works like |gd|, find 7543 first match in the function. 7544 7545 With a non-zero {thisblock} argument matches in a {} block 7546 that ends before the cursor position are ignored. Avoids 7547 finding variable declarations only valid in another scope. 7548 7549 Moves the cursor to the found match. 7550 Returns zero for success, non-zero for failure. 7551 Example: > 7552 if searchdecl('myvar') == 0 7553 echo getline('.') 7554 endif 7555< 7556 *searchpair()* 7557searchpair({start}, {middle}, {end} [, {flags} [, {skip} 7558 [, {stopline} [, {timeout}]]]]) 7559 Search for the match of a nested start-end pair. This can be 7560 used to find the "endif" that matches an "if", while other 7561 if/endif pairs in between are ignored. 7562 The search starts at the cursor. The default is to search 7563 forward, include 'b' in {flags} to search backward. 7564 If a match is found, the cursor is positioned at it and the 7565 line number is returned. If no match is found 0 or -1 is 7566 returned and the cursor doesn't move. No error message is 7567 given. 7568 7569 {start}, {middle} and {end} are patterns, see |pattern|. They 7570 must not contain \( \) pairs. Use of \%( \) is allowed. When 7571 {middle} is not empty, it is found when searching from either 7572 direction, but only when not in a nested start-end pair. A 7573 typical use is: > 7574 searchpair('\<if\>', '\<else\>', '\<endif\>') 7575< By leaving {middle} empty the "else" is skipped. 7576 7577 {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with 7578 |search()|. Additionally: 7579 'r' Repeat until no more matches found; will find the 7580 outer pair. Implies the 'W' flag. 7581 'm' Return number of matches instead of line number with 7582 the match; will be > 1 when 'r' is used. 7583 Note: it's nearly always a good idea to use the 'W' flag, to 7584 avoid wrapping around the end of the file. 7585 7586 When a match for {start}, {middle} or {end} is found, the 7587 {skip} expression is evaluated with the cursor positioned on 7588 the start of the match. It should return non-zero if this 7589 match is to be skipped. E.g., because it is inside a comment 7590 or a string. 7591 When {skip} is omitted or empty, every match is accepted. 7592 When evaluating {skip} causes an error the search is aborted 7593 and -1 returned. 7594 {skip} can be a string, a lambda, a funcref or a partial. 7595 Anything else makes the function fail. 7596 7597 For {stopline} and {timeout} see |search()|. 7598 7599 The value of 'ignorecase' is used. 'magic' is ignored, the 7600 patterns are used like it's on. 7601 7602 The search starts exactly at the cursor. A match with 7603 {start}, {middle} or {end} at the next character, in the 7604 direction of searching, is the first one found. Example: > 7605 if 1 7606 if 2 7607 endif 2 7608 endif 1 7609< When starting at the "if 2", with the cursor on the "i", and 7610 searching forwards, the "endif 2" is found. When starting on 7611 the character just before the "if 2", the "endif 1" will be 7612 found. That's because the "if 2" will be found first, and 7613 then this is considered to be a nested if/endif from "if 2" to 7614 "endif 2". 7615 When searching backwards and {end} is more than one character, 7616 it may be useful to put "\zs" at the end of the pattern, so 7617 that when the cursor is inside a match with the end it finds 7618 the matching start. 7619 7620 Example, to find the "endif" command in a Vim script: > 7621 7622 :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W', 7623 \ 'getline(".") =~ "^\\s*\""') 7624 7625< The cursor must be at or after the "if" for which a match is 7626 to be found. Note that single-quote strings are used to avoid 7627 having to double the backslashes. The skip expression only 7628 catches comments at the start of a line, not after a command. 7629 Also, a word "en" or "if" halfway a line is considered a 7630 match. 7631 Another example, to search for the matching "{" of a "}": > 7632 7633 :echo searchpair('{', '', '}', 'bW') 7634 7635< This works when the cursor is at or before the "}" for which a 7636 match is to be found. To reject matches that syntax 7637 highlighting recognized as strings: > 7638 7639 :echo searchpair('{', '', '}', 'bW', 7640 \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"') 7641< 7642 *searchpairpos()* 7643searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} 7644 [, {stopline} [, {timeout}]]]]) 7645 Same as |searchpair()|, but returns a |List| with the line and 7646 column position of the match. The first element of the |List| 7647 is the line number and the second element is the byte index of 7648 the column position of the match. If no match is found, 7649 returns [0, 0]. > 7650 7651 :let [lnum,col] = searchpairpos('{', '', '}', 'n') 7652< 7653 See |match-parens| for a bigger and more useful example. 7654 7655searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()* 7656 Same as |search()|, but returns a |List| with the line and 7657 column position of the match. The first element of the |List| 7658 is the line number and the second element is the byte index of 7659 the column position of the match. If no match is found, 7660 returns [0, 0]. 7661 Example: > 7662 :let [lnum, col] = searchpos('mypattern', 'n') 7663 7664< When the 'p' flag is given then there is an extra item with 7665 the sub-pattern match number |search()-sub-match|. Example: > 7666 :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np') 7667< In this example "submatch" is 2 when a lowercase letter is 7668 found |/\l|, 3 when an uppercase letter is found |/\u|. 7669 7670server2client({clientid}, {string}) *server2client()* 7671 Send a reply string to {clientid}. The most recent {clientid} 7672 that sent a string can be retrieved with expand("<client>"). 7673 {only available when compiled with the |+clientserver| feature} 7674 Note: 7675 This id has to be stored before the next command can be 7676 received. I.e. before returning from the received command and 7677 before calling any commands that waits for input. 7678 See also |clientserver|. 7679 Example: > 7680 :echo server2client(expand("<client>"), "HELLO") 7681< 7682serverlist() *serverlist()* 7683 Return a list of available server names, one per line. 7684 When there are no servers or the information is not available 7685 an empty string is returned. See also |clientserver|. 7686 {only available when compiled with the |+clientserver| feature} 7687 Example: > 7688 :echo serverlist() 7689< 7690setbufline({expr}, {lnum}, {text}) *setbufline()* 7691 Set line {lnum} to {text} in buffer {expr}. To insert 7692 lines use |append()|. Any text properties in {lnum} are 7693 cleared. 7694 7695 For the use of {expr}, see |bufname()| above. 7696 7697 {lnum} is used like with |setline()|. 7698 This works like |setline()| for the specified buffer. 7699 On success 0 is returned, on failure 1 is returned. 7700 7701 If {expr} is not a valid buffer or {lnum} is not valid, an 7702 error message is given. 7703 7704setbufvar({expr}, {varname}, {val}) *setbufvar()* 7705 Set option or local variable {varname} in buffer {expr} to 7706 {val}. 7707 This also works for a global or local window option, but it 7708 doesn't work for a global or local window variable. 7709 For a local window option the global value is unchanged. 7710 For the use of {expr}, see |bufname()| above. 7711 Note that the variable name without "b:" must be used. 7712 Examples: > 7713 :call setbufvar(1, "&mod", 1) 7714 :call setbufvar("todo", "myvar", "foobar") 7715< This function is not available in the |sandbox|. 7716 7717setcharsearch({dict}) *setcharsearch()* 7718 Set the current character search information to {dict}, 7719 which contains one or more of the following entries: 7720 7721 char character which will be used for a subsequent 7722 |,| or |;| command; an empty string clears the 7723 character search 7724 forward direction of character search; 1 for forward, 7725 0 for backward 7726 until type of character search; 1 for a |t| or |T| 7727 character search, 0 for an |f| or |F| 7728 character search 7729 7730 This can be useful to save/restore a user's character search 7731 from a script: > 7732 :let prevsearch = getcharsearch() 7733 :" Perform a command which clobbers user's search 7734 :call setcharsearch(prevsearch) 7735< Also see |getcharsearch()|. 7736 7737setcmdpos({pos}) *setcmdpos()* 7738 Set the cursor position in the command line to byte position 7739 {pos}. The first position is 1. 7740 Use |getcmdpos()| to obtain the current position. 7741 Only works while editing the command line, thus you must use 7742 |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='. For 7743 |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is 7744 set after the command line is set to the expression. For 7745 |c_CTRL-R_=| it is set after evaluating the expression but 7746 before inserting the resulting text. 7747 When the number is too big the cursor is put at the end of the 7748 line. A number smaller than one has undefined results. 7749 Returns 0 when successful, 1 when not editing the command 7750 line. 7751 7752setfperm({fname}, {mode}) *setfperm()* *chmod* 7753 Set the file permissions for {fname} to {mode}. 7754 {mode} must be a string with 9 characters. It is of the form 7755 "rwxrwxrwx", where each group of "rwx" flags represent, in 7756 turn, the permissions of the owner of the file, the group the 7757 file belongs to, and other users. A '-' character means the 7758 permission is off, any other character means on. Multi-byte 7759 characters are not supported. 7760 7761 For example "rw-r-----" means read-write for the user, 7762 readable by the group, not accessible by others. "xx-x-----" 7763 would do the same thing. 7764 7765 Returns non-zero for success, zero for failure. 7766 7767 To read permissions see |getfperm()|. 7768 7769 7770setline({lnum}, {text}) *setline()* 7771 Set line {lnum} of the current buffer to {text}. To insert 7772 lines use |append()|. To set lines in another buffer use 7773 |setbufline()|. Any text properties in {lnum} are cleared. 7774 7775 {lnum} is used like with |getline()|. 7776 When {lnum} is just below the last line the {text} will be 7777 added as a new line. 7778 7779 If this succeeds, 0 is returned. If this fails (most likely 7780 because {lnum} is invalid) 1 is returned. 7781 7782 Example: > 7783 :call setline(5, strftime("%c")) 7784 7785< When {text} is a |List| then line {lnum} and following lines 7786 will be set to the items in the list. Example: > 7787 :call setline(5, ['aaa', 'bbb', 'ccc']) 7788< This is equivalent to: > 7789 :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']] 7790 : call setline(n, l) 7791 :endfor 7792 7793< Note: The '[ and '] marks are not set. 7794 7795setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()* 7796 Create or replace or add to the location list for window {nr}. 7797 {nr} can be the window number or the |window-ID|. 7798 When {nr} is zero the current window is used. 7799 7800 For a location list window, the displayed location list is 7801 modified. For an invalid window number {nr}, -1 is returned. 7802 Otherwise, same as |setqflist()|. 7803 Also see |location-list|. 7804 7805 If the optional {what} dictionary argument is supplied, then 7806 only the items listed in {what} are set. Refer to |setqflist()| 7807 for the list of supported keys in {what}. 7808 7809setmatches({list}) *setmatches()* 7810 Restores a list of matches saved by |getmatches()|. Returns 0 7811 if successful, otherwise -1. All current matches are cleared 7812 before the list is restored. See example for |getmatches()|. 7813 7814 *setpos()* 7815setpos({expr}, {list}) 7816 Set the position for {expr}. Possible values: 7817 . the cursor 7818 'x mark x 7819 7820 {list} must be a |List| with four or five numbers: 7821 [bufnum, lnum, col, off] 7822 [bufnum, lnum, col, off, curswant] 7823 7824 "bufnum" is the buffer number. Zero can be used for the 7825 current buffer. When setting an uppercase mark "bufnum" is 7826 used for the mark position. For other marks it specifies the 7827 buffer to set the mark in. You can use the |bufnr()| function 7828 to turn a file name into a buffer number. 7829 For setting the cursor and the ' mark "bufnum" is ignored, 7830 since these are associated with a window, not a buffer. 7831 Does not change the jumplist. 7832 7833 "lnum" and "col" are the position in the buffer. The first 7834 column is 1. Use a zero "lnum" to delete a mark. If "col" is 7835 smaller than 1 then 1 is used. 7836 7837 The "off" number is only used when 'virtualedit' is set. Then 7838 it is the offset in screen columns from the start of the 7839 character. E.g., a position within a <Tab> or after the last 7840 character. 7841 7842 The "curswant" number is only used when setting the cursor 7843 position. It sets the preferred column for when moving the 7844 cursor vertically. When the "curswant" number is missing the 7845 preferred column is not set. When it is present and setting a 7846 mark position it is not used. 7847 7848 Note that for '< and '> changing the line number may result in 7849 the marks to be effectively be swapped, so that '< is always 7850 before '>. 7851 7852 Returns 0 when the position could be set, -1 otherwise. 7853 An error message is given if {expr} is invalid. 7854 7855 Also see |getpos()| and |getcurpos()|. 7856 7857 This does not restore the preferred column for moving 7858 vertically; if you set the cursor position with this, |j| and 7859 |k| motions will jump to previous columns! Use |cursor()| to 7860 also set the preferred column. Also see the "curswant" key in 7861 |winrestview()|. 7862 7863setqflist({list} [, {action} [, {what}]]) *setqflist()* 7864 Create or replace or add to the quickfix list. 7865 7866 When {what} is not present, use the items in {list}. Each 7867 item must be a dictionary. Non-dictionary items in {list} are 7868 ignored. Each dictionary item can contain the following 7869 entries: 7870 7871 bufnr buffer number; must be the number of a valid 7872 buffer 7873 filename name of a file; only used when "bufnr" is not 7874 present or it is invalid. 7875 module name of a module; if given it will be used in 7876 quickfix error window instead of the filename. 7877 lnum line number in the file 7878 pattern search pattern used to locate the error 7879 col column number 7880 vcol when non-zero: "col" is visual column 7881 when zero: "col" is byte index 7882 nr error number 7883 text description of the error 7884 type single-character error type, 'E', 'W', etc. 7885 valid recognized error message 7886 7887 The "col", "vcol", "nr", "type" and "text" entries are 7888 optional. Either "lnum" or "pattern" entry can be used to 7889 locate a matching error line. 7890 If the "filename" and "bufnr" entries are not present or 7891 neither the "lnum" or "pattern" entries are present, then the 7892 item will not be handled as an error line. 7893 If both "pattern" and "lnum" are present then "pattern" will 7894 be used. 7895 If the "valid" entry is not supplied, then the valid flag is 7896 set when "bufnr" is a valid buffer or "filename" exists. 7897 If you supply an empty {list}, the quickfix list will be 7898 cleared. 7899 Note that the list is not exactly the same as what 7900 |getqflist()| returns. 7901 7902 {action} values: *E927* 7903 'a' The items from {list} are added to the existing 7904 quickfix list. If there is no existing list, then a 7905 new list is created. 7906 7907 'r' The items from the current quickfix list are replaced 7908 with the items from {list}. This can also be used to 7909 clear the list: > 7910 :call setqflist([], 'r') 7911< 7912 'f' All the quickfix lists in the quickfix stack are 7913 freed. 7914 7915 If {action} is not present or is set to ' ', then a new list 7916 is created. The new quickfix list is added after the current 7917 quickfix list in the stack and all the following lists are 7918 freed. To add a new quickfix list at the end of the stack, 7919 set "nr" in {what} to "$". 7920 7921 If the optional {what} dictionary argument is supplied, then 7922 only the items listed in {what} are set. The first {list} 7923 argument is ignored. The following items can be specified in 7924 {what}: 7925 context quickfix list context. See |quickfix-context| 7926 efm errorformat to use when parsing text from 7927 "lines". If this is not present, then the 7928 'errorformat' option value is used. 7929 See |quickfix-parse| 7930 id quickfix list identifier |quickfix-ID| 7931 idx index of the current entry in the quickfix 7932 list specified by 'id' or 'nr'. If set to '$', 7933 then the last entry in the list is set as the 7934 current entry. See |quickfix-index| 7935 items list of quickfix entries. Same as the {list} 7936 argument. 7937 lines use 'errorformat' to parse a list of lines and 7938 add the resulting entries to the quickfix list 7939 {nr} or {id}. Only a |List| value is supported. 7940 See |quickfix-parse| 7941 nr list number in the quickfix stack; zero 7942 means the current quickfix list and "$" means 7943 the last quickfix list. 7944 title quickfix list title text. See |quickfix-title| 7945 Unsupported keys in {what} are ignored. 7946 If the "nr" item is not present, then the current quickfix list 7947 is modified. When creating a new quickfix list, "nr" can be 7948 set to a value one greater than the quickfix stack size. 7949 When modifying a quickfix list, to guarantee that the correct 7950 list is modified, "id" should be used instead of "nr" to 7951 specify the list. 7952 7953 Examples (See also |setqflist-examples|): > 7954 :call setqflist([], 'r', {'title': 'My search'}) 7955 :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'}) 7956 :call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]}) 7957< 7958 Returns zero for success, -1 for failure. 7959 7960 This function can be used to create a quickfix list 7961 independent of the 'errorformat' setting. Use a command like 7962 `:cc 1` to jump to the first position. 7963 7964 7965 *setreg()* 7966setreg({regname}, {value} [, {options}]) 7967 Set the register {regname} to {value}. 7968 {value} may be any value returned by |getreg()|, including 7969 a |List|. 7970 If {options} contains "a" or {regname} is upper case, 7971 then the value is appended. 7972 {options} can also contain a register type specification: 7973 "c" or "v" |characterwise| mode 7974 "l" or "V" |linewise| mode 7975 "b" or "<CTRL-V>" |blockwise-visual| mode 7976 If a number immediately follows "b" or "<CTRL-V>" then this is 7977 used as the width of the selection - if it is not specified 7978 then the width of the block is set to the number of characters 7979 in the longest line (counting a <Tab> as 1 character). 7980 7981 If {options} contains no register settings, then the default 7982 is to use character mode unless {value} ends in a <NL> for 7983 string {value} and linewise mode for list {value}. Blockwise 7984 mode is never selected automatically. 7985 Returns zero for success, non-zero for failure. 7986 7987 *E883* 7988 Note: you may not use |List| containing more than one item to 7989 set search and expression registers. Lists containing no 7990 items act like empty strings. 7991 7992 Examples: > 7993 :call setreg(v:register, @*) 7994 :call setreg('*', @%, 'ac') 7995 :call setreg('a', "1\n2\n3", 'b5') 7996 7997< This example shows using the functions to save and restore a 7998 register: > 7999 :let var_a = getreg('a', 1, 1) 8000 :let var_amode = getregtype('a') 8001 .... 8002 :call setreg('a', var_a, var_amode) 8003< Note: you may not reliably restore register value 8004 without using the third argument to |getreg()| as without it 8005 newlines are represented as newlines AND Nul bytes are 8006 represented as newlines as well, see |NL-used-for-Nul|. 8007 8008 You can also change the type of a register by appending 8009 nothing: > 8010 :call setreg('a', '', 'al') 8011 8012settabvar({tabnr}, {varname}, {val}) *settabvar()* 8013 Set tab-local variable {varname} to {val} in tab page {tabnr}. 8014 |t:var| 8015 Note that the variable name without "t:" must be used. 8016 Tabs are numbered starting with one. 8017 This function is not available in the |sandbox|. 8018 8019settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()* 8020 Set option or local variable {varname} in window {winnr} to 8021 {val}. 8022 Tabs are numbered starting with one. For the current tabpage 8023 use |setwinvar()|. 8024 {winnr} can be the window number or the |window-ID|. 8025 When {winnr} is zero the current window is used. 8026 This also works for a global or local buffer option, but it 8027 doesn't work for a global or local buffer variable. 8028 For a local buffer option the global value is unchanged. 8029 Note that the variable name without "w:" must be used. 8030 Examples: > 8031 :call settabwinvar(1, 1, "&list", 0) 8032 :call settabwinvar(3, 2, "myvar", "foobar") 8033< This function is not available in the |sandbox|. 8034 8035settagstack({nr}, {dict} [, {action}]) *settagstack()* 8036 Modify the tag stack of the window {nr} using {dict}. 8037 {nr} can be the window number or the |window-ID|. 8038 8039 For a list of supported items in {dict}, refer to 8040 |gettagstack()| 8041 *E962* 8042 If {action} is not present or is set to 'r', then the tag 8043 stack is replaced. If {action} is set to 'a', then new entries 8044 from {dict} are pushed onto the tag stack. 8045 8046 Returns zero for success, -1 for failure. 8047 8048 Examples: 8049 Set current index of the tag stack to 4: > 8050 call settagstack(1005, {'curidx' : 4}) 8051 8052< Empty the tag stack of window 3: > 8053 call settagstack(3, {'items' : []}) 8054 8055< Push a new item onto the tag stack: > 8056 let pos = [bufnr('myfile.txt'), 10, 1, 0] 8057 let newtag = [{'tagname' : 'mytag', 'from' : pos}] 8058 call settagstack(2, {'items' : newtag}, 'a') 8059 8060< Save and restore the tag stack: > 8061 let stack = gettagstack(1003) 8062 " do something else 8063 call settagstack(1003, stack) 8064 unlet stack 8065< 8066setwinvar({nr}, {varname}, {val}) *setwinvar()* 8067 Like |settabwinvar()| for the current tab page. 8068 Examples: > 8069 :call setwinvar(1, "&list", 0) 8070 :call setwinvar(2, "myvar", "foobar") 8071 8072sha256({string}) *sha256()* 8073 Returns a String with 64 hex characters, which is the SHA256 8074 checksum of {string}. 8075 {only available when compiled with the |+cryptv| feature} 8076 8077shellescape({string} [, {special}]) *shellescape()* 8078 Escape {string} for use as a shell command argument. 8079 On MS-Windows and MS-DOS, when 'shellslash' is not set, it 8080 will enclose {string} in double quotes and double all double 8081 quotes within {string}. 8082 Otherwise it will enclose {string} in single quotes and 8083 replace all "'" with "'\''". 8084 8085 When the {special} argument is present and it's a non-zero 8086 Number or a non-empty String (|non-zero-arg|), then special 8087 items such as "!", "%", "#" and "<cword>" will be preceded by 8088 a backslash. This backslash will be removed again by the |:!| 8089 command. 8090 8091 The "!" character will be escaped (again with a |non-zero-arg| 8092 {special}) when 'shell' contains "csh" in the tail. That is 8093 because for csh and tcsh "!" is used for history replacement 8094 even when inside single quotes. 8095 8096 With a |non-zero-arg| {special} the <NL> character is also 8097 escaped. When 'shell' containing "csh" in the tail it's 8098 escaped a second time. 8099 8100 Example of use with a |:!| command: > 8101 :exe '!dir ' . shellescape(expand('<cfile>'), 1) 8102< This results in a directory listing for the file under the 8103 cursor. Example of use with |system()|: > 8104 :call system("chmod +w -- " . shellescape(expand("%"))) 8105< See also |::S|. 8106 8107 8108shiftwidth([{col}]) *shiftwidth()* 8109 Returns the effective value of 'shiftwidth'. This is the 8110 'shiftwidth' value unless it is zero, in which case it is the 8111 'tabstop' value. This function was introduced with patch 8112 7.3.694 in 2012, everybody should have it by now (however it 8113 did not allow for the optional {col} argument until 8.1.542). 8114 8115 When there is one argument {col} this is used as column number 8116 for which to return the 'shiftwidth' value. This matters for the 8117 'vartabstop' feature. If the 'vartabstop' setting is enabled and 8118 no {col} argument is given, column 1 will be assumed. 8119 8120sign_define({name} [, {dict}]) *sign_define()* 8121 Define a new sign named {name} or modify the attributes of an 8122 existing sign. This is similar to the |:sign-define| command. 8123 8124 Prefix {name} with a unique text to avoid name collisions. 8125 There is no {group} like with placing signs. 8126 8127 The {name} can be a String or a Number. The optional {dict} 8128 argument specifies the sign attributes. The following values 8129 are supported: 8130 icon full path to the bitmap file for the sign. 8131 linehl highlight group used for the whole line the 8132 sign is placed in. 8133 text text that is displayed when there is no icon 8134 or the GUI is not being used. 8135 texthl highlight group used for the text item 8136 8137 If the sign named {name} already exists, then the attributes 8138 of the sign are updated. 8139 8140 Returns 0 on success and -1 on failure. 8141 8142 Examples: > 8143 call sign_define("mySign", {"text" : "=>", "texthl" : 8144 \ "Error", "linehl" : "Search"}) 8145< 8146sign_getdefined([{name}]) *sign_getdefined()* 8147 Get a list of defined signs and their attributes. 8148 This is similar to the |:sign-list| command. 8149 8150 If the {name} is not supplied, then a list of all the defined 8151 signs is returned. Otherwise the attribute of the specified 8152 sign is returned. 8153 8154 Each list item in the returned value is a dictionary with the 8155 following entries: 8156 icon full path to the bitmap file of the sign 8157 linehl highlight group used for the whole line the 8158 sign is placed in. 8159 name name of the sign 8160 text text that is displayed when there is no icon 8161 or the GUI is not being used. 8162 texthl highlight group used for the text item 8163 8164 Returns an empty List if there are no signs and when {name} is 8165 not found. 8166 8167 Examples: > 8168 " Get a list of all the defined signs 8169 echo sign_getdefined() 8170 8171 " Get the attribute of the sign named mySign 8172 echo sign_getdefined("mySign") 8173< 8174sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()* 8175 Return a list of signs placed in a buffer or all the buffers. 8176 This is similar to the |:sign-place-list| command. 8177 8178 If the optional buffer name {expr} is specified, then only the 8179 list of signs placed in that buffer is returned. For the use 8180 of {expr}, see |bufname()|. The optional {dict} can contain 8181 the following entries: 8182 group select only signs in this group 8183 id select sign with this identifier 8184 lnum select signs placed in this line. For the use 8185 of {lnum}, see |line()|. 8186 If {group} is '*', then signs in all the groups including the 8187 global group are returned. If {group} is not supplied or is an 8188 empty string, then only signs in the global group are 8189 returned. If no arguments are supplied, then signs in the 8190 global group placed in all the buffers are returned. 8191 See |sign-group|. 8192 8193 Each list item in the returned value is a dictionary with the 8194 following entries: 8195 bufnr number of the buffer with the sign 8196 signs list of signs placed in {bufnr}. Each list 8197 item is a dictionary with the below listed 8198 entries 8199 8200 The dictionary for each sign contains the following entries: 8201 group sign group. Set to '' for the global group. 8202 id identifier of the sign 8203 lnum line number where the sign is placed 8204 name name of the defined sign 8205 priority sign priority 8206 8207 The returned signs in a buffer are ordered by their line 8208 number. 8209 8210 Returns an empty list on failure or if there are no placed 8211 signs. 8212 8213 Examples: > 8214 " Get a List of signs placed in eval.c in the 8215 " global group 8216 echo sign_getplaced("eval.c") 8217 8218 " Get a List of signs in group 'g1' placed in eval.c 8219 echo sign_getplaced("eval.c", {'group' : 'g1'}) 8220 8221 " Get a List of signs placed at line 10 in eval.c 8222 echo sign_getplaced("eval.c", {'lnum' : 10}) 8223 8224 " Get sign with identifier 10 placed in a.py 8225 echo sign_getplaced("a.py", {'id' : 10}) 8226 8227 " Get sign with id 20 in group 'g1' placed in a.py 8228 echo sign_getplaced("a.py", {'group' : 'g1', 8229 \ 'id' : 20}) 8230 8231 " Get a List of all the placed signs 8232 echo sign_getplaced() 8233< 8234 *sign_jump()* 8235sign_jump({id}, {group}, {expr}) 8236 Open the buffer {expr} or jump to the window that contains 8237 {expr} and position the cursor at sign {id} in group {group}. 8238 This is similar to the |:sign-jump| command. 8239 8240 For the use of {expr}, see |bufname()|. 8241 8242 Returns the line number of the sign. Returns -1 if the 8243 arguments are invalid. 8244 8245 Example: > 8246 " Jump to sign 10 in the current buffer 8247 call sign_jump(10, '', '') 8248< 8249 *sign_place()* 8250sign_place({id}, {group}, {name}, {expr} [, {dict}]) 8251 Place the sign defined as {name} at line {lnum} in file {expr} 8252 and assign {id} and {group} to sign. This is similar to the 8253 |:sign-place| command. 8254 8255 If the sign identifier {id} is zero, then a new identifier is 8256 allocated. Otherwise the specified number is used. {group} is 8257 the sign group name. To use the global sign group, use an 8258 empty string. {group} functions as a namespace for {id}, thus 8259 two groups can use the same IDs. Refer to |sign-identifier| 8260 and |sign-group| for more information. 8261 8262 {name} refers to a defined sign. 8263 {expr} refers to a buffer name or number. For the accepted 8264 values, see |bufname()|. 8265 8266 The optional {dict} argument supports the following entries: 8267 lnum line number in the buffer {expr} where 8268 the sign is to be placed. For the 8269 accepted values, see |line()|. 8270 priority priority of the sign. See 8271 |sign-priority| for more information. 8272 8273 If the optional {dict} is not specified, then it modifies the 8274 placed sign {id} in group {group} to use the defined sign 8275 {name}. 8276 8277 Returns the sign identifier on success and -1 on failure. 8278 8279 Examples: > 8280 " Place a sign named sign1 with id 5 at line 20 in 8281 " buffer json.c 8282 call sign_place(5, '', 'sign1', 'json.c', 8283 \ {'lnum' : 20}) 8284 8285 " Updates sign 5 in buffer json.c to use sign2 8286 call sign_place(5, '', 'sign2', 'json.c') 8287 8288 " Place a sign named sign3 at line 30 in 8289 " buffer json.c with a new identifier 8290 let id = sign_place(0, '', 'sign3', 'json.c', 8291 \ {'lnum' : 30}) 8292 8293 " Place a sign named sign4 with id 10 in group 'g3' 8294 " at line 40 in buffer json.c with priority 90 8295 call sign_place(10, 'g3', 'sign4', 'json.c', 8296 \ {'lnum' : 40, 'priority' : 90}) 8297< 8298sign_undefine([{name}]) *sign_undefine()* 8299 Deletes a previously defined sign {name}. This is similar to 8300 the |:sign-undefine| command. If {name} is not supplied, then 8301 deletes all the defined signs. 8302 8303 Returns 0 on success and -1 on failure. 8304 8305 Examples: > 8306 " Delete a sign named mySign 8307 call sign_undefine("mySign") 8308 8309 " Delete all the signs 8310 call sign_undefine() 8311< 8312sign_unplace({group} [, {dict}]) *sign_unplace()* 8313 Remove a previously placed sign in one or more buffers. This 8314 is similar to the |:sign-unplace| command. 8315 8316 {group} is the sign group name. To use the global sign group, 8317 use an empty string. If {group} is set to '*', then all the 8318 groups including the global group are used. 8319 The signs in {group} are selected based on the entries in 8320 {dict}. The following optional entries in {dict} are 8321 supported: 8322 buffer buffer name or number. See |bufname()|. 8323 id sign identifier 8324 If {dict} is not supplied, then all the signs in {group} are 8325 removed. 8326 8327 Returns 0 on success and -1 on failure. 8328 8329 Examples: > 8330 " Remove sign 10 from buffer a.vim 8331 call sign_unplace('', {'buffer' : "a.vim", 'id' : 10}) 8332 8333 " Remove sign 20 in group 'g1' from buffer 3 8334 call sign_unplace('g1', {'buffer' : 3, 'id' : 20}) 8335 8336 " Remove all the signs in group 'g2' from buffer 10 8337 call sign_unplace('g2', {'buffer' : 10}) 8338 8339 " Remove sign 30 in group 'g3' from all the buffers 8340 call sign_unplace('g3', {'id' : 30}) 8341 8342 " Remove all the signs placed in buffer 5 8343 call sign_unplace('*', {'buffer' : 5}) 8344 8345 " Remove the signs in group 'g4' from all the buffers 8346 call sign_unplace('g4') 8347 8348 " Remove sign 40 from all the buffers 8349 call sign_unplace('*', {'id' : 40}) 8350 8351 " Remove all the placed signs from all the buffers 8352 call sign_unplace('*') 8353< 8354simplify({filename}) *simplify()* 8355 Simplify the file name as much as possible without changing 8356 the meaning. Shortcuts (on MS-Windows) or symbolic links (on 8357 Unix) are not resolved. If the first path component in 8358 {filename} designates the current directory, this will be 8359 valid for the result as well. A trailing path separator is 8360 not removed either. 8361 Example: > 8362 simplify("./dir/.././/file/") == "./file/" 8363< Note: The combination "dir/.." is only removed if "dir" is 8364 a searchable directory or does not exist. On Unix, it is also 8365 removed when "dir" is a symbolic link within the same 8366 directory. In order to resolve all the involved symbolic 8367 links before simplifying the path name, use |resolve()|. 8368 8369 8370sin({expr}) *sin()* 8371 Return the sine of {expr}, measured in radians, as a |Float|. 8372 {expr} must evaluate to a |Float| or a |Number|. 8373 Examples: > 8374 :echo sin(100) 8375< -0.506366 > 8376 :echo sin(-4.01) 8377< 0.763301 8378 {only available when compiled with the |+float| feature} 8379 8380 8381sinh({expr}) *sinh()* 8382 Return the hyperbolic sine of {expr} as a |Float| in the range 8383 [-inf, inf]. 8384 {expr} must evaluate to a |Float| or a |Number|. 8385 Examples: > 8386 :echo sinh(0.5) 8387< 0.521095 > 8388 :echo sinh(-0.9) 8389< -1.026517 8390 {only available when compiled with the |+float| feature} 8391 8392 8393sort({list} [, {func} [, {dict}]]) *sort()* *E702* 8394 Sort the items in {list} in-place. Returns {list}. 8395 8396 If you want a list to remain unmodified make a copy first: > 8397 :let sortedlist = sort(copy(mylist)) 8398 8399< When {func} is omitted, is empty or zero, then sort() uses the 8400 string representation of each item to sort on. Numbers sort 8401 after Strings, |Lists| after Numbers. For sorting text in the 8402 current buffer use |:sort|. 8403 8404 When {func} is given and it is '1' or 'i' then case is 8405 ignored. 8406 8407 When {func} is given and it is 'n' then all items will be 8408 sorted numerical (Implementation detail: This uses the 8409 strtod() function to parse numbers, Strings, Lists, Dicts and 8410 Funcrefs will be considered as being 0). 8411 8412 When {func} is given and it is 'N' then all items will be 8413 sorted numerical. This is like 'n' but a string containing 8414 digits will be used as the number they represent. 8415 8416 When {func} is given and it is 'f' then all items will be 8417 sorted numerical. All values must be a Number or a Float. 8418 8419 When {func} is a |Funcref| or a function name, this function 8420 is called to compare items. The function is invoked with two 8421 items as argument and must return zero if they are equal, 1 or 8422 bigger if the first one sorts after the second one, -1 or 8423 smaller if the first one sorts before the second one. 8424 8425 {dict} is for functions with the "dict" attribute. It will be 8426 used to set the local variable "self". |Dictionary-function| 8427 8428 The sort is stable, items which compare equal (as number or as 8429 string) will keep their relative position. E.g., when sorting 8430 on numbers, text strings will sort next to each other, in the 8431 same order as they were originally. 8432 8433 Also see |uniq()|. 8434 8435 Example: > 8436 func MyCompare(i1, i2) 8437 return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1 8438 endfunc 8439 let sortedlist = sort(mylist, "MyCompare") 8440< A shorter compare version for this specific simple case, which 8441 ignores overflow: > 8442 func MyCompare(i1, i2) 8443 return a:i1 - a:i2 8444 endfunc 8445< 8446 *soundfold()* 8447soundfold({word}) 8448 Return the sound-folded equivalent of {word}. Uses the first 8449 language in 'spelllang' for the current window that supports 8450 soundfolding. 'spell' must be set. When no sound folding is 8451 possible the {word} is returned unmodified. 8452 This can be used for making spelling suggestions. Note that 8453 the method can be quite slow. 8454 8455 *spellbadword()* 8456spellbadword([{sentence}]) 8457 Without argument: The result is the badly spelled word under 8458 or after the cursor. The cursor is moved to the start of the 8459 bad word. When no bad word is found in the cursor line the 8460 result is an empty string and the cursor doesn't move. 8461 8462 With argument: The result is the first word in {sentence} that 8463 is badly spelled. If there are no spelling mistakes the 8464 result is an empty string. 8465 8466 The return value is a list with two items: 8467 - The badly spelled word or an empty string. 8468 - The type of the spelling error: 8469 "bad" spelling mistake 8470 "rare" rare word 8471 "local" word only valid in another region 8472 "caps" word should start with Capital 8473 Example: > 8474 echo spellbadword("the quik brown fox") 8475< ['quik', 'bad'] ~ 8476 8477 The spelling information for the current window is used. The 8478 'spell' option must be set and the value of 'spelllang' is 8479 used. 8480 8481 *spellsuggest()* 8482spellsuggest({word} [, {max} [, {capital}]]) 8483 Return a |List| with spelling suggestions to replace {word}. 8484 When {max} is given up to this number of suggestions are 8485 returned. Otherwise up to 25 suggestions are returned. 8486 8487 When the {capital} argument is given and it's non-zero only 8488 suggestions with a leading capital will be given. Use this 8489 after a match with 'spellcapcheck'. 8490 8491 {word} can be a badly spelled word followed by other text. 8492 This allows for joining two words that were split. The 8493 suggestions also include the following text, thus you can 8494 replace a line. 8495 8496 {word} may also be a good word. Similar words will then be 8497 returned. {word} itself is not included in the suggestions, 8498 although it may appear capitalized. 8499 8500 The spelling information for the current window is used. The 8501 'spell' option must be set and the values of 'spelllang' and 8502 'spellsuggest' are used. 8503 8504 8505split({expr} [, {pattern} [, {keepempty}]]) *split()* 8506 Make a |List| out of {expr}. When {pattern} is omitted or 8507 empty each white-separated sequence of characters becomes an 8508 item. 8509 Otherwise the string is split where {pattern} matches, 8510 removing the matched characters. 'ignorecase' is not used 8511 here, add \c to ignore case. |/\c| 8512 When the first or last item is empty it is omitted, unless the 8513 {keepempty} argument is given and it's non-zero. 8514 Other empty items are kept when {pattern} matches at least one 8515 character or when {keepempty} is non-zero. 8516 Example: > 8517 :let words = split(getline('.'), '\W\+') 8518< To split a string in individual characters: > 8519 :for c in split(mystring, '\zs') 8520< If you want to keep the separator you can also use '\zs' at 8521 the end of the pattern: > 8522 :echo split('abc:def:ghi', ':\zs') 8523< ['abc:', 'def:', 'ghi'] ~ 8524 Splitting a table where the first element can be empty: > 8525 :let items = split(line, ':', 1) 8526< The opposite function is |join()|. 8527 8528 8529sqrt({expr}) *sqrt()* 8530 Return the non-negative square root of Float {expr} as a 8531 |Float|. 8532 {expr} must evaluate to a |Float| or a |Number|. When {expr} 8533 is negative the result is NaN (Not a Number). 8534 Examples: > 8535 :echo sqrt(100) 8536< 10.0 > 8537 :echo sqrt(-4.01) 8538< nan 8539 "nan" may be different, it depends on system libraries. 8540 {only available when compiled with the |+float| feature} 8541 8542 8543str2float({expr}) *str2float()* 8544 Convert String {expr} to a Float. This mostly works the same 8545 as when using a floating point number in an expression, see 8546 |floating-point-format|. But it's a bit more permissive. 8547 E.g., "1e40" is accepted, while in an expression you need to 8548 write "1.0e40". The hexadecimal form "0x123" is also 8549 accepted, but not others, like binary or octal. 8550 Text after the number is silently ignored. 8551 The decimal point is always '.', no matter what the locale is 8552 set to. A comma ends the number: "12,345.67" is converted to 8553 12.0. You can strip out thousands separators with 8554 |substitute()|: > 8555 let f = str2float(substitute(text, ',', '', 'g')) 8556< {only available when compiled with the |+float| feature} 8557 8558 8559str2nr({expr} [, {base}]) *str2nr()* 8560 Convert string {expr} to a number. 8561 {base} is the conversion base, it can be 2, 8, 10 or 16. 8562 When {base} is omitted base 10 is used. This also means that 8563 a leading zero doesn't cause octal conversion to be used, as 8564 with the default String to Number conversion. 8565 When {base} is 16 a leading "0x" or "0X" is ignored. With a 8566 different base the result will be zero. Similarly, when 8567 {base} is 8 a leading "0" is ignored, and when {base} is 2 a 8568 leading "0b" or "0B" is ignored. 8569 Text after the number is silently ignored. 8570 8571 8572strchars({expr} [, {skipcc}]) *strchars()* 8573 The result is a Number, which is the number of characters 8574 in String {expr}. 8575 When {skipcc} is omitted or zero, composing characters are 8576 counted separately. 8577 When {skipcc} set to 1, Composing characters are ignored. 8578 Also see |strlen()|, |strdisplaywidth()| and |strwidth()|. 8579 8580 {skipcc} is only available after 7.4.755. For backward 8581 compatibility, you can define a wrapper function: > 8582 if has("patch-7.4.755") 8583 function s:strchars(str, skipcc) 8584 return strchars(a:str, a:skipcc) 8585 endfunction 8586 else 8587 function s:strchars(str, skipcc) 8588 if a:skipcc 8589 return strlen(substitute(a:str, ".", "x", "g")) 8590 else 8591 return strchars(a:str) 8592 endif 8593 endfunction 8594 endif 8595< 8596strcharpart({src}, {start} [, {len}]) *strcharpart()* 8597 Like |strpart()| but using character index and length instead 8598 of byte index and length. 8599 When a character index is used where a character does not 8600 exist it is assumed to be one character. For example: > 8601 strcharpart('abc', -1, 2) 8602< results in 'a'. 8603 8604strdisplaywidth({expr} [, {col}]) *strdisplaywidth()* 8605 The result is a Number, which is the number of display cells 8606 String {expr} occupies on the screen when it starts at {col}. 8607 When {col} is omitted zero is used. Otherwise it is the 8608 screen column where to start. This matters for Tab 8609 characters. 8610 The option settings of the current window are used. This 8611 matters for anything that's displayed differently, such as 8612 'tabstop' and 'display'. 8613 When {expr} contains characters with East Asian Width Class 8614 Ambiguous, this function's return value depends on 'ambiwidth'. 8615 Also see |strlen()|, |strwidth()| and |strchars()|. 8616 8617strftime({format} [, {time}]) *strftime()* 8618 The result is a String, which is a formatted date and time, as 8619 specified by the {format} string. The given {time} is used, 8620 or the current time if no time is given. The accepted 8621 {format} depends on your system, thus this is not portable! 8622 See the manual page of the C function strftime() for the 8623 format. The maximum length of the result is 80 characters. 8624 See also |localtime()| and |getftime()|. 8625 The language can be changed with the |:language| command. 8626 Examples: > 8627 :echo strftime("%c") Sun Apr 27 11:49:23 1997 8628 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25 8629 :echo strftime("%y%m%d %T") 970427 11:53:55 8630 :echo strftime("%H:%M") 11:55 8631 :echo strftime("%c", getftime("file.c")) 8632 Show mod time of file.c. 8633< Not available on all systems. To check use: > 8634 :if exists("*strftime") 8635 8636strgetchar({str}, {index}) *strgetchar()* 8637 Get character {index} from {str}. This uses a character 8638 index, not a byte index. Composing characters are considered 8639 separate characters here. 8640 Also see |strcharpart()| and |strchars()|. 8641 8642stridx({haystack}, {needle} [, {start}]) *stridx()* 8643 The result is a Number, which gives the byte index in 8644 {haystack} of the first occurrence of the String {needle}. 8645 If {start} is specified, the search starts at index {start}. 8646 This can be used to find a second match: > 8647 :let colon1 = stridx(line, ":") 8648 :let colon2 = stridx(line, ":", colon1 + 1) 8649< The search is done case-sensitive. 8650 For pattern searches use |match()|. 8651 -1 is returned if the {needle} does not occur in {haystack}. 8652 See also |strridx()|. 8653 Examples: > 8654 :echo stridx("An Example", "Example") 3 8655 :echo stridx("Starting point", "Start") 0 8656 :echo stridx("Starting point", "start") -1 8657< *strstr()* *strchr()* 8658 stridx() works similar to the C function strstr(). When used 8659 with a single character it works similar to strchr(). 8660 8661 *string()* 8662string({expr}) Return {expr} converted to a String. If {expr} is a Number, 8663 Float, String, Blob or a composition of them, then the result 8664 can be parsed back with |eval()|. 8665 {expr} type result ~ 8666 String 'string' (single quotes are doubled) 8667 Number 123 8668 Float 123.123456 or 1.123456e8 8669 Funcref function('name') 8670 Blob 0z00112233.44556677.8899 8671 List [item, item] 8672 Dictionary {key: value, key: value} 8673 8674 When a List or Dictionary has a recursive reference it is 8675 replaced by "[...]" or "{...}". Using eval() on the result 8676 will then fail. 8677 8678 Also see |strtrans()|. 8679 8680 *strlen()* 8681strlen({expr}) The result is a Number, which is the length of the String 8682 {expr} in bytes. 8683 If the argument is a Number it is first converted to a String. 8684 For other types an error is given. 8685 If you want to count the number of multi-byte characters use 8686 |strchars()|. 8687 Also see |len()|, |strdisplaywidth()| and |strwidth()|. 8688 8689strpart({src}, {start} [, {len}]) *strpart()* 8690 The result is a String, which is part of {src}, starting from 8691 byte {start}, with the byte length {len}. 8692 To count characters instead of bytes use |strcharpart()|. 8693 8694 When bytes are selected which do not exist, this doesn't 8695 result in an error, the bytes are simply omitted. 8696 If {len} is missing, the copy continues from {start} till the 8697 end of the {src}. > 8698 strpart("abcdefg", 3, 2) == "de" 8699 strpart("abcdefg", -2, 4) == "ab" 8700 strpart("abcdefg", 5, 4) == "fg" 8701 strpart("abcdefg", 3) == "defg" 8702 8703< Note: To get the first character, {start} must be 0. For 8704 example, to get three bytes under and after the cursor: > 8705 strpart(getline("."), col(".") - 1, 3) 8706< 8707strridx({haystack}, {needle} [, {start}]) *strridx()* 8708 The result is a Number, which gives the byte index in 8709 {haystack} of the last occurrence of the String {needle}. 8710 When {start} is specified, matches beyond this index are 8711 ignored. This can be used to find a match before a previous 8712 match: > 8713 :let lastcomma = strridx(line, ",") 8714 :let comma2 = strridx(line, ",", lastcomma - 1) 8715< The search is done case-sensitive. 8716 For pattern searches use |match()|. 8717 -1 is returned if the {needle} does not occur in {haystack}. 8718 If the {needle} is empty the length of {haystack} is returned. 8719 See also |stridx()|. Examples: > 8720 :echo strridx("an angry armadillo", "an") 3 8721< *strrchr()* 8722 When used with a single character it works similar to the C 8723 function strrchr(). 8724 8725strtrans({expr}) *strtrans()* 8726 The result is a String, which is {expr} with all unprintable 8727 characters translated into printable characters |'isprint'|. 8728 Like they are shown in a window. Example: > 8729 echo strtrans(@a) 8730< This displays a newline in register a as "^@" instead of 8731 starting a new line. 8732 8733strwidth({expr}) *strwidth()* 8734 The result is a Number, which is the number of display cells 8735 String {expr} occupies. A Tab character is counted as one 8736 cell, alternatively use |strdisplaywidth()|. 8737 When {expr} contains characters with East Asian Width Class 8738 Ambiguous, this function's return value depends on 'ambiwidth'. 8739 Also see |strlen()|, |strdisplaywidth()| and |strchars()|. 8740 8741submatch({nr} [, {list}]) *submatch()* *E935* 8742 Only for an expression in a |:substitute| command or 8743 substitute() function. 8744 Returns the {nr}'th submatch of the matched text. When {nr} 8745 is 0 the whole matched text is returned. 8746 Note that a NL in the string can stand for a line break of a 8747 multi-line match or a NUL character in the text. 8748 Also see |sub-replace-expression|. 8749 8750 If {list} is present and non-zero then submatch() returns 8751 a list of strings, similar to |getline()| with two arguments. 8752 NL characters in the text represent NUL characters in the 8753 text. 8754 Only returns more than one item for |:substitute|, inside 8755 |substitute()| this list will always contain one or zero 8756 items, since there are no real line breaks. 8757 8758 When substitute() is used recursively only the submatches in 8759 the current (deepest) call can be obtained. 8760 8761 Examples: > 8762 :s/\d\+/\=submatch(0) + 1/ 8763 :echo substitute(text, '\d\+', '\=submatch(0) + 1', '') 8764< This finds the first number in the line and adds one to it. 8765 A line break is included as a newline character. 8766 8767substitute({expr}, {pat}, {sub}, {flags}) *substitute()* 8768 The result is a String, which is a copy of {expr}, in which 8769 the first match of {pat} is replaced with {sub}. 8770 When {flags} is "g", all matches of {pat} in {expr} are 8771 replaced. Otherwise {flags} should be "". 8772 8773 This works like the ":substitute" command (without any flags). 8774 But the matching with {pat} is always done like the 'magic' 8775 option is set and 'cpoptions' is empty (to make scripts 8776 portable). 'ignorecase' is still relevant, use |/\c| or |/\C| 8777 if you want to ignore or match case and ignore 'ignorecase'. 8778 'smartcase' is not used. See |string-match| for how {pat} is 8779 used. 8780 8781 A "~" in {sub} is not replaced with the previous {sub}. 8782 Note that some codes in {sub} have a special meaning 8783 |sub-replace-special|. For example, to replace something with 8784 "\n" (two characters), use "\\\\n" or '\\n'. 8785 8786 When {pat} does not match in {expr}, {expr} is returned 8787 unmodified. 8788 8789 Example: > 8790 :let &path = substitute(&path, ",\\=[^,]*$", "", "") 8791< This removes the last component of the 'path' option. > 8792 :echo substitute("testing", ".*", "\\U\\0", "") 8793< results in "TESTING". 8794 8795 When {sub} starts with "\=", the remainder is interpreted as 8796 an expression. See |sub-replace-expression|. Example: > 8797 :echo substitute(s, '%\(\x\x\)', 8798 \ '\=nr2char("0x" . submatch(1))', 'g') 8799 8800< When {sub} is a Funcref that function is called, with one 8801 optional argument. Example: > 8802 :echo substitute(s, '%\(\x\x\)', SubNr, 'g') 8803< The optional argument is a list which contains the whole 8804 matched string and up to nine submatches, like what 8805 |submatch()| returns. Example: > 8806 :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g') 8807 8808swapinfo({fname}) *swapinfo()* 8809 The result is a dictionary, which holds information about the 8810 swapfile {fname}. The available fields are: 8811 version Vim version 8812 user user name 8813 host host name 8814 fname original file name 8815 pid PID of the Vim process that created the swap 8816 file 8817 mtime last modification time in seconds 8818 inode Optional: INODE number of the file 8819 dirty 1 if file was modified, 0 if not 8820 Note that "user" and "host" are truncated to at most 39 bytes. 8821 In case of failure an "error" item is added with the reason: 8822 Cannot open file: file not found or in accessible 8823 Cannot read file: cannot read first block 8824 Not a swap file: does not contain correct block ID 8825 Magic number mismatch: Info in first block is invalid 8826 8827swapname({expr}) *swapname()* 8828 The result is the swap file path of the buffer {expr}. 8829 For the use of {expr}, see |bufname()| above. 8830 If buffer {expr} is the current buffer, the result is equal to 8831 |:swapname| (unless no swap file). 8832 If buffer {expr} has no swap file, returns an empty string. 8833 8834synID({lnum}, {col}, {trans}) *synID()* 8835 The result is a Number, which is the syntax ID at the position 8836 {lnum} and {col} in the current window. 8837 The syntax ID can be used with |synIDattr()| and 8838 |synIDtrans()| to obtain syntax information about text. 8839 8840 {col} is 1 for the leftmost column, {lnum} is 1 for the first 8841 line. 'synmaxcol' applies, in a longer line zero is returned. 8842 Note that when the position is after the last character, 8843 that's where the cursor can be in Insert mode, synID() returns 8844 zero. 8845 8846 When {trans} is |TRUE|, transparent items are reduced to the 8847 item that they reveal. This is useful when wanting to know 8848 the effective color. When {trans} is |FALSE|, the transparent 8849 item is returned. This is useful when wanting to know which 8850 syntax item is effective (e.g. inside parens). 8851 Warning: This function can be very slow. Best speed is 8852 obtained by going through the file in forward direction. 8853 8854 Example (echoes the name of the syntax item under the cursor): > 8855 :echo synIDattr(synID(line("."), col("."), 1), "name") 8856< 8857 8858synIDattr({synID}, {what} [, {mode}]) *synIDattr()* 8859 The result is a String, which is the {what} attribute of 8860 syntax ID {synID}. This can be used to obtain information 8861 about a syntax item. 8862 {mode} can be "gui", "cterm" or "term", to get the attributes 8863 for that mode. When {mode} is omitted, or an invalid value is 8864 used, the attributes for the currently active highlighting are 8865 used (GUI, cterm or term). 8866 Use synIDtrans() to follow linked highlight groups. 8867 {what} result 8868 "name" the name of the syntax item 8869 "fg" foreground color (GUI: color name used to set 8870 the color, cterm: color number as a string, 8871 term: empty string) 8872 "bg" background color (as with "fg") 8873 "font" font name (only available in the GUI) 8874 |highlight-font| 8875 "sp" special color (as with "fg") |highlight-guisp| 8876 "fg#" like "fg", but for the GUI and the GUI is 8877 running the name in "#RRGGBB" form 8878 "bg#" like "fg#" for "bg" 8879 "sp#" like "fg#" for "sp" 8880 "bold" "1" if bold 8881 "italic" "1" if italic 8882 "reverse" "1" if reverse 8883 "inverse" "1" if inverse (= reverse) 8884 "standout" "1" if standout 8885 "underline" "1" if underlined 8886 "undercurl" "1" if undercurled 8887 "strike" "1" if strikethrough 8888 8889 Example (echoes the color of the syntax item under the 8890 cursor): > 8891 :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg") 8892< 8893synIDtrans({synID}) *synIDtrans()* 8894 The result is a Number, which is the translated syntax ID of 8895 {synID}. This is the syntax group ID of what is being used to 8896 highlight the character. Highlight links given with 8897 ":highlight link" are followed. 8898 8899synconcealed({lnum}, {col}) *synconcealed()* 8900 The result is a List with currently three items: 8901 1. The first item in the list is 0 if the character at the 8902 position {lnum} and {col} is not part of a concealable 8903 region, 1 if it is. 8904 2. The second item in the list is a string. If the first item 8905 is 1, the second item contains the text which will be 8906 displayed in place of the concealed text, depending on the 8907 current setting of 'conceallevel' and 'listchars'. 8908 3. The third and final item in the list is a number 8909 representing the specific syntax region matched in the 8910 line. When the character is not concealed the value is 8911 zero. This allows detection of the beginning of a new 8912 concealable region if there are two consecutive regions 8913 with the same replacement character. For an example, if 8914 the text is "123456" and both "23" and "45" are concealed 8915 and replaced by the character "X", then: 8916 call returns ~ 8917 synconcealed(lnum, 1) [0, '', 0] 8918 synconcealed(lnum, 2) [1, 'X', 1] 8919 synconcealed(lnum, 3) [1, 'X', 1] 8920 synconcealed(lnum, 4) [1, 'X', 2] 8921 synconcealed(lnum, 5) [1, 'X', 2] 8922 synconcealed(lnum, 6) [0, '', 0] 8923 8924 8925synstack({lnum}, {col}) *synstack()* 8926 Return a |List|, which is the stack of syntax items at the 8927 position {lnum} and {col} in the current window. Each item in 8928 the List is an ID like what |synID()| returns. 8929 The first item in the List is the outer region, following are 8930 items contained in that one. The last one is what |synID()| 8931 returns, unless not the whole item is highlighted or it is a 8932 transparent item. 8933 This function is useful for debugging a syntax file. 8934 Example that shows the syntax stack under the cursor: > 8935 for id in synstack(line("."), col(".")) 8936 echo synIDattr(id, "name") 8937 endfor 8938< When the position specified with {lnum} and {col} is invalid 8939 nothing is returned. The position just after the last 8940 character in a line and the first column in an empty line are 8941 valid positions. 8942 8943system({expr} [, {input}]) *system()* *E677* 8944 Get the output of the shell command {expr} as a string. See 8945 |systemlist()| to get the output as a List. 8946 8947 When {input} is given and is a string this string is written 8948 to a file and passed as stdin to the command. The string is 8949 written as-is, you need to take care of using the correct line 8950 separators yourself. 8951 If {input} is given and is a |List| it is written to the file 8952 in a way |writefile()| does with {binary} set to "b" (i.e. 8953 with a newline between each list item with newlines inside 8954 list items converted to NULs). 8955 When {input} is given and is a number that is a valid id for 8956 an existing buffer then the content of the buffer is written 8957 to the file line by line, each line terminated by a NL and 8958 NULs characters where the text has a NL. 8959 8960 Pipes are not used, the 'shelltemp' option is not used. 8961 8962 When prepended by |:silent| the terminal will not be set to 8963 cooked mode. This is meant to be used for commands that do 8964 not need the user to type. It avoids stray characters showing 8965 up on the screen which require |CTRL-L| to remove. > 8966 :silent let f = system('ls *.vim') 8967< 8968 Note: Use |shellescape()| or |::S| with |expand()| or 8969 |fnamemodify()| to escape special characters in a command 8970 argument. Newlines in {expr} may cause the command to fail. 8971 The characters in 'shellquote' and 'shellxquote' may also 8972 cause trouble. 8973 This is not to be used for interactive commands. 8974 8975 The result is a String. Example: > 8976 :let files = system("ls " . shellescape(expand('%:h'))) 8977 :let files = system('ls ' . expand('%:h:S')) 8978 8979< To make the result more system-independent, the shell output 8980 is filtered to replace <CR> with <NL> for Macintosh, and 8981 <CR><NL> with <NL> for DOS-like systems. 8982 To avoid the string being truncated at a NUL, all NUL 8983 characters are replaced with SOH (0x01). 8984 8985 The command executed is constructed using several options: 8986 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote' 8987 ({tmp} is an automatically generated file name). 8988 For Unix and OS/2 braces are put around {expr} to allow for 8989 concatenated commands. 8990 8991 The command will be executed in "cooked" mode, so that a 8992 CTRL-C will interrupt the command (on Unix at least). 8993 8994 The resulting error code can be found in |v:shell_error|. 8995 This function will fail in |restricted-mode|. 8996 8997 Note that any wrong value in the options mentioned above may 8998 make the function fail. It has also been reported to fail 8999 when using a security agent application. 9000 Unlike ":!cmd" there is no automatic check for changed files. 9001 Use |:checktime| to force a check. 9002 9003 9004systemlist({expr} [, {input}]) *systemlist()* 9005 Same as |system()|, but returns a |List| with lines (parts of 9006 output separated by NL) with NULs transformed into NLs. Output 9007 is the same as |readfile()| will output with {binary} argument 9008 set to "b". Note that on MS-Windows you may get trailing CR 9009 characters. 9010 9011 Returns an empty string on error. 9012 9013 9014tabpagebuflist([{arg}]) *tabpagebuflist()* 9015 The result is a |List|, where each item is the number of the 9016 buffer associated with each window in the current tab page. 9017 {arg} specifies the number of the tab page to be used. When 9018 omitted the current tab page is used. 9019 When {arg} is invalid the number zero is returned. 9020 To get a list of all buffers in all tabs use this: > 9021 let buflist = [] 9022 for i in range(tabpagenr('$')) 9023 call extend(buflist, tabpagebuflist(i + 1)) 9024 endfor 9025< Note that a buffer may appear in more than one window. 9026 9027 9028tabpagenr([{arg}]) *tabpagenr()* 9029 The result is a Number, which is the number of the current 9030 tab page. The first tab page has number 1. 9031 When the optional argument is "$", the number of the last tab 9032 page is returned (the tab page count). 9033 The number can be used with the |:tab| command. 9034 9035 9036tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()* 9037 Like |winnr()| but for tab page {tabarg}. 9038 {tabarg} specifies the number of tab page to be used. 9039 {arg} is used like with |winnr()|: 9040 - When omitted the current window number is returned. This is 9041 the window which will be used when going to this tab page. 9042 - When "$" the number of windows is returned. 9043 - When "#" the previous window nr is returned. 9044 Useful examples: > 9045 tabpagewinnr(1) " current window of tab page 1 9046 tabpagewinnr(4, '$') " number of windows in tab page 4 9047< When {tabarg} is invalid zero is returned. 9048 9049 *tagfiles()* 9050tagfiles() Returns a |List| with the file names used to search for tags 9051 for the current buffer. This is the 'tags' option expanded. 9052 9053 9054taglist({expr} [, {filename}]) *taglist()* 9055 Returns a list of tags matching the regular expression {expr}. 9056 9057 If {filename} is passed it is used to prioritize the results 9058 in the same way that |:tselect| does. See |tag-priority|. 9059 {filename} should be the full path of the file. 9060 9061 Each list item is a dictionary with at least the following 9062 entries: 9063 name Name of the tag. 9064 filename Name of the file where the tag is 9065 defined. It is either relative to the 9066 current directory or a full path. 9067 cmd Ex command used to locate the tag in 9068 the file. 9069 kind Type of the tag. The value for this 9070 entry depends on the language specific 9071 kind values. Only available when 9072 using a tags file generated by 9073 Exuberant ctags or hdrtag. 9074 static A file specific tag. Refer to 9075 |static-tag| for more information. 9076 More entries may be present, depending on the content of the 9077 tags file: access, implementation, inherits and signature. 9078 Refer to the ctags documentation for information about these 9079 fields. For C code the fields "struct", "class" and "enum" 9080 may appear, they give the name of the entity the tag is 9081 contained in. 9082 9083 The ex-command "cmd" can be either an ex search pattern, a 9084 line number or a line number followed by a byte number. 9085 9086 If there are no matching tags, then an empty list is returned. 9087 9088 To get an exact tag match, the anchors '^' and '$' should be 9089 used in {expr}. This also make the function work faster. 9090 Refer to |tag-regexp| for more information about the tag 9091 search regular expression pattern. 9092 9093 Refer to |'tags'| for information about how the tags file is 9094 located by Vim. Refer to |tags-file-format| for the format of 9095 the tags file generated by the different ctags tools. 9096 9097tan({expr}) *tan()* 9098 Return the tangent of {expr}, measured in radians, as a |Float| 9099 in the range [-inf, inf]. 9100 {expr} must evaluate to a |Float| or a |Number|. 9101 Examples: > 9102 :echo tan(10) 9103< 0.648361 > 9104 :echo tan(-4.01) 9105< -1.181502 9106 {only available when compiled with the |+float| feature} 9107 9108 9109tanh({expr}) *tanh()* 9110 Return the hyperbolic tangent of {expr} as a |Float| in the 9111 range [-1, 1]. 9112 {expr} must evaluate to a |Float| or a |Number|. 9113 Examples: > 9114 :echo tanh(0.5) 9115< 0.462117 > 9116 :echo tanh(-1) 9117< -0.761594 9118 {only available when compiled with the |+float| feature} 9119 9120 9121tempname() *tempname()* *temp-file-name* 9122 The result is a String, which is the name of a file that 9123 doesn't exist. It can be used for a temporary file. The name 9124 is different for at least 26 consecutive calls. Example: > 9125 :let tmpfile = tempname() 9126 :exe "redir > " . tmpfile 9127< For Unix, the file will be in a private directory |tempfile|. 9128 For MS-Windows forward slashes are used when the 'shellslash' 9129 option is set or when 'shellcmdflag' starts with '-'. 9130 9131 *term_dumpdiff()* 9132term_dumpdiff({filename}, {filename} [, {options}]) 9133 Open a new window displaying the difference between the two 9134 files. The files must have been created with 9135 |term_dumpwrite()|. 9136 Returns the buffer number or zero when the diff fails. 9137 Also see |terminal-diff|. 9138 NOTE: this does not work with double-width characters yet. 9139 9140 The top part of the buffer contains the contents of the first 9141 file, the bottom part of the buffer contains the contents of 9142 the second file. The middle part shows the differences. 9143 The parts are separated by a line of equals. 9144 9145 If the {options} argument is present, it must be a Dict with 9146 these possible members: 9147 "term_name" name to use for the buffer name, instead 9148 of the first file name. 9149 "term_rows" vertical size to use for the terminal, 9150 instead of using 'termwinsize' 9151 "term_cols" horizontal size to use for the terminal, 9152 instead of using 'termwinsize' 9153 "vertical" split the window vertically 9154 "curwin" use the current window, do not split the 9155 window; fails if the current buffer 9156 cannot be |abandon|ed 9157 "norestore" do not add the terminal window to a 9158 session file 9159 9160 Each character in the middle part indicates a difference. If 9161 there are multiple differences only the first in this list is 9162 used: 9163 X different character 9164 w different width 9165 f different foreground color 9166 b different background color 9167 a different attribute 9168 + missing position in first file 9169 - missing position in second file 9170 9171 Using the "s" key the top and bottom parts are swapped. This 9172 makes it easy to spot a difference. 9173 9174 *term_dumpload()* 9175term_dumpload({filename} [, {options}]) 9176 Open a new window displaying the contents of {filename} 9177 The file must have been created with |term_dumpwrite()|. 9178 Returns the buffer number or zero when it fails. 9179 Also see |terminal-diff|. 9180 9181 For {options} see |term_dumpdiff()|. 9182 9183 *term_dumpwrite()* 9184term_dumpwrite({buf}, {filename} [, {options}]) 9185 Dump the contents of the terminal screen of {buf} in the file 9186 {filename}. This uses a format that can be used with 9187 |term_dumpload()| and |term_dumpdiff()|. 9188 If the job in the terminal already finished an error is given: 9189 *E958* 9190 If {filename} already exists an error is given: *E953* 9191 Also see |terminal-diff|. 9192 9193 {options} is a dictionary with these optional entries: 9194 "rows" maximum number of rows to dump 9195 "columns" maximum number of columns to dump 9196 9197term_getaltscreen({buf}) *term_getaltscreen()* 9198 Returns 1 if the terminal of {buf} is using the alternate 9199 screen. 9200 {buf} is used as with |term_getsize()|. 9201 {only available when compiled with the |+terminal| feature} 9202 9203term_getansicolors({buf}) *term_getansicolors()* 9204 Get the ANSI color palette in use by terminal {buf}. 9205 Returns a List of length 16 where each element is a String 9206 representing a color in hexadecimal "#rrggbb" format. 9207 Also see |term_setansicolors()| and |g:terminal_ansi_colors|. 9208 If neither was used returns the default colors. 9209 9210 {buf} is used as with |term_getsize()|. If the buffer does not 9211 exist or is not a terminal window, an empty list is returned. 9212 {only available when compiled with the |+terminal| feature and 9213 with GUI enabled and/or the |+termguicolors| feature} 9214 9215term_getattr({attr}, {what}) *term_getattr()* 9216 Given {attr}, a value returned by term_scrape() in the "attr" 9217 item, return whether {what} is on. {what} can be one of: 9218 bold 9219 italic 9220 underline 9221 strike 9222 reverse 9223 {only available when compiled with the |+terminal| feature} 9224 9225term_getcursor({buf}) *term_getcursor()* 9226 Get the cursor position of terminal {buf}. Returns a list with 9227 two numbers and a dictionary: [row, col, dict]. 9228 9229 "row" and "col" are one based, the first screen cell is row 9230 1, column 1. This is the cursor position of the terminal 9231 itself, not of the Vim window. 9232 9233 "dict" can have these members: 9234 "visible" one when the cursor is visible, zero when it 9235 is hidden. 9236 "blink" one when the cursor is blinking, zero when it 9237 is not blinking. 9238 "shape" 1 for a block cursor, 2 for underline and 3 9239 for a vertical bar. 9240 9241 {buf} must be the buffer number of a terminal window. If the 9242 buffer does not exist or is not a terminal window, an empty 9243 list is returned. 9244 {only available when compiled with the |+terminal| feature} 9245 9246term_getjob({buf}) *term_getjob()* 9247 Get the Job associated with terminal window {buf}. 9248 {buf} is used as with |term_getsize()|. 9249 Returns |v:null| when there is no job. 9250 {only available when compiled with the |+terminal| feature} 9251 9252term_getline({buf}, {row}) *term_getline()* 9253 Get a line of text from the terminal window of {buf}. 9254 {buf} is used as with |term_getsize()|. 9255 9256 The first line has {row} one. When {row} is "." the cursor 9257 line is used. When {row} is invalid an empty string is 9258 returned. 9259 9260 To get attributes of each character use |term_scrape()|. 9261 {only available when compiled with the |+terminal| feature} 9262 9263term_getscrolled({buf}) *term_getscrolled()* 9264 Return the number of lines that scrolled to above the top of 9265 terminal {buf}. This is the offset between the row number 9266 used for |term_getline()| and |getline()|, so that: > 9267 term_getline(buf, N) 9268< is equal to: > 9269 getline(N + term_getscrolled(buf)) 9270< (if that line exists). 9271 9272 {buf} is used as with |term_getsize()|. 9273 {only available when compiled with the |+terminal| feature} 9274 9275term_getsize({buf}) *term_getsize()* 9276 Get the size of terminal {buf}. Returns a list with two 9277 numbers: [rows, cols]. This is the size of the terminal, not 9278 the window containing the terminal. 9279 9280 {buf} must be the buffer number of a terminal window. Use an 9281 empty string for the current buffer. If the buffer does not 9282 exist or is not a terminal window, an empty list is returned. 9283 {only available when compiled with the |+terminal| feature} 9284 9285term_getstatus({buf}) *term_getstatus()* 9286 Get the status of terminal {buf}. This returns a comma 9287 separated list of these items: 9288 running job is running 9289 finished job has finished 9290 normal in Terminal-Normal mode 9291 One of "running" or "finished" is always present. 9292 9293 {buf} must be the buffer number of a terminal window. If the 9294 buffer does not exist or is not a terminal window, an empty 9295 string is returned. 9296 {only available when compiled with the |+terminal| feature} 9297 9298term_gettitle({buf}) *term_gettitle()* 9299 Get the title of terminal {buf}. This is the title that the 9300 job in the terminal has set. 9301 9302 {buf} must be the buffer number of a terminal window. If the 9303 buffer does not exist or is not a terminal window, an empty 9304 string is returned. 9305 {only available when compiled with the |+terminal| feature} 9306 9307term_gettty({buf} [, {input}]) *term_gettty()* 9308 Get the name of the controlling terminal associated with 9309 terminal window {buf}. {buf} is used as with |term_getsize()|. 9310 9311 When {input} is omitted or 0, return the name for writing 9312 (stdout). When {input} is 1 return the name for reading 9313 (stdin). On UNIX, both return same name. 9314 {only available when compiled with the |+terminal| feature} 9315 9316term_list() *term_list()* 9317 Return a list with the buffer numbers of all buffers for 9318 terminal windows. 9319 {only available when compiled with the |+terminal| feature} 9320 9321term_scrape({buf}, {row}) *term_scrape()* 9322 Get the contents of {row} of terminal screen of {buf}. 9323 For {buf} see |term_getsize()|. 9324 9325 The first line has {row} one. When {row} is "." the cursor 9326 line is used. When {row} is invalid an empty string is 9327 returned. 9328 9329 Return a List containing a Dict for each screen cell: 9330 "chars" character(s) at the cell 9331 "fg" foreground color as #rrggbb 9332 "bg" background color as #rrggbb 9333 "attr" attributes of the cell, use |term_getattr()| 9334 to get the individual flags 9335 "width" cell width: 1 or 2 9336 {only available when compiled with the |+terminal| feature} 9337 9338term_sendkeys({buf}, {keys}) *term_sendkeys()* 9339 Send keystrokes {keys} to terminal {buf}. 9340 {buf} is used as with |term_getsize()|. 9341 9342 {keys} are translated as key sequences. For example, "\<c-x>" 9343 means the character CTRL-X. 9344 {only available when compiled with the |+terminal| feature} 9345 9346term_setansicolors({buf}, {colors}) *term_setansicolors()* 9347 Set the ANSI color palette used by terminal {buf}. 9348 {colors} must be a List of 16 valid color names or hexadecimal 9349 color codes, like those accepted by |highlight-guifg|. 9350 Also see |term_getansicolors()| and |g:terminal_ansi_colors|. 9351 9352 The colors normally are: 9353 0 black 9354 1 dark red 9355 2 dark green 9356 3 brown 9357 4 dark blue 9358 5 dark magenta 9359 6 dark cyan 9360 7 light grey 9361 8 dark grey 9362 9 red 9363 10 green 9364 11 yellow 9365 12 blue 9366 13 magenta 9367 14 cyan 9368 15 white 9369 9370 These colors are used in the GUI and in the terminal when 9371 'termguicolors' is set. When not using GUI colors (GUI mode 9372 or 'termguicolors'), the terminal window always uses the 16 9373 ANSI colors of the underlying terminal. 9374 {only available when compiled with the |+terminal| feature and 9375 with GUI enabled and/or the |+termguicolors| feature} 9376 9377term_setkill({buf}, {how}) *term_setkill()* 9378 When exiting Vim or trying to close the terminal window in 9379 another way, {how} defines whether the job in the terminal can 9380 be stopped. 9381 When {how} is empty (the default), the job will not be 9382 stopped, trying to exit will result in |E947|. 9383 Otherwise, {how} specifies what signal to send to the job. 9384 See |job_stop()| for the values. 9385 9386 After sending the signal Vim will wait for up to a second to 9387 check that the job actually stopped. 9388 9389term_setrestore({buf}, {command}) *term_setrestore()* 9390 Set the command to write in a session file to restore the job 9391 in this terminal. The line written in the session file is: > 9392 terminal ++curwin ++cols=%d ++rows=%d {command} 9393< Make sure to escape the command properly. 9394 9395 Use an empty {command} to run 'shell'. 9396 Use "NONE" to not restore this window. 9397 {only available when compiled with the |+terminal| feature} 9398 9399term_setsize({buf}, {rows}, {cols}) *term_setsize()* *E955* 9400 Set the size of terminal {buf}. The size of the window 9401 containing the terminal will also be adjusted, if possible. 9402 If {rows} or {cols} is zero or negative, that dimension is not 9403 changed. 9404 9405 {buf} must be the buffer number of a terminal window. Use an 9406 empty string for the current buffer. If the buffer does not 9407 exist or is not a terminal window, an error is given. 9408 {only available when compiled with the |+terminal| feature} 9409 9410term_start({cmd}, {options}) *term_start()* 9411 Open a terminal window and run {cmd} in it. 9412 9413 {cmd} can be a string or a List, like with |job_start()|. The 9414 string "NONE" can be used to open a terminal window without 9415 starting a job, the pty of the terminal can be used by a 9416 command like gdb. 9417 9418 Returns the buffer number of the terminal window. If {cmd} 9419 cannot be executed the window does open and shows an error 9420 message. 9421 If opening the window fails zero is returned. 9422 9423 {options} are similar to what is used for |job_start()|, see 9424 |job-options|. However, not all options can be used. These 9425 are supported: 9426 all timeout options 9427 "stoponexit", "cwd", "env" 9428 "callback", "out_cb", "err_cb", "exit_cb", "close_cb" 9429 "in_io", "in_top", "in_bot", "in_name", "in_buf" 9430 "out_io", "out_name", "out_buf", "out_modifiable", "out_msg" 9431 "err_io", "err_name", "err_buf", "err_modifiable", "err_msg" 9432 However, at least one of stdin, stdout or stderr must be 9433 connected to the terminal. When I/O is connected to the 9434 terminal then the callback function for that part is not used. 9435 9436 There are extra options: 9437 "term_name" name to use for the buffer name, instead 9438 of the command name. 9439 "term_rows" vertical size to use for the terminal, 9440 instead of using 'termwinsize' 9441 "term_cols" horizontal size to use for the terminal, 9442 instead of using 'termwinsize' 9443 "vertical" split the window vertically; note that 9444 other window position can be defined with 9445 command modifiers, such as |:belowright|. 9446 "curwin" use the current window, do not split the 9447 window; fails if the current buffer 9448 cannot be |abandon|ed 9449 "hidden" do not open a window 9450 "norestore" do not add the terminal window to a 9451 session file 9452 "term_kill" what to do when trying to close the 9453 terminal window, see |term_setkill()| 9454 "term_finish" What to do when the job is finished: 9455 "close": close any windows 9456 "open": open window if needed 9457 Note that "open" can be interruptive. 9458 See |term++close| and |term++open|. 9459 "term_opencmd" command to use for opening the window when 9460 "open" is used for "term_finish"; must 9461 have "%d" where the buffer number goes, 9462 e.g. "10split|buffer %d"; when not 9463 specified "botright sbuf %d" is used 9464 "eof_chars" Text to send after all buffer lines were 9465 written to the terminal. When not set 9466 CTRL-D is used on MS-Windows. For Python 9467 use CTRL-Z or "exit()". For a shell use 9468 "exit". A CR is always added. 9469 "ansi_colors" A list of 16 color names or hex codes 9470 defining the ANSI palette used in GUI 9471 color modes. See |g:terminal_ansi_colors|. 9472 "term_mode" (MS-Windows only): Specify which pty to 9473 use: 9474 "winpty": Use winpty 9475 "conpty": Use ConPTY (if available) 9476 9477 {only available when compiled with the |+terminal| feature} 9478 9479term_wait({buf} [, {time}]) *term_wait()* 9480 Wait for pending updates of {buf} to be handled. 9481 {buf} is used as with |term_getsize()|. 9482 {time} is how long to wait for updates to arrive in msec. If 9483 not set then 10 msec will be used. 9484 {only available when compiled with the |+terminal| feature} 9485 9486test_alloc_fail({id}, {countdown}, {repeat}) *test_alloc_fail()* 9487 This is for testing: If the memory allocation with {id} is 9488 called, then decrement {countdown}, and when it reaches zero 9489 let memory allocation fail {repeat} times. When {repeat} is 9490 smaller than one it fails one time. 9491 9492test_autochdir() *test_autochdir()* 9493 Set a flag to enable the effect of 'autochdir' before Vim 9494 startup has finished. 9495 9496test_feedinput({string}) *test_feedinput()* 9497 Characters in {string} are queued for processing as if they 9498 were typed by the user. This uses a low level input buffer. 9499 This function works only when with |+unix| or GUI is running. 9500 9501test_garbagecollect_now() *test_garbagecollect_now()* 9502 Like garbagecollect(), but executed right away. This must 9503 only be called directly to avoid any structure to exist 9504 internally, and |v:testing| must have been set before calling 9505 any function. 9506 9507test_ignore_error({expr}) *test_ignore_error()* 9508 Ignore any error containing {expr}. A normal message is given 9509 instead. 9510 This is only meant to be used in tests, where catching the 9511 error with try/catch cannot be used (because it skips over 9512 following code). 9513 {expr} is used literally, not as a pattern. 9514 When the {expr} is the string "RESET" then the list of ignored 9515 errors is made empty. 9516 9517test_null_blob() *test_null_blob()* 9518 Return a |Blob| that is null. Only useful for testing. 9519 9520test_null_channel() *test_null_channel()* 9521 Return a |Channel| that is null. Only useful for testing. 9522 {only available when compiled with the +channel feature} 9523 9524test_null_dict() *test_null_dict()* 9525 Return a |Dict| that is null. Only useful for testing. 9526 9527test_null_job() *test_null_job()* 9528 Return a |Job| that is null. Only useful for testing. 9529 {only available when compiled with the +job feature} 9530 9531test_null_list() *test_null_list()* 9532 Return a |List| that is null. Only useful for testing. 9533 9534test_null_partial() *test_null_partial()* 9535 Return a |Partial| that is null. Only useful for testing. 9536 9537test_null_string() *test_null_string()* 9538 Return a |String| that is null. Only useful for testing. 9539 9540test_option_not_set({name}) *test_option_not_set()* 9541 Reset the flag that indicates option {name} was set. Thus it 9542 looks like it still has the default value. Use like this: > 9543 set ambiwidth=double 9544 call test_option_not_set('ambiwidth') 9545< Now the 'ambiwidth' option behaves like it was never changed, 9546 even though the value is "double". 9547 Only to be used for testing! 9548 9549test_override({name}, {val}) *test_override()* 9550 Overrides certain parts of Vim's internal processing to be able 9551 to run tests. Only to be used for testing Vim! 9552 The override is enabled when {val} is non-zero and removed 9553 when {val} is zero. 9554 Current supported values for name are: 9555 9556 name effect when {val} is non-zero ~ 9557 redraw disable the redrawing() function 9558 redraw_flag ignore the RedrawingDisabled flag 9559 char_avail disable the char_avail() function 9560 starting reset the "starting" variable, see below 9561 nfa_fail makes the NFA regexp engine fail to force a 9562 fallback to the old engine 9563 ALL clear all overrides ({val} is not used) 9564 9565 "starting" is to be used when a test should behave like 9566 startup was done. Since the tests are run by sourcing a 9567 script the "starting" variable is non-zero. This is usually a 9568 good thing (tests run faster), but sometimes changes behavior 9569 in a way that the test doesn't work properly. 9570 When using: > 9571 call test_override('starting', 1) 9572< The value of "starting" is saved. It is restored by: > 9573 call test_override('starting', 0) 9574 9575test_scrollbar({which}, {value}, {dragging}) *test_scrollbar()* 9576 Pretend using scrollbar {which} to move it to position 9577 {value}. {which} can be: 9578 left Left scrollbar of the current window 9579 right Right scrollbar of the current window 9580 hor Horizontal scrollbar 9581 9582 For the vertical scrollbars {value} can be 1 to the 9583 line-count of the buffer. For the horizontal scrollbar the 9584 {value} can be between 1 and the maximum line length, assuming 9585 'wrap' is not set. 9586 9587 When {dragging} is non-zero it's like dragging the scrollbar, 9588 otherwise it's like clicking in the scrollbar. 9589 Only works when the {which} scrollbar actually exists, 9590 obviously only when using the GUI. 9591 9592test_settime({expr}) *test_settime()* 9593 Set the time Vim uses internally. Currently only used for 9594 timestamps in the history, as they are used in viminfo, and 9595 for undo. 9596 Using a value of 1 makes Vim not sleep after a warning or 9597 error message. 9598 {expr} must evaluate to a number. When the value is zero the 9599 normal behavior is restored. 9600 9601 *timer_info()* 9602timer_info([{id}]) 9603 Return a list with information about timers. 9604 When {id} is given only information about this timer is 9605 returned. When timer {id} does not exist an empty list is 9606 returned. 9607 When {id} is omitted information about all timers is returned. 9608 9609 For each timer the information is stored in a Dictionary with 9610 these items: 9611 "id" the timer ID 9612 "time" time the timer was started with 9613 "remaining" time until the timer fires 9614 "repeat" number of times the timer will still fire; 9615 -1 means forever 9616 "callback" the callback 9617 "paused" 1 if the timer is paused, 0 otherwise 9618 9619 {only available when compiled with the |+timers| feature} 9620 9621timer_pause({timer}, {paused}) *timer_pause()* 9622 Pause or unpause a timer. A paused timer does not invoke its 9623 callback when its time expires. Unpausing a timer may cause 9624 the callback to be invoked almost immediately if enough time 9625 has passed. 9626 9627 Pausing a timer is useful to avoid the callback to be called 9628 for a short time. 9629 9630 If {paused} evaluates to a non-zero Number or a non-empty 9631 String, then the timer is paused, otherwise it is unpaused. 9632 See |non-zero-arg|. 9633 9634 {only available when compiled with the |+timers| feature} 9635 9636 *timer_start()* *timer* *timers* 9637timer_start({time}, {callback} [, {options}]) 9638 Create a timer and return the timer ID. 9639 9640 {time} is the waiting time in milliseconds. This is the 9641 minimum time before invoking the callback. When the system is 9642 busy or Vim is not waiting for input the time will be longer. 9643 9644 {callback} is the function to call. It can be the name of a 9645 function or a |Funcref|. It is called with one argument, which 9646 is the timer ID. The callback is only invoked when Vim is 9647 waiting for input. 9648 9649 {options} is a dictionary. Supported entries: 9650 "repeat" Number of times to repeat calling the 9651 callback. -1 means forever. When not present 9652 the callback will be called once. 9653 If the timer causes an error three times in a 9654 row the repeat is cancelled. This avoids that 9655 Vim becomes unusable because of all the error 9656 messages. 9657 9658 Example: > 9659 func MyHandler(timer) 9660 echo 'Handler called' 9661 endfunc 9662 let timer = timer_start(500, 'MyHandler', 9663 \ {'repeat': 3}) 9664< This will invoke MyHandler() three times at 500 msec 9665 intervals. 9666 9667 {only available when compiled with the |+timers| feature} 9668 9669timer_stop({timer}) *timer_stop()* 9670 Stop a timer. The timer callback will no longer be invoked. 9671 {timer} is an ID returned by timer_start(), thus it must be a 9672 Number. If {timer} does not exist there is no error. 9673 9674 {only available when compiled with the |+timers| feature} 9675 9676timer_stopall() *timer_stopall()* 9677 Stop all timers. The timer callbacks will no longer be 9678 invoked. Useful if some timers is misbehaving. If there are 9679 no timers there is no error. 9680 9681 {only available when compiled with the |+timers| feature} 9682 9683tolower({expr}) *tolower()* 9684 The result is a copy of the String given, with all uppercase 9685 characters turned into lowercase (just like applying |gu| to 9686 the string). 9687 9688toupper({expr}) *toupper()* 9689 The result is a copy of the String given, with all lowercase 9690 characters turned into uppercase (just like applying |gU| to 9691 the string). 9692 9693tr({src}, {fromstr}, {tostr}) *tr()* 9694 The result is a copy of the {src} string with all characters 9695 which appear in {fromstr} replaced by the character in that 9696 position in the {tostr} string. Thus the first character in 9697 {fromstr} is translated into the first character in {tostr} 9698 and so on. Exactly like the unix "tr" command. 9699 This code also deals with multibyte characters properly. 9700 9701 Examples: > 9702 echo tr("hello there", "ht", "HT") 9703< returns "Hello THere" > 9704 echo tr("<blob>", "<>", "{}") 9705< returns "{blob}" 9706 9707trim({text} [, {mask}]) *trim()* 9708 Return {text} as a String where any character in {mask} is 9709 removed from the beginning and end of {text}. 9710 If {mask} is not given, {mask} is all characters up to 0x20, 9711 which includes Tab, space, NL and CR, plus the non-breaking 9712 space character 0xa0. 9713 This code deals with multibyte characters properly. 9714 9715 Examples: > 9716 echo trim(" some text ") 9717< returns "some text" > 9718 echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL" 9719< returns "RESERVE_TAIL" > 9720 echo trim("rm<Xrm<>X>rrm", "rm<>") 9721< returns "Xrm<>X" (characters in the middle are not removed) 9722 9723trunc({expr}) *trunc()* 9724 Return the largest integral value with magnitude less than or 9725 equal to {expr} as a |Float| (truncate towards zero). 9726 {expr} must evaluate to a |Float| or a |Number|. 9727 Examples: > 9728 echo trunc(1.456) 9729< 1.0 > 9730 echo trunc(-5.456) 9731< -5.0 > 9732 echo trunc(4.0) 9733< 4.0 9734 {only available when compiled with the |+float| feature} 9735 9736 *type()* 9737type({expr}) The result is a Number representing the type of {expr}. 9738 Instead of using the number directly, it is better to use the 9739 v:t_ variable that has the value: 9740 Number: 0 |v:t_number| 9741 String: 1 |v:t_string| 9742 Funcref: 2 |v:t_func| 9743 List: 3 |v:t_list| 9744 Dictionary: 4 |v:t_dict| 9745 Float: 5 |v:t_float| 9746 Boolean: 6 |v:t_bool| (v:false and v:true) 9747 None: 7 |v:t_none| (v:null and v:none) 9748 Job: 8 |v:t_job| 9749 Channel: 9 |v:t_channel| 9750 Blob: 10 |v:t_blob| 9751 For backward compatibility, this method can be used: > 9752 :if type(myvar) == type(0) 9753 :if type(myvar) == type("") 9754 :if type(myvar) == type(function("tr")) 9755 :if type(myvar) == type([]) 9756 :if type(myvar) == type({}) 9757 :if type(myvar) == type(0.0) 9758 :if type(myvar) == type(v:false) 9759 :if type(myvar) == type(v:none) 9760< To check if the v:t_ variables exist use this: > 9761 :if exists('v:t_number') 9762 9763undofile({name}) *undofile()* 9764 Return the name of the undo file that would be used for a file 9765 with name {name} when writing. This uses the 'undodir' 9766 option, finding directories that exist. It does not check if 9767 the undo file exists. 9768 {name} is always expanded to the full path, since that is what 9769 is used internally. 9770 If {name} is empty undofile() returns an empty string, since a 9771 buffer without a file name will not write an undo file. 9772 Useful in combination with |:wundo| and |:rundo|. 9773 When compiled without the |+persistent_undo| option this always 9774 returns an empty string. 9775 9776undotree() *undotree()* 9777 Return the current state of the undo tree in a dictionary with 9778 the following items: 9779 "seq_last" The highest undo sequence number used. 9780 "seq_cur" The sequence number of the current position in 9781 the undo tree. This differs from "seq_last" 9782 when some changes were undone. 9783 "time_cur" Time last used for |:earlier| and related 9784 commands. Use |strftime()| to convert to 9785 something readable. 9786 "save_last" Number of the last file write. Zero when no 9787 write yet. 9788 "save_cur" Number of the current position in the undo 9789 tree. 9790 "synced" Non-zero when the last undo block was synced. 9791 This happens when waiting from input from the 9792 user. See |undo-blocks|. 9793 "entries" A list of dictionaries with information about 9794 undo blocks. 9795 9796 The first item in the "entries" list is the oldest undo item. 9797 Each List item is a Dictionary with these items: 9798 "seq" Undo sequence number. Same as what appears in 9799 |:undolist|. 9800 "time" Timestamp when the change happened. Use 9801 |strftime()| to convert to something readable. 9802 "newhead" Only appears in the item that is the last one 9803 that was added. This marks the last change 9804 and where further changes will be added. 9805 "curhead" Only appears in the item that is the last one 9806 that was undone. This marks the current 9807 position in the undo tree, the block that will 9808 be used by a redo command. When nothing was 9809 undone after the last change this item will 9810 not appear anywhere. 9811 "save" Only appears on the last block before a file 9812 write. The number is the write count. The 9813 first write has number 1, the last one the 9814 "save_last" mentioned above. 9815 "alt" Alternate entry. This is again a List of undo 9816 blocks. Each item may again have an "alt" 9817 item. 9818 9819uniq({list} [, {func} [, {dict}]]) *uniq()* *E882* 9820 Remove second and succeeding copies of repeated adjacent 9821 {list} items in-place. Returns {list}. If you want a list 9822 to remain unmodified make a copy first: > 9823 :let newlist = uniq(copy(mylist)) 9824< The default compare function uses the string representation of 9825 each item. For the use of {func} and {dict} see |sort()|. 9826 9827values({dict}) *values()* 9828 Return a |List| with all the values of {dict}. The |List| is 9829 in arbitrary order. Also see |items()| and |keys()|. 9830 9831 9832virtcol({expr}) *virtcol()* 9833 The result is a Number, which is the screen column of the file 9834 position given with {expr}. That is, the last screen position 9835 occupied by the character at that position, when the screen 9836 would be of unlimited width. When there is a <Tab> at the 9837 position, the returned Number will be the column at the end of 9838 the <Tab>. For example, for a <Tab> in column 1, with 'ts' 9839 set to 8, it returns 8. |conceal| is ignored. 9840 For the byte position use |col()|. 9841 For the use of {expr} see |col()|. 9842 When 'virtualedit' is used {expr} can be [lnum, col, off], where 9843 "off" is the offset in screen columns from the start of the 9844 character. E.g., a position within a <Tab> or after the last 9845 character. When "off" is omitted zero is used. 9846 When Virtual editing is active in the current mode, a position 9847 beyond the end of the line can be returned. |'virtualedit'| 9848 The accepted positions are: 9849 . the cursor position 9850 $ the end of the cursor line (the result is the 9851 number of displayed characters in the cursor line 9852 plus one) 9853 'x position of mark x (if the mark is not set, 0 is 9854 returned) 9855 v In Visual mode: the start of the Visual area (the 9856 cursor is the end). When not in Visual mode 9857 returns the cursor position. Differs from |'<| in 9858 that it's updated right away. 9859 Note that only marks in the current file can be used. 9860 Examples: > 9861 virtcol(".") with text "foo^Lbar", with cursor on the "^L", returns 5 9862 virtcol("$") with text "foo^Lbar", returns 9 9863 virtcol("'t") with text " there", with 't at 'h', returns 6 9864< The first column is 1. 0 is returned for an error. 9865 A more advanced example that echoes the maximum length of 9866 all lines: > 9867 echo max(map(range(1, line('$')), "virtcol([v:val, '$'])")) 9868 9869 9870visualmode([expr]) *visualmode()* 9871 The result is a String, which describes the last Visual mode 9872 used in the current buffer. Initially it returns an empty 9873 string, but once Visual mode has been used, it returns "v", 9874 "V", or "<CTRL-V>" (a single CTRL-V character) for 9875 character-wise, line-wise, or block-wise Visual mode 9876 respectively. 9877 Example: > 9878 :exe "normal " . visualmode() 9879< This enters the same Visual mode as before. It is also useful 9880 in scripts if you wish to act differently depending on the 9881 Visual mode that was used. 9882 If Visual mode is active, use |mode()| to get the Visual mode 9883 (e.g., in a |:vmap|). 9884 If [expr] is supplied and it evaluates to a non-zero Number or 9885 a non-empty String, then the Visual mode will be cleared and 9886 the old value is returned. See |non-zero-arg|. 9887 9888wildmenumode() *wildmenumode()* 9889 Returns |TRUE| when the wildmenu is active and |FALSE| 9890 otherwise. See 'wildmenu' and 'wildmode'. 9891 This can be used in mappings to handle the 'wildcharm' option 9892 gracefully. (Makes only sense with |mapmode-c| mappings). 9893 9894 For example to make <c-j> work like <down> in wildmode, use: > 9895 :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>" 9896< 9897 (Note, this needs the 'wildcharm' option set appropriately). 9898 9899 9900win_findbuf({bufnr}) *win_findbuf()* 9901 Returns a list with |window-ID|s for windows that contain 9902 buffer {bufnr}. When there is none the list is empty. 9903 9904win_getid([{win} [, {tab}]]) *win_getid()* 9905 Get the |window-ID| for the specified window. 9906 When {win} is missing use the current window. 9907 With {win} this is the window number. The top window has 9908 number 1. 9909 Without {tab} use the current tab, otherwise the tab with 9910 number {tab}. The first tab has number one. 9911 Return zero if the window cannot be found. 9912 9913win_gotoid({expr}) *win_gotoid()* 9914 Go to window with ID {expr}. This may also change the current 9915 tabpage. 9916 Return 1 if successful, 0 if the window cannot be found. 9917 9918win_id2tabwin({expr}) *win_id2tabwin()* 9919 Return a list with the tab number and window number of window 9920 with ID {expr}: [tabnr, winnr]. 9921 Return [0, 0] if the window cannot be found. 9922 9923win_id2win({expr}) *win_id2win()* 9924 Return the window number of window with ID {expr}. 9925 Return 0 if the window cannot be found in the current tabpage. 9926 9927win_screenpos({nr}) *win_screenpos()* 9928 Return the screen position of window {nr} as a list with two 9929 numbers: [row, col]. The first window always has position 9930 [1, 1], unless there is a tabline, then it is [2, 1]. 9931 {nr} can be the window number or the |window-ID|. 9932 Return [0, 0] if the window cannot be found in the current 9933 tabpage. 9934 9935 *winbufnr()* 9936winbufnr({nr}) The result is a Number, which is the number of the buffer 9937 associated with window {nr}. {nr} can be the window number or 9938 the |window-ID|. 9939 When {nr} is zero, the number of the buffer in the current 9940 window is returned. 9941 When window {nr} doesn't exist, -1 is returned. 9942 Example: > 9943 :echo "The file in the current window is " . bufname(winbufnr(0)) 9944< 9945 *wincol()* 9946wincol() The result is a Number, which is the virtual column of the 9947 cursor in the window. This is counting screen cells from the 9948 left side of the window. The leftmost column is one. 9949 9950winheight({nr}) *winheight()* 9951 The result is a Number, which is the height of window {nr}. 9952 {nr} can be the window number or the |window-ID|. 9953 When {nr} is zero, the height of the current window is 9954 returned. When window {nr} doesn't exist, -1 is returned. 9955 An existing window always has a height of zero or more. 9956 This excludes any window toolbar line. 9957 Examples: > 9958 :echo "The current window has " . winheight(0) . " lines." 9959< 9960winlayout([{tabnr}]) *winlayout()* 9961 The result is a nested List containing the layout of windows 9962 in a tabpage. 9963 9964 Without {tabnr} use the current tabpage, otherwise the tabpage 9965 with number {tabnr}. If the tabpage {tabnr} is not found, 9966 returns an empty list. 9967 9968 For a leaf window, it returns: 9969 ['leaf', {winid}] 9970 For horizontally split windows, which form a column, it 9971 returns: 9972 ['col', [{nested list of windows}]] 9973 For vertically split windows, which form a row, it returns: 9974 ['row', [{nested list of windows}]] 9975 9976 Example: > 9977 " Only one window in the tab page 9978 :echo winlayout() 9979 ['leaf', 1000] 9980 " Two horizontally split windows 9981 :echo winlayout() 9982 ['col', [['leaf', 1000], ['leaf', 1001]]] 9983 " Three horizontally split windows, with two 9984 " vertically split windows in the middle window 9985 :echo winlayout(2) 9986 ['col', [['leaf', 1002], ['row', ['leaf', 1003], 9987 ['leaf', 1001]]], ['leaf', 1000]] 9988< 9989 *winline()* 9990winline() The result is a Number, which is the screen line of the cursor 9991 in the window. This is counting screen lines from the top of 9992 the window. The first line is one. 9993 If the cursor was moved the view on the file will be updated 9994 first, this may cause a scroll. 9995 9996 *winnr()* 9997winnr([{arg}]) The result is a Number, which is the number of the current 9998 window. The top window has number 1. 9999 When the optional argument is "$", the number of the 10000 last window is returned (the window count). > 10001 let window_count = winnr('$') 10002< When the optional argument is "#", the number of the last 10003 accessed window is returned (where |CTRL-W_p| goes to). 10004 If there is no previous window or it is in another tab page 0 10005 is returned. 10006 The number can be used with |CTRL-W_w| and ":wincmd w" 10007 |:wincmd|. 10008 Also see |tabpagewinnr()| and |win_getid()|. 10009 10010 *winrestcmd()* 10011winrestcmd() Returns a sequence of |:resize| commands that should restore 10012 the current window sizes. Only works properly when no windows 10013 are opened or closed and the current window and tab page is 10014 unchanged. 10015 Example: > 10016 :let cmd = winrestcmd() 10017 :call MessWithWindowSizes() 10018 :exe cmd 10019< 10020 *winrestview()* 10021winrestview({dict}) 10022 Uses the |Dictionary| returned by |winsaveview()| to restore 10023 the view of the current window. 10024 Note: The {dict} does not have to contain all values, that are 10025 returned by |winsaveview()|. If values are missing, those 10026 settings won't be restored. So you can use: > 10027 :call winrestview({'curswant': 4}) 10028< 10029 This will only set the curswant value (the column the cursor 10030 wants to move on vertical movements) of the cursor to column 5 10031 (yes, that is 5), while all other settings will remain the 10032 same. This is useful, if you set the cursor position manually. 10033 10034 If you have changed the values the result is unpredictable. 10035 If the window size changed the result won't be the same. 10036 10037 *winsaveview()* 10038winsaveview() Returns a |Dictionary| that contains information to restore 10039 the view of the current window. Use |winrestview()| to 10040 restore the view. 10041 This is useful if you have a mapping that jumps around in the 10042 buffer and you want to go back to the original view. 10043 This does not save fold information. Use the 'foldenable' 10044 option to temporarily switch off folding, so that folds are 10045 not opened when moving around. This may have side effects. 10046 The return value includes: 10047 lnum cursor line number 10048 col cursor column (Note: the first column 10049 zero, as opposed to what getpos() 10050 returns) 10051 coladd cursor column offset for 'virtualedit' 10052 curswant column for vertical movement 10053 topline first line in the window 10054 topfill filler lines, only in diff mode 10055 leftcol first column displayed 10056 skipcol columns skipped 10057 Note that no option values are saved. 10058 10059 10060winwidth({nr}) *winwidth()* 10061 The result is a Number, which is the width of window {nr}. 10062 {nr} can be the window number or the |window-ID|. 10063 When {nr} is zero, the width of the current window is 10064 returned. When window {nr} doesn't exist, -1 is returned. 10065 An existing window always has a width of zero or more. 10066 Examples: > 10067 :echo "The current window has " . winwidth(0) . " columns." 10068 :if winwidth(0) <= 50 10069 : 50 wincmd | 10070 :endif 10071< For getting the terminal or screen size, see the 'columns' 10072 option. 10073 10074 10075wordcount() *wordcount()* 10076 The result is a dictionary of byte/chars/word statistics for 10077 the current buffer. This is the same info as provided by 10078 |g_CTRL-G| 10079 The return value includes: 10080 bytes Number of bytes in the buffer 10081 chars Number of chars in the buffer 10082 words Number of words in the buffer 10083 cursor_bytes Number of bytes before cursor position 10084 (not in Visual mode) 10085 cursor_chars Number of chars before cursor position 10086 (not in Visual mode) 10087 cursor_words Number of words before cursor position 10088 (not in Visual mode) 10089 visual_bytes Number of bytes visually selected 10090 (only in Visual mode) 10091 visual_chars Number of chars visually selected 10092 (only in Visual mode) 10093 visual_words Number of words visually selected 10094 (only in Visual mode) 10095 10096 10097 *writefile()* 10098writefile({object}, {fname} [, {flags}]) 10099 When {object} is a |List| write it to file {fname}. Each list 10100 item is separated with a NL. Each list item must be a String 10101 or Number. 10102 When {flags} contains "b" then binary mode is used: There will 10103 not be a NL after the last list item. An empty item at the 10104 end does cause the last line in the file to end in a NL. 10105 10106 When {object} is a |Blob| write the bytes to file {fname} 10107 unmodified. 10108 10109 When {flags} contains "a" then append mode is used, lines are 10110 appended to the file: > 10111 :call writefile(["foo"], "event.log", "a") 10112 :call writefile(["bar"], "event.log", "a") 10113< 10114 When {flags} contains "s" then fsync() is called after writing 10115 the file. This flushes the file to disk, if possible. This 10116 takes more time but avoids losing the file if the system 10117 crashes. 10118 When {flags} does not contain "S" or "s" then fsync() is 10119 called if the 'fsync' option is set. 10120 When {flags} contains "S" then fsync() is not called, even 10121 when 'fsync' is set. 10122 10123 All NL characters are replaced with a NUL character. 10124 Inserting CR characters needs to be done before passing {list} 10125 to writefile(). 10126 An existing file is overwritten, if possible. 10127 When the write fails -1 is returned, otherwise 0. There is an 10128 error message if the file can't be created or when writing 10129 fails. 10130 Also see |readfile()|. 10131 To copy a file byte for byte: > 10132 :let fl = readfile("foo", "b") 10133 :call writefile(fl, "foocopy", "b") 10134 10135 10136xor({expr}, {expr}) *xor()* 10137 Bitwise XOR on the two arguments. The arguments are converted 10138 to a number. A List, Dict or Float argument causes an error. 10139 Example: > 10140 :let bits = xor(bits, 0x80) 10141< 10142 10143 10144 *feature-list* 10145There are four types of features: 101461. Features that are only supported when they have been enabled when Vim 10147 was compiled |+feature-list|. Example: > 10148 :if has("cindent") 101492. Features that are only supported when certain conditions have been met. 10150 Example: > 10151 :if has("gui_running") 10152< *has-patch* 101533. Beyond a certain version or at a certain version and including a specific 10154 patch. The "patch-7.4.248" feature means that the Vim version is 7.5 or 10155 later, or it is version 7.4 and patch 248 was included. Example: > 10156 :if has("patch-7.4.248") 10157< Note that it's possible for patch 248 to be omitted even though 249 is 10158 included. Only happens when cherry-picking patches. 10159 Note that this form only works for patch 7.4.237 and later, before that 10160 you need to check for the patch and the v:version. Example (checking 10161 version 6.2.148 or later): > 10162 :if v:version > 602 || (v:version == 602 && has("patch148")) 10163 10164Hint: To find out if Vim supports backslashes in a file name (MS-Windows), 10165use: `if exists('+shellslash')` 10166 10167 10168acl Compiled with |ACL| support. 10169all_builtin_terms Compiled with all builtin terminals enabled. 10170amiga Amiga version of Vim. 10171arabic Compiled with Arabic support |Arabic|. 10172arp Compiled with ARP support (Amiga). 10173autocmd Compiled with autocommand support. (always true) 10174autochdir Compiled with support for 'autochdir' 10175autoservername Automatically enable |clientserver| 10176balloon_eval Compiled with |balloon-eval| support. 10177balloon_multiline GUI supports multiline balloons. 10178beos BeOS version of Vim. 10179browse Compiled with |:browse| support, and browse() will 10180 work. 10181browsefilter Compiled with support for |browsefilter|. 10182bsd Compiled on an OS in the BSD family (excluding macOS). 10183builtin_terms Compiled with some builtin terminals. 10184byte_offset Compiled with support for 'o' in 'statusline' 10185cindent Compiled with 'cindent' support. 10186clientserver Compiled with remote invocation support |clientserver|. 10187clipboard Compiled with 'clipboard' support. 10188cmdline_compl Compiled with |cmdline-completion| support. 10189cmdline_hist Compiled with |cmdline-history| support. 10190cmdline_info Compiled with 'showcmd' and 'ruler' support. 10191comments Compiled with |'comments'| support. 10192compatible Compiled to be very Vi compatible. 10193conpty Platform where |ConPTY| can be used. 10194cryptv Compiled with encryption support |encryption|. 10195cscope Compiled with |cscope| support. 10196cursorbind Compiled with |'cursorbind'| (always true) 10197debug Compiled with "DEBUG" defined. 10198dialog_con Compiled with console dialog support. 10199dialog_gui Compiled with GUI dialog support. 10200diff Compiled with |vimdiff| and 'diff' support. 10201digraphs Compiled with support for digraphs. 10202directx Compiled with support for DirectX and 'renderoptions'. 10203dnd Compiled with support for the "~ register |quote_~|. 10204ebcdic Compiled on a machine with ebcdic character set. 10205emacs_tags Compiled with support for Emacs tags. 10206eval Compiled with expression evaluation support. Always 10207 true, of course! 10208ex_extra |+ex_extra| (always true) 10209extra_search Compiled with support for |'incsearch'| and 10210 |'hlsearch'| 10211farsi Compiled with Farsi support |farsi|. 10212file_in_path Compiled with support for |gf| and |<cfile>| 10213filterpipe When 'shelltemp' is off pipes are used for shell 10214 read/write/filter commands 10215find_in_path Compiled with support for include file searches 10216 |+find_in_path|. 10217float Compiled with support for |Float|. 10218fname_case Case in file names matters (for Amiga, MS-DOS, and 10219 Windows this is not present). 10220folding Compiled with |folding| support. 10221footer Compiled with GUI footer support. |gui-footer| 10222fork Compiled to use fork()/exec() instead of system(). 10223gettext Compiled with message translation |multi-lang| 10224gui Compiled with GUI enabled. 10225gui_athena Compiled with Athena GUI. 10226gui_gnome Compiled with Gnome support (gui_gtk is also defined). 10227gui_gtk Compiled with GTK+ GUI (any version). 10228gui_gtk2 Compiled with GTK+ 2 GUI (gui_gtk is also defined). 10229gui_gtk3 Compiled with GTK+ 3 GUI (gui_gtk is also defined). 10230gui_mac Compiled with Macintosh GUI. 10231gui_motif Compiled with Motif GUI. 10232gui_photon Compiled with Photon GUI. 10233gui_running Vim is running in the GUI, or it will start soon. 10234gui_win32 Compiled with MS Windows Win32 GUI. 10235gui_win32s idem, and Win32s system being used (Windows 3.1) 10236hangul_input Compiled with Hangul input support. |hangul| 10237hpux HP-UX version of Vim. 10238iconv Can use iconv() for conversion. 10239insert_expand Compiled with support for CTRL-X expansion commands in 10240 Insert mode. 10241jumplist Compiled with |jumplist| support. 10242keymap Compiled with 'keymap' support. 10243lambda Compiled with |lambda| support. 10244langmap Compiled with 'langmap' support. 10245libcall Compiled with |libcall()| support. 10246linebreak Compiled with 'linebreak', 'breakat', 'showbreak' and 10247 'breakindent' support. 10248linux Linux version of Vim. 10249lispindent Compiled with support for lisp indenting. 10250listcmds Compiled with commands for the buffer list |:files| 10251 and the argument list |arglist|. 10252localmap Compiled with local mappings and abbr. |:map-local| 10253lua Compiled with Lua interface |Lua|. 10254mac Any Macintosh version of Vim cf. osx 10255macunix Synonym for osxdarwin 10256menu Compiled with support for |:menu|. 10257mksession Compiled with support for |:mksession|. 10258modify_fname Compiled with file name modifiers. |filename-modifiers| 10259mouse Compiled with support mouse. 10260mouse_dec Compiled with support for Dec terminal mouse. 10261mouse_gpm Compiled with support for gpm (Linux console mouse) 10262mouse_netterm Compiled with support for netterm mouse. 10263mouse_pterm Compiled with support for qnx pterm mouse. 10264mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) 10265mouse_sgr Compiled with support for sgr mouse. 10266mouse_urxvt Compiled with support for urxvt mouse. 10267mouse_xterm Compiled with support for xterm mouse. 10268mouseshape Compiled with support for 'mouseshape'. 10269multi_byte Compiled with support for 'encoding' 10270multi_byte_encoding 'encoding' is set to a multi-byte encoding. 10271multi_byte_ime Compiled with support for IME input method. 10272multi_lang Compiled with support for multiple languages. 10273mzscheme Compiled with MzScheme interface |mzscheme|. 10274netbeans_enabled Compiled with support for |netbeans| and connected. 10275netbeans_intg Compiled with support for |netbeans|. 10276num64 Compiled with 64-bit |Number| support. 10277ole Compiled with OLE automation support for Win32. 10278osx Compiled for macOS cf. mac 10279osxdarwin Compiled for macOS, with |mac-darwin-feature| 10280packages Compiled with |packages| support. 10281path_extra Compiled with up/downwards search in 'path' and 'tags' 10282perl Compiled with Perl interface. 10283persistent_undo Compiled with support for persistent undo history. 10284postscript Compiled with PostScript file printing. 10285printer Compiled with |:hardcopy| support. 10286profile Compiled with |:profile| support. 10287python Python 2.x interface available. |has-python| 10288python_compiled Compiled with Python 2.x interface. |has-python| 10289python_dynamic Python 2.x interface is dynamically loaded. |has-python| 10290python3 Python 3.x interface available. |has-python| 10291python3_compiled Compiled with Python 3.x interface. |has-python| 10292python3_dynamic Python 3.x interface is dynamically loaded. |has-python| 10293pythonx Compiled with |python_x| interface. |has-pythonx| 10294qnx QNX version of Vim. 10295quickfix Compiled with |quickfix| support. 10296reltime Compiled with |reltime()| support. 10297rightleft Compiled with 'rightleft' support. 10298ruby Compiled with Ruby interface |ruby|. 10299scrollbind Compiled with 'scrollbind' support. (always true) 10300showcmd Compiled with 'showcmd' support. 10301signs Compiled with |:sign| support. 10302smartindent Compiled with 'smartindent' support. 10303spell Compiled with spell checking support |spell|. 10304startuptime Compiled with |--startuptime| support. 10305statusline Compiled with support for 'statusline', 'rulerformat' 10306 and special formats of 'titlestring' and 'iconstring'. 10307sun SunOS version of Vim. 10308sun_workshop Support for Sun |workshop| has been removed. 10309syntax Compiled with syntax highlighting support |syntax|. 10310syntax_items There are active syntax highlighting items for the 10311 current buffer. 10312system Compiled to use system() instead of fork()/exec(). 10313tag_binary Compiled with binary searching in tags files 10314 |tag-binary-search|. 10315tag_old_static Compiled with support for old static tags 10316 |tag-old-static|. 10317tag_any_white Compiled with support for any white characters in tags 10318 files |tag-any-white|. 10319tcl Compiled with Tcl interface. 10320termguicolors Compiled with true color in terminal support. 10321terminal Compiled with |terminal| support. 10322terminfo Compiled with terminfo instead of termcap. 10323termresponse Compiled with support for |t_RV| and |v:termresponse|. 10324textobjects Compiled with support for |text-objects|. 10325textprop Compiled with support for |text-properties|. 10326tgetent Compiled with tgetent support, able to use a termcap 10327 or terminfo file. 10328timers Compiled with |timer_start()| support. 10329title Compiled with window title support |'title'|. 10330toolbar Compiled with support for |gui-toolbar|. 10331ttyin input is a terminal (tty) 10332ttyout output is a terminal (tty) 10333unix Unix version of Vim. *+unix* 10334unnamedplus Compiled with support for "unnamedplus" in 'clipboard' 10335user_commands User-defined commands. 10336vcon Win32: Virtual console support is working, can use 10337 'termguicolors'. Also see |+vtp|. 10338vertsplit Compiled with vertically split windows |:vsplit|. 10339 (always true) 10340vim_starting True while initial source'ing takes place. |startup| 10341 *vim_starting* 10342viminfo Compiled with viminfo support. 10343virtualedit Compiled with 'virtualedit' option. (always true) 10344visual Compiled with Visual mode. (always true) 10345visualextra Compiled with extra Visual mode commands. (always 10346 true) |blockwise-operators|. 10347vms VMS version of Vim. 10348vreplace Compiled with |gR| and |gr| commands. (always true) 10349vtp Compiled for vcon support |+vtp| (check vcon to find 10350 out if it works in the current console). 10351wildignore Compiled with 'wildignore' option. 10352wildmenu Compiled with 'wildmenu' option. 10353win16 old version for MS-Windows 3.1 (always false) 10354win32 Win32 version of Vim (MS-Windows 95 and later, 32 or 10355 64 bits) 10356win32unix Win32 version of Vim, using Unix files (Cygwin) 10357win64 Win64 version of Vim (MS-Windows 64 bit). 10358win95 Win32 version for MS-Windows 95/98/ME (always false) 10359winaltkeys Compiled with 'winaltkeys' option. 10360windows Compiled with support for more than one window. 10361 (always true) 10362writebackup Compiled with 'writebackup' default on. 10363xfontset Compiled with X fontset support |xfontset|. 10364xim Compiled with X input method support |xim|. 10365xpm Compiled with pixmap support. 10366xpm_w32 Compiled with pixmap support for Win32. (Only for 10367 backward compatibility. Use "xpm" instead.) 10368xsmp Compiled with X session management support. 10369xsmp_interact Compiled with interactive X session management support. 10370xterm_clipboard Compiled with support for xterm clipboard. 10371xterm_save Compiled with support for saving and restoring the 10372 xterm screen. 10373x11 Compiled with X11 support. 10374 10375 *string-match* 10376Matching a pattern in a String 10377 10378A regexp pattern as explained at |pattern| is normally used to find a match in 10379the buffer lines. When a pattern is used to find a match in a String, almost 10380everything works in the same way. The difference is that a String is handled 10381like it is one line. When it contains a "\n" character, this is not seen as a 10382line break for the pattern. It can be matched with a "\n" in the pattern, or 10383with ".". Example: > 10384 :let a = "aaaa\nxxxx" 10385 :echo matchstr(a, "..\n..") 10386 aa 10387 xx 10388 :echo matchstr(a, "a.x") 10389 a 10390 x 10391 10392Don't forget that "^" will only match at the first character of the String and 10393"$" at the last character of the string. They don't match after or before a 10394"\n". 10395 10396============================================================================== 103975. Defining functions *user-functions* 10398 10399New functions can be defined. These can be called just like builtin 10400functions. The function executes a sequence of Ex commands. Normal mode 10401commands can be executed with the |:normal| command. 10402 10403The function name must start with an uppercase letter, to avoid confusion with 10404builtin functions. To prevent from using the same name in different scripts 10405avoid obvious, short names. A good habit is to start the function name with 10406the name of the script, e.g., "HTMLcolor()". 10407 10408It's also possible to use curly braces, see |curly-braces-names|. And the 10409|autoload| facility is useful to define a function only when it's called. 10410 10411 *local-function* 10412A function local to a script must start with "s:". A local script function 10413can only be called from within the script and from functions, user commands 10414and autocommands defined in the script. It is also possible to call the 10415function from a mapping defined in the script, but then |<SID>| must be used 10416instead of "s:" when the mapping is expanded outside of the script. 10417There are only script-local functions, no buffer-local or window-local 10418functions. 10419 10420 *:fu* *:function* *E128* *E129* *E123* 10421:fu[nction] List all functions and their arguments. 10422 10423:fu[nction] {name} List function {name}. 10424 {name} can also be a |Dictionary| entry that is a 10425 |Funcref|: > 10426 :function dict.init 10427 10428:fu[nction] /{pattern} List functions with a name matching {pattern}. 10429 Example that lists all functions ending with "File": > 10430 :function /File$ 10431< 10432 *:function-verbose* 10433When 'verbose' is non-zero, listing a function will also display where it was 10434last defined. Example: > 10435 10436 :verbose function SetFileTypeSH 10437 function SetFileTypeSH(name) 10438 Last set from /usr/share/vim/vim-7.0/filetype.vim 10439< 10440See |:verbose-cmd| for more information. 10441 10442 *E124* *E125* *E853* *E884* 10443:fu[nction][!] {name}([arguments]) [range] [abort] [dict] [closure] 10444 Define a new function by the name {name}. The body of 10445 the function follows in the next lines, until the 10446 matching |:endfunction|. 10447 10448 The name must be made of alphanumeric characters and 10449 '_', and must start with a capital or "s:" (see 10450 above). Note that using "b:" or "g:" is not allowed. 10451 (since patch 7.4.260 E884 is given if the function 10452 name has a colon in the name, e.g. for "foo:bar()". 10453 Before that patch no error was given). 10454 10455 {name} can also be a |Dictionary| entry that is a 10456 |Funcref|: > 10457 :function dict.init(arg) 10458< "dict" must be an existing dictionary. The entry 10459 "init" is added if it didn't exist yet. Otherwise [!] 10460 is required to overwrite an existing function. The 10461 result is a |Funcref| to a numbered function. The 10462 function can only be used with a |Funcref| and will be 10463 deleted if there are no more references to it. 10464 *E127* *E122* 10465 When a function by this name already exists and [!] is 10466 not used an error message is given. There is one 10467 exception: When sourcing a script again, a function 10468 that was previously defined in that script will be 10469 silently replaced. 10470 When [!] is used, an existing function is silently 10471 replaced. Unless it is currently being executed, that 10472 is an error. 10473 NOTE: Use ! wisely. If used without care it can cause 10474 an existing function to be replaced unexpectedly, 10475 which is hard to debug. 10476 10477 For the {arguments} see |function-argument|. 10478 10479 *:func-range* *a:firstline* *a:lastline* 10480 When the [range] argument is added, the function is 10481 expected to take care of a range itself. The range is 10482 passed as "a:firstline" and "a:lastline". If [range] 10483 is excluded, ":{range}call" will call the function for 10484 each line in the range, with the cursor on the start 10485 of each line. See |function-range-example|. 10486 The cursor is still moved to the first line of the 10487 range, as is the case with all Ex commands. 10488 *:func-abort* 10489 When the [abort] argument is added, the function will 10490 abort as soon as an error is detected. 10491 *:func-dict* 10492 When the [dict] argument is added, the function must 10493 be invoked through an entry in a |Dictionary|. The 10494 local variable "self" will then be set to the 10495 dictionary. See |Dictionary-function|. 10496 *:func-closure* *E932* 10497 When the [closure] argument is added, the function 10498 can access variables and arguments from the outer 10499 scope. This is usually called a closure. In this 10500 example Bar() uses "x" from the scope of Foo(). It 10501 remains referenced even after Foo() returns: > 10502 :function! Foo() 10503 : let x = 0 10504 : function! Bar() closure 10505 : let x += 1 10506 : return x 10507 : endfunction 10508 : return funcref('Bar') 10509 :endfunction 10510 10511 :let F = Foo() 10512 :echo F() 10513< 1 > 10514 :echo F() 10515< 2 > 10516 :echo F() 10517< 3 10518 10519 *function-search-undo* 10520 The last used search pattern and the redo command "." 10521 will not be changed by the function. This also 10522 implies that the effect of |:nohlsearch| is undone 10523 when the function returns. 10524 10525 *:endf* *:endfunction* *E126* *E193* *W22* 10526:endf[unction] [argument] 10527 The end of a function definition. Best is to put it 10528 on a line by its own, without [argument]. 10529 10530 [argument] can be: 10531 | command command to execute next 10532 \n command command to execute next 10533 " comment always ignored 10534 anything else ignored, warning given when 10535 'verbose' is non-zero 10536 The support for a following command was added in Vim 10537 8.0.0654, before that any argument was silently 10538 ignored. 10539 10540 To be able to define a function inside an `:execute` 10541 command, use line breaks instead of |:bar|: > 10542 :exe "func Foo()\necho 'foo'\nendfunc" 10543< 10544 *:delf* *:delfunction* *E130* *E131* *E933* 10545:delf[unction][!] {name} 10546 Delete function {name}. 10547 {name} can also be a |Dictionary| entry that is a 10548 |Funcref|: > 10549 :delfunc dict.init 10550< This will remove the "init" entry from "dict". The 10551 function is deleted if there are no more references to 10552 it. 10553 With the ! there is no error if the function does not 10554 exist. 10555 *:retu* *:return* *E133* 10556:retu[rn] [expr] Return from a function. When "[expr]" is given, it is 10557 evaluated and returned as the result of the function. 10558 If "[expr]" is not given, the number 0 is returned. 10559 When a function ends without an explicit ":return", 10560 the number 0 is returned. 10561 Note that there is no check for unreachable lines, 10562 thus there is no warning if commands follow ":return". 10563 10564 If the ":return" is used after a |:try| but before the 10565 matching |:finally| (if present), the commands 10566 following the ":finally" up to the matching |:endtry| 10567 are executed first. This process applies to all 10568 nested ":try"s inside the function. The function 10569 returns at the outermost ":endtry". 10570 10571 *function-argument* *a:var* 10572An argument can be defined by giving its name. In the function this can then 10573be used as "a:name" ("a:" for argument). 10574 *a:0* *a:1* *a:000* *E740* *...* 10575Up to 20 arguments can be given, separated by commas. After the named 10576arguments an argument "..." can be specified, which means that more arguments 10577may optionally be following. In the function the extra arguments can be used 10578as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which 10579can be 0). "a:000" is set to a |List| that contains these arguments. Note 10580that "a:1" is the same as "a:000[0]". 10581 *E742* 10582The a: scope and the variables in it cannot be changed, they are fixed. 10583However, if a composite type is used, such as |List| or |Dictionary| , you can 10584change their contents. Thus you can pass a |List| to a function and have the 10585function add an item to it. If you want to make sure the function cannot 10586change a |List| or |Dictionary| use |:lockvar|. 10587 10588When not using "...", the number of arguments in a function call must be equal 10589to the number of named arguments. When using "...", the number of arguments 10590may be larger. 10591 10592It is also possible to define a function without any arguments. You must 10593still supply the () then. 10594 10595It is allowed to define another function inside a function body. 10596 10597 *local-variables* 10598Inside a function local variables can be used. These will disappear when the 10599function returns. Global variables need to be accessed with "g:". 10600 10601Example: > 10602 :function Table(title, ...) 10603 : echohl Title 10604 : echo a:title 10605 : echohl None 10606 : echo a:0 . " items:" 10607 : for s in a:000 10608 : echon ' ' . s 10609 : endfor 10610 :endfunction 10611 10612This function can then be called with: > 10613 call Table("Table", "line1", "line2") 10614 call Table("Empty Table") 10615 10616To return more than one value, return a |List|: > 10617 :function Compute(n1, n2) 10618 : if a:n2 == 0 10619 : return ["fail", 0] 10620 : endif 10621 : return ["ok", a:n1 / a:n2] 10622 :endfunction 10623 10624This function can then be called with: > 10625 :let [success, div] = Compute(102, 6) 10626 :if success == "ok" 10627 : echo div 10628 :endif 10629< 10630 *:cal* *:call* *E107* *E117* 10631:[range]cal[l] {name}([arguments]) 10632 Call a function. The name of the function and its arguments 10633 are as specified with |:function|. Up to 20 arguments can be 10634 used. The returned value is discarded. 10635 Without a range and for functions that accept a range, the 10636 function is called once. When a range is given the cursor is 10637 positioned at the start of the first line before executing the 10638 function. 10639 When a range is given and the function doesn't handle it 10640 itself, the function is executed for each line in the range, 10641 with the cursor in the first column of that line. The cursor 10642 is left at the last line (possibly moved by the last function 10643 call). The arguments are re-evaluated for each line. Thus 10644 this works: 10645 *function-range-example* > 10646 :function Mynumber(arg) 10647 : echo line(".") . " " . a:arg 10648 :endfunction 10649 :1,5call Mynumber(getline(".")) 10650< 10651 The "a:firstline" and "a:lastline" are defined anyway, they 10652 can be used to do something different at the start or end of 10653 the range. 10654 10655 Example of a function that handles the range itself: > 10656 10657 :function Cont() range 10658 : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ ' 10659 :endfunction 10660 :4,8call Cont() 10661< 10662 This function inserts the continuation character "\" in front 10663 of all the lines in the range, except the first one. 10664 10665 When the function returns a composite value it can be further 10666 dereferenced, but the range will not be used then. Example: > 10667 :4,8call GetDict().method() 10668< Here GetDict() gets the range but method() does not. 10669 10670 *E132* 10671The recursiveness of user functions is restricted with the |'maxfuncdepth'| 10672option. 10673 10674 10675AUTOMATICALLY LOADING FUNCTIONS ~ 10676 *autoload-functions* 10677When using many or large functions, it's possible to automatically define them 10678only when they are used. There are two methods: with an autocommand and with 10679the "autoload" directory in 'runtimepath'. 10680 10681 10682Using an autocommand ~ 10683 10684This is introduced in the user manual, section |41.14|. 10685 10686The autocommand is useful if you have a plugin that is a long Vim script file. 10687You can define the autocommand and quickly quit the script with |:finish|. 10688That makes Vim startup faster. The autocommand should then load the same file 10689again, setting a variable to skip the |:finish| command. 10690 10691Use the FuncUndefined autocommand event with a pattern that matches the 10692function(s) to be defined. Example: > 10693 10694 :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim 10695 10696The file "~/vim/bufnetfuncs.vim" should then define functions that start with 10697"BufNet". Also see |FuncUndefined|. 10698 10699 10700Using an autoload script ~ 10701 *autoload* *E746* 10702This is introduced in the user manual, section |41.15|. 10703 10704Using a script in the "autoload" directory is simpler, but requires using 10705exactly the right file name. A function that can be autoloaded has a name 10706like this: > 10707 10708 :call filename#funcname() 10709 10710When such a function is called, and it is not defined yet, Vim will search the 10711"autoload" directories in 'runtimepath' for a script file called 10712"filename.vim". For example "~/.vim/autoload/filename.vim". That file should 10713then define the function like this: > 10714 10715 function filename#funcname() 10716 echo "Done!" 10717 endfunction 10718 10719The file name and the name used before the # in the function must match 10720exactly, and the defined function must have the name exactly as it will be 10721called. 10722 10723It is possible to use subdirectories. Every # in the function name works like 10724a path separator. Thus when calling a function: > 10725 10726 :call foo#bar#func() 10727 10728Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'. 10729 10730This also works when reading a variable that has not been set yet: > 10731 10732 :let l = foo#bar#lvar 10733 10734However, when the autoload script was already loaded it won't be loaded again 10735for an unknown variable. 10736 10737When assigning a value to such a variable nothing special happens. This can 10738be used to pass settings to the autoload script before it's loaded: > 10739 10740 :let foo#bar#toggle = 1 10741 :call foo#bar#func() 10742 10743Note that when you make a mistake and call a function that is supposed to be 10744defined in an autoload script, but the script doesn't actually define the 10745function, the script will be sourced every time you try to call the function. 10746And you will get an error message every time. 10747 10748Also note that if you have two script files, and one calls a function in the 10749other and vice versa, before the used function is defined, it won't work. 10750Avoid using the autoload functionality at the toplevel. 10751 10752Hint: If you distribute a bunch of scripts you can pack them together with the 10753|vimball| utility. Also read the user manual |distribute-script|. 10754 10755============================================================================== 107566. Curly braces names *curly-braces-names* 10757 10758In most places where you can use a variable, you can use a "curly braces name" 10759variable. This is a regular variable name with one or more expressions 10760wrapped in braces {} like this: > 10761 my_{adjective}_variable 10762 10763When Vim encounters this, it evaluates the expression inside the braces, puts 10764that in place of the expression, and re-interprets the whole as a variable 10765name. So in the above example, if the variable "adjective" was set to 10766"noisy", then the reference would be to "my_noisy_variable", whereas if 10767"adjective" was set to "quiet", then it would be to "my_quiet_variable". 10768 10769One application for this is to create a set of variables governed by an option 10770value. For example, the statement > 10771 echo my_{&background}_message 10772 10773would output the contents of "my_dark_message" or "my_light_message" depending 10774on the current value of 'background'. 10775 10776You can use multiple brace pairs: > 10777 echo my_{adverb}_{adjective}_message 10778..or even nest them: > 10779 echo my_{ad{end_of_word}}_message 10780where "end_of_word" is either "verb" or "jective". 10781 10782However, the expression inside the braces must evaluate to a valid single 10783variable name, e.g. this is invalid: > 10784 :let foo='a + b' 10785 :echo c{foo}d 10786.. since the result of expansion is "ca + bd", which is not a variable name. 10787 10788 *curly-braces-function-names* 10789You can call and define functions by an evaluated name in a similar way. 10790Example: > 10791 :let func_end='whizz' 10792 :call my_func_{func_end}(parameter) 10793 10794This would call the function "my_func_whizz(parameter)". 10795 10796This does NOT work: > 10797 :let i = 3 10798 :let @{i} = '' " error 10799 :echo @{i} " error 10800 10801============================================================================== 108027. Commands *expression-commands* 10803 10804:let {var-name} = {expr1} *:let* *E18* 10805 Set internal variable {var-name} to the result of the 10806 expression {expr1}. The variable will get the type 10807 from the {expr}. If {var-name} didn't exist yet, it 10808 is created. 10809 10810:let {var-name}[{idx}] = {expr1} *E689* 10811 Set a list item to the result of the expression 10812 {expr1}. {var-name} must refer to a list and {idx} 10813 must be a valid index in that list. For nested list 10814 the index can be repeated. 10815 This cannot be used to add an item to a |List|. 10816 This cannot be used to set a byte in a String. You 10817 can do that like this: > 10818 :let var = var[0:2] . 'X' . var[4:] 10819< When {var-name} is a |Blob| then {idx} can be the 10820 length of the blob, in which case one byte is 10821 appended. 10822 10823 *E711* *E719* 10824:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710* 10825 Set a sequence of items in a |List| to the result of 10826 the expression {expr1}, which must be a list with the 10827 correct number of items. 10828 {idx1} can be omitted, zero is used instead. 10829 {idx2} can be omitted, meaning the end of the list. 10830 When the selected range of items is partly past the 10831 end of the list, items will be added. 10832 10833 *:let+=* *:let-=* *:let.=* *E734* 10834:let {var} += {expr1} Like ":let {var} = {var} + {expr1}". 10835:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}". 10836:let {var} .= {expr1} Like ":let {var} = {var} . {expr1}". 10837 These fail if {var} was not set yet and when the type 10838 of {var} and {expr1} don't fit the operator. 10839 10840 10841:let ${env-name} = {expr1} *:let-environment* *:let-$* 10842 Set environment variable {env-name} to the result of 10843 the expression {expr1}. The type is always String. 10844:let ${env-name} .= {expr1} 10845 Append {expr1} to the environment variable {env-name}. 10846 If the environment variable didn't exist yet this 10847 works like "=". 10848 10849:let @{reg-name} = {expr1} *:let-register* *:let-@* 10850 Write the result of the expression {expr1} in register 10851 {reg-name}. {reg-name} must be a single letter, and 10852 must be the name of a writable register (see 10853 |registers|). "@@" can be used for the unnamed 10854 register, "@/" for the search pattern. 10855 If the result of {expr1} ends in a <CR> or <NL>, the 10856 register will be linewise, otherwise it will be set to 10857 characterwise. 10858 This can be used to clear the last search pattern: > 10859 :let @/ = "" 10860< This is different from searching for an empty string, 10861 that would match everywhere. 10862 10863:let @{reg-name} .= {expr1} 10864 Append {expr1} to register {reg-name}. If the 10865 register was empty it's like setting it to {expr1}. 10866 10867:let &{option-name} = {expr1} *:let-option* *:let-&* 10868 Set option {option-name} to the result of the 10869 expression {expr1}. A String or Number value is 10870 always converted to the type of the option. 10871 For an option local to a window or buffer the effect 10872 is just like using the |:set| command: both the local 10873 value and the global value are changed. 10874 Example: > 10875 :let &path = &path . ',/usr/local/include' 10876< This also works for terminal codes in the form t_xx. 10877 But only for alphanumerical names. Example: > 10878 :let &t_k1 = "\<Esc>[234;" 10879< When the code does not exist yet it will be created as 10880 a terminal key code, there is no error. 10881 10882:let &{option-name} .= {expr1} 10883 For a string option: Append {expr1} to the value. 10884 Does not insert a comma like |:set+=|. 10885 10886:let &{option-name} += {expr1} 10887:let &{option-name} -= {expr1} 10888 For a number or boolean option: Add or subtract 10889 {expr1}. 10890 10891:let &l:{option-name} = {expr1} 10892:let &l:{option-name} .= {expr1} 10893:let &l:{option-name} += {expr1} 10894:let &l:{option-name} -= {expr1} 10895 Like above, but only set the local value of an option 10896 (if there is one). Works like |:setlocal|. 10897 10898:let &g:{option-name} = {expr1} 10899:let &g:{option-name} .= {expr1} 10900:let &g:{option-name} += {expr1} 10901:let &g:{option-name} -= {expr1} 10902 Like above, but only set the global value of an option 10903 (if there is one). Works like |:setglobal|. 10904 10905:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688* 10906 {expr1} must evaluate to a |List|. The first item in 10907 the list is assigned to {name1}, the second item to 10908 {name2}, etc. 10909 The number of names must match the number of items in 10910 the |List|. 10911 Each name can be one of the items of the ":let" 10912 command as mentioned above. 10913 Example: > 10914 :let [s, item] = GetItem(s) 10915< Detail: {expr1} is evaluated first, then the 10916 assignments are done in sequence. This matters if 10917 {name2} depends on {name1}. Example: > 10918 :let x = [0, 1] 10919 :let i = 0 10920 :let [i, x[i]] = [1, 2] 10921 :echo x 10922< The result is [0, 2]. 10923 10924:let [{name1}, {name2}, ...] .= {expr1} 10925:let [{name1}, {name2}, ...] += {expr1} 10926:let [{name1}, {name2}, ...] -= {expr1} 10927 Like above, but append/add/subtract the value for each 10928 |List| item. 10929 10930:let [{name}, ..., ; {lastname}] = {expr1} 10931 Like |:let-unpack| above, but the |List| may have more 10932 items than there are names. A list of the remaining 10933 items is assigned to {lastname}. If there are no 10934 remaining items {lastname} is set to an empty list. 10935 Example: > 10936 :let [a, b; rest] = ["aval", "bval", 3, 4] 10937< 10938:let [{name}, ..., ; {lastname}] .= {expr1} 10939:let [{name}, ..., ; {lastname}] += {expr1} 10940:let [{name}, ..., ; {lastname}] -= {expr1} 10941 Like above, but append/add/subtract the value for each 10942 |List| item. 10943 10944 *E121* 10945:let {var-name} .. List the value of variable {var-name}. Multiple 10946 variable names may be given. Special names recognized 10947 here: *E738* 10948 g: global variables 10949 b: local buffer variables 10950 w: local window variables 10951 t: local tab page variables 10952 s: script-local variables 10953 l: local function variables 10954 v: Vim variables. 10955 10956:let List the values of all variables. The type of the 10957 variable is indicated before the value: 10958 <nothing> String 10959 # Number 10960 * Funcref 10961 10962 10963:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795* 10964 Remove the internal variable {name}. Several variable 10965 names can be given, they are all removed. The name 10966 may also be a |List| or |Dictionary| item. 10967 With [!] no error message is given for non-existing 10968 variables. 10969 One or more items from a |List| can be removed: > 10970 :unlet list[3] " remove fourth item 10971 :unlet list[3:] " remove fourth item to last 10972< One item from a |Dictionary| can be removed at a time: > 10973 :unlet dict['two'] 10974 :unlet dict.two 10975< This is especially useful to clean up used global 10976 variables and script-local variables (these are not 10977 deleted when the script ends). Function-local 10978 variables are automatically deleted when the function 10979 ends. 10980 10981:unl[et] ${env-name} ... *:unlet-environment* *:unlet-$* 10982 Remove environment variable {env-name}. 10983 Can mix {name} and ${env-name} in one :unlet command. 10984 No error message is given for a non-existing 10985 variable, also without !. 10986 If the system does not support deleting an environment 10987 variable, it is made emtpy. 10988 10989:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv* 10990 Lock the internal variable {name}. Locking means that 10991 it can no longer be changed (until it is unlocked). 10992 A locked variable can be deleted: > 10993 :lockvar v 10994 :let v = 'asdf' " fails! 10995 :unlet v 10996< *E741* *E940* 10997 If you try to change a locked variable you get an 10998 error message: "E741: Value is locked: {name}". 10999 If you try to lock or unlock a built-in variable you 11000 get an error message: "E940: Cannot lock or unlock 11001 variable {name}". 11002 11003 [depth] is relevant when locking a |List| or 11004 |Dictionary|. It specifies how deep the locking goes: 11005 1 Lock the |List| or |Dictionary| itself, 11006 cannot add or remove items, but can 11007 still change their values. 11008 2 Also lock the values, cannot change 11009 the items. If an item is a |List| or 11010 |Dictionary|, cannot add or remove 11011 items, but can still change the 11012 values. 11013 3 Like 2 but for the |List| / 11014 |Dictionary| in the |List| / 11015 |Dictionary|, one level deeper. 11016 The default [depth] is 2, thus when {name} is a |List| 11017 or |Dictionary| the values cannot be changed. 11018 *E743* 11019 For unlimited depth use [!] and omit [depth]. 11020 However, there is a maximum depth of 100 to catch 11021 loops. 11022 11023 Note that when two variables refer to the same |List| 11024 and you lock one of them, the |List| will also be 11025 locked when used through the other variable. 11026 Example: > 11027 :let l = [0, 1, 2, 3] 11028 :let cl = l 11029 :lockvar l 11030 :let cl[1] = 99 " won't work! 11031< You may want to make a copy of a list to avoid this. 11032 See |deepcopy()|. 11033 11034 11035:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo* 11036 Unlock the internal variable {name}. Does the 11037 opposite of |:lockvar|. 11038 11039 11040:if {expr1} *:if* *:endif* *:en* *E171* *E579* *E580* 11041:en[dif] Execute the commands until the next matching ":else" 11042 or ":endif" if {expr1} evaluates to non-zero. 11043 11044 From Vim version 4.5 until 5.0, every Ex command in 11045 between the ":if" and ":endif" is ignored. These two 11046 commands were just to allow for future expansions in a 11047 backward compatible way. Nesting was allowed. Note 11048 that any ":else" or ":elseif" was ignored, the "else" 11049 part was not executed either. 11050 11051 You can use this to remain compatible with older 11052 versions: > 11053 :if version >= 500 11054 : version-5-specific-commands 11055 :endif 11056< The commands still need to be parsed to find the 11057 "endif". Sometimes an older Vim has a problem with a 11058 new command. For example, ":silent" is recognized as 11059 a ":substitute" command. In that case ":execute" can 11060 avoid problems: > 11061 :if version >= 600 11062 : execute "silent 1,$delete" 11063 :endif 11064< 11065 NOTE: The ":append" and ":insert" commands don't work 11066 properly in between ":if" and ":endif". 11067 11068 *:else* *:el* *E581* *E583* 11069:el[se] Execute the commands until the next matching ":else" 11070 or ":endif" if they previously were not being 11071 executed. 11072 11073 *:elseif* *:elsei* *E582* *E584* 11074:elsei[f] {expr1} Short for ":else" ":if", with the addition that there 11075 is no extra ":endif". 11076 11077:wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw* 11078 *E170* *E585* *E588* *E733* 11079:endw[hile] Repeat the commands between ":while" and ":endwhile", 11080 as long as {expr1} evaluates to non-zero. 11081 When an error is detected from a command inside the 11082 loop, execution continues after the "endwhile". 11083 Example: > 11084 :let lnum = 1 11085 :while lnum <= line("$") 11086 :call FixLine(lnum) 11087 :let lnum = lnum + 1 11088 :endwhile 11089< 11090 NOTE: The ":append" and ":insert" commands don't work 11091 properly inside a ":while" and ":for" loop. 11092 11093:for {var} in {object} *:for* *E690* *E732* 11094:endfo[r] *:endfo* *:endfor* 11095 Repeat the commands between ":for" and ":endfor" for 11096 each item in {object}. {object} can be a |List| or 11097 a |Blob|. Variable {var} is set to the value of each 11098 item. When an error is detected for a command inside 11099 the loop, execution continues after the "endfor". 11100 Changing {object} inside the loop affects what items 11101 are used. Make a copy if this is unwanted: > 11102 :for item in copy(mylist) 11103< 11104 When {object} is a |List| and not making a copy, Vim 11105 stores a reference to the next item in the |List| 11106 before executing the commands with the current item. 11107 Thus the current item can be removed without effect. 11108 Removing any later item means it will not be found. 11109 Thus the following example works (an inefficient way 11110 to make a |List| empty): > 11111 for item in mylist 11112 call remove(mylist, 0) 11113 endfor 11114< Note that reordering the |List| (e.g., with sort() or 11115 reverse()) may have unexpected effects. 11116 11117 When {object} is a |Blob|, Vim always makes a copy to 11118 iterate over. Unlike with |List|, modifying the 11119 |Blob| does not affect the iteration. 11120 11121:for [{var1}, {var2}, ...] in {listlist} 11122:endfo[r] 11123 Like ":for" above, but each item in {listlist} must be 11124 a list, of which each item is assigned to {var1}, 11125 {var2}, etc. Example: > 11126 :for [lnum, col] in [[1, 3], [2, 5], [3, 8]] 11127 :echo getline(lnum)[col] 11128 :endfor 11129< 11130 *:continue* *:con* *E586* 11131:con[tinue] When used inside a ":while" or ":for" loop, jumps back 11132 to the start of the loop. 11133 If it is used after a |:try| inside the loop but 11134 before the matching |:finally| (if present), the 11135 commands following the ":finally" up to the matching 11136 |:endtry| are executed first. This process applies to 11137 all nested ":try"s inside the loop. The outermost 11138 ":endtry" then jumps back to the start of the loop. 11139 11140 *:break* *:brea* *E587* 11141:brea[k] When used inside a ":while" or ":for" loop, skips to 11142 the command after the matching ":endwhile" or 11143 ":endfor". 11144 If it is used after a |:try| inside the loop but 11145 before the matching |:finally| (if present), the 11146 commands following the ":finally" up to the matching 11147 |:endtry| are executed first. This process applies to 11148 all nested ":try"s inside the loop. The outermost 11149 ":endtry" then jumps to the command after the loop. 11150 11151:try *:try* *:endt* *:endtry* *E600* *E601* *E602* 11152:endt[ry] Change the error handling for the commands between 11153 ":try" and ":endtry" including everything being 11154 executed across ":source" commands, function calls, 11155 or autocommand invocations. 11156 11157 When an error or interrupt is detected and there is 11158 a |:finally| command following, execution continues 11159 after the ":finally". Otherwise, or when the 11160 ":endtry" is reached thereafter, the next 11161 (dynamically) surrounding ":try" is checked for 11162 a corresponding ":finally" etc. Then the script 11163 processing is terminated. (Whether a function 11164 definition has an "abort" argument does not matter.) 11165 Example: > 11166 :try | edit too much | finally | echo "cleanup" | endtry 11167 :echo "impossible" " not reached, script terminated above 11168< 11169 Moreover, an error or interrupt (dynamically) inside 11170 ":try" and ":endtry" is converted to an exception. It 11171 can be caught as if it were thrown by a |:throw| 11172 command (see |:catch|). In this case, the script 11173 processing is not terminated. 11174 11175 The value "Vim:Interrupt" is used for an interrupt 11176 exception. An error in a Vim command is converted 11177 to a value of the form "Vim({command}):{errmsg}", 11178 other errors are converted to a value of the form 11179 "Vim:{errmsg}". {command} is the full command name, 11180 and {errmsg} is the message that is displayed if the 11181 error exception is not caught, always beginning with 11182 the error number. 11183 Examples: > 11184 :try | sleep 100 | catch /^Vim:Interrupt$/ | endtry 11185 :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry 11186< 11187 *:cat* *:catch* *E603* *E604* *E605* 11188:cat[ch] /{pattern}/ The following commands until the next |:catch|, 11189 |:finally|, or |:endtry| that belongs to the same 11190 |:try| as the ":catch" are executed when an exception 11191 matching {pattern} is being thrown and has not yet 11192 been caught by a previous ":catch". Otherwise, these 11193 commands are skipped. 11194 When {pattern} is omitted all errors are caught. 11195 Examples: > 11196 :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C) 11197 :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors 11198 :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts 11199 :catch /^Vim(write):/ " catch all errors in :write 11200 :catch /^Vim\%((\a\+)\)\=:E123/ " catch error E123 11201 :catch /my-exception/ " catch user exception 11202 :catch /.*/ " catch everything 11203 :catch " same as /.*/ 11204< 11205 Another character can be used instead of / around the 11206 {pattern}, so long as it does not have a special 11207 meaning (e.g., '|' or '"') and doesn't occur inside 11208 {pattern}. 11209 Information about the exception is available in 11210 |v:exception|. Also see |throw-variables|. 11211 NOTE: It is not reliable to ":catch" the TEXT of 11212 an error message because it may vary in different 11213 locales. 11214 11215 *:fina* *:finally* *E606* *E607* 11216:fina[lly] The following commands until the matching |:endtry| 11217 are executed whenever the part between the matching 11218 |:try| and the ":finally" is left: either by falling 11219 through to the ":finally" or by a |:continue|, 11220 |:break|, |:finish|, or |:return|, or by an error or 11221 interrupt or exception (see |:throw|). 11222 11223 *:th* *:throw* *E608* 11224:th[row] {expr1} The {expr1} is evaluated and thrown as an exception. 11225 If the ":throw" is used after a |:try| but before the 11226 first corresponding |:catch|, commands are skipped 11227 until the first ":catch" matching {expr1} is reached. 11228 If there is no such ":catch" or if the ":throw" is 11229 used after a ":catch" but before the |:finally|, the 11230 commands following the ":finally" (if present) up to 11231 the matching |:endtry| are executed. If the ":throw" 11232 is after the ":finally", commands up to the ":endtry" 11233 are skipped. At the ":endtry", this process applies 11234 again for the next dynamically surrounding ":try" 11235 (which may be found in a calling function or sourcing 11236 script), until a matching ":catch" has been found. 11237 If the exception is not caught, the command processing 11238 is terminated. 11239 Example: > 11240 :try | throw "oops" | catch /^oo/ | echo "caught" | endtry 11241< Note that "catch" may need to be on a separate line 11242 for when an error causes the parsing to skip the whole 11243 line and not see the "|" that separates the commands. 11244 11245 *:ec* *:echo* 11246:ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The 11247 first {expr1} starts on a new line. 11248 Also see |:comment|. 11249 Use "\n" to start a new line. Use "\r" to move the 11250 cursor to the first column. 11251 Uses the highlighting set by the |:echohl| command. 11252 Cannot be followed by a comment. 11253 Example: > 11254 :echo "the value of 'shell' is" &shell 11255< *:echo-redraw* 11256 A later redraw may make the message disappear again. 11257 And since Vim mostly postpones redrawing until it's 11258 finished with a sequence of commands this happens 11259 quite often. To avoid that a command from before the 11260 ":echo" causes a redraw afterwards (redraws are often 11261 postponed until you type something), force a redraw 11262 with the |:redraw| command. Example: > 11263 :new | redraw | echo "there is a new window" 11264< 11265 *:echon* 11266:echon {expr1} .. Echoes each {expr1}, without anything added. Also see 11267 |:comment|. 11268 Uses the highlighting set by the |:echohl| command. 11269 Cannot be followed by a comment. 11270 Example: > 11271 :echon "the value of 'shell' is " &shell 11272< 11273 Note the difference between using ":echo", which is a 11274 Vim command, and ":!echo", which is an external shell 11275 command: > 11276 :!echo % --> filename 11277< The arguments of ":!" are expanded, see |:_%|. > 11278 :!echo "%" --> filename or "filename" 11279< Like the previous example. Whether you see the double 11280 quotes or not depends on your 'shell'. > 11281 :echo % --> nothing 11282< The '%' is an illegal character in an expression. > 11283 :echo "%" --> % 11284< This just echoes the '%' character. > 11285 :echo expand("%") --> filename 11286< This calls the expand() function to expand the '%'. 11287 11288 *:echoh* *:echohl* 11289:echoh[l] {name} Use the highlight group {name} for the following 11290 |:echo|, |:echon| and |:echomsg| commands. Also used 11291 for the |input()| prompt. Example: > 11292 :echohl WarningMsg | echo "Don't panic!" | echohl None 11293< Don't forget to set the group back to "None", 11294 otherwise all following echo's will be highlighted. 11295 11296 *:echom* *:echomsg* 11297:echom[sg] {expr1} .. Echo the expression(s) as a true message, saving the 11298 message in the |message-history|. 11299 Spaces are placed between the arguments as with the 11300 |:echo| command. But unprintable characters are 11301 displayed, not interpreted. 11302 The parsing works slightly different from |:echo|, 11303 more like |:execute|. All the expressions are first 11304 evaluated and concatenated before echoing anything. 11305 If expressions does not evaluate to a Number or 11306 String, string() is used to turn it into a string. 11307 Uses the highlighting set by the |:echohl| command. 11308 Example: > 11309 :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see." 11310< See |:echo-redraw| to avoid the message disappearing 11311 when the screen is redrawn. 11312 *:echoe* *:echoerr* 11313:echoe[rr] {expr1} .. Echo the expression(s) as an error message, saving the 11314 message in the |message-history|. When used in a 11315 script or function the line number will be added. 11316 Spaces are placed between the arguments as with the 11317 |:echomsg| command. When used inside a try conditional, 11318 the message is raised as an error exception instead 11319 (see |try-echoerr|). 11320 Example: > 11321 :echoerr "This script just failed!" 11322< If you just want a highlighted message use |:echohl|. 11323 And to get a beep: > 11324 :exe "normal \<Esc>" 11325< 11326 *:exe* *:execute* 11327:exe[cute] {expr1} .. Executes the string that results from the evaluation 11328 of {expr1} as an Ex command. 11329 Multiple arguments are concatenated, with a space in 11330 between. To avoid the extra space use the "." 11331 operator to concatenate strings into one argument. 11332 {expr1} is used as the processed command, command line 11333 editing keys are not recognized. 11334 Cannot be followed by a comment. 11335 Examples: > 11336 :execute "buffer" nextbuf 11337 :execute "normal" count . "w" 11338< 11339 ":execute" can be used to append a command to commands 11340 that don't accept a '|'. Example: > 11341 :execute '!ls' | echo "theend" 11342 11343< ":execute" is also a nice way to avoid having to type 11344 control characters in a Vim script for a ":normal" 11345 command: > 11346 :execute "normal ixxx\<Esc>" 11347< This has an <Esc> character, see |expr-string|. 11348 11349 Be careful to correctly escape special characters in 11350 file names. The |fnameescape()| function can be used 11351 for Vim commands, |shellescape()| for |:!| commands. 11352 Examples: > 11353 :execute "e " . fnameescape(filename) 11354 :execute "!ls " . shellescape(filename, 1) 11355< 11356 Note: The executed string may be any command-line, but 11357 starting or ending "if", "while" and "for" does not 11358 always work, because when commands are skipped the 11359 ":execute" is not evaluated and Vim loses track of 11360 where blocks start and end. Also "break" and 11361 "continue" should not be inside ":execute". 11362 This example does not work, because the ":execute" is 11363 not evaluated and Vim does not see the "while", and 11364 gives an error for finding an ":endwhile": > 11365 :if 0 11366 : execute 'while i > 5' 11367 : echo "test" 11368 : endwhile 11369 :endif 11370< 11371 It is allowed to have a "while" or "if" command 11372 completely in the executed string: > 11373 :execute 'while i < 5 | echo i | let i = i + 1 | endwhile' 11374< 11375 11376 *:exe-comment* 11377 ":execute", ":echo" and ":echon" cannot be followed by 11378 a comment directly, because they see the '"' as the 11379 start of a string. But, you can use '|' followed by a 11380 comment. Example: > 11381 :echo "foo" | "this is a comment 11382 11383============================================================================== 113848. Exception handling *exception-handling* 11385 11386The Vim script language comprises an exception handling feature. This section 11387explains how it can be used in a Vim script. 11388 11389Exceptions may be raised by Vim on an error or on interrupt, see 11390|catch-errors| and |catch-interrupt|. You can also explicitly throw an 11391exception by using the ":throw" command, see |throw-catch|. 11392 11393 11394TRY CONDITIONALS *try-conditionals* 11395 11396Exceptions can be caught or can cause cleanup code to be executed. You can 11397use a try conditional to specify catch clauses (that catch exceptions) and/or 11398a finally clause (to be executed for cleanup). 11399 A try conditional begins with a |:try| command and ends at the matching 11400|:endtry| command. In between, you can use a |:catch| command to start 11401a catch clause, or a |:finally| command to start a finally clause. There may 11402be none or multiple catch clauses, but there is at most one finally clause, 11403which must not be followed by any catch clauses. The lines before the catch 11404clauses and the finally clause is called a try block. > 11405 11406 :try 11407 : ... 11408 : ... TRY BLOCK 11409 : ... 11410 :catch /{pattern}/ 11411 : ... 11412 : ... CATCH CLAUSE 11413 : ... 11414 :catch /{pattern}/ 11415 : ... 11416 : ... CATCH CLAUSE 11417 : ... 11418 :finally 11419 : ... 11420 : ... FINALLY CLAUSE 11421 : ... 11422 :endtry 11423 11424The try conditional allows to watch code for exceptions and to take the 11425appropriate actions. Exceptions from the try block may be caught. Exceptions 11426from the try block and also the catch clauses may cause cleanup actions. 11427 When no exception is thrown during execution of the try block, the control 11428is transferred to the finally clause, if present. After its execution, the 11429script continues with the line following the ":endtry". 11430 When an exception occurs during execution of the try block, the remaining 11431lines in the try block are skipped. The exception is matched against the 11432patterns specified as arguments to the ":catch" commands. The catch clause 11433after the first matching ":catch" is taken, other catch clauses are not 11434executed. The catch clause ends when the next ":catch", ":finally", or 11435":endtry" command is reached - whatever is first. Then, the finally clause 11436(if present) is executed. When the ":endtry" is reached, the script execution 11437continues in the following line as usual. 11438 When an exception that does not match any of the patterns specified by the 11439":catch" commands is thrown in the try block, the exception is not caught by 11440that try conditional and none of the catch clauses is executed. Only the 11441finally clause, if present, is taken. The exception pends during execution of 11442the finally clause. It is resumed at the ":endtry", so that commands after 11443the ":endtry" are not executed and the exception might be caught elsewhere, 11444see |try-nesting|. 11445 When during execution of a catch clause another exception is thrown, the 11446remaining lines in that catch clause are not executed. The new exception is 11447not matched against the patterns in any of the ":catch" commands of the same 11448try conditional and none of its catch clauses is taken. If there is, however, 11449a finally clause, it is executed, and the exception pends during its 11450execution. The commands following the ":endtry" are not executed. The new 11451exception might, however, be caught elsewhere, see |try-nesting|. 11452 When during execution of the finally clause (if present) an exception is 11453thrown, the remaining lines in the finally clause are skipped. If the finally 11454clause has been taken because of an exception from the try block or one of the 11455catch clauses, the original (pending) exception is discarded. The commands 11456following the ":endtry" are not executed, and the exception from the finally 11457clause is propagated and can be caught elsewhere, see |try-nesting|. 11458 11459The finally clause is also executed, when a ":break" or ":continue" for 11460a ":while" loop enclosing the complete try conditional is executed from the 11461try block or a catch clause. Or when a ":return" or ":finish" is executed 11462from the try block or a catch clause of a try conditional in a function or 11463sourced script, respectively. The ":break", ":continue", ":return", or 11464":finish" pends during execution of the finally clause and is resumed when the 11465":endtry" is reached. It is, however, discarded when an exception is thrown 11466from the finally clause. 11467 When a ":break" or ":continue" for a ":while" loop enclosing the complete 11468try conditional or when a ":return" or ":finish" is encountered in the finally 11469clause, the rest of the finally clause is skipped, and the ":break", 11470":continue", ":return" or ":finish" is executed as usual. If the finally 11471clause has been taken because of an exception or an earlier ":break", 11472":continue", ":return", or ":finish" from the try block or a catch clause, 11473this pending exception or command is discarded. 11474 11475For examples see |throw-catch| and |try-finally|. 11476 11477 11478NESTING OF TRY CONDITIONALS *try-nesting* 11479 11480Try conditionals can be nested arbitrarily. That is, a complete try 11481conditional can be put into the try block, a catch clause, or the finally 11482clause of another try conditional. If the inner try conditional does not 11483catch an exception thrown in its try block or throws a new exception from one 11484of its catch clauses or its finally clause, the outer try conditional is 11485checked according to the rules above. If the inner try conditional is in the 11486try block of the outer try conditional, its catch clauses are checked, but 11487otherwise only the finally clause is executed. It does not matter for 11488nesting, whether the inner try conditional is directly contained in the outer 11489one, or whether the outer one sources a script or calls a function containing 11490the inner try conditional. 11491 11492When none of the active try conditionals catches an exception, just their 11493finally clauses are executed. Thereafter, the script processing terminates. 11494An error message is displayed in case of an uncaught exception explicitly 11495thrown by a ":throw" command. For uncaught error and interrupt exceptions 11496implicitly raised by Vim, the error message(s) or interrupt message are shown 11497as usual. 11498 11499For examples see |throw-catch|. 11500 11501 11502EXAMINING EXCEPTION HANDLING CODE *except-examine* 11503 11504Exception handling code can get tricky. If you are in doubt what happens, set 11505'verbose' to 13 or use the ":13verbose" command modifier when sourcing your 11506script file. Then you see when an exception is thrown, discarded, caught, or 11507finished. When using a verbosity level of at least 14, things pending in 11508a finally clause are also shown. This information is also given in debug mode 11509(see |debug-scripts|). 11510 11511 11512THROWING AND CATCHING EXCEPTIONS *throw-catch* 11513 11514You can throw any number or string as an exception. Use the |:throw| command 11515and pass the value to be thrown as argument: > 11516 :throw 4711 11517 :throw "string" 11518< *throw-expression* 11519You can also specify an expression argument. The expression is then evaluated 11520first, and the result is thrown: > 11521 :throw 4705 + strlen("string") 11522 :throw strpart("strings", 0, 6) 11523 11524An exception might be thrown during evaluation of the argument of the ":throw" 11525command. Unless it is caught there, the expression evaluation is abandoned. 11526The ":throw" command then does not throw a new exception. 11527 Example: > 11528 11529 :function! Foo(arg) 11530 : try 11531 : throw a:arg 11532 : catch /foo/ 11533 : endtry 11534 : return 1 11535 :endfunction 11536 : 11537 :function! Bar() 11538 : echo "in Bar" 11539 : return 4710 11540 :endfunction 11541 : 11542 :throw Foo("arrgh") + Bar() 11543 11544This throws "arrgh", and "in Bar" is not displayed since Bar() is not 11545executed. > 11546 :throw Foo("foo") + Bar() 11547however displays "in Bar" and throws 4711. 11548 11549Any other command that takes an expression as argument might also be 11550abandoned by an (uncaught) exception during the expression evaluation. The 11551exception is then propagated to the caller of the command. 11552 Example: > 11553 11554 :if Foo("arrgh") 11555 : echo "then" 11556 :else 11557 : echo "else" 11558 :endif 11559 11560Here neither of "then" or "else" is displayed. 11561 11562 *catch-order* 11563Exceptions can be caught by a try conditional with one or more |:catch| 11564commands, see |try-conditionals|. The values to be caught by each ":catch" 11565command can be specified as a pattern argument. The subsequent catch clause 11566gets executed when a matching exception is caught. 11567 Example: > 11568 11569 :function! Foo(value) 11570 : try 11571 : throw a:value 11572 : catch /^\d\+$/ 11573 : echo "Number thrown" 11574 : catch /.*/ 11575 : echo "String thrown" 11576 : endtry 11577 :endfunction 11578 : 11579 :call Foo(0x1267) 11580 :call Foo('string') 11581 11582The first call to Foo() displays "Number thrown", the second "String thrown". 11583An exception is matched against the ":catch" commands in the order they are 11584specified. Only the first match counts. So you should place the more 11585specific ":catch" first. The following order does not make sense: > 11586 11587 : catch /.*/ 11588 : echo "String thrown" 11589 : catch /^\d\+$/ 11590 : echo "Number thrown" 11591 11592The first ":catch" here matches always, so that the second catch clause is 11593never taken. 11594 11595 *throw-variables* 11596If you catch an exception by a general pattern, you may access the exact value 11597in the variable |v:exception|: > 11598 11599 : catch /^\d\+$/ 11600 : echo "Number thrown. Value is" v:exception 11601 11602You may also be interested where an exception was thrown. This is stored in 11603|v:throwpoint|. Note that "v:exception" and "v:throwpoint" are valid for the 11604exception most recently caught as long it is not finished. 11605 Example: > 11606 11607 :function! Caught() 11608 : if v:exception != "" 11609 : echo 'Caught "' . v:exception . '" in ' . v:throwpoint 11610 : else 11611 : echo 'Nothing caught' 11612 : endif 11613 :endfunction 11614 : 11615 :function! Foo() 11616 : try 11617 : try 11618 : try 11619 : throw 4711 11620 : finally 11621 : call Caught() 11622 : endtry 11623 : catch /.*/ 11624 : call Caught() 11625 : throw "oops" 11626 : endtry 11627 : catch /.*/ 11628 : call Caught() 11629 : finally 11630 : call Caught() 11631 : endtry 11632 :endfunction 11633 : 11634 :call Foo() 11635 11636This displays > 11637 11638 Nothing caught 11639 Caught "4711" in function Foo, line 4 11640 Caught "oops" in function Foo, line 10 11641 Nothing caught 11642 11643A practical example: The following command ":LineNumber" displays the line 11644number in the script or function where it has been used: > 11645 11646 :function! LineNumber() 11647 : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "") 11648 :endfunction 11649 :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry 11650< 11651 *try-nested* 11652An exception that is not caught by a try conditional can be caught by 11653a surrounding try conditional: > 11654 11655 :try 11656 : try 11657 : throw "foo" 11658 : catch /foobar/ 11659 : echo "foobar" 11660 : finally 11661 : echo "inner finally" 11662 : endtry 11663 :catch /foo/ 11664 : echo "foo" 11665 :endtry 11666 11667The inner try conditional does not catch the exception, just its finally 11668clause is executed. The exception is then caught by the outer try 11669conditional. The example displays "inner finally" and then "foo". 11670 11671 *throw-from-catch* 11672You can catch an exception and throw a new one to be caught elsewhere from the 11673catch clause: > 11674 11675 :function! Foo() 11676 : throw "foo" 11677 :endfunction 11678 : 11679 :function! Bar() 11680 : try 11681 : call Foo() 11682 : catch /foo/ 11683 : echo "Caught foo, throw bar" 11684 : throw "bar" 11685 : endtry 11686 :endfunction 11687 : 11688 :try 11689 : call Bar() 11690 :catch /.*/ 11691 : echo "Caught" v:exception 11692 :endtry 11693 11694This displays "Caught foo, throw bar" and then "Caught bar". 11695 11696 *rethrow* 11697There is no real rethrow in the Vim script language, but you may throw 11698"v:exception" instead: > 11699 11700 :function! Bar() 11701 : try 11702 : call Foo() 11703 : catch /.*/ 11704 : echo "Rethrow" v:exception 11705 : throw v:exception 11706 : endtry 11707 :endfunction 11708< *try-echoerr* 11709Note that this method cannot be used to "rethrow" Vim error or interrupt 11710exceptions, because it is not possible to fake Vim internal exceptions. 11711Trying so causes an error exception. You should throw your own exception 11712denoting the situation. If you want to cause a Vim error exception containing 11713the original error exception value, you can use the |:echoerr| command: > 11714 11715 :try 11716 : try 11717 : asdf 11718 : catch /.*/ 11719 : echoerr v:exception 11720 : endtry 11721 :catch /.*/ 11722 : echo v:exception 11723 :endtry 11724 11725This code displays 11726 11727 Vim(echoerr):Vim:E492: Not an editor command: asdf ~ 11728 11729 11730CLEANUP CODE *try-finally* 11731 11732Scripts often change global settings and restore them at their end. If the 11733user however interrupts the script by pressing CTRL-C, the settings remain in 11734an inconsistent state. The same may happen to you in the development phase of 11735a script when an error occurs or you explicitly throw an exception without 11736catching it. You can solve these problems by using a try conditional with 11737a finally clause for restoring the settings. Its execution is guaranteed on 11738normal control flow, on error, on an explicit ":throw", and on interrupt. 11739(Note that errors and interrupts from inside the try conditional are converted 11740to exceptions. When not caught, they terminate the script after the finally 11741clause has been executed.) 11742Example: > 11743 11744 :try 11745 : let s:saved_ts = &ts 11746 : set ts=17 11747 : 11748 : " Do the hard work here. 11749 : 11750 :finally 11751 : let &ts = s:saved_ts 11752 : unlet s:saved_ts 11753 :endtry 11754 11755This method should be used locally whenever a function or part of a script 11756changes global settings which need to be restored on failure or normal exit of 11757that function or script part. 11758 11759 *break-finally* 11760Cleanup code works also when the try block or a catch clause is left by 11761a ":continue", ":break", ":return", or ":finish". 11762 Example: > 11763 11764 :let first = 1 11765 :while 1 11766 : try 11767 : if first 11768 : echo "first" 11769 : let first = 0 11770 : continue 11771 : else 11772 : throw "second" 11773 : endif 11774 : catch /.*/ 11775 : echo v:exception 11776 : break 11777 : finally 11778 : echo "cleanup" 11779 : endtry 11780 : echo "still in while" 11781 :endwhile 11782 :echo "end" 11783 11784This displays "first", "cleanup", "second", "cleanup", and "end". > 11785 11786 :function! Foo() 11787 : try 11788 : return 4711 11789 : finally 11790 : echo "cleanup\n" 11791 : endtry 11792 : echo "Foo still active" 11793 :endfunction 11794 : 11795 :echo Foo() "returned by Foo" 11796 11797This displays "cleanup" and "4711 returned by Foo". You don't need to add an 11798extra ":return" in the finally clause. (Above all, this would override the 11799return value.) 11800 11801 *except-from-finally* 11802Using either of ":continue", ":break", ":return", ":finish", or ":throw" in 11803a finally clause is possible, but not recommended since it abandons the 11804cleanup actions for the try conditional. But, of course, interrupt and error 11805exceptions might get raised from a finally clause. 11806 Example where an error in the finally clause stops an interrupt from 11807working correctly: > 11808 11809 :try 11810 : try 11811 : echo "Press CTRL-C for interrupt" 11812 : while 1 11813 : endwhile 11814 : finally 11815 : unlet novar 11816 : endtry 11817 :catch /novar/ 11818 :endtry 11819 :echo "Script still running" 11820 :sleep 1 11821 11822If you need to put commands that could fail into a finally clause, you should 11823think about catching or ignoring the errors in these commands, see 11824|catch-errors| and |ignore-errors|. 11825 11826 11827CATCHING ERRORS *catch-errors* 11828 11829If you want to catch specific errors, you just have to put the code to be 11830watched in a try block and add a catch clause for the error message. The 11831presence of the try conditional causes all errors to be converted to an 11832exception. No message is displayed and |v:errmsg| is not set then. To find 11833the right pattern for the ":catch" command, you have to know how the format of 11834the error exception is. 11835 Error exceptions have the following format: > 11836 11837 Vim({cmdname}):{errmsg} 11838or > 11839 Vim:{errmsg} 11840 11841{cmdname} is the name of the command that failed; the second form is used when 11842the command name is not known. {errmsg} is the error message usually produced 11843when the error occurs outside try conditionals. It always begins with 11844a capital "E", followed by a two or three-digit error number, a colon, and 11845a space. 11846 11847Examples: 11848 11849The command > 11850 :unlet novar 11851normally produces the error message > 11852 E108: No such variable: "novar" 11853which is converted inside try conditionals to an exception > 11854 Vim(unlet):E108: No such variable: "novar" 11855 11856The command > 11857 :dwim 11858normally produces the error message > 11859 E492: Not an editor command: dwim 11860which is converted inside try conditionals to an exception > 11861 Vim:E492: Not an editor command: dwim 11862 11863You can catch all ":unlet" errors by a > 11864 :catch /^Vim(unlet):/ 11865or all errors for misspelled command names by a > 11866 :catch /^Vim:E492:/ 11867 11868Some error messages may be produced by different commands: > 11869 :function nofunc 11870and > 11871 :delfunction nofunc 11872both produce the error message > 11873 E128: Function name must start with a capital: nofunc 11874which is converted inside try conditionals to an exception > 11875 Vim(function):E128: Function name must start with a capital: nofunc 11876or > 11877 Vim(delfunction):E128: Function name must start with a capital: nofunc 11878respectively. You can catch the error by its number independently on the 11879command that caused it if you use the following pattern: > 11880 :catch /^Vim(\a\+):E128:/ 11881 11882Some commands like > 11883 :let x = novar 11884produce multiple error messages, here: > 11885 E121: Undefined variable: novar 11886 E15: Invalid expression: novar 11887Only the first is used for the exception value, since it is the most specific 11888one (see |except-several-errors|). So you can catch it by > 11889 :catch /^Vim(\a\+):E121:/ 11890 11891You can catch all errors related to the name "nofunc" by > 11892 :catch /\<nofunc\>/ 11893 11894You can catch all Vim errors in the ":write" and ":read" commands by > 11895 :catch /^Vim(\(write\|read\)):E\d\+:/ 11896 11897You can catch all Vim errors by the pattern > 11898 :catch /^Vim\((\a\+)\)\=:E\d\+:/ 11899< 11900 *catch-text* 11901NOTE: You should never catch the error message text itself: > 11902 :catch /No such variable/ 11903only works in the English locale, but not when the user has selected 11904a different language by the |:language| command. It is however helpful to 11905cite the message text in a comment: > 11906 :catch /^Vim(\a\+):E108:/ " No such variable 11907 11908 11909IGNORING ERRORS *ignore-errors* 11910 11911You can ignore errors in a specific Vim command by catching them locally: > 11912 11913 :try 11914 : write 11915 :catch 11916 :endtry 11917 11918But you are strongly recommended NOT to use this simple form, since it could 11919catch more than you want. With the ":write" command, some autocommands could 11920be executed and cause errors not related to writing, for instance: > 11921 11922 :au BufWritePre * unlet novar 11923 11924There could even be such errors you are not responsible for as a script 11925writer: a user of your script might have defined such autocommands. You would 11926then hide the error from the user. 11927 It is much better to use > 11928 11929 :try 11930 : write 11931 :catch /^Vim(write):/ 11932 :endtry 11933 11934which only catches real write errors. So catch only what you'd like to ignore 11935intentionally. 11936 11937For a single command that does not cause execution of autocommands, you could 11938even suppress the conversion of errors to exceptions by the ":silent!" 11939command: > 11940 :silent! nunmap k 11941This works also when a try conditional is active. 11942 11943 11944CATCHING INTERRUPTS *catch-interrupt* 11945 11946When there are active try conditionals, an interrupt (CTRL-C) is converted to 11947the exception "Vim:Interrupt". You can catch it like every exception. The 11948script is not terminated, then. 11949 Example: > 11950 11951 :function! TASK1() 11952 : sleep 10 11953 :endfunction 11954 11955 :function! TASK2() 11956 : sleep 20 11957 :endfunction 11958 11959 :while 1 11960 : let command = input("Type a command: ") 11961 : try 11962 : if command == "" 11963 : continue 11964 : elseif command == "END" 11965 : break 11966 : elseif command == "TASK1" 11967 : call TASK1() 11968 : elseif command == "TASK2" 11969 : call TASK2() 11970 : else 11971 : echo "\nIllegal command:" command 11972 : continue 11973 : endif 11974 : catch /^Vim:Interrupt$/ 11975 : echo "\nCommand interrupted" 11976 : " Caught the interrupt. Continue with next prompt. 11977 : endtry 11978 :endwhile 11979 11980You can interrupt a task here by pressing CTRL-C; the script then asks for 11981a new command. If you press CTRL-C at the prompt, the script is terminated. 11982 11983For testing what happens when CTRL-C would be pressed on a specific line in 11984your script, use the debug mode and execute the |>quit| or |>interrupt| 11985command on that line. See |debug-scripts|. 11986 11987 11988CATCHING ALL *catch-all* 11989 11990The commands > 11991 11992 :catch /.*/ 11993 :catch // 11994 :catch 11995 11996catch everything, error exceptions, interrupt exceptions and exceptions 11997explicitly thrown by the |:throw| command. This is useful at the top level of 11998a script in order to catch unexpected things. 11999 Example: > 12000 12001 :try 12002 : 12003 : " do the hard work here 12004 : 12005 :catch /MyException/ 12006 : 12007 : " handle known problem 12008 : 12009 :catch /^Vim:Interrupt$/ 12010 : echo "Script interrupted" 12011 :catch /.*/ 12012 : echo "Internal error (" . v:exception . ")" 12013 : echo " - occurred at " . v:throwpoint 12014 :endtry 12015 :" end of script 12016 12017Note: Catching all might catch more things than you want. Thus, you are 12018strongly encouraged to catch only for problems that you can really handle by 12019specifying a pattern argument to the ":catch". 12020 Example: Catching all could make it nearly impossible to interrupt a script 12021by pressing CTRL-C: > 12022 12023 :while 1 12024 : try 12025 : sleep 1 12026 : catch 12027 : endtry 12028 :endwhile 12029 12030 12031EXCEPTIONS AND AUTOCOMMANDS *except-autocmd* 12032 12033Exceptions may be used during execution of autocommands. Example: > 12034 12035 :autocmd User x try 12036 :autocmd User x throw "Oops!" 12037 :autocmd User x catch 12038 :autocmd User x echo v:exception 12039 :autocmd User x endtry 12040 :autocmd User x throw "Arrgh!" 12041 :autocmd User x echo "Should not be displayed" 12042 : 12043 :try 12044 : doautocmd User x 12045 :catch 12046 : echo v:exception 12047 :endtry 12048 12049This displays "Oops!" and "Arrgh!". 12050 12051 *except-autocmd-Pre* 12052For some commands, autocommands get executed before the main action of the 12053command takes place. If an exception is thrown and not caught in the sequence 12054of autocommands, the sequence and the command that caused its execution are 12055abandoned and the exception is propagated to the caller of the command. 12056 Example: > 12057 12058 :autocmd BufWritePre * throw "FAIL" 12059 :autocmd BufWritePre * echo "Should not be displayed" 12060 : 12061 :try 12062 : write 12063 :catch 12064 : echo "Caught:" v:exception "from" v:throwpoint 12065 :endtry 12066 12067Here, the ":write" command does not write the file currently being edited (as 12068you can see by checking 'modified'), since the exception from the BufWritePre 12069autocommand abandons the ":write". The exception is then caught and the 12070script displays: > 12071 12072 Caught: FAIL from BufWrite Auto commands for "*" 12073< 12074 *except-autocmd-Post* 12075For some commands, autocommands get executed after the main action of the 12076command has taken place. If this main action fails and the command is inside 12077an active try conditional, the autocommands are skipped and an error exception 12078is thrown that can be caught by the caller of the command. 12079 Example: > 12080 12081 :autocmd BufWritePost * echo "File successfully written!" 12082 : 12083 :try 12084 : write /i/m/p/o/s/s/i/b/l/e 12085 :catch 12086 : echo v:exception 12087 :endtry 12088 12089This just displays: > 12090 12091 Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e) 12092 12093If you really need to execute the autocommands even when the main action 12094fails, trigger the event from the catch clause. 12095 Example: > 12096 12097 :autocmd BufWritePre * set noreadonly 12098 :autocmd BufWritePost * set readonly 12099 : 12100 :try 12101 : write /i/m/p/o/s/s/i/b/l/e 12102 :catch 12103 : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e 12104 :endtry 12105< 12106You can also use ":silent!": > 12107 12108 :let x = "ok" 12109 :let v:errmsg = "" 12110 :autocmd BufWritePost * if v:errmsg != "" 12111 :autocmd BufWritePost * let x = "after fail" 12112 :autocmd BufWritePost * endif 12113 :try 12114 : silent! write /i/m/p/o/s/s/i/b/l/e 12115 :catch 12116 :endtry 12117 :echo x 12118 12119This displays "after fail". 12120 12121If the main action of the command does not fail, exceptions from the 12122autocommands will be catchable by the caller of the command: > 12123 12124 :autocmd BufWritePost * throw ":-(" 12125 :autocmd BufWritePost * echo "Should not be displayed" 12126 : 12127 :try 12128 : write 12129 :catch 12130 : echo v:exception 12131 :endtry 12132< 12133 *except-autocmd-Cmd* 12134For some commands, the normal action can be replaced by a sequence of 12135autocommands. Exceptions from that sequence will be catchable by the caller 12136of the command. 12137 Example: For the ":write" command, the caller cannot know whether the file 12138had actually been written when the exception occurred. You need to tell it in 12139some way. > 12140 12141 :if !exists("cnt") 12142 : let cnt = 0 12143 : 12144 : autocmd BufWriteCmd * if &modified 12145 : autocmd BufWriteCmd * let cnt = cnt + 1 12146 : autocmd BufWriteCmd * if cnt % 3 == 2 12147 : autocmd BufWriteCmd * throw "BufWriteCmdError" 12148 : autocmd BufWriteCmd * endif 12149 : autocmd BufWriteCmd * write | set nomodified 12150 : autocmd BufWriteCmd * if cnt % 3 == 0 12151 : autocmd BufWriteCmd * throw "BufWriteCmdError" 12152 : autocmd BufWriteCmd * endif 12153 : autocmd BufWriteCmd * echo "File successfully written!" 12154 : autocmd BufWriteCmd * endif 12155 :endif 12156 : 12157 :try 12158 : write 12159 :catch /^BufWriteCmdError$/ 12160 : if &modified 12161 : echo "Error on writing (file contents not changed)" 12162 : else 12163 : echo "Error after writing" 12164 : endif 12165 :catch /^Vim(write):/ 12166 : echo "Error on writing" 12167 :endtry 12168 12169When this script is sourced several times after making changes, it displays 12170first > 12171 File successfully written! 12172then > 12173 Error on writing (file contents not changed) 12174then > 12175 Error after writing 12176etc. 12177 12178 *except-autocmd-ill* 12179You cannot spread a try conditional over autocommands for different events. 12180The following code is ill-formed: > 12181 12182 :autocmd BufWritePre * try 12183 : 12184 :autocmd BufWritePost * catch 12185 :autocmd BufWritePost * echo v:exception 12186 :autocmd BufWritePost * endtry 12187 : 12188 :write 12189 12190 12191EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS *except-hier-param* 12192 12193Some programming languages allow to use hierarchies of exception classes or to 12194pass additional information with the object of an exception class. You can do 12195similar things in Vim. 12196 In order to throw an exception from a hierarchy, just throw the complete 12197class name with the components separated by a colon, for instance throw the 12198string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library. 12199 When you want to pass additional information with your exception class, add 12200it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)" 12201for an error when writing "myfile". 12202 With the appropriate patterns in the ":catch" command, you can catch for 12203base classes or derived classes of your hierarchy. Additional information in 12204parentheses can be cut out from |v:exception| with the ":substitute" command. 12205 Example: > 12206 12207 :function! CheckRange(a, func) 12208 : if a:a < 0 12209 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")" 12210 : endif 12211 :endfunction 12212 : 12213 :function! Add(a, b) 12214 : call CheckRange(a:a, "Add") 12215 : call CheckRange(a:b, "Add") 12216 : let c = a:a + a:b 12217 : if c < 0 12218 : throw "EXCEPT:MATHERR:OVERFLOW" 12219 : endif 12220 : return c 12221 :endfunction 12222 : 12223 :function! Div(a, b) 12224 : call CheckRange(a:a, "Div") 12225 : call CheckRange(a:b, "Div") 12226 : if (a:b == 0) 12227 : throw "EXCEPT:MATHERR:ZERODIV" 12228 : endif 12229 : return a:a / a:b 12230 :endfunction 12231 : 12232 :function! Write(file) 12233 : try 12234 : execute "write" fnameescape(a:file) 12235 : catch /^Vim(write):/ 12236 : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR" 12237 : endtry 12238 :endfunction 12239 : 12240 :try 12241 : 12242 : " something with arithmetics and I/O 12243 : 12244 :catch /^EXCEPT:MATHERR:RANGE/ 12245 : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "") 12246 : echo "Range error in" function 12247 : 12248 :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV 12249 : echo "Math error" 12250 : 12251 :catch /^EXCEPT:IO/ 12252 : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "") 12253 : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "") 12254 : if file !~ '^/' 12255 : let file = dir . "/" . file 12256 : endif 12257 : echo 'I/O error for "' . file . '"' 12258 : 12259 :catch /^EXCEPT/ 12260 : echo "Unspecified error" 12261 : 12262 :endtry 12263 12264The exceptions raised by Vim itself (on error or when pressing CTRL-C) use 12265a flat hierarchy: they are all in the "Vim" class. You cannot throw yourself 12266exceptions with the "Vim" prefix; they are reserved for Vim. 12267 Vim error exceptions are parameterized with the name of the command that 12268failed, if known. See |catch-errors|. 12269 12270 12271PECULIARITIES 12272 *except-compat* 12273The exception handling concept requires that the command sequence causing the 12274exception is aborted immediately and control is transferred to finally clauses 12275and/or a catch clause. 12276 12277In the Vim script language there are cases where scripts and functions 12278continue after an error: in functions without the "abort" flag or in a command 12279after ":silent!", control flow goes to the following line, and outside 12280functions, control flow goes to the line following the outermost ":endwhile" 12281or ":endif". On the other hand, errors should be catchable as exceptions 12282(thus, requiring the immediate abortion). 12283 12284This problem has been solved by converting errors to exceptions and using 12285immediate abortion (if not suppressed by ":silent!") only when a try 12286conditional is active. This is no restriction since an (error) exception can 12287be caught only from an active try conditional. If you want an immediate 12288termination without catching the error, just use a try conditional without 12289catch clause. (You can cause cleanup code being executed before termination 12290by specifying a finally clause.) 12291 12292When no try conditional is active, the usual abortion and continuation 12293behavior is used instead of immediate abortion. This ensures compatibility of 12294scripts written for Vim 6.1 and earlier. 12295 12296However, when sourcing an existing script that does not use exception handling 12297commands (or when calling one of its functions) from inside an active try 12298conditional of a new script, you might change the control flow of the existing 12299script on error. You get the immediate abortion on error and can catch the 12300error in the new script. If however the sourced script suppresses error 12301messages by using the ":silent!" command (checking for errors by testing 12302|v:errmsg| if appropriate), its execution path is not changed. The error is 12303not converted to an exception. (See |:silent|.) So the only remaining cause 12304where this happens is for scripts that don't care about errors and produce 12305error messages. You probably won't want to use such code from your new 12306scripts. 12307 12308 *except-syntax-err* 12309Syntax errors in the exception handling commands are never caught by any of 12310the ":catch" commands of the try conditional they belong to. Its finally 12311clauses, however, is executed. 12312 Example: > 12313 12314 :try 12315 : try 12316 : throw 4711 12317 : catch /\(/ 12318 : echo "in catch with syntax error" 12319 : catch 12320 : echo "inner catch-all" 12321 : finally 12322 : echo "inner finally" 12323 : endtry 12324 :catch 12325 : echo 'outer catch-all caught "' . v:exception . '"' 12326 : finally 12327 : echo "outer finally" 12328 :endtry 12329 12330This displays: > 12331 inner finally 12332 outer catch-all caught "Vim(catch):E54: Unmatched \(" 12333 outer finally 12334The original exception is discarded and an error exception is raised, instead. 12335 12336 *except-single-line* 12337The ":try", ":catch", ":finally", and ":endtry" commands can be put on 12338a single line, but then syntax errors may make it difficult to recognize the 12339"catch" line, thus you better avoid this. 12340 Example: > 12341 :try | unlet! foo # | catch | endtry 12342raises an error exception for the trailing characters after the ":unlet!" 12343argument, but does not see the ":catch" and ":endtry" commands, so that the 12344error exception is discarded and the "E488: Trailing characters" message gets 12345displayed. 12346 12347 *except-several-errors* 12348When several errors appear in a single command, the first error message is 12349usually the most specific one and therefor converted to the error exception. 12350 Example: > 12351 echo novar 12352causes > 12353 E121: Undefined variable: novar 12354 E15: Invalid expression: novar 12355The value of the error exception inside try conditionals is: > 12356 Vim(echo):E121: Undefined variable: novar 12357< *except-syntax-error* 12358But when a syntax error is detected after a normal error in the same command, 12359the syntax error is used for the exception being thrown. 12360 Example: > 12361 unlet novar # 12362causes > 12363 E108: No such variable: "novar" 12364 E488: Trailing characters 12365The value of the error exception inside try conditionals is: > 12366 Vim(unlet):E488: Trailing characters 12367This is done because the syntax error might change the execution path in a way 12368not intended by the user. Example: > 12369 try 12370 try | unlet novar # | catch | echo v:exception | endtry 12371 catch /.*/ 12372 echo "outer catch:" v:exception 12373 endtry 12374This displays "outer catch: Vim(unlet):E488: Trailing characters", and then 12375a "E600: Missing :endtry" error message is given, see |except-single-line|. 12376 12377============================================================================== 123789. Examples *eval-examples* 12379 12380Printing in Binary ~ 12381> 12382 :" The function Nr2Bin() returns the binary string representation of a number. 12383 :func Nr2Bin(nr) 12384 : let n = a:nr 12385 : let r = "" 12386 : while n 12387 : let r = '01'[n % 2] . r 12388 : let n = n / 2 12389 : endwhile 12390 : return r 12391 :endfunc 12392 12393 :" The function String2Bin() converts each character in a string to a 12394 :" binary string, separated with dashes. 12395 :func String2Bin(str) 12396 : let out = '' 12397 : for ix in range(strlen(a:str)) 12398 : let out = out . '-' . Nr2Bin(char2nr(a:str[ix])) 12399 : endfor 12400 : return out[1:] 12401 :endfunc 12402 12403Example of its use: > 12404 :echo Nr2Bin(32) 12405result: "100000" > 12406 :echo String2Bin("32") 12407result: "110011-110010" 12408 12409 12410Sorting lines ~ 12411 12412This example sorts lines with a specific compare function. > 12413 12414 :func SortBuffer() 12415 : let lines = getline(1, '$') 12416 : call sort(lines, function("Strcmp")) 12417 : call setline(1, lines) 12418 :endfunction 12419 12420As a one-liner: > 12421 :call setline(1, sort(getline(1, '$'), function("Strcmp"))) 12422 12423 12424scanf() replacement ~ 12425 *sscanf* 12426There is no sscanf() function in Vim. If you need to extract parts from a 12427line, you can use matchstr() and substitute() to do it. This example shows 12428how to get the file name, line number and column number out of a line like 12429"foobar.txt, 123, 45". > 12430 :" Set up the match bit 12431 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)' 12432 :"get the part matching the whole expression 12433 :let l = matchstr(line, mx) 12434 :"get each item out of the match 12435 :let file = substitute(l, mx, '\1', '') 12436 :let lnum = substitute(l, mx, '\2', '') 12437 :let col = substitute(l, mx, '\3', '') 12438 12439The input is in the variable "line", the results in the variables "file", 12440"lnum" and "col". (idea from Michael Geddes) 12441 12442 12443getting the scriptnames in a Dictionary ~ 12444 *scriptnames-dictionary* 12445The |:scriptnames| command can be used to get a list of all script files that 12446have been sourced. There is no equivalent function or variable for this 12447(because it's rarely needed). In case you need to manipulate the list this 12448code can be used: > 12449 " Get the output of ":scriptnames" in the scriptnames_output variable. 12450 let scriptnames_output = '' 12451 redir => scriptnames_output 12452 silent scriptnames 12453 redir END 12454 12455 " Split the output into lines and parse each line. Add an entry to the 12456 " "scripts" dictionary. 12457 let scripts = {} 12458 for line in split(scriptnames_output, "\n") 12459 " Only do non-blank lines. 12460 if line =~ '\S' 12461 " Get the first number in the line. 12462 let nr = matchstr(line, '\d\+') 12463 " Get the file name, remove the script number " 123: ". 12464 let name = substitute(line, '.\+:\s*', '', '') 12465 " Add an item to the Dictionary 12466 let scripts[nr] = name 12467 endif 12468 endfor 12469 unlet scriptnames_output 12470 12471============================================================================== 1247210. No +eval feature *no-eval-feature* 12473 12474When the |+eval| feature was disabled at compile time, none of the expression 12475evaluation commands are available. To prevent this from causing Vim scripts 12476to generate all kinds of errors, the ":if" and ":endif" commands are still 12477recognized, though the argument of the ":if" and everything between the ":if" 12478and the matching ":endif" is ignored. Nesting of ":if" blocks is allowed, but 12479only if the commands are at the start of the line. The ":else" command is not 12480recognized. 12481 12482Example of how to avoid executing commands when the |+eval| feature is 12483missing: > 12484 12485 :if 1 12486 : echo "Expression evaluation is compiled in" 12487 :else 12488 : echo "You will _never_ see this message" 12489 :endif 12490 12491To execute a command only when the |+eval| feature is disabled requires a trick, 12492as this example shows: > 12493 12494 silent! while 0 12495 set history=111 12496 silent! endwhile 12497 12498When the |+eval| feature is available the command is skipped because of the 12499"while 0". Without the |+eval| feature the "while 0" is an error, which is 12500silently ignored, and the command is executed. 12501 12502============================================================================== 1250311. The sandbox *eval-sandbox* *sandbox* *E48* 12504 12505The 'foldexpr', 'formatexpr', 'includeexpr', 'indentexpr', 'statusline' and 12506'foldtext' options may be evaluated in a sandbox. This means that you are 12507protected from these expressions having nasty side effects. This gives some 12508safety for when these options are set from a modeline. It is also used when 12509the command from a tags file is executed and for CTRL-R = in the command line. 12510The sandbox is also used for the |:sandbox| command. 12511 12512These items are not allowed in the sandbox: 12513 - changing the buffer text 12514 - defining or changing mapping, autocommands, user commands 12515 - setting certain options (see |option-summary|) 12516 - setting certain v: variables (see |v:var|) *E794* 12517 - executing a shell command 12518 - reading or writing a file 12519 - jumping to another buffer or editing a file 12520 - executing Python, Perl, etc. commands 12521This is not guaranteed 100% secure, but it should block most attacks. 12522 12523 *:san* *:sandbox* 12524:san[dbox] {cmd} Execute {cmd} in the sandbox. Useful to evaluate an 12525 option that may have been set from a modeline, e.g. 12526 'foldexpr'. 12527 12528 *sandbox-option* 12529A few options contain an expression. When this expression is evaluated it may 12530have to be done in the sandbox to avoid a security risk. But the sandbox is 12531restrictive, thus this only happens when the option was set from an insecure 12532location. Insecure in this context are: 12533- sourcing a .vimrc or .exrc in the current directory 12534- while executing in the sandbox 12535- value coming from a modeline 12536- executing a function that was defined in the sandbox 12537 12538Note that when in the sandbox and saving an option value and restoring it, the 12539option will still be marked as it was set in the sandbox. 12540 12541============================================================================== 1254212. Textlock *textlock* 12543 12544In a few situations it is not allowed to change the text in the buffer, jump 12545to another window and some other things that might confuse or break what Vim 12546is currently doing. This mostly applies to things that happen when Vim is 12547actually doing something else. For example, evaluating the 'balloonexpr' may 12548happen any moment the mouse cursor is resting at some position. 12549 12550This is not allowed when the textlock is active: 12551 - changing the buffer text 12552 - jumping to another buffer or window 12553 - editing another file 12554 - closing a window or quitting Vim 12555 - etc. 12556 12557============================================================================== 1255813. Testing *testing* 12559 12560Vim can be tested after building it, usually with "make test". 12561The tests are located in the directory "src/testdir". 12562 12563There are several types of tests added over time: 12564 test33.in oldest, don't add any more 12565 test_something.in old style tests 12566 test_something.vim new style tests 12567 12568 *new-style-testing* 12569New tests should be added as new style tests. These use functions such as 12570|assert_equal()| to keep the test commands and the expected result in one 12571place. 12572 *old-style-testing* 12573In some cases an old style test needs to be used. E.g. when testing Vim 12574without the |+eval| feature. 12575 12576Find more information in the file src/testdir/README.txt. 12577 12578 12579 vim:tw=78:ts=8:noet:ft=help:norl: 12580