1*eval.txt* For Vim version 8.2. Last change: 2020 Apr 19 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 15This file is about the backwards compatible Vim script. For Vim9 script, 16which executes much faster, supports type checking and much more, see 17|vim9.txt|. 18 191. Variables |variables| 20 1.1 Variable types 21 1.2 Function references |Funcref| 22 1.3 Lists |Lists| 23 1.4 Dictionaries |Dictionaries| 24 1.5 Blobs |Blobs| 25 1.6 More about variables |more-variables| 262. Expression syntax |expression-syntax| 273. Internal variable |internal-variables| 284. Builtin Functions |functions| 295. Defining functions |user-functions| 306. Curly braces names |curly-braces-names| 317. Commands |expression-commands| 328. Exception handling |exception-handling| 339. Examples |eval-examples| 3410. Vim script version |vimscript-version| 3511. No +eval feature |no-eval-feature| 3612. The sandbox |eval-sandbox| 3713. Textlock |textlock| 38 39Testing support is documented in |testing.txt|. 40Profiling is documented at |profiling|. 41 42============================================================================== 431. Variables *variables* 44 451.1 Variable types ~ 46 *E712* *E896* *E897* *E899* 47There are ten types of variables: 48 49 *Number* *Integer* 50Number A 32 or 64 bit signed number. |expr-number| 51 The number of bits is available in |v:numbersize|. 52 Examples: -123 0x10 0177 0b1011 53 54Float A floating point number. |floating-point-format| *Float* 55 {only when compiled with the |+float| feature} 56 Examples: 123.456 1.15e-6 -1.1e3 57 58 *E928* 59String A NUL terminated string of 8-bit unsigned characters (bytes). 60 |expr-string| Examples: "ab\txx\"--" 'x-z''a,c' 61 62List An ordered sequence of items, see |List| for details. 63 Example: [1, 2, ['a', 'b']] 64 65Dictionary An associative, unordered array: Each entry has a key and a 66 value. |Dictionary| 67 Examples: 68 {'blue': "#0000ff", 'red': "#ff0000"} 69 #{blue: "#0000ff", red: "#ff0000"} 70 71Funcref A reference to a function |Funcref|. 72 Example: function("strlen") 73 It can be bound to a dictionary and arguments, it then works 74 like a Partial. 75 Example: function("Callback", [arg], myDict) 76 77Special |v:false|, |v:true|, |v:none| and |v:null|. *Special* 78 79Job Used for a job, see |job_start()|. *Job* *Jobs* 80 81Channel Used for a channel, see |ch_open()|. *Channel* *Channels* 82 83Blob Binary Large Object. Stores any sequence of bytes. See |Blob| 84 for details 85 Example: 0zFF00ED015DAF 86 0z is an empty Blob. 87 88The Number and String types are converted automatically, depending on how they 89are used. 90 91Conversion from a Number to a String is by making the ASCII representation of 92the Number. Examples: 93 Number 123 --> String "123" ~ 94 Number 0 --> String "0" ~ 95 Number -1 --> String "-1" ~ 96 *octal* 97Conversion from a String to a Number is done by converting the first digits to 98a number. Hexadecimal "0xf9", Octal "017", and Binary "0b10" numbers are 99recognized (NOTE: when using |scriptversion-4| octal is not recognized). If 100the String doesn't start with digits, the result is zero. 101Examples: 102 String "456" --> Number 456 ~ 103 String "6bar" --> Number 6 ~ 104 String "foo" --> Number 0 ~ 105 String "0xf1" --> Number 241 ~ 106 String "0100" --> Number 64 ~ 107 String "0b101" --> Number 5 ~ 108 String "-8" --> Number -8 ~ 109 String "+8" --> Number 0 ~ 110 111To force conversion from String to Number, add zero to it: > 112 :echo "0100" + 0 113< 64 ~ 114 115To avoid a leading zero to cause octal conversion, or for using a different 116base, use |str2nr()|. 117 118 *TRUE* *FALSE* *Boolean* 119For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE. 120You can also use |v:false| and |v:true|. When TRUE is returned from a 121function it is the Number one, FALSE is the number zero. 122 123Note that in the command: > 124 :if "foo" 125 :" NOT executed 126"foo" is converted to 0, which means FALSE. If the string starts with a 127non-zero number it means TRUE: > 128 :if "8foo" 129 :" executed 130To test for a non-empty string, use empty(): > 131 :if !empty("foo") 132< 133 *non-zero-arg* 134Function arguments often behave slightly different from |TRUE|: If the 135argument is present and it evaluates to a non-zero Number, |v:true| or a 136non-empty String, then the value is considered to be TRUE. 137Note that " " and "0" are also non-empty strings, thus considered to be TRUE. 138A List, Dictionary or Float is not a Number or String, thus evaluate to FALSE. 139 140 *E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910* *E913* 141 *E974* *E975* *E976* 142|List|, |Dictionary|, |Funcref|, |Job|, |Channel| and |Blob| types are not 143automatically converted. 144 145 *E805* *E806* *E808* 146When mixing Number and Float the Number is converted to Float. Otherwise 147there is no automatic conversion of Float. You can use str2float() for String 148to Float, printf() for Float to String and float2nr() for Float to Number. 149 150 *E891* *E892* *E893* *E894* *E907* *E911* *E914* 151When expecting a Float a Number can also be used, but nothing else. 152 153 *no-type-checking* 154You will not get an error if you try to change the type of a variable. 155 156 1571.2 Function references ~ 158 *Funcref* *E695* *E718* 159A Funcref variable is obtained with the |function()| function, the |funcref()| 160function or created with the lambda expression |expr-lambda|. It can be used 161in an expression in the place of a function name, before the parenthesis 162around the arguments, to invoke the function it refers to. Example: > 163 164 :let Fn = function("MyFunc") 165 :echo Fn() 166< *E704* *E705* *E707* 167A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:". You 168can use "g:" but the following name must still start with a capital. You 169cannot have both a Funcref variable and a function with the same name. 170 171A special case is defining a function and directly assigning its Funcref to a 172Dictionary entry. Example: > 173 :function dict.init() dict 174 : let self.val = 0 175 :endfunction 176 177The key of the Dictionary can start with a lower case letter. The actual 178function name is not used here. Also see |numbered-function|. 179 180A Funcref can also be used with the |:call| command: > 181 :call Fn() 182 :call dict.init() 183 184The name of the referenced function can be obtained with |string()|. > 185 :let func = string(Fn) 186 187You can use |call()| to invoke a Funcref and use a list variable for the 188arguments: > 189 :let r = call(Fn, mylist) 190< 191 *Partial* 192A Funcref optionally binds a Dictionary and/or arguments. This is also called 193a Partial. This is created by passing the Dictionary and/or arguments to 194function() or funcref(). When calling the function the Dictionary and/or 195arguments will be passed to the function. Example: > 196 197 let Cb = function('Callback', ['foo'], myDict) 198 call Cb('bar') 199 200This will invoke the function as if using: > 201 call myDict.Callback('foo', 'bar') 202 203This is very useful when passing a function around, e.g. in the arguments of 204|ch_open()|. 205 206Note that binding a function to a Dictionary also happens when the function is 207a member of the Dictionary: > 208 209 let myDict.myFunction = MyFunction 210 call myDict.myFunction() 211 212Here MyFunction() will get myDict passed as "self". This happens when the 213"myFunction" member is accessed. When making assigning "myFunction" to 214otherDict and calling it, it will be bound to otherDict: > 215 216 let otherDict.myFunction = myDict.myFunction 217 call otherDict.myFunction() 218 219Now "self" will be "otherDict". But when the dictionary was bound explicitly 220this won't happen: > 221 222 let myDict.myFunction = function(MyFunction, myDict) 223 let otherDict.myFunction = myDict.myFunction 224 call otherDict.myFunction() 225 226Here "self" will be "myDict", because it was bound explicitly. 227 228 2291.3 Lists ~ 230 *list* *List* *Lists* *E686* 231A List is an ordered sequence of items. An item can be of any type. Items 232can be accessed by their index number. Items can be added and removed at any 233position in the sequence. 234 235 236List creation ~ 237 *E696* *E697* 238A List is created with a comma separated list of items in square brackets. 239Examples: > 240 :let mylist = [1, two, 3, "four"] 241 :let emptylist = [] 242 243An item can be any expression. Using a List for an item creates a 244List of Lists: > 245 :let nestlist = [[11, 12], [21, 22], [31, 32]] 246 247An extra comma after the last item is ignored. 248 249 250List index ~ 251 *list-index* *E684* 252An item in the List can be accessed by putting the index in square brackets 253after the List. Indexes are zero-based, thus the first item has index zero. > 254 :let item = mylist[0] " get the first item: 1 255 :let item = mylist[2] " get the third item: 3 256 257When the resulting item is a list this can be repeated: > 258 :let item = nestlist[0][1] " get the first list, second item: 12 259< 260A negative index is counted from the end. Index -1 refers to the last item in 261the List, -2 to the last but one item, etc. > 262 :let last = mylist[-1] " get the last item: "four" 263 264To avoid an error for an invalid index use the |get()| function. When an item 265is not available it returns zero or the default value you specify: > 266 :echo get(mylist, idx) 267 :echo get(mylist, idx, "NONE") 268 269 270List concatenation ~ 271 272Two lists can be concatenated with the "+" operator: > 273 :let longlist = mylist + [5, 6] 274 :let mylist += [7, 8] 275 276To prepend or append an item turn the item into a list by putting [] around 277it. To change a list in-place see |list-modification| below. 278 279 280Sublist ~ 281 *sublist* 282A part of the List can be obtained by specifying the first and last index, 283separated by a colon in square brackets: > 284 :let shortlist = mylist[2:-1] " get List [3, "four"] 285 286Omitting the first index is similar to zero. Omitting the last index is 287similar to -1. > 288 :let endlist = mylist[2:] " from item 2 to the end: [3, "four"] 289 :let shortlist = mylist[2:2] " List with one item: [3] 290 :let otherlist = mylist[:] " make a copy of the List 291 292If the first index is beyond the last item of the List or the second item is 293before the first item, the result is an empty list. There is no error 294message. 295 296If the second index is equal to or greater than the length of the list the 297length minus one is used: > 298 :let mylist = [0, 1, 2, 3] 299 :echo mylist[2:8] " result: [2, 3] 300 301NOTE: mylist[s:e] means using the variable "s:e" as index. Watch out for 302using a single letter variable before the ":". Insert a space when needed: 303mylist[s : e]. 304 305 306List identity ~ 307 *list-identity* 308When variable "aa" is a list and you assign it to another variable "bb", both 309variables refer to the same list. Thus changing the list "aa" will also 310change "bb": > 311 :let aa = [1, 2, 3] 312 :let bb = aa 313 :call add(aa, 4) 314 :echo bb 315< [1, 2, 3, 4] 316 317Making a copy of a list is done with the |copy()| function. Using [:] also 318works, as explained above. This creates a shallow copy of the list: Changing 319a list item in the list will also change the item in the copied list: > 320 :let aa = [[1, 'a'], 2, 3] 321 :let bb = copy(aa) 322 :call add(aa, 4) 323 :let aa[0][1] = 'aaa' 324 :echo aa 325< [[1, aaa], 2, 3, 4] > 326 :echo bb 327< [[1, aaa], 2, 3] 328 329To make a completely independent list use |deepcopy()|. This also makes a 330copy of the values in the list, recursively. Up to a hundred levels deep. 331 332The operator "is" can be used to check if two variables refer to the same 333List. "isnot" does the opposite. In contrast "==" compares if two lists have 334the same value. > 335 :let alist = [1, 2, 3] 336 :let blist = [1, 2, 3] 337 :echo alist is blist 338< 0 > 339 :echo alist == blist 340< 1 341 342Note about comparing lists: Two lists are considered equal if they have the 343same length and all items compare equal, as with using "==". There is one 344exception: When comparing a number with a string they are considered 345different. There is no automatic type conversion, as with using "==" on 346variables. Example: > 347 echo 4 == "4" 348< 1 > 349 echo [4] == ["4"] 350< 0 351 352Thus comparing Lists is more strict than comparing numbers and strings. You 353can compare simple values this way too by putting them in a list: > 354 355 :let a = 5 356 :let b = "5" 357 :echo a == b 358< 1 > 359 :echo [a] == [b] 360< 0 361 362 363List unpack ~ 364 365To unpack the items in a list to individual variables, put the variables in 366square brackets, like list items: > 367 :let [var1, var2] = mylist 368 369When the number of variables does not match the number of items in the list 370this produces an error. To handle any extra items from the list append ";" 371and a variable name: > 372 :let [var1, var2; rest] = mylist 373 374This works like: > 375 :let var1 = mylist[0] 376 :let var2 = mylist[1] 377 :let rest = mylist[2:] 378 379Except that there is no error if there are only two items. "rest" will be an 380empty list then. 381 382 383List modification ~ 384 *list-modification* 385To change a specific item of a list use |:let| this way: > 386 :let list[4] = "four" 387 :let listlist[0][3] = item 388 389To change part of a list you can specify the first and last item to be 390modified. The value must at least have the number of items in the range: > 391 :let list[3:5] = [3, 4, 5] 392 393Adding and removing items from a list is done with functions. Here are a few 394examples: > 395 :call insert(list, 'a') " prepend item 'a' 396 :call insert(list, 'a', 3) " insert item 'a' before list[3] 397 :call add(list, "new") " append String item 398 :call add(list, [1, 2]) " append a List as one new item 399 :call extend(list, [1, 2]) " extend the list with two more items 400 :let i = remove(list, 3) " remove item 3 401 :unlet list[3] " idem 402 :let l = remove(list, 3, -1) " remove items 3 to last item 403 :unlet list[3 : ] " idem 404 :call filter(list, 'v:val !~ "x"') " remove items with an 'x' 405 406Changing the order of items in a list: > 407 :call sort(list) " sort a list alphabetically 408 :call reverse(list) " reverse the order of items 409 :call uniq(sort(list)) " sort and remove duplicates 410 411 412For loop ~ 413 414The |:for| loop executes commands for each item in a list. A variable is set 415to each item in the list in sequence. Example: > 416 :for item in mylist 417 : call Doit(item) 418 :endfor 419 420This works like: > 421 :let index = 0 422 :while index < len(mylist) 423 : let item = mylist[index] 424 : :call Doit(item) 425 : let index = index + 1 426 :endwhile 427 428If all you want to do is modify each item in the list then the |map()| 429function will be a simpler method than a for loop. 430 431Just like the |:let| command, |:for| also accepts a list of variables. This 432requires the argument to be a list of lists. > 433 :for [lnum, col] in [[1, 3], [2, 8], [3, 0]] 434 : call Doit(lnum, col) 435 :endfor 436 437This works like a |:let| command is done for each list item. Again, the types 438must remain the same to avoid an error. 439 440It is also possible to put remaining items in a List variable: > 441 :for [i, j; rest] in listlist 442 : call Doit(i, j) 443 : if !empty(rest) 444 : echo "remainder: " . string(rest) 445 : endif 446 :endfor 447 448 449List functions ~ 450 *E714* 451Functions that are useful with a List: > 452 :let r = call(funcname, list) " call a function with an argument list 453 :if empty(list) " check if list is empty 454 :let l = len(list) " number of items in list 455 :let big = max(list) " maximum value in list 456 :let small = min(list) " minimum value in list 457 :let xs = count(list, 'x') " count nr of times 'x' appears in list 458 :let i = index(list, 'x') " index of first 'x' in list 459 :let lines = getline(1, 10) " get ten text lines from buffer 460 :call append('$', lines) " append text lines in buffer 461 :let list = split("a b c") " create list from items in a string 462 :let string = join(list, ', ') " create string from list items 463 :let s = string(list) " String representation of list 464 :call map(list, '">> " . v:val') " prepend ">> " to each item 465 466Don't forget that a combination of features can make things simple. For 467example, to add up all the numbers in a list: > 468 :exe 'let sum = ' . join(nrlist, '+') 469 470 4711.4 Dictionaries ~ 472 *dict* *Dict* *Dictionaries* *Dictionary* 473A Dictionary is an associative array: Each entry has a key and a value. The 474entry can be located with the key. The entries are stored without a specific 475ordering. 476 477 478Dictionary creation ~ 479 *E720* *E721* *E722* *E723* 480A Dictionary is created with a comma separated list of entries in curly 481braces. Each entry has a key and a value, separated by a colon. Each key can 482only appear once. Examples: > 483 :let mydict = {1: 'one', 2: 'two', 3: 'three'} 484 :let emptydict = {} 485< *E713* *E716* *E717* 486A key is always a String. You can use a Number, it will be converted to a 487String automatically. Thus the String '4' and the number 4 will find the same 488entry. Note that the String '04' and the Number 04 are different, since the 489Number will be converted to the String '4'. The empty string can also be used 490as a key. 491 *literal-Dict* *#{}* 492To avoid having to put quotes around every key the #{} form can be used. This 493does require the key to consist only of ASCII letters, digits, '-' and '_'. 494Example: > 495 :let mydict = #{zero: 0, one_key: 1, two-key: 2, 333: 3} 496Note that 333 here is the string "333". Empty keys are not possible with #{}. 497 498A value can be any expression. Using a Dictionary for a value creates a 499nested Dictionary: > 500 :let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}} 501 502An extra comma after the last entry is ignored. 503 504 505Accessing entries ~ 506 507The normal way to access an entry is by putting the key in square brackets: > 508 :let val = mydict["one"] 509 :let mydict["four"] = 4 510 511You can add new entries to an existing Dictionary this way, unlike Lists. 512 513For keys that consist entirely of letters, digits and underscore the following 514form can be used |expr-entry|: > 515 :let val = mydict.one 516 :let mydict.four = 4 517 518Since an entry can be any type, also a List and a Dictionary, the indexing and 519key lookup can be repeated: > 520 :echo dict.key[idx].key 521 522 523Dictionary to List conversion ~ 524 525You may want to loop over the entries in a dictionary. For this you need to 526turn the Dictionary into a List and pass it to |:for|. 527 528Most often you want to loop over the keys, using the |keys()| function: > 529 :for key in keys(mydict) 530 : echo key . ': ' . mydict[key] 531 :endfor 532 533The List of keys is unsorted. You may want to sort them first: > 534 :for key in sort(keys(mydict)) 535 536To loop over the values use the |values()| function: > 537 :for v in values(mydict) 538 : echo "value: " . v 539 :endfor 540 541If you want both the key and the value use the |items()| function. It returns 542a List in which each item is a List with two items, the key and the value: > 543 :for [key, value] in items(mydict) 544 : echo key . ': ' . value 545 :endfor 546 547 548Dictionary identity ~ 549 *dict-identity* 550Just like Lists you need to use |copy()| and |deepcopy()| to make a copy of a 551Dictionary. Otherwise, assignment results in referring to the same 552Dictionary: > 553 :let onedict = {'a': 1, 'b': 2} 554 :let adict = onedict 555 :let adict['a'] = 11 556 :echo onedict['a'] 557 11 558 559Two Dictionaries compare equal if all the key-value pairs compare equal. For 560more info see |list-identity|. 561 562 563Dictionary modification ~ 564 *dict-modification* 565To change an already existing entry of a Dictionary, or to add a new entry, 566use |:let| this way: > 567 :let dict[4] = "four" 568 :let dict['one'] = item 569 570Removing an entry from a Dictionary is done with |remove()| or |:unlet|. 571Three ways to remove the entry with key "aaa" from dict: > 572 :let i = remove(dict, 'aaa') 573 :unlet dict.aaa 574 :unlet dict['aaa'] 575 576Merging a Dictionary with another is done with |extend()|: > 577 :call extend(adict, bdict) 578This extends adict with all entries from bdict. Duplicate keys cause entries 579in adict to be overwritten. An optional third argument can change this. 580Note that the order of entries in a Dictionary is irrelevant, thus don't 581expect ":echo adict" to show the items from bdict after the older entries in 582adict. 583 584Weeding out entries from a Dictionary can be done with |filter()|: > 585 :call filter(dict, 'v:val =~ "x"') 586This removes all entries from "dict" with a value not matching 'x'. 587 588 589Dictionary function ~ 590 *Dictionary-function* *self* *E725* *E862* 591When a function is defined with the "dict" attribute it can be used in a 592special way with a dictionary. Example: > 593 :function Mylen() dict 594 : return len(self.data) 595 :endfunction 596 :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")} 597 :echo mydict.len() 598 599This is like a method in object oriented programming. The entry in the 600Dictionary is a |Funcref|. The local variable "self" refers to the dictionary 601the function was invoked from. 602 603It is also possible to add a function without the "dict" attribute as a 604Funcref to a Dictionary, but the "self" variable is not available then. 605 606 *numbered-function* *anonymous-function* 607To avoid the extra name for the function it can be defined and directly 608assigned to a Dictionary in this way: > 609 :let mydict = {'data': [0, 1, 2, 3]} 610 :function mydict.len() 611 : return len(self.data) 612 :endfunction 613 :echo mydict.len() 614 615The function will then get a number and the value of dict.len is a |Funcref| 616that references this function. The function can only be used through a 617|Funcref|. It will automatically be deleted when there is no |Funcref| 618remaining that refers to it. 619 620It is not necessary to use the "dict" attribute for a numbered function. 621 622If you get an error for a numbered function, you can find out what it is with 623a trick. Assuming the function is 42, the command is: > 624 :function {42} 625 626 627Functions for Dictionaries ~ 628 *E715* 629Functions that can be used with a Dictionary: > 630 :if has_key(dict, 'foo') " TRUE if dict has entry with key "foo" 631 :if empty(dict) " TRUE if dict is empty 632 :let l = len(dict) " number of items in dict 633 :let big = max(dict) " maximum value in dict 634 :let small = min(dict) " minimum value in dict 635 :let xs = count(dict, 'x') " count nr of times 'x' appears in dict 636 :let s = string(dict) " String representation of dict 637 :call map(dict, '">> " . v:val') " prepend ">> " to each item 638 639 6401.5 Blobs ~ 641 *blob* *Blob* *Blobs* *E978* 642A Blob is a binary object. It can be used to read an image from a file and 643send it over a channel, for example. 644 645A Blob mostly behaves like a |List| of numbers, where each number has the 646value of an 8-bit byte, from 0 to 255. 647 648 649Blob creation ~ 650 651A Blob can be created with a |blob-literal|: > 652 :let b = 0zFF00ED015DAF 653Dots can be inserted between bytes (pair of hex characters) for readability, 654they don't change the value: > 655 :let b = 0zFF00.ED01.5DAF 656 657A blob can be read from a file with |readfile()| passing the {type} argument 658set to "B", for example: > 659 :let b = readfile('image.png', 'B') 660 661A blob can be read from a channel with the |ch_readblob()| function. 662 663 664Blob index ~ 665 *blob-index* *E979* 666A byte in the Blob can be accessed by putting the index in square brackets 667after the Blob. Indexes are zero-based, thus the first byte has index zero. > 668 :let myblob = 0z00112233 669 :let byte = myblob[0] " get the first byte: 0x00 670 :let byte = myblob[2] " get the third byte: 0x22 671 672A negative index is counted from the end. Index -1 refers to the last byte in 673the Blob, -2 to the last but one byte, etc. > 674 :let last = myblob[-1] " get the last byte: 0x33 675 676To avoid an error for an invalid index use the |get()| function. When an item 677is not available it returns -1 or the default value you specify: > 678 :echo get(myblob, idx) 679 :echo get(myblob, idx, 999) 680 681 682Blob iteration ~ 683 684The |:for| loop executes commands for each byte of a Blob. The loop variable is 685set to each byte in the Blob. Example: > 686 :for byte in 0z112233 687 : call Doit(byte) 688 :endfor 689This calls Doit() with 0x11, 0x22 and 0x33. 690 691 692Blob concatenation ~ 693 694Two blobs can be concatenated with the "+" operator: > 695 :let longblob = myblob + 0z4455 696 :let myblob += 0z6677 697 698To change a blob in-place see |blob-modification| below. 699 700 701Part of a blob ~ 702 703A part of the Blob can be obtained by specifying the first and last index, 704separated by a colon in square brackets: > 705 :let myblob = 0z00112233 706 :let shortblob = myblob[1:2] " get 0z1122 707 :let shortblob = myblob[2:-1] " get 0z2233 708 709Omitting the first index is similar to zero. Omitting the last index is 710similar to -1. > 711 :let endblob = myblob[2:] " from item 2 to the end: 0z2233 712 :let shortblob = myblob[2:2] " Blob with one byte: 0z22 713 :let otherblob = myblob[:] " make a copy of the Blob 714 715If the first index is beyond the last byte of the Blob or the second index is 716before the first index, the result is an empty Blob. There is no error 717message. 718 719If the second index is equal to or greater than the length of the list the 720length minus one is used: > 721 :echo myblob[2:8] " result: 0z2233 722 723 724Blob modification ~ 725 *blob-modification* 726To change a specific byte of a blob use |:let| this way: > 727 :let blob[4] = 0x44 728 729When the index is just one beyond the end of the Blob, it is appended. Any 730higher index is an error. 731 732To change a sequence of bytes the [:] notation can be used: > 733 let blob[1:3] = 0z445566 734The length of the replaced bytes must be exactly the same as the value 735provided. *E972* 736 737To change part of a blob you can specify the first and last byte to be 738modified. The value must have the same number of bytes in the range: > 739 :let blob[3:5] = 0z334455 740 741You can also use the functions |add()|, |remove()| and |insert()|. 742 743 744Blob identity ~ 745 746Blobs can be compared for equality: > 747 if blob == 0z001122 748And for equal identity: > 749 if blob is otherblob 750< *blob-identity* *E977* 751When variable "aa" is a Blob and you assign it to another variable "bb", both 752variables refer to the same Blob. Then the "is" operator returns true. 753 754When making a copy using [:] or |copy()| the values are the same, but the 755identity is different: > 756 :let blob = 0z112233 757 :let blob2 = blob 758 :echo blob == blob2 759< 1 > 760 :echo blob is blob2 761< 1 > 762 :let blob3 = blob[:] 763 :echo blob == blob3 764< 1 > 765 :echo blob is blob3 766< 0 767 768Making a copy of a Blob is done with the |copy()| function. Using [:] also 769works, as explained above. 770 771 7721.6 More about variables ~ 773 *more-variables* 774If you need to know the type of a variable or expression, use the |type()| 775function. 776 777When the '!' flag is included in the 'viminfo' option, global variables that 778start with an uppercase letter, and don't contain a lowercase letter, are 779stored in the viminfo file |viminfo-file|. 780 781When the 'sessionoptions' option contains "global", global variables that 782start with an uppercase letter and contain at least one lowercase letter are 783stored in the session file |session-file|. 784 785variable name can be stored where ~ 786my_var_6 not 787My_Var_6 session file 788MY_VAR_6 viminfo file 789 790 791It's possible to form a variable name with curly braces, see 792|curly-braces-names|. 793 794============================================================================== 7952. Expression syntax *expression-syntax* 796 797Expression syntax summary, from least to most significant: 798 799|expr1| expr2 800 expr2 ? expr1 : expr1 if-then-else 801 802|expr2| expr3 803 expr3 || expr3 ... logical OR 804 805|expr3| expr4 806 expr4 && expr4 ... logical AND 807 808|expr4| expr5 809 expr5 == expr5 equal 810 expr5 != expr5 not equal 811 expr5 > expr5 greater than 812 expr5 >= expr5 greater than or equal 813 expr5 < expr5 smaller than 814 expr5 <= expr5 smaller than or equal 815 expr5 =~ expr5 regexp matches 816 expr5 !~ expr5 regexp doesn't match 817 818 expr5 ==? expr5 equal, ignoring case 819 expr5 ==# expr5 equal, match case 820 etc. As above, append ? for ignoring case, # for 821 matching case 822 823 expr5 is expr5 same |List|, |Dictionary| or |Blob| instance 824 expr5 isnot expr5 different |List|, |Dictionary| or |Blob| 825 instance 826 827|expr5| expr6 828 expr6 + expr6 ... number addition, list or blob concatenation 829 expr6 - expr6 ... number subtraction 830 expr6 . expr6 ... string concatenation 831 expr6 .. expr6 ... string concatenation 832 833|expr6| expr7 834 expr7 * expr7 ... number multiplication 835 expr7 / expr7 ... number division 836 expr7 % expr7 ... number modulo 837 838|expr7| expr8 839 ! expr7 logical NOT 840 - expr7 unary minus 841 + expr7 unary plus 842 843|expr8| expr9 844 expr8[expr1] byte of a String or item of a |List| 845 expr8[expr1 : expr1] substring of a String or sublist of a |List| 846 expr8.name entry in a |Dictionary| 847 expr8(expr1, ...) function call with |Funcref| variable 848 expr8->name(expr1, ...) |method| call 849 850|expr9| number number constant 851 "string" string constant, backslash is special 852 'string' string constant, ' is doubled 853 [expr1, ...] |List| 854 {expr1: expr1, ...} |Dictionary| 855 #{key: expr1, ...} |Dictionary| 856 &option option value 857 (expr1) nested expression 858 variable internal variable 859 va{ria}ble internal variable with curly braces 860 $VAR environment variable 861 @r contents of register 'r' 862 function(expr1, ...) function call 863 func{ti}on(expr1, ...) function call with curly braces 864 {args -> expr1} lambda expression 865 866 867"..." indicates that the operations in this level can be concatenated. 868Example: > 869 &nu || &list && &shell == "csh" 870 871All expressions within one level are parsed from left to right. 872 873 874expr1 *expr1* *E109* 875----- 876 877expr2 ? expr1 : expr1 878 879The expression before the '?' is evaluated to a number. If it evaluates to 880|TRUE|, the result is the value of the expression between the '?' and ':', 881otherwise the result is the value of the expression after the ':'. 882Example: > 883 :echo lnum == 1 ? "top" : lnum 884 885Since the first expression is an "expr2", it cannot contain another ?:. The 886other two expressions can, thus allow for recursive use of ?:. 887Example: > 888 :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum 889 890To keep this readable, using |line-continuation| is suggested: > 891 :echo lnum == 1 892 :\ ? "top" 893 :\ : lnum == 1000 894 :\ ? "last" 895 :\ : lnum 896 897You should always put a space before the ':', otherwise it can be mistaken for 898use in a variable such as "a:1". 899 900 901expr2 and expr3 *expr2* *expr3* 902--------------- 903 904expr3 || expr3 .. logical OR *expr-barbar* 905expr4 && expr4 .. logical AND *expr-&&* 906 907The "||" and "&&" operators take one argument on each side. The arguments 908are (converted to) Numbers. The result is: 909 910 input output ~ 911n1 n2 n1 || n2 n1 && n2 ~ 912|FALSE| |FALSE| |FALSE| |FALSE| 913|FALSE| |TRUE| |TRUE| |FALSE| 914|TRUE| |FALSE| |TRUE| |FALSE| 915|TRUE| |TRUE| |TRUE| |TRUE| 916 917The operators can be concatenated, for example: > 918 919 &nu || &list && &shell == "csh" 920 921Note that "&&" takes precedence over "||", so this has the meaning of: > 922 923 &nu || (&list && &shell == "csh") 924 925Once the result is known, the expression "short-circuits", that is, further 926arguments are not evaluated. This is like what happens in C. For example: > 927 928 let a = 1 929 echo a || b 930 931This is valid even if there is no variable called "b" because "a" is |TRUE|, 932so the result must be |TRUE|. Similarly below: > 933 934 echo exists("b") && b == "yes" 935 936This is valid whether "b" has been defined or not. The second clause will 937only be evaluated if "b" has been defined. 938 939 940expr4 *expr4* 941----- 942 943expr5 {cmp} expr5 944 945Compare two expr5 expressions, resulting in a 0 if it evaluates to false, or 1 946if it evaluates to true. 947 948 *expr-==* *expr-!=* *expr->* *expr->=* 949 *expr-<* *expr-<=* *expr-=~* *expr-!~* 950 *expr-==#* *expr-!=#* *expr->#* *expr->=#* 951 *expr-<#* *expr-<=#* *expr-=~#* *expr-!~#* 952 *expr-==?* *expr-!=?* *expr->?* *expr->=?* 953 *expr-<?* *expr-<=?* *expr-=~?* *expr-!~?* 954 *expr-is* *expr-isnot* *expr-is#* *expr-isnot#* 955 *expr-is?* *expr-isnot?* 956 use 'ignorecase' match case ignore case ~ 957equal == ==# ==? 958not equal != !=# !=? 959greater than > ># >? 960greater than or equal >= >=# >=? 961smaller than < <# <? 962smaller than or equal <= <=# <=? 963regexp matches =~ =~# =~? 964regexp doesn't match !~ !~# !~? 965same instance is is# is? 966different instance isnot isnot# isnot? 967 968Examples: 969"abc" ==# "Abc" evaluates to 0 970"abc" ==? "Abc" evaluates to 1 971"abc" == "Abc" evaluates to 1 if 'ignorecase' is set, 0 otherwise 972 973 *E691* *E692* 974A |List| can only be compared with a |List| and only "equal", "not equal", 975"is" and "isnot" can be used. This compares the values of the list, 976recursively. Ignoring case means case is ignored when comparing item values. 977 978 *E735* *E736* 979A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not 980equal", "is" and "isnot" can be used. This compares the key/values of the 981|Dictionary| recursively. Ignoring case means case is ignored when comparing 982item values. 983 984 *E694* 985A |Funcref| can only be compared with a |Funcref| and only "equal", "not 986equal", "is" and "isnot" can be used. Case is never ignored. Whether 987arguments or a Dictionary are bound (with a partial) matters. The 988Dictionaries must also be equal (or the same, in case of "is") and the 989arguments must be equal (or the same). 990 991To compare Funcrefs to see if they refer to the same function, ignoring bound 992Dictionary and arguments, use |get()| to get the function name: > 993 if get(Part1, 'name') == get(Part2, 'name') 994 " Part1 and Part2 refer to the same function 995 996Using "is" or "isnot" with a |List|, |Dictionary| or |Blob| checks whether 997the expressions are referring to the same |List|, |Dictionary| or |Blob| 998instance. A copy of a |List| is different from the original |List|. When 999using "is" without a |List|, |Dictionary| or |Blob|, it is equivalent to 1000using "equal", using "isnot" equivalent to using "not equal". Except that 1001a different type means the values are different: > 1002 echo 4 == '4' 1003 1 1004 echo 4 is '4' 1005 0 1006 echo 0 is [] 1007 0 1008"is#"/"isnot#" and "is?"/"isnot?" can be used to match and ignore case. 1009 1010When comparing a String with a Number, the String is converted to a Number, 1011and the comparison is done on Numbers. This means that: > 1012 echo 0 == 'x' 1013 1 1014because 'x' converted to a Number is zero. However: > 1015 echo [0] == ['x'] 1016 0 1017Inside a List or Dictionary this conversion is not used. 1018 1019When comparing two Strings, this is done with strcmp() or stricmp(). This 1020results in the mathematical difference (comparing byte values), not 1021necessarily the alphabetical difference in the local language. 1022 1023When using the operators with a trailing '#', or the short version and 1024'ignorecase' is off, the comparing is done with strcmp(): case matters. 1025 1026When using the operators with a trailing '?', or the short version and 1027'ignorecase' is set, the comparing is done with stricmp(): case is ignored. 1028 1029'smartcase' is not used. 1030 1031The "=~" and "!~" operators match the lefthand argument with the righthand 1032argument, which is used as a pattern. See |pattern| for what a pattern is. 1033This matching is always done like 'magic' was set and 'cpoptions' is empty, no 1034matter what the actual value of 'magic' or 'cpoptions' is. This makes scripts 1035portable. To avoid backslashes in the regexp pattern to be doubled, use a 1036single-quote string, see |literal-string|. 1037Since a string is considered to be a single line, a multi-line pattern 1038(containing \n, backslash-n) will not match. However, a literal NL character 1039can be matched like an ordinary character. Examples: 1040 "foo\nbar" =~ "\n" evaluates to 1 1041 "foo\nbar" =~ "\\n" evaluates to 0 1042 1043 1044expr5 and expr6 *expr5* *expr6* 1045--------------- 1046expr6 + expr6 Number addition, |List| or |Blob| concatenation *expr-+* 1047expr6 - expr6 Number subtraction *expr--* 1048expr6 . expr6 String concatenation *expr-.* 1049expr6 .. expr6 String concatenation *expr-..* 1050 1051For |Lists| only "+" is possible and then both expr6 must be a list. The 1052result is a new list with the two lists Concatenated. 1053 1054For String concatenation ".." is preferred, since "." is ambiguous, it is also 1055used for |Dict| member access and floating point numbers. 1056When |vimscript-version| is 2 or higher, using "." is not allowed. 1057 1058expr7 * expr7 Number multiplication *expr-star* 1059expr7 / expr7 Number division *expr-/* 1060expr7 % expr7 Number modulo *expr-%* 1061 1062For all, except "." and "..", Strings are converted to Numbers. 1063For bitwise operators see |and()|, |or()| and |xor()|. 1064 1065Note the difference between "+" and ".": 1066 "123" + "456" = 579 1067 "123" . "456" = "123456" 1068 1069Since '.' has the same precedence as '+' and '-', you need to read: > 1070 1 . 90 + 90.0 1071As: > 1072 (1 . 90) + 90.0 1073That works, since the String "190" is automatically converted to the Number 1074190, which can be added to the Float 90.0. However: > 1075 1 . 90 * 90.0 1076Should be read as: > 1077 1 . (90 * 90.0) 1078Since '.' has lower precedence than '*'. This does NOT work, since this 1079attempts to concatenate a Float and a String. 1080 1081When dividing a Number by zero the result depends on the value: 1082 0 / 0 = -0x80000000 (like NaN for Float) 1083 >0 / 0 = 0x7fffffff (like positive infinity) 1084 <0 / 0 = -0x7fffffff (like negative infinity) 1085 (before Vim 7.2 it was always 0x7fffffff) 1086 1087When 64-bit Number support is enabled: 1088 0 / 0 = -0x8000000000000000 (like NaN for Float) 1089 >0 / 0 = 0x7fffffffffffffff (like positive infinity) 1090 <0 / 0 = -0x7fffffffffffffff (like negative infinity) 1091 1092When the righthand side of '%' is zero, the result is 0. 1093 1094None of these work for |Funcref|s. 1095 1096. and % do not work for Float. *E804* 1097 1098 1099expr7 *expr7* 1100----- 1101! expr7 logical NOT *expr-!* 1102- expr7 unary minus *expr-unary--* 1103+ expr7 unary plus *expr-unary-+* 1104 1105For '!' |TRUE| becomes |FALSE|, |FALSE| becomes |TRUE| (one). 1106For '-' the sign of the number is changed. 1107For '+' the number is unchanged. 1108 1109A String will be converted to a Number first. 1110 1111These three can be repeated and mixed. Examples: 1112 !-1 == 0 1113 !!8 == 1 1114 --9 == 9 1115 1116 1117expr8 *expr8* 1118----- 1119This expression is either |expr9| or a sequence of the alternatives below, 1120in any order. E.g., these are all possible: 1121 expr8[expr1].name 1122 expr8.name[expr1] 1123 expr8(expr1, ...)[expr1].name 1124 expr8->(expr1, ...)[expr1] 1125Evaluation is always from left to right. 1126 1127expr8[expr1] item of String or |List| *expr-[]* *E111* 1128 *E909* *subscript* 1129If expr8 is a Number or String this results in a String that contains the 1130expr1'th single byte from expr8. expr8 is used as a String, expr1 as a 1131Number. This doesn't recognize multi-byte encodings, see `byteidx()` for 1132an alternative, or use `split()` to turn the string into a list of characters. 1133 1134Index zero gives the first byte. This is like it works in C. Careful: 1135text column numbers start with one! Example, to get the byte under the 1136cursor: > 1137 :let c = getline(".")[col(".") - 1] 1138 1139If the length of the String is less than the index, the result is an empty 1140String. A negative index always results in an empty string (reason: backward 1141compatibility). Use [-1:] to get the last byte. 1142 1143If expr8 is a |List| then it results the item at index expr1. See |list-index| 1144for possible index values. If the index is out of range this results in an 1145error. Example: > 1146 :let item = mylist[-1] " get last item 1147 1148Generally, if a |List| index is equal to or higher than the length of the 1149|List|, or more negative than the length of the |List|, this results in an 1150error. 1151 1152 1153expr8[expr1a : expr1b] substring or sublist *expr-[:]* 1154 1155If expr8 is a Number or String this results in the substring with the bytes 1156from expr1a to and including expr1b. expr8 is used as a String, expr1a and 1157expr1b are used as a Number. This doesn't recognize multi-byte encodings, see 1158|byteidx()| for computing the indexes. 1159 1160If expr1a is omitted zero is used. If expr1b is omitted the length of the 1161string minus one is used. 1162 1163A negative number can be used to measure from the end of the string. -1 is 1164the last character, -2 the last but one, etc. 1165 1166If an index goes out of range for the string characters are omitted. If 1167expr1b is smaller than expr1a the result is an empty string. 1168 1169Examples: > 1170 :let c = name[-1:] " last byte of a string 1171 :let c = name[-2:-2] " last but one byte of a string 1172 :let s = line(".")[4:] " from the fifth byte to the end 1173 :let s = s[:-3] " remove last two bytes 1174< 1175 *slice* 1176If expr8 is a |List| this results in a new |List| with the items indicated by 1177the indexes expr1a and expr1b. This works like with a String, as explained 1178just above. Also see |sublist| below. Examples: > 1179 :let l = mylist[:3] " first four items 1180 :let l = mylist[4:4] " List with one item 1181 :let l = mylist[:] " shallow copy of a List 1182 1183If expr8 is a |Blob| this results in a new |Blob| with the bytes in the 1184indexes expr1a and expr1b, inclusive. Examples: > 1185 :let b = 0zDEADBEEF 1186 :let bs = b[1:2] " 0zADBE 1187 :let bs = b[:] " copy of 0zDEADBEEF 1188 1189Using expr8[expr1] or expr8[expr1a : expr1b] on a |Funcref| results in an 1190error. 1191 1192Watch out for confusion between a namespace and a variable followed by a colon 1193for a sublist: > 1194 mylist[n:] " uses variable n 1195 mylist[s:] " uses namespace s:, error! 1196 1197 1198expr8.name entry in a |Dictionary| *expr-entry* 1199 1200If expr8 is a |Dictionary| and it is followed by a dot, then the following 1201name will be used as a key in the |Dictionary|. This is just like: 1202expr8[name]. 1203 1204The name must consist of alphanumeric characters, just like a variable name, 1205but it may start with a number. Curly braces cannot be used. 1206 1207There must not be white space before or after the dot. 1208 1209Examples: > 1210 :let dict = {"one": 1, 2: "two"} 1211 :echo dict.one " shows "1" 1212 :echo dict.2 " shows "two" 1213 :echo dict .2 " error because of space before the dot 1214 1215Note that the dot is also used for String concatenation. To avoid confusion 1216always put spaces around the dot for String concatenation. 1217 1218 1219expr8(expr1, ...) |Funcref| function call 1220 1221When expr8 is a |Funcref| type variable, invoke the function it refers to. 1222 1223 1224expr8->name([args]) method call *method* *->* 1225expr8->{lambda}([args]) 1226 *E276* 1227For methods that are also available as global functions this is the same as: > 1228 name(expr8 [, args]) 1229There can also be methods specifically for the type of "expr8". 1230 1231This allows for chaining, passing the value that one method returns to the 1232next method: > 1233 mylist->filter(filterexpr)->map(mapexpr)->sort()->join() 1234< 1235Example of using a lambda: > 1236 GetPercentage()->{x -> x * 100}()->printf('%d%%') 1237< 1238When using -> the |expr7| operators will be applied first, thus: > 1239 -1.234->string() 1240Is equivalent to: > 1241 (-1.234)->string() 1242And NOT: > 1243 -(1.234->string()) 1244< 1245 *E274* 1246"->name(" must not contain white space. There can be white space before the 1247"->" and after the "(", thus you can split the lines like this: > 1248 mylist 1249 \ ->filter(filterexpr) 1250 \ ->map(mapexpr) 1251 \ ->sort() 1252 \ ->join() 1253 1254When using the lambda form there must be no white space between the } and the 1255(. 1256 1257 1258 *expr9* 1259number 1260------ 1261number number constant *expr-number* 1262 *hex-number* *octal-number* *binary-number* 1263 1264Decimal, Hexadecimal (starting with 0x or 0X), Binary (starting with 0b or 0B) 1265and Octal (starting with 0). 1266 1267 *floating-point-format* 1268Floating point numbers can be written in two forms: 1269 1270 [-+]{N}.{M} 1271 [-+]{N}.{M}[eE][-+]{exp} 1272 1273{N} and {M} are numbers. Both {N} and {M} must be present and can only 1274contain digits. 1275[-+] means there is an optional plus or minus sign. 1276{exp} is the exponent, power of 10. 1277Only a decimal point is accepted, not a comma. No matter what the current 1278locale is. 1279{only when compiled with the |+float| feature} 1280 1281Examples: 1282 123.456 1283 +0.0001 1284 55.0 1285 -0.123 1286 1.234e03 1287 1.0E-6 1288 -3.1416e+88 1289 1290These are INVALID: 1291 3. empty {M} 1292 1e40 missing .{M} 1293 1294Rationale: 1295Before floating point was introduced, the text "123.456" was interpreted as 1296the two numbers "123" and "456", both converted to a string and concatenated, 1297resulting in the string "123456". Since this was considered pointless, and we 1298could not find it intentionally being used in Vim scripts, this backwards 1299incompatibility was accepted in favor of being able to use the normal notation 1300for floating point numbers. 1301 1302 *float-pi* *float-e* 1303A few useful values to copy&paste: > 1304 :let pi = 3.14159265359 1305 :let e = 2.71828182846 1306Or, if you don't want to write them in as floating-point literals, you can 1307also use functions, like the following: > 1308 :let pi = acos(-1.0) 1309 :let e = exp(1.0) 1310< 1311 *floating-point-precision* 1312The precision and range of floating points numbers depends on what "double" 1313means in the library Vim was compiled with. There is no way to change this at 1314runtime. 1315 1316The default for displaying a |Float| is to use 6 decimal places, like using 1317printf("%g", f). You can select something else when using the |printf()| 1318function. Example: > 1319 :echo printf('%.15e', atan(1)) 1320< 7.853981633974483e-01 1321 1322 1323 1324string *string* *String* *expr-string* *E114* 1325------ 1326"string" string constant *expr-quote* 1327 1328Note that double quotes are used. 1329 1330A string constant accepts these special characters: 1331\... three-digit octal number (e.g., "\316") 1332\.. two-digit octal number (must be followed by non-digit) 1333\. one-digit octal number (must be followed by non-digit) 1334\x.. byte specified with two hex numbers (e.g., "\x1f") 1335\x. byte specified with one hex number (must be followed by non-hex char) 1336\X.. same as \x.. 1337\X. same as \x. 1338\u.... character specified with up to 4 hex numbers, stored according to the 1339 current value of 'encoding' (e.g., "\u02a4") 1340\U.... same as \u but allows up to 8 hex numbers. 1341\b backspace <BS> 1342\e escape <Esc> 1343\f formfeed <FF> 1344\n newline <NL> 1345\r return <CR> 1346\t tab <Tab> 1347\\ backslash 1348\" double quote 1349\<xxx> Special key named "xxx". e.g. "\<C-W>" for CTRL-W. This is for use 1350 in mappings, the 0x80 byte is escaped. 1351 To use the double quote character it must be escaped: "<M-\">". 1352 Don't use <Char-xxxx> to get a utf-8 character, use \uxxxx as 1353 mentioned above. 1354 1355Note that "\xff" is stored as the byte 255, which may be invalid in some 1356encodings. Use "\u00ff" to store character 255 according to the current value 1357of 'encoding'. 1358 1359Note that "\000" and "\x00" force the end of the string. 1360 1361 1362blob-literal *blob-literal* *E973* 1363------------ 1364 1365Hexadecimal starting with 0z or 0Z, with an arbitrary number of bytes. 1366The sequence must be an even number of hex characters. Example: > 1367 :let b = 0zFF00ED015DAF 1368 1369 1370literal-string *literal-string* *E115* 1371--------------- 1372'string' string constant *expr-'* 1373 1374Note that single quotes are used. 1375 1376This string is taken as it is. No backslashes are removed or have a special 1377meaning. The only exception is that two quotes stand for one quote. 1378 1379Single quoted strings are useful for patterns, so that backslashes do not need 1380to be doubled. These two commands are equivalent: > 1381 if a =~ "\\s*" 1382 if a =~ '\s*' 1383 1384 1385option *expr-option* *E112* *E113* 1386------ 1387&option option value, local value if possible 1388&g:option global option value 1389&l:option local option value 1390 1391Examples: > 1392 echo "tabstop is " . &tabstop 1393 if &insertmode 1394 1395Any option name can be used here. See |options|. When using the local value 1396and there is no buffer-local or window-local value, the global value is used 1397anyway. 1398 1399 1400register *expr-register* *@r* 1401-------- 1402@r contents of register 'r' 1403 1404The result is the contents of the named register, as a single string. 1405Newlines are inserted where required. To get the contents of the unnamed 1406register use @" or @@. See |registers| for an explanation of the available 1407registers. 1408 1409When using the '=' register you get the expression itself, not what it 1410evaluates to. Use |eval()| to evaluate it. 1411 1412 1413nesting *expr-nesting* *E110* 1414------- 1415(expr1) nested expression 1416 1417 1418environment variable *expr-env* 1419-------------------- 1420$VAR environment variable 1421 1422The String value of any environment variable. When it is not defined, the 1423result is an empty string. 1424 1425The functions `getenv()` and `setenv()` can also be used and work for 1426environment variables with non-alphanumeric names. 1427The function `environ()` can be used to get a Dict with all environment 1428variables. 1429 1430 1431 *expr-env-expand* 1432Note that there is a difference between using $VAR directly and using 1433expand("$VAR"). Using it directly will only expand environment variables that 1434are known inside the current Vim session. Using expand() will first try using 1435the environment variables known inside the current Vim session. If that 1436fails, a shell will be used to expand the variable. This can be slow, but it 1437does expand all variables that the shell knows about. Example: > 1438 :echo $shell 1439 :echo expand("$shell") 1440The first one probably doesn't echo anything, the second echoes the $shell 1441variable (if your shell supports it). 1442 1443 1444internal variable *expr-variable* 1445----------------- 1446variable internal variable 1447See below |internal-variables|. 1448 1449 1450function call *expr-function* *E116* *E118* *E119* *E120* 1451------------- 1452function(expr1, ...) function call 1453See below |functions|. 1454 1455 1456lambda expression *expr-lambda* *lambda* 1457----------------- 1458{args -> expr1} lambda expression 1459 1460A lambda expression creates a new unnamed function which returns the result of 1461evaluating |expr1|. Lambda expressions differ from |user-functions| in 1462the following ways: 1463 14641. The body of the lambda expression is an |expr1| and not a sequence of |Ex| 1465 commands. 14662. The prefix "a:" should not be used for arguments. E.g.: > 1467 :let F = {arg1, arg2 -> arg1 - arg2} 1468 :echo F(5, 2) 1469< 3 1470 1471The arguments are optional. Example: > 1472 :let F = {-> 'error function'} 1473 :echo F() 1474< error function 1475 *closure* 1476Lambda expressions can access outer scope variables and arguments. This is 1477often called a closure. Example where "i" and "a:arg" are used in a lambda 1478while they already exist in the function scope. They remain valid even after 1479the function returns: > 1480 :function Foo(arg) 1481 : let i = 3 1482 : return {x -> x + i - a:arg} 1483 :endfunction 1484 :let Bar = Foo(4) 1485 :echo Bar(6) 1486< 5 1487 1488Note that the variables must exist in the outer scope before the lamba is 1489defined for this to work. See also |:func-closure|. 1490 1491Lambda and closure support can be checked with: > 1492 if has('lambda') 1493 1494Examples for using a lambda expression with |sort()|, |map()| and |filter()|: > 1495 :echo map([1, 2, 3], {idx, val -> val + 1}) 1496< [2, 3, 4] > 1497 :echo sort([3,7,2,1,4], {a, b -> a - b}) 1498< [1, 2, 3, 4, 7] 1499 1500The lambda expression is also useful for Channel, Job and timer: > 1501 :let timer = timer_start(500, 1502 \ {-> execute("echo 'Handler called'", "")}, 1503 \ {'repeat': 3}) 1504< Handler called 1505 Handler called 1506 Handler called 1507 1508Note how execute() is used to execute an Ex command. That's ugly though. 1509 1510 1511Lambda expressions have internal names like '<lambda>42'. If you get an error 1512for a lambda expression, you can find what it is with the following command: > 1513 :function {'<lambda>42'} 1514See also: |numbered-function| 1515 1516============================================================================== 15173. Internal variable *internal-variables* *E461* 1518 1519An internal variable name can be made up of letters, digits and '_'. But it 1520cannot start with a digit. It's also possible to use curly braces, see 1521|curly-braces-names|. 1522 1523An internal variable is created with the ":let" command |:let|. 1524An internal variable is explicitly destroyed with the ":unlet" command 1525|:unlet|. 1526Using a name that is not an internal variable or refers to a variable that has 1527been destroyed results in an error. 1528 1529There are several name spaces for variables. Which one is to be used is 1530specified by what is prepended: 1531 1532 (nothing) In a function: local to a function; otherwise: global 1533|buffer-variable| b: Local to the current buffer. 1534|window-variable| w: Local to the current window. 1535|tabpage-variable| t: Local to the current tab page. 1536|global-variable| g: Global. 1537|local-variable| l: Local to a function. 1538|script-variable| s: Local to a |:source|'ed Vim script. 1539|function-argument| a: Function argument (only inside a function). 1540|vim-variable| v: Global, predefined by Vim. 1541 1542The scope name by itself can be used as a |Dictionary|. For example, to 1543delete all script-local variables: > 1544 :for k in keys(s:) 1545 : unlet s:[k] 1546 :endfor 1547< 1548 *buffer-variable* *b:var* *b:* 1549A variable name that is preceded with "b:" is local to the current buffer. 1550Thus you can have several "b:foo" variables, one for each buffer. 1551This kind of variable is deleted when the buffer is wiped out or deleted with 1552|:bdelete|. 1553 1554One local buffer variable is predefined: 1555 *b:changedtick* *changetick* 1556b:changedtick The total number of changes to the current buffer. It is 1557 incremented for each change. An undo command is also a change 1558 in this case. Resetting 'modified' when writing the buffer is 1559 also counted. 1560 This can be used to perform an action only when the buffer has 1561 changed. Example: > 1562 :if my_changedtick != b:changedtick 1563 : let my_changedtick = b:changedtick 1564 : call My_Update() 1565 :endif 1566< You cannot change or delete the b:changedtick variable. 1567 1568 *window-variable* *w:var* *w:* 1569A variable name that is preceded with "w:" is local to the current window. It 1570is deleted when the window is closed. 1571 1572 *tabpage-variable* *t:var* *t:* 1573A variable name that is preceded with "t:" is local to the current tab page, 1574It is deleted when the tab page is closed. {not available when compiled 1575without the |+windows| feature} 1576 1577 *global-variable* *g:var* *g:* 1578Inside functions global variables are accessed with "g:". Omitting this will 1579access a variable local to a function. But "g:" can also be used in any other 1580place if you like. 1581 1582 *local-variable* *l:var* *l:* 1583Inside functions local variables are accessed without prepending anything. 1584But you can also prepend "l:" if you like. However, without prepending "l:" 1585you may run into reserved variable names. For example "count". By itself it 1586refers to "v:count". Using "l:count" you can have a local variable with the 1587same name. 1588 1589 *script-variable* *s:var* 1590In a Vim script variables starting with "s:" can be used. They cannot be 1591accessed from outside of the scripts, thus are local to the script. 1592 1593They can be used in: 1594- commands executed while the script is sourced 1595- functions defined in the script 1596- autocommands defined in the script 1597- functions and autocommands defined in functions and autocommands which were 1598 defined in the script (recursively) 1599- user defined commands defined in the script 1600Thus not in: 1601- other scripts sourced from this one 1602- mappings 1603- menus 1604- etc. 1605 1606Script variables can be used to avoid conflicts with global variable names. 1607Take this example: > 1608 1609 let s:counter = 0 1610 function MyCounter() 1611 let s:counter = s:counter + 1 1612 echo s:counter 1613 endfunction 1614 command Tick call MyCounter() 1615 1616You can now invoke "Tick" from any script, and the "s:counter" variable in 1617that script will not be changed, only the "s:counter" in the script where 1618"Tick" was defined is used. 1619 1620Another example that does the same: > 1621 1622 let s:counter = 0 1623 command Tick let s:counter = s:counter + 1 | echo s:counter 1624 1625When calling a function and invoking a user-defined command, the context for 1626script variables is set to the script where the function or command was 1627defined. 1628 1629The script variables are also available when a function is defined inside a 1630function that is defined in a script. Example: > 1631 1632 let s:counter = 0 1633 function StartCounting(incr) 1634 if a:incr 1635 function MyCounter() 1636 let s:counter = s:counter + 1 1637 endfunction 1638 else 1639 function MyCounter() 1640 let s:counter = s:counter - 1 1641 endfunction 1642 endif 1643 endfunction 1644 1645This defines the MyCounter() function either for counting up or counting down 1646when calling StartCounting(). It doesn't matter from where StartCounting() is 1647called, the s:counter variable will be accessible in MyCounter(). 1648 1649When the same script is sourced again it will use the same script variables. 1650They will remain valid as long as Vim is running. This can be used to 1651maintain a counter: > 1652 1653 if !exists("s:counter") 1654 let s:counter = 1 1655 echo "script executed for the first time" 1656 else 1657 let s:counter = s:counter + 1 1658 echo "script executed " . s:counter . " times now" 1659 endif 1660 1661Note that this means that filetype plugins don't get a different set of script 1662variables for each buffer. Use local buffer variables instead |b:var|. 1663 1664 1665PREDEFINED VIM VARIABLES *vim-variable* *v:var* *v:* 1666 *E963* 1667Some variables can be set by the user, but the type cannot be changed. 1668 1669 *v:argv* *argv-variable* 1670v:argv The command line arguments Vim was invoked with. This is a 1671 list of strings. The first item is the Vim command. 1672 1673 *v:beval_col* *beval_col-variable* 1674v:beval_col The number of the column, over which the mouse pointer is. 1675 This is the byte index in the |v:beval_lnum| line. 1676 Only valid while evaluating the 'balloonexpr' option. 1677 1678 *v:beval_bufnr* *beval_bufnr-variable* 1679v:beval_bufnr The number of the buffer, over which the mouse pointer is. Only 1680 valid while evaluating the 'balloonexpr' option. 1681 1682 *v:beval_lnum* *beval_lnum-variable* 1683v:beval_lnum The number of the line, over which the mouse pointer is. Only 1684 valid while evaluating the 'balloonexpr' option. 1685 1686 *v:beval_text* *beval_text-variable* 1687v:beval_text The text under or after the mouse pointer. Usually a word as 1688 it is useful for debugging a C program. 'iskeyword' applies, 1689 but a dot and "->" before the position is included. When on a 1690 ']' the text before it is used, including the matching '[' and 1691 word before it. When on a Visual area within one line the 1692 highlighted text is used. Also see |<cexpr>|. 1693 Only valid while evaluating the 'balloonexpr' option. 1694 1695 *v:beval_winnr* *beval_winnr-variable* 1696v:beval_winnr The number of the window, over which the mouse pointer is. Only 1697 valid while evaluating the 'balloonexpr' option. The first 1698 window has number zero (unlike most other places where a 1699 window gets a number). 1700 1701 *v:beval_winid* *beval_winid-variable* 1702v:beval_winid The |window-ID| of the window, over which the mouse pointer 1703 is. Otherwise like v:beval_winnr. 1704 1705 *v:char* *char-variable* 1706v:char Argument for evaluating 'formatexpr' and used for the typed 1707 character when using <expr> in an abbreviation |:map-<expr>|. 1708 It is also used by the |InsertCharPre| and |InsertEnter| events. 1709 1710 *v:charconvert_from* *charconvert_from-variable* 1711v:charconvert_from 1712 The name of the character encoding of a file to be converted. 1713 Only valid while evaluating the 'charconvert' option. 1714 1715 *v:charconvert_to* *charconvert_to-variable* 1716v:charconvert_to 1717 The name of the character encoding of a file after conversion. 1718 Only valid while evaluating the 'charconvert' option. 1719 1720 *v:cmdarg* *cmdarg-variable* 1721v:cmdarg This variable is used for two purposes: 1722 1. The extra arguments given to a file read/write command. 1723 Currently these are "++enc=" and "++ff=". This variable is 1724 set before an autocommand event for a file read/write 1725 command is triggered. There is a leading space to make it 1726 possible to append this variable directly after the 1727 read/write command. Note: The "+cmd" argument isn't 1728 included here, because it will be executed anyway. 1729 2. When printing a PostScript file with ":hardcopy" this is 1730 the argument for the ":hardcopy" command. This can be used 1731 in 'printexpr'. 1732 1733 *v:cmdbang* *cmdbang-variable* 1734v:cmdbang Set like v:cmdarg for a file read/write command. When a "!" 1735 was used the value is 1, otherwise it is 0. Note that this 1736 can only be used in autocommands. For user commands |<bang>| 1737 can be used. 1738 1739 *v:completed_item* *completed_item-variable* 1740v:completed_item 1741 |Dictionary| containing the |complete-items| for the most 1742 recently completed word after |CompleteDone|. The 1743 |Dictionary| is empty if the completion failed. 1744 1745 *v:count* *count-variable* 1746v:count The count given for the last Normal mode command. Can be used 1747 to get the count before a mapping. Read-only. Example: > 1748 :map _x :<C-U>echo "the count is " . v:count<CR> 1749< Note: The <C-U> is required to remove the line range that you 1750 get when typing ':' after a count. 1751 When there are two counts, as in "3d2w", they are multiplied, 1752 just like what happens in the command, "d6w" for the example. 1753 Also used for evaluating the 'formatexpr' option. 1754 "count" also works, for backwards compatibility, unless 1755 |scriptversion| is 3 or higher. 1756 1757 *v:count1* *count1-variable* 1758v:count1 Just like "v:count", but defaults to one when no count is 1759 used. 1760 1761 *v:ctype* *ctype-variable* 1762v:ctype The current locale setting for characters of the runtime 1763 environment. This allows Vim scripts to be aware of the 1764 current locale encoding. Technical: it's the value of 1765 LC_CTYPE. When not using a locale the value is "C". 1766 This variable can not be set directly, use the |:language| 1767 command. 1768 See |multi-lang|. 1769 1770 *v:dying* *dying-variable* 1771v:dying Normally zero. When a deadly signal is caught it's set to 1772 one. When multiple signals are caught the number increases. 1773 Can be used in an autocommand to check if Vim didn't 1774 terminate normally. {only works on Unix} 1775 Example: > 1776 :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif 1777< Note: if another deadly signal is caught when v:dying is one, 1778 VimLeave autocommands will not be executed. 1779 1780 *v:echospace* *echospace-variable* 1781v:echospace Number of screen cells that can be used for an `:echo` message 1782 in the last screen line before causing the |hit-enter-prompt|. 1783 Depends on 'showcmd', 'ruler' and 'columns'. You need to 1784 check 'cmdheight' for whether there are full-width lines 1785 available above the last line. 1786 1787 *v:errmsg* *errmsg-variable* 1788v:errmsg Last given error message. It's allowed to set this variable. 1789 Example: > 1790 :let v:errmsg = "" 1791 :silent! next 1792 :if v:errmsg != "" 1793 : ... handle error 1794< "errmsg" also works, for backwards compatibility, unless 1795 |scriptversion| is 3 or higher. 1796 1797 *v:errors* *errors-variable* *assert-return* 1798v:errors Errors found by assert functions, such as |assert_true()|. 1799 This is a list of strings. 1800 The assert functions append an item when an assert fails. 1801 The return value indicates this: a one is returned if an item 1802 was added to v:errors, otherwise zero is returned. 1803 To remove old results make it empty: > 1804 :let v:errors = [] 1805< If v:errors is set to anything but a list it is made an empty 1806 list by the assert function. 1807 1808 *v:event* *event-variable* 1809v:event Dictionary containing information about the current 1810 |autocommand|. See the specific event for what it puts in 1811 this dictionary. 1812 The dictionary is emptied when the |autocommand| finishes, 1813 please refer to |dict-identity| for how to get an independent 1814 copy of it. Use |deepcopy()| if you want to keep the 1815 information after the event triggers. Example: > 1816 au TextYankPost * let g:foo = deepcopy(v:event) 1817< 1818 *v:exception* *exception-variable* 1819v:exception The value of the exception most recently caught and not 1820 finished. See also |v:throwpoint| and |throw-variables|. 1821 Example: > 1822 :try 1823 : throw "oops" 1824 :catch /.*/ 1825 : echo "caught " .. v:exception 1826 :endtry 1827< Output: "caught oops". 1828 1829 *v:false* *false-variable* 1830v:false A Number with value zero. Used to put "false" in JSON. See 1831 |json_encode()|. 1832 When used as a string this evaluates to "v:false". > 1833 echo v:false 1834< v:false ~ 1835 That is so that eval() can parse the string back to the same 1836 value. Read-only. 1837 1838 *v:fcs_reason* *fcs_reason-variable* 1839v:fcs_reason The reason why the |FileChangedShell| event was triggered. 1840 Can be used in an autocommand to decide what to do and/or what 1841 to set v:fcs_choice to. Possible values: 1842 deleted file no longer exists 1843 conflict file contents, mode or timestamp was 1844 changed and buffer is modified 1845 changed file contents has changed 1846 mode mode of file changed 1847 time only file timestamp changed 1848 1849 *v:fcs_choice* *fcs_choice-variable* 1850v:fcs_choice What should happen after a |FileChangedShell| event was 1851 triggered. Can be used in an autocommand to tell Vim what to 1852 do with the affected buffer: 1853 reload Reload the buffer (does not work if 1854 the file was deleted). 1855 ask Ask the user what to do, as if there 1856 was no autocommand. Except that when 1857 only the timestamp changed nothing 1858 will happen. 1859 <empty> Nothing, the autocommand should do 1860 everything that needs to be done. 1861 The default is empty. If another (invalid) value is used then 1862 Vim behaves like it is empty, there is no warning message. 1863 1864 *v:fname_in* *fname_in-variable* 1865v:fname_in The name of the input file. Valid while evaluating: 1866 option used for ~ 1867 'charconvert' file to be converted 1868 'diffexpr' original file 1869 'patchexpr' original file 1870 'printexpr' file to be printed 1871 And set to the swap file name for |SwapExists|. 1872 1873 *v:fname_out* *fname_out-variable* 1874v:fname_out The name of the output file. Only valid while 1875 evaluating: 1876 option used for ~ 1877 'charconvert' resulting converted file (*) 1878 'diffexpr' output of diff 1879 'patchexpr' resulting patched file 1880 (*) When doing conversion for a write command (e.g., ":w 1881 file") it will be equal to v:fname_in. When doing conversion 1882 for a read command (e.g., ":e file") it will be a temporary 1883 file and different from v:fname_in. 1884 1885 *v:fname_new* *fname_new-variable* 1886v:fname_new The name of the new version of the file. Only valid while 1887 evaluating 'diffexpr'. 1888 1889 *v:fname_diff* *fname_diff-variable* 1890v:fname_diff The name of the diff (patch) file. Only valid while 1891 evaluating 'patchexpr'. 1892 1893 *v:folddashes* *folddashes-variable* 1894v:folddashes Used for 'foldtext': dashes representing foldlevel of a closed 1895 fold. 1896 Read-only in the |sandbox|. |fold-foldtext| 1897 1898 *v:foldlevel* *foldlevel-variable* 1899v:foldlevel Used for 'foldtext': foldlevel of closed fold. 1900 Read-only in the |sandbox|. |fold-foldtext| 1901 1902 *v:foldend* *foldend-variable* 1903v:foldend Used for 'foldtext': last line of closed fold. 1904 Read-only in the |sandbox|. |fold-foldtext| 1905 1906 *v:foldstart* *foldstart-variable* 1907v:foldstart Used for 'foldtext': first line of closed fold. 1908 Read-only in the |sandbox|. |fold-foldtext| 1909 1910 *v:hlsearch* *hlsearch-variable* 1911v:hlsearch Variable that indicates whether search highlighting is on. 1912 Setting it makes sense only if 'hlsearch' is enabled which 1913 requires |+extra_search|. Setting this variable to zero acts 1914 like the |:nohlsearch| command, setting it to one acts like > 1915 let &hlsearch = &hlsearch 1916< Note that the value is restored when returning from a 1917 function. |function-search-undo|. 1918 1919 *v:insertmode* *insertmode-variable* 1920v:insertmode Used for the |InsertEnter| and |InsertChange| autocommand 1921 events. Values: 1922 i Insert mode 1923 r Replace mode 1924 v Virtual Replace mode 1925 1926 *v:key* *key-variable* 1927v:key Key of the current item of a |Dictionary|. Only valid while 1928 evaluating the expression used with |map()| and |filter()|. 1929 Read-only. 1930 1931 *v:lang* *lang-variable* 1932v:lang The current locale setting for messages of the runtime 1933 environment. This allows Vim scripts to be aware of the 1934 current language. Technical: it's the value of LC_MESSAGES. 1935 The value is system dependent. 1936 This variable can not be set directly, use the |:language| 1937 command. 1938 It can be different from |v:ctype| when messages are desired 1939 in a different language than what is used for character 1940 encoding. See |multi-lang|. 1941 1942 *v:lc_time* *lc_time-variable* 1943v:lc_time The current locale setting for time messages of the runtime 1944 environment. This allows Vim scripts to be aware of the 1945 current language. Technical: it's the value of LC_TIME. 1946 This variable can not be set directly, use the |:language| 1947 command. See |multi-lang|. 1948 1949 *v:lnum* *lnum-variable* 1950v:lnum Line number for the 'foldexpr' |fold-expr|, 'formatexpr' and 1951 'indentexpr' expressions, tab page number for 'guitablabel' 1952 and 'guitabtooltip'. Only valid while one of these 1953 expressions is being evaluated. Read-only when in the 1954 |sandbox|. 1955 1956 *v:mouse_win* *mouse_win-variable* 1957v:mouse_win Window number for a mouse click obtained with |getchar()|. 1958 First window has number 1, like with |winnr()|. The value is 1959 zero when there was no mouse button click. 1960 1961 *v:mouse_winid* *mouse_winid-variable* 1962v:mouse_winid Window ID for a mouse click obtained with |getchar()|. 1963 The value is zero when there was no mouse button click. 1964 1965 *v:mouse_lnum* *mouse_lnum-variable* 1966v:mouse_lnum Line number for a mouse click obtained with |getchar()|. 1967 This is the text line number, not the screen line number. The 1968 value is zero when there was no mouse button click. 1969 1970 *v:mouse_col* *mouse_col-variable* 1971v:mouse_col Column number for a mouse click obtained with |getchar()|. 1972 This is the screen column number, like with |virtcol()|. The 1973 value is zero when there was no mouse button click. 1974 1975 *v:none* *none-variable* *None* 1976v:none An empty String. Used to put an empty item in JSON. See 1977 |json_encode()|. 1978 When used as a number this evaluates to zero. 1979 When used as a string this evaluates to "v:none". > 1980 echo v:none 1981< v:none ~ 1982 That is so that eval() can parse the string back to the same 1983 value. Read-only. 1984 1985 *v:null* *null-variable* 1986v:null An empty String. Used to put "null" in JSON. See 1987 |json_encode()|. 1988 When used as a number this evaluates to zero. 1989 When used as a string this evaluates to "v:null". > 1990 echo v:null 1991< v:null ~ 1992 That is so that eval() can parse the string back to the same 1993 value. Read-only. 1994 1995 *v:numbersize* *numbersize-variable* 1996v:numbersize Number of bits in a Number. This is normally 64, but on some 1997 systems it may be 32. 1998 1999 *v:oldfiles* *oldfiles-variable* 2000v:oldfiles List of file names that is loaded from the |viminfo| file on 2001 startup. These are the files that Vim remembers marks for. 2002 The length of the List is limited by the ' argument of the 2003 'viminfo' option (default is 100). 2004 When the |viminfo| file is not used the List is empty. 2005 Also see |:oldfiles| and |c_#<|. 2006 The List can be modified, but this has no effect on what is 2007 stored in the |viminfo| file later. If you use values other 2008 than String this will cause trouble. 2009 {only when compiled with the |+viminfo| feature} 2010 2011 *v:option_new* 2012v:option_new New value of the option. Valid while executing an |OptionSet| 2013 autocommand. 2014 *v:option_old* 2015v:option_old Old value of the option. Valid while executing an |OptionSet| 2016 autocommand. Depending on the command used for setting and the 2017 kind of option this is either the local old value or the 2018 global old value. 2019 *v:option_oldlocal* 2020v:option_oldlocal 2021 Old local value of the option. Valid while executing an 2022 |OptionSet| autocommand. 2023 *v:option_oldglobal* 2024v:option_oldglobal 2025 Old global value of the option. Valid while executing an 2026 |OptionSet| autocommand. 2027 *v:option_type* 2028v:option_type Scope of the set command. Valid while executing an 2029 |OptionSet| autocommand. Can be either "global" or "local" 2030 *v:option_command* 2031v:option_command 2032 Command used to set the option. Valid while executing an 2033 |OptionSet| autocommand. 2034 value option was set via ~ 2035 "setlocal" |:setlocal| or ":let l:xxx" 2036 "setglobal" |:setglobal| or ":let g:xxx" 2037 "set" |:set| or |:let| 2038 "modeline" |modeline| 2039 *v:operator* *operator-variable* 2040v:operator The last operator given in Normal mode. This is a single 2041 character except for commands starting with <g> or <z>, 2042 in which case it is two characters. Best used alongside 2043 |v:prevcount| and |v:register|. Useful if you want to cancel 2044 Operator-pending mode and then use the operator, e.g.: > 2045 :omap O <Esc>:call MyMotion(v:operator)<CR> 2046< The value remains set until another operator is entered, thus 2047 don't expect it to be empty. 2048 v:operator is not set for |:delete|, |:yank| or other Ex 2049 commands. 2050 Read-only. 2051 2052 *v:prevcount* *prevcount-variable* 2053v:prevcount The count given for the last but one Normal mode command. 2054 This is the v:count value of the previous command. Useful if 2055 you want to cancel Visual or Operator-pending mode and then 2056 use the count, e.g.: > 2057 :vmap % <Esc>:call MyFilter(v:prevcount)<CR> 2058< Read-only. 2059 2060 *v:profiling* *profiling-variable* 2061v:profiling Normally zero. Set to one after using ":profile start". 2062 See |profiling|. 2063 2064 *v:progname* *progname-variable* 2065v:progname Contains the name (with path removed) with which Vim was 2066 invoked. Allows you to do special initialisations for |view|, 2067 |evim| etc., or any other name you might symlink to Vim. 2068 Read-only. 2069 2070 *v:progpath* *progpath-variable* 2071v:progpath Contains the command with which Vim was invoked, in a form 2072 that when passed to the shell will run the same Vim executable 2073 as the current one (if $PATH remains unchanged). 2074 Useful if you want to message a Vim server using a 2075 |--remote-expr|. 2076 To get the full path use: > 2077 echo exepath(v:progpath) 2078< If the command has a relative path it will be expanded to the 2079 full path, so that it still works after `:cd`. Thus starting 2080 "./vim" results in "/home/user/path/to/vim/src/vim". 2081 On Linux and other systems it will always be the full path. 2082 On Mac it may just be "vim" and using exepath() as mentioned 2083 above should be used to get the full path. 2084 On MS-Windows the executable may be called "vim.exe", but the 2085 ".exe" is not added to v:progpath. 2086 Read-only. 2087 2088 *v:register* *register-variable* 2089v:register The name of the register in effect for the current normal mode 2090 command (regardless of whether that command actually used a 2091 register). Or for the currently executing normal mode mapping 2092 (use this in custom commands that take a register). 2093 If none is supplied it is the default register '"', unless 2094 'clipboard' contains "unnamed" or "unnamedplus", then it is 2095 '*' or '+'. 2096 Also see |getreg()| and |setreg()| 2097 2098 *v:scrollstart* *scrollstart-variable* 2099v:scrollstart String describing the script or function that caused the 2100 screen to scroll up. It's only set when it is empty, thus the 2101 first reason is remembered. It is set to "Unknown" for a 2102 typed command. 2103 This can be used to find out why your script causes the 2104 hit-enter prompt. 2105 2106 *v:servername* *servername-variable* 2107v:servername The resulting registered |client-server-name| if any. 2108 Read-only. 2109 2110 2111v:searchforward *v:searchforward* *searchforward-variable* 2112 Search direction: 1 after a forward search, 0 after a 2113 backward search. It is reset to forward when directly setting 2114 the last search pattern, see |quote/|. 2115 Note that the value is restored when returning from a 2116 function. |function-search-undo|. 2117 Read-write. 2118 2119 *v:shell_error* *shell_error-variable* 2120v:shell_error Result of the last shell command. When non-zero, the last 2121 shell command had an error. When zero, there was no problem. 2122 This only works when the shell returns the error code to Vim. 2123 The value -1 is often used when the command could not be 2124 executed. Read-only. 2125 Example: > 2126 :!mv foo bar 2127 :if v:shell_error 2128 : echo 'could not rename "foo" to "bar"!' 2129 :endif 2130< "shell_error" also works, for backwards compatibility, unless 2131 |scriptversion| is 3 or higher. 2132 2133 *v:statusmsg* *statusmsg-variable* 2134v:statusmsg Last given status message. It's allowed to set this variable. 2135 2136 *v:swapname* *swapname-variable* 2137v:swapname Only valid when executing |SwapExists| autocommands: Name of 2138 the swap file found. Read-only. 2139 2140 *v:swapchoice* *swapchoice-variable* 2141v:swapchoice |SwapExists| autocommands can set this to the selected choice 2142 for handling an existing swap file: 2143 'o' Open read-only 2144 'e' Edit anyway 2145 'r' Recover 2146 'd' Delete swapfile 2147 'q' Quit 2148 'a' Abort 2149 The value should be a single-character string. An empty value 2150 results in the user being asked, as would happen when there is 2151 no SwapExists autocommand. The default is empty. 2152 2153 *v:swapcommand* *swapcommand-variable* 2154v:swapcommand Normal mode command to be executed after a file has been 2155 opened. Can be used for a |SwapExists| autocommand to have 2156 another Vim open the file and jump to the right place. For 2157 example, when jumping to a tag the value is ":tag tagname\r". 2158 For ":edit +cmd file" the value is ":cmd\r". 2159 2160 *v:t_TYPE* *v:t_bool* *t_bool-variable* 2161v:t_bool Value of |Boolean| type. Read-only. See: |type()| 2162 *v:t_channel* *t_channel-variable* 2163v:t_channel Value of |Channel| type. Read-only. See: |type()| 2164 *v:t_dict* *t_dict-variable* 2165v:t_dict Value of |Dictionary| type. Read-only. See: |type()| 2166 *v:t_float* *t_float-variable* 2167v:t_float Value of |Float| type. Read-only. See: |type()| 2168 *v:t_func* *t_func-variable* 2169v:t_func Value of |Funcref| type. Read-only. See: |type()| 2170 *v:t_job* *t_job-variable* 2171v:t_job Value of |Job| type. Read-only. See: |type()| 2172 *v:t_list* *t_list-variable* 2173v:t_list Value of |List| type. Read-only. See: |type()| 2174 *v:t_none* *t_none-variable* 2175v:t_none Value of |None| type. Read-only. See: |type()| 2176 *v:t_number* *t_number-variable* 2177v:t_number Value of |Number| type. Read-only. See: |type()| 2178 *v:t_string* *t_string-variable* 2179v:t_string Value of |String| type. Read-only. See: |type()| 2180 *v:t_blob* *t_blob-variable* 2181v:t_blob Value of |Blob| type. Read-only. See: |type()| 2182 2183 *v:termresponse* *termresponse-variable* 2184v:termresponse The escape sequence returned by the terminal for the |t_RV| 2185 termcap entry. It is set when Vim receives an escape sequence 2186 that starts with ESC [ or CSI, then '>' or '?' and ends in a 2187 'c', with only digits and ';' in between. 2188 When this option is set, the TermResponse autocommand event is 2189 fired, so that you can react to the response from the 2190 terminal. 2191 The response from a new xterm is: "<Esc>[> Pp ; Pv ; Pc c". Pp 2192 is the terminal type: 0 for vt100 and 1 for vt220. Pv is the 2193 patch level (since this was introduced in patch 95, it's 2194 always 95 or bigger). Pc is always zero. 2195 {only when compiled with |+termresponse| feature} 2196 2197 *v:termblinkresp* 2198v:termblinkresp The escape sequence returned by the terminal for the |t_RC| 2199 termcap entry. This is used to find out whether the terminal 2200 cursor is blinking. This is used by |term_getcursor()|. 2201 2202 *v:termstyleresp* 2203v:termstyleresp The escape sequence returned by the terminal for the |t_RS| 2204 termcap entry. This is used to find out what the shape of the 2205 cursor is. This is used by |term_getcursor()|. 2206 2207 *v:termrbgresp* 2208v:termrbgresp The escape sequence returned by the terminal for the |t_RB| 2209 termcap entry. This is used to find out what the terminal 2210 background color is, see 'background'. 2211 2212 *v:termrfgresp* 2213v:termrfgresp The escape sequence returned by the terminal for the |t_RF| 2214 termcap entry. This is used to find out what the terminal 2215 foreground color is. 2216 2217 *v:termu7resp* 2218v:termu7resp The escape sequence returned by the terminal for the |t_u7| 2219 termcap entry. This is used to find out what the terminal 2220 does with ambiguous width characters, see 'ambiwidth'. 2221 2222 *v:testing* *testing-variable* 2223v:testing Must be set before using `test_garbagecollect_now()`. 2224 Also, when set certain error messages won't be shown for 2 2225 seconds. (e.g. "'dictionary' option is empty") 2226 2227 *v:this_session* *this_session-variable* 2228v:this_session Full filename of the last loaded or saved session file. See 2229 |:mksession|. It is allowed to set this variable. When no 2230 session file has been saved, this variable is empty. 2231 "this_session" also works, for backwards compatibility, unless 2232 |scriptversion| is 3 or higher 2233 2234 *v:throwpoint* *throwpoint-variable* 2235v:throwpoint The point where the exception most recently caught and not 2236 finished was thrown. Not set when commands are typed. See 2237 also |v:exception| and |throw-variables|. 2238 Example: > 2239 :try 2240 : throw "oops" 2241 :catch /.*/ 2242 : echo "Exception from" v:throwpoint 2243 :endtry 2244< Output: "Exception from test.vim, line 2" 2245 2246 *v:true* *true-variable* 2247v:true A Number with value one. Used to put "true" in JSON. See 2248 |json_encode()|. 2249 When used as a string this evaluates to "v:true". > 2250 echo v:true 2251< v:true ~ 2252 That is so that eval() can parse the string back to the same 2253 value. Read-only. 2254 *v:val* *val-variable* 2255v:val Value of the current item of a |List| or |Dictionary|. Only 2256 valid while evaluating the expression used with |map()| and 2257 |filter()|. Read-only. 2258 2259 *v:version* *version-variable* 2260v:version Version number of Vim: Major version number times 100 plus 2261 minor version number. Version 5.0 is 500. Version 5.1 2262 is 501. Read-only. "version" also works, for backwards 2263 compatibility, unless |scriptversion| is 3 or higher. 2264 Use |has()| to check if a certain patch was included, e.g.: > 2265 if has("patch-7.4.123") 2266< Note that patch numbers are specific to the version, thus both 2267 version 5.0 and 5.1 may have a patch 123, but these are 2268 completely different. 2269 2270 *v:versionlong* *versionlong-variable* 2271v:versionlong Like v:version, but also including the patchlevel in the last 2272 four digits. Version 8.1 with patch 123 has value 8010123. 2273 This can be used like this: > 2274 if v:versionlong >= 8010123 2275< However, if there are gaps in the list of patches included 2276 this will not work well. This can happen if a recent patch 2277 was included into an older version, e.g. for a security fix. 2278 Use the has() function to make sure the patch is actually 2279 included. 2280 2281 *v:vim_did_enter* *vim_did_enter-variable* 2282v:vim_did_enter Zero until most of startup is done. It is set to one just 2283 before |VimEnter| autocommands are triggered. 2284 2285 *v:warningmsg* *warningmsg-variable* 2286v:warningmsg Last given warning message. It's allowed to set this variable. 2287 2288 *v:windowid* *windowid-variable* 2289v:windowid When any X11 based GUI is running or when running in a 2290 terminal and Vim connects to the X server (|-X|) this will be 2291 set to the window ID. 2292 When an MS-Windows GUI is running this will be set to the 2293 window handle. 2294 Otherwise the value is zero. 2295 Note: for windows inside Vim use |winnr()| or |win_getid()|, 2296 see |window-ID|. 2297 2298============================================================================== 22994. Builtin Functions *functions* 2300 2301See |function-list| for a list grouped by what the function is used for. 2302 2303(Use CTRL-] on the function name to jump to the full explanation.) 2304 2305USAGE RESULT DESCRIPTION ~ 2306 2307abs({expr}) Float or Number absolute value of {expr} 2308acos({expr}) Float arc cosine of {expr} 2309add({object}, {item}) List/Blob append {item} to {object} 2310and({expr}, {expr}) Number bitwise AND 2311append({lnum}, {text}) Number append {text} below line {lnum} 2312appendbufline({expr}, {lnum}, {text}) 2313 Number append {text} below line {lnum} 2314 in buffer {expr} 2315argc([{winid}]) Number number of files in the argument list 2316argidx() Number current index in the argument list 2317arglistid([{winnr} [, {tabnr}]]) Number argument list id 2318argv({nr} [, {winid}]) String {nr} entry of the argument list 2319argv([-1, {winid}]) List the argument list 2320assert_beeps({cmd}) Number assert {cmd} causes a beep 2321assert_equal({exp}, {act} [, {msg}]) 2322 Number assert {exp} is equal to {act} 2323assert_equalfile({fname-one}, {fname-two}) 2324 Number assert file contents is equal 2325assert_exception({error} [, {msg}]) 2326 Number assert {error} is in v:exception 2327assert_fails({cmd} [, {error} [, {msg}]]) 2328 Number assert {cmd} fails 2329assert_false({actual} [, {msg}]) 2330 Number assert {actual} is false 2331assert_inrange({lower}, {upper}, {actual} [, {msg}]) 2332 Number assert {actual} is inside the range 2333assert_match({pat}, {text} [, {msg}]) 2334 Number assert {pat} matches {text} 2335assert_notequal({exp}, {act} [, {msg}]) 2336 Number assert {exp} is not equal {act} 2337assert_notmatch({pat}, {text} [, {msg}]) 2338 Number assert {pat} not matches {text} 2339assert_report({msg}) Number report a test failure 2340assert_true({actual} [, {msg}]) Number assert {actual} is true 2341asin({expr}) Float arc sine of {expr} 2342atan({expr}) Float arc tangent of {expr} 2343atan2({expr1}, {expr2}) Float arc tangent of {expr1} / {expr2} 2344balloon_gettext() String current text in the balloon 2345balloon_show({expr}) none show {expr} inside the balloon 2346balloon_split({msg}) List split {msg} as used for a balloon 2347browse({save}, {title}, {initdir}, {default}) 2348 String put up a file requester 2349browsedir({title}, {initdir}) String put up a directory requester 2350bufadd({name}) Number add a buffer to the buffer list 2351bufexists({expr}) Number |TRUE| if buffer {expr} exists 2352buflisted({expr}) Number |TRUE| if buffer {expr} is listed 2353bufload({expr}) Number load buffer {expr} if not loaded yet 2354bufloaded({expr}) Number |TRUE| if buffer {expr} is loaded 2355bufname([{expr}]) String Name of the buffer {expr} 2356bufnr([{expr} [, {create}]]) Number Number of the buffer {expr} 2357bufwinid({expr}) Number window ID of buffer {expr} 2358bufwinnr({expr}) Number window number of buffer {expr} 2359byte2line({byte}) Number line number at byte count {byte} 2360byteidx({expr}, {nr}) Number byte index of {nr}'th char in {expr} 2361byteidxcomp({expr}, {nr}) Number byte index of {nr}'th char in {expr} 2362call({func}, {arglist} [, {dict}]) 2363 any call {func} with arguments {arglist} 2364ceil({expr}) Float round {expr} up 2365ch_canread({handle}) Number check if there is something to read 2366ch_close({handle}) none close {handle} 2367ch_close_in({handle}) none close in part of {handle} 2368ch_evalexpr({handle}, {expr} [, {options}]) 2369 any evaluate {expr} on JSON {handle} 2370ch_evalraw({handle}, {string} [, {options}]) 2371 any evaluate {string} on raw {handle} 2372ch_getbufnr({handle}, {what}) Number get buffer number for {handle}/{what} 2373ch_getjob({channel}) Job get the Job of {channel} 2374ch_info({handle}) String info about channel {handle} 2375ch_log({msg} [, {handle}]) none write {msg} in the channel log file 2376ch_logfile({fname} [, {mode}]) none start logging channel activity 2377ch_open({address} [, {options}]) 2378 Channel open a channel to {address} 2379ch_read({handle} [, {options}]) String read from {handle} 2380ch_readblob({handle} [, {options}]) 2381 Blob read Blob from {handle} 2382ch_readraw({handle} [, {options}]) 2383 String read raw from {handle} 2384ch_sendexpr({handle}, {expr} [, {options}]) 2385 any send {expr} over JSON {handle} 2386ch_sendraw({handle}, {expr} [, {options}]) 2387 any send {expr} over raw {handle} 2388ch_setoptions({handle}, {options}) 2389 none set options for {handle} 2390ch_status({handle} [, {options}]) 2391 String status of channel {handle} 2392changenr() Number current change number 2393char2nr({expr} [, {utf8}]) Number ASCII/UTF8 value of first char in {expr} 2394chdir({dir}) String change current working directory 2395cindent({lnum}) Number C indent for line {lnum} 2396clearmatches([{win}]) none clear all matches 2397col({expr}) Number column nr of cursor or mark 2398complete({startcol}, {matches}) none set Insert mode completion 2399complete_add({expr}) Number add completion match 2400complete_check() Number check for key typed during completion 2401complete_info([{what}]) Dict get current completion information 2402confirm({msg} [, {choices} [, {default} [, {type}]]]) 2403 Number number of choice picked by user 2404copy({expr}) any make a shallow copy of {expr} 2405cos({expr}) Float cosine of {expr} 2406cosh({expr}) Float hyperbolic cosine of {expr} 2407count({comp}, {expr} [, {ic} [, {start}]]) 2408 Number count how many {expr} are in {comp} 2409cscope_connection([{num}, {dbpath} [, {prepend}]]) 2410 Number checks existence of cscope connection 2411cursor({lnum}, {col} [, {off}]) 2412 Number move cursor to {lnum}, {col}, {off} 2413cursor({list}) Number move cursor to position in {list} 2414debugbreak({pid}) Number interrupt process being debugged 2415deepcopy({expr} [, {noref}]) any make a full copy of {expr} 2416delete({fname} [, {flags}]) Number delete the file or directory {fname} 2417deletebufline({expr}, {first} [, {last}]) 2418 Number delete lines from buffer {expr} 2419did_filetype() Number |TRUE| if FileType autocmd event used 2420diff_filler({lnum}) Number diff filler lines about {lnum} 2421diff_hlID({lnum}, {col}) Number diff highlighting at {lnum}/{col} 2422echoraw({expr}) none output {expr} as-is 2423empty({expr}) Number |TRUE| if {expr} is empty 2424environ() Dict return environment variables 2425escape({string}, {chars}) String escape {chars} in {string} with '\' 2426eval({string}) any evaluate {string} into its value 2427eventhandler() Number |TRUE| if inside an event handler 2428executable({expr}) Number 1 if executable {expr} exists 2429execute({command}) String execute {command} and get the output 2430exepath({expr}) String full path of the command {expr} 2431exists({expr}) Number |TRUE| if {expr} exists 2432extend({expr1}, {expr2} [, {expr3}]) 2433 List/Dict insert items of {expr2} into {expr1} 2434exp({expr}) Float exponential of {expr} 2435expand({expr} [, {nosuf} [, {list}]]) 2436 any expand special keywords in {expr} 2437expandcmd({expr}) String expand {expr} like with `:edit` 2438feedkeys({string} [, {mode}]) Number add key sequence to typeahead buffer 2439filereadable({file}) Number |TRUE| if {file} is a readable file 2440filewritable({file}) Number |TRUE| if {file} is a writable file 2441filter({expr1}, {expr2}) List/Dict remove items from {expr1} where 2442 {expr2} is 0 2443finddir({name} [, {path} [, {count}]]) 2444 String find directory {name} in {path} 2445findfile({name} [, {path} [, {count}]]) 2446 String find file {name} in {path} 2447float2nr({expr}) Number convert Float {expr} to a Number 2448floor({expr}) Float round {expr} down 2449fmod({expr1}, {expr2}) Float remainder of {expr1} / {expr2} 2450fnameescape({fname}) String escape special characters in {fname} 2451fnamemodify({fname}, {mods}) String modify file name 2452foldclosed({lnum}) Number first line of fold at {lnum} if closed 2453foldclosedend({lnum}) Number last line of fold at {lnum} if closed 2454foldlevel({lnum}) Number fold level at {lnum} 2455foldtext() String line displayed for closed fold 2456foldtextresult({lnum}) String text for closed fold at {lnum} 2457foreground() Number bring the Vim window to the foreground 2458funcref({name} [, {arglist}] [, {dict}]) 2459 Funcref reference to function {name} 2460function({name} [, {arglist}] [, {dict}]) 2461 Funcref named reference to function {name} 2462garbagecollect([{atexit}]) none free memory, breaking cyclic references 2463get({list}, {idx} [, {def}]) any get item {idx} from {list} or {def} 2464get({dict}, {key} [, {def}]) any get item {key} from {dict} or {def} 2465get({func}, {what}) any get property of funcref/partial {func} 2466getbufinfo([{expr}]) List information about buffers 2467getbufline({expr}, {lnum} [, {end}]) 2468 List lines {lnum} to {end} of buffer {expr} 2469getbufvar({expr}, {varname} [, {def}]) 2470 any variable {varname} in buffer {expr} 2471getchangelist([{expr}]) List list of change list items 2472getchar([expr]) Number get one character from the user 2473getcharmod() Number modifiers for the last typed character 2474getcharsearch() Dict last character search 2475getcmdline() String return the current command-line 2476getcmdpos() Number return cursor position in command-line 2477getcmdtype() String return current command-line type 2478getcmdwintype() String return current command-line window type 2479getcompletion({pat}, {type} [, {filtered}]) 2480 List list of cmdline completion matches 2481getcurpos() List position of the cursor 2482getcwd([{winnr} [, {tabnr}]]) String get the current working directory 2483getenv({name}) String return environment variable 2484getfontname([{name}]) String name of font being used 2485getfperm({fname}) String file permissions of file {fname} 2486getfsize({fname}) Number size in bytes of file {fname} 2487getftime({fname}) Number last modification time of file 2488getftype({fname}) String description of type of file {fname} 2489getimstatus() Number |TRUE| if the IME status is active 2490getjumplist([{winnr} [, {tabnr}]]) 2491 List list of jump list items 2492getline({lnum}) String line {lnum} of current buffer 2493getline({lnum}, {end}) List lines {lnum} to {end} of current buffer 2494getloclist({nr} [, {what}]) List list of location list items 2495getmatches([{win}]) List list of current matches 2496getmousepos() Dict last known mouse position 2497getpid() Number process ID of Vim 2498getpos({expr}) List position of cursor, mark, etc. 2499getqflist([{what}]) List list of quickfix items 2500getreg([{regname} [, 1 [, {list}]]]) 2501 String or List contents of register 2502getregtype([{regname}]) String type of register 2503gettabinfo([{expr}]) List list of tab pages 2504gettabvar({nr}, {varname} [, {def}]) 2505 any variable {varname} in tab {nr} or {def} 2506gettabwinvar({tabnr}, {winnr}, {name} [, {def}]) 2507 any {name} in {winnr} in tab page {tabnr} 2508gettagstack([{nr}]) Dict get the tag stack of window {nr} 2509getwininfo([{winid}]) List list of info about each window 2510getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window 2511getwinposx() Number X coord in pixels of the Vim window 2512getwinposy() Number Y coord in pixels of the Vim window 2513getwinvar({nr}, {varname} [, {def}]) 2514 any variable {varname} in window {nr} 2515glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) 2516 any expand file wildcards in {expr} 2517glob2regpat({expr}) String convert a glob pat into a search pat 2518globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 2519 String do glob({expr}) for all dirs in {path} 2520has({feature} [, {check}]) Number |TRUE| if feature {feature} supported 2521has_key({dict}, {key}) Number |TRUE| if {dict} has entry {key} 2522haslocaldir([{winnr} [, {tabnr}]]) 2523 Number |TRUE| if the window executed |:lcd| 2524 or |:tcd| 2525hasmapto({what} [, {mode} [, {abbr}]]) 2526 Number |TRUE| if mapping to {what} exists 2527histadd({history}, {item}) Number add an item to a history 2528histdel({history} [, {item}]) Number remove an item from a history 2529histget({history} [, {index}]) String get the item {index} from a history 2530histnr({history}) Number highest index of a history 2531hlexists({name}) Number |TRUE| if highlight group {name} exists 2532hlID({name}) Number syntax ID of highlight group {name} 2533hostname() String name of the machine Vim is running on 2534iconv({expr}, {from}, {to}) String convert encoding of {expr} 2535indent({lnum}) Number indent of line {lnum} 2536index({object}, {expr} [, {start} [, {ic}]]) 2537 Number index in {object} where {expr} appears 2538input({prompt} [, {text} [, {completion}]]) 2539 String get input from the user 2540inputdialog({prompt} [, {text} [, {completion}]]) 2541 String like input() but in a GUI dialog 2542inputlist({textlist}) Number let the user pick from a choice list 2543inputrestore() Number restore typeahead 2544inputsave() Number save and clear typeahead 2545inputsecret({prompt} [, {text}]) String like input() but hiding the text 2546insert({object}, {item} [, {idx}]) List insert {item} in {object} [before {idx}] 2547interrupt() none interrupt script execution 2548invert({expr}) Number bitwise invert 2549isdirectory({directory}) Number |TRUE| if {directory} is a directory 2550isinf({expr}) Number determine if {expr} is infinity value 2551 (positive or negative) 2552islocked({expr}) Number |TRUE| if {expr} is locked 2553isnan({expr}) Number |TRUE| if {expr} is NaN 2554items({dict}) List key-value pairs in {dict} 2555job_getchannel({job}) Channel get the channel handle for {job} 2556job_info([{job}]) Dict get information about {job} 2557job_setoptions({job}, {options}) none set options for {job} 2558job_start({command} [, {options}]) 2559 Job start a job 2560job_status({job}) String get the status of {job} 2561job_stop({job} [, {how}]) Number stop {job} 2562join({list} [, {sep}]) String join {list} items into one String 2563js_decode({string}) any decode JS style JSON 2564js_encode({expr}) String encode JS style JSON 2565json_decode({string}) any decode JSON 2566json_encode({expr}) String encode JSON 2567keys({dict}) List keys in {dict} 2568len({expr}) Number the length of {expr} 2569libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg} 2570libcallnr({lib}, {func}, {arg}) Number idem, but return a Number 2571line({expr} [, {winid}]) Number line nr of cursor, last line or mark 2572line2byte({lnum}) Number byte count of line {lnum} 2573lispindent({lnum}) Number Lisp indent for line {lnum} 2574list2str({list} [, {utf8}]) String turn numbers in {list} into a String 2575listener_add({callback} [, {buf}]) 2576 Number add a callback to listen to changes 2577listener_flush([{buf}]) none invoke listener callbacks 2578listener_remove({id}) none remove a listener callback 2579localtime() Number current time 2580log({expr}) Float natural logarithm (base e) of {expr} 2581log10({expr}) Float logarithm of Float {expr} to base 10 2582luaeval({expr} [, {expr}]) any evaluate |Lua| expression 2583map({expr1}, {expr2}) List/Dict change each item in {expr1} to {expr} 2584maparg({name} [, {mode} [, {abbr} [, {dict}]]]) 2585 String or Dict 2586 rhs of mapping {name} in mode {mode} 2587mapcheck({name} [, {mode} [, {abbr}]]) 2588 String check for mappings matching {name} 2589match({expr}, {pat} [, {start} [, {count}]]) 2590 Number position where {pat} matches in {expr} 2591matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]]) 2592 Number highlight {pattern} with {group} 2593matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) 2594 Number highlight positions with {group} 2595matcharg({nr}) List arguments of |:match| 2596matchdelete({id} [, {win}]) Number delete match identified by {id} 2597matchend({expr}, {pat} [, {start} [, {count}]]) 2598 Number position where {pat} ends in {expr} 2599matchlist({expr}, {pat} [, {start} [, {count}]]) 2600 List match and submatches of {pat} in {expr} 2601matchstr({expr}, {pat} [, {start} [, {count}]]) 2602 String {count}'th match of {pat} in {expr} 2603matchstrpos({expr}, {pat} [, {start} [, {count}]]) 2604 List {count}'th match of {pat} in {expr} 2605max({expr}) Number maximum value of items in {expr} 2606menu_info({name} [, {mode}]) Dict get menu item information 2607min({expr}) Number minimum value of items in {expr} 2608mkdir({name} [, {path} [, {prot}]]) 2609 Number create directory {name} 2610mode([expr]) String current editing mode 2611mzeval({expr}) any evaluate |MzScheme| expression 2612nextnonblank({lnum}) Number line nr of non-blank line >= {lnum} 2613nr2char({expr} [, {utf8}]) String single char with ASCII/UTF8 value {expr} 2614or({expr}, {expr}) Number bitwise OR 2615pathshorten({expr}) String shorten directory names in a path 2616perleval({expr}) any evaluate |Perl| expression 2617popup_atcursor({what}, {options}) Number create popup window near the cursor 2618popup_beval({what}, {options}) Number create popup window for 'ballooneval' 2619popup_clear() none close all popup windows 2620popup_close({id} [, {result}]) none close popup window {id} 2621popup_create({what}, {options}) Number create a popup window 2622popup_dialog({what}, {options}) Number create a popup window used as a dialog 2623popup_filter_menu({id}, {key}) Number filter for a menu popup window 2624popup_filter_yesno({id}, {key}) Number filter for a dialog popup window 2625popup_findinfo() Number get window ID of info popup window 2626popup_findpreview() Number get window ID of preview popup window 2627popup_getoptions({id}) Dict get options of popup window {id} 2628popup_getpos({id}) Dict get position of popup window {id} 2629popup_hide({id}) none hide popup menu {id} 2630popup_list() List get a list of window IDs of al popups 2631popup_locate({row}, {col}) Number get window ID of popup at position 2632popup_menu({what}, {options}) Number create a popup window used as a menu 2633popup_move({id}, {options}) none set position of popup window {id} 2634popup_notification({what}, {options}) 2635 Number create a notification popup window 2636popup_show({id}) none unhide popup window {id} 2637popup_setoptions({id}, {options}) 2638 none set options for popup window {id} 2639popup_settext({id}, {text}) none set the text of popup window {id} 2640pow({x}, {y}) Float {x} to the power of {y} 2641prevnonblank({lnum}) Number line nr of non-blank line <= {lnum} 2642printf({fmt}, {expr1}...) String format text 2643prompt_setcallback({buf}, {expr}) none set prompt callback function 2644prompt_setinterrupt({buf}, {text}) none set prompt interrupt function 2645prompt_setprompt({buf}, {text}) none set prompt text 2646prop_add({lnum}, {col}, {props}) none add a text property 2647prop_clear({lnum} [, {lnum-end} [, {props}]]) 2648 none remove all text properties 2649prop_find({props} [, {direction}]) 2650 Dict search for a text property 2651prop_list({lnum} [, {props}]) List text properties in {lnum} 2652prop_remove({props} [, {lnum} [, {lnum-end}]]) 2653 Number remove a text property 2654prop_type_add({name}, {props}) none define a new property type 2655prop_type_change({name}, {props}) 2656 none change an existing property type 2657prop_type_delete({name} [, {props}]) 2658 none delete a property type 2659prop_type_get([{name} [, {props}]]) 2660 Dict get property type values 2661prop_type_list([{props}]) List get list of property types 2662pum_getpos() Dict position and size of pum if visible 2663pumvisible() Number whether popup menu is visible 2664pyeval({expr}) any evaluate |Python| expression 2665py3eval({expr}) any evaluate |python3| expression 2666pyxeval({expr}) any evaluate |python_x| expression 2667rand([{expr}]) Number get pseudo-random number 2668range({expr} [, {max} [, {stride}]]) 2669 List items from {expr} to {max} 2670readdir({dir} [, {expr}]) List file names in {dir} selected by {expr} 2671readfile({fname} [, {type} [, {max}]]) 2672 List get list of lines from file {fname} 2673reg_executing() String get the executing register name 2674reg_recording() String get the recording register name 2675reltime([{start} [, {end}]]) List get time value 2676reltimefloat({time}) Float turn the time value into a Float 2677reltimestr({time}) String turn time value into a String 2678remote_expr({server}, {string} [, {idvar} [, {timeout}]]) 2679 String send expression 2680remote_foreground({server}) Number bring Vim server to the foreground 2681remote_peek({serverid} [, {retvar}]) 2682 Number check for reply string 2683remote_read({serverid} [, {timeout}]) 2684 String read reply string 2685remote_send({server}, {string} [, {idvar}]) 2686 String send key sequence 2687remote_startserver({name}) none become server {name} 2688remove({list}, {idx} [, {end}]) any/List 2689 remove items {idx}-{end} from {list} 2690remove({blob}, {idx} [, {end}]) Number/Blob 2691 remove bytes {idx}-{end} from {blob} 2692remove({dict}, {key}) any remove entry {key} from {dict} 2693rename({from}, {to}) Number rename (move) file from {from} to {to} 2694repeat({expr}, {count}) String repeat {expr} {count} times 2695resolve({filename}) String get filename a shortcut points to 2696reverse({list}) List reverse {list} in-place 2697round({expr}) Float round off {expr} 2698rubyeval({expr}) any evaluate |Ruby| expression 2699screenattr({row}, {col}) Number attribute at screen position 2700screenchar({row}, {col}) Number character at screen position 2701screenchars({row}, {col}) List List of characters at screen position 2702screencol() Number current cursor column 2703screenpos({winid}, {lnum}, {col}) Dict screen row and col of a text character 2704screenrow() Number current cursor row 2705screenstring({row}, {col}) String characters at screen position 2706search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) 2707 Number search for {pattern} 2708searchdecl({name} [, {global} [, {thisblock}]]) 2709 Number search for variable declaration 2710searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 2711 Number search for other end of start/end pair 2712searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]]) 2713 List search for other end of start/end pair 2714searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) 2715 List search for {pattern} 2716server2client({clientid}, {string}) 2717 Number send reply string 2718serverlist() String get a list of available servers 2719setbufline({expr}, {lnum}, {text}) 2720 Number set line {lnum} to {text} in buffer 2721 {expr} 2722setbufvar({expr}, {varname}, {val}) 2723 none set {varname} in buffer {expr} to {val} 2724setcharsearch({dict}) Dict set character search from {dict} 2725setcmdpos({pos}) Number set cursor position in command-line 2726setenv({name}, {val}) none set environment variable 2727setfperm({fname}, {mode}) Number set {fname} file permissions to {mode} 2728setline({lnum}, {line}) Number set line {lnum} to {line} 2729setloclist({nr}, {list} [, {action} [, {what}]]) 2730 Number modify location list using {list} 2731setmatches({list} [, {win}]) Number restore a list of matches 2732setpos({expr}, {list}) Number set the {expr} position to {list} 2733setqflist({list} [, {action} [, {what}]]) 2734 Number modify quickfix list using {list} 2735setreg({n}, {v} [, {opt}]) Number set register to value and type 2736settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val} 2737settabwinvar({tabnr}, {winnr}, {varname}, {val}) 2738 none set {varname} in window {winnr} in tab 2739 page {tabnr} to {val} 2740settagstack({nr}, {dict} [, {action}]) 2741 Number modify tag stack using {dict} 2742setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val} 2743sha256({string}) String SHA256 checksum of {string} 2744shellescape({string} [, {special}]) 2745 String escape {string} for use as shell 2746 command argument 2747shiftwidth([{col}]) Number effective value of 'shiftwidth' 2748sign_define({name} [, {dict}]) Number define or update a sign 2749sign_define({list}) List define or update a list of signs 2750sign_getdefined([{name}]) List get a list of defined signs 2751sign_getplaced([{expr} [, {dict}]]) 2752 List get a list of placed signs 2753sign_jump({id}, {group}, {expr}) 2754 Number jump to a sign 2755sign_place({id}, {group}, {name}, {expr} [, {dict}]) 2756 Number place a sign 2757sign_placelist({list}) List place a list of signs 2758sign_undefine([{name}]) Number undefine a sign 2759sign_undefine({list}) List undefine a list of signs 2760sign_unplace({group} [, {dict}]) 2761 Number unplace a sign 2762sign_unplacelist({list}) List unplace a list of signs 2763simplify({filename}) String simplify filename as much as possible 2764sin({expr}) Float sine of {expr} 2765sinh({expr}) Float hyperbolic sine of {expr} 2766sort({list} [, {func} [, {dict}]]) 2767 List sort {list}, using {func} to compare 2768sound_clear() none stop playing all sounds 2769sound_playevent({name} [, {callback}]) 2770 Number play an event sound 2771sound_playfile({path} [, {callback}]) 2772 Number play sound file {path} 2773sound_stop({id}) none stop playing sound {id} 2774soundfold({word}) String sound-fold {word} 2775spellbadword() String badly spelled word at cursor 2776spellsuggest({word} [, {max} [, {capital}]]) 2777 List spelling suggestions 2778split({expr} [, {pat} [, {keepempty}]]) 2779 List make |List| from {pat} separated {expr} 2780sqrt({expr}) Float square root of {expr} 2781srand([{expr}]) List get seed for |rand()| 2782state([{what}]) String current state of Vim 2783str2float({expr}) Float convert String to Float 2784str2list({expr} [, {utf8}]) List convert each character of {expr} to 2785 ASCII/UTF8 value 2786str2nr({expr} [, {base} [, {quoted}]]) 2787 Number convert String to Number 2788strchars({expr} [, {skipcc}]) Number character length of the String {expr} 2789strcharpart({str}, {start} [, {len}]) 2790 String {len} characters of {str} at {start} 2791strdisplaywidth({expr} [, {col}]) Number display length of the String {expr} 2792strftime({format} [, {time}]) String format time with a specified format 2793strgetchar({str}, {index}) Number get char {index} from {str} 2794stridx({haystack}, {needle} [, {start}]) 2795 Number index of {needle} in {haystack} 2796string({expr}) String String representation of {expr} value 2797strlen({expr}) Number length of the String {expr} 2798strpart({str}, {start} [, {len}]) 2799 String {len} characters of {str} at {start} 2800strptime({format}, {timestring}) 2801 Number Convert {timestring} to unix timestamp 2802strridx({haystack}, {needle} [, {start}]) 2803 Number last index of {needle} in {haystack} 2804strtrans({expr}) String translate string to make it printable 2805strwidth({expr}) Number display cell length of the String {expr} 2806submatch({nr} [, {list}]) String or List 2807 specific match in ":s" or substitute() 2808substitute({expr}, {pat}, {sub}, {flags}) 2809 String all {pat} in {expr} replaced with {sub} 2810swapinfo({fname}) Dict information about swap file {fname} 2811swapname({expr}) String swap file of buffer {expr} 2812synID({lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col} 2813synIDattr({synID}, {what} [, {mode}]) 2814 String attribute {what} of syntax ID {synID} 2815synIDtrans({synID}) Number translated syntax ID of {synID} 2816synconcealed({lnum}, {col}) List info about concealing 2817synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and {col} 2818system({expr} [, {input}]) String output of shell command/filter {expr} 2819systemlist({expr} [, {input}]) List output of shell command/filter {expr} 2820tabpagebuflist([{arg}]) List list of buffer numbers in tab page 2821tabpagenr([{arg}]) Number number of current or last tab page 2822tabpagewinnr({tabarg} [, {arg}]) Number number of current window in tab page 2823taglist({expr} [, {filename}]) List list of tags matching {expr} 2824tagfiles() List tags files used 2825tan({expr}) Float tangent of {expr} 2826tanh({expr}) Float hyperbolic tangent of {expr} 2827tempname() String name for a temporary file 2828term_dumpdiff({filename}, {filename} [, {options}]) 2829 Number display difference between two dumps 2830term_dumpload({filename} [, {options}]) 2831 Number displaying a screen dump 2832term_dumpwrite({buf}, {filename} [, {options}]) 2833 none dump terminal window contents 2834term_getaltscreen({buf}) Number get the alternate screen flag 2835term_getansicolors({buf}) List get ANSI palette in GUI color mode 2836term_getattr({attr}, {what}) Number get the value of attribute {what} 2837term_getcursor({buf}) List get the cursor position of a terminal 2838term_getjob({buf}) Job get the job associated with a terminal 2839term_getline({buf}, {row}) String get a line of text from a terminal 2840term_getscrolled({buf}) Number get the scroll count of a terminal 2841term_getsize({buf}) List get the size of a terminal 2842term_getstatus({buf}) String get the status of a terminal 2843term_gettitle({buf}) String get the title of a terminal 2844term_gettty({buf}, [{input}]) String get the tty name of a terminal 2845term_list() List get the list of terminal buffers 2846term_scrape({buf}, {row}) List get row of a terminal screen 2847term_sendkeys({buf}, {keys}) none send keystrokes to a terminal 2848term_setapi({buf}, {expr}) none set |terminal-api| function name prefix 2849term_setansicolors({buf}, {colors}) 2850 none set ANSI palette in GUI color mode 2851term_setkill({buf}, {how}) none set signal to stop job in terminal 2852term_setrestore({buf}, {command}) none set command to restore terminal 2853term_setsize({buf}, {rows}, {cols}) 2854 none set the size of a terminal 2855term_start({cmd} [, {options}]) Number open a terminal window and run a job 2856term_wait({buf} [, {time}]) Number wait for screen to be updated 2857test_alloc_fail({id}, {countdown}, {repeat}) 2858 none make memory allocation fail 2859test_autochdir() none enable 'autochdir' during startup 2860test_feedinput({string}) none add key sequence to input buffer 2861test_garbagecollect_now() none free memory right now for testing 2862test_garbagecollect_soon() none free memory soon for testing 2863test_getvalue({string}) any get value of an internal variable 2864test_ignore_error({expr}) none ignore a specific error 2865test_null_blob() Blob null value for testing 2866test_null_channel() Channel null value for testing 2867test_null_dict() Dict null value for testing 2868test_null_function() Funcref null value for testing 2869test_null_job() Job null value for testing 2870test_null_list() List null value for testing 2871test_null_partial() Funcref null value for testing 2872test_null_string() String null value for testing 2873test_unknown() any unknown value for testing 2874test_void() any void value for testing 2875test_option_not_set({name}) none reset flag indicating option was set 2876test_override({expr}, {val}) none test with Vim internal overrides 2877test_refcount({expr}) Number get the reference count of {expr} 2878test_scrollbar({which}, {value}, {dragging}) 2879 none scroll in the GUI for testing 2880test_setmouse({row}, {col}) none set the mouse position for testing 2881test_srand_seed([seed]) none set seed for testing srand() 2882test_settime({expr}) none set current time for testing 2883timer_info([{id}]) List information about timers 2884timer_pause({id}, {pause}) none pause or unpause a timer 2885timer_start({time}, {callback} [, {options}]) 2886 Number create a timer 2887timer_stop({timer}) none stop a timer 2888timer_stopall() none stop all timers 2889tolower({expr}) String the String {expr} switched to lowercase 2890toupper({expr}) String the String {expr} switched to uppercase 2891tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr} 2892 to chars in {tostr} 2893trim({text} [, {mask}]) String trim characters in {mask} from {text} 2894trunc({expr}) Float truncate Float {expr} 2895type({name}) Number type of variable {name} 2896undofile({name}) String undo file name for {name} 2897undotree() List undo file tree 2898uniq({list} [, {func} [, {dict}]]) 2899 List remove adjacent duplicates from a list 2900values({dict}) List values in {dict} 2901virtcol({expr}) Number screen column of cursor or mark 2902visualmode([expr]) String last visual mode used 2903wildmenumode() Number whether 'wildmenu' mode is active 2904win_execute({id}, {command} [, {silent}]) 2905 String execute {command} in window {id} 2906win_findbuf({bufnr}) List find windows containing {bufnr} 2907win_getid([{win} [, {tab}]]) Number get window ID for {win} in {tab} 2908win_gettype([{nr}]) String type of window {nr} 2909win_gotoid({expr}) Number go to window with ID {expr} 2910win_id2tabwin({expr}) List get tab and window nr from window ID 2911win_id2win({expr}) Number get window nr from window ID 2912win_screenpos({nr}) List get screen position of window {nr} 2913win_splitmove({nr}, {target} [, {options}]) 2914 Number move window {nr} to split of {target} 2915winbufnr({nr}) Number buffer number of window {nr} 2916wincol() Number window column of the cursor 2917winheight({nr}) Number height of window {nr} 2918winlayout([{tabnr}]) List layout of windows in tab {tabnr} 2919winline() Number window line of the cursor 2920winnr([{expr}]) Number number of current window 2921winrestcmd() String returns command to restore window sizes 2922winrestview({dict}) none restore view of current window 2923winsaveview() Dict save view of current window 2924winwidth({nr}) Number width of window {nr} 2925wordcount() Dict get byte/char/word statistics 2926writefile({object}, {fname} [, {flags}]) 2927 Number write |Blob| or |List| of lines to file 2928xor({expr}, {expr}) Number bitwise XOR 2929 2930 2931abs({expr}) *abs()* 2932 Return the absolute value of {expr}. When {expr} evaluates to 2933 a |Float| abs() returns a |Float|. When {expr} can be 2934 converted to a |Number| abs() returns a |Number|. Otherwise 2935 abs() gives an error message and returns -1. 2936 Examples: > 2937 echo abs(1.456) 2938< 1.456 > 2939 echo abs(-5.456) 2940< 5.456 > 2941 echo abs(-4) 2942< 4 2943 2944 Can also be used as a |method|: > 2945 Compute()->abs() 2946 2947< {only available when compiled with the |+float| feature} 2948 2949 2950acos({expr}) *acos()* 2951 Return the arc cosine of {expr} measured in radians, as a 2952 |Float| in the range of [0, pi]. 2953 {expr} must evaluate to a |Float| or a |Number| in the range 2954 [-1, 1]. 2955 Examples: > 2956 :echo acos(0) 2957< 1.570796 > 2958 :echo acos(-0.5) 2959< 2.094395 2960 2961 Can also be used as a |method|: > 2962 Compute()->acos() 2963 2964< {only available when compiled with the |+float| feature} 2965 2966 2967add({object}, {expr}) *add()* 2968 Append the item {expr} to |List| or |Blob| {object}. Returns 2969 the resulting |List| or |Blob|. Examples: > 2970 :let alist = add([1, 2, 3], item) 2971 :call add(mylist, "woodstock") 2972< Note that when {expr} is a |List| it is appended as a single 2973 item. Use |extend()| to concatenate |Lists|. 2974 When {object} is a |Blob| then {expr} must be a number. 2975 Use |insert()| to add an item at another position. 2976 2977 Can also be used as a |method|: > 2978 mylist->add(val1)->add(val2) 2979 2980 2981and({expr}, {expr}) *and()* 2982 Bitwise AND on the two arguments. The arguments are converted 2983 to a number. A List, Dict or Float argument causes an error. 2984 Example: > 2985 :let flag = and(bits, 0x80) 2986< Can also be used as a |method|: > 2987 :let flag = bits->and(0x80) 2988 2989 2990append({lnum}, {text}) *append()* 2991 When {text} is a |List|: Append each item of the |List| as a 2992 text line below line {lnum} in the current buffer. 2993 Otherwise append {text} as one text line below line {lnum} in 2994 the current buffer. 2995 {lnum} can be zero to insert a line before the first one. 2996 Returns 1 for failure ({lnum} out of range or out of memory), 2997 0 for success. Example: > 2998 :let failed = append(line('$'), "# THE END") 2999 :let failed = append(0, ["Chapter 1", "the beginning"]) 3000 3001< Can also be used as a |method| after a List: > 3002 mylist->append(lnum) 3003 3004 3005appendbufline({expr}, {lnum}, {text}) *appendbufline()* 3006 Like |append()| but append the text in buffer {expr}. 3007 3008 This function works only for loaded buffers. First call 3009 |bufload()| if needed. 3010 3011 For the use of {expr}, see |bufname()|. 3012 3013 {lnum} is used like with |append()|. Note that using |line()| 3014 would use the current buffer, not the one appending to. 3015 Use "$" to append at the end of the buffer. 3016 3017 On success 0 is returned, on failure 1 is returned. 3018 3019 If {expr} is not a valid buffer or {lnum} is not valid, an 3020 error message is given. Example: > 3021 :let failed = appendbufline(13, 0, "# THE START") 3022< 3023 Can also be used as a |method| after a List: > 3024 mylist->appendbufline(buf, lnum) 3025 3026 3027argc([{winid}]) *argc()* 3028 The result is the number of files in the argument list. See 3029 |arglist|. 3030 If {winid} is not supplied, the argument list of the current 3031 window is used. 3032 If {winid} is -1, the global argument list is used. 3033 Otherwise {winid} specifies the window of which the argument 3034 list is used: either the window number or the window ID. 3035 Returns -1 if the {winid} argument is invalid. 3036 3037 *argidx()* 3038argidx() The result is the current index in the argument list. 0 is 3039 the first file. argc() - 1 is the last one. See |arglist|. 3040 3041 *arglistid()* 3042arglistid([{winnr} [, {tabnr}]]) 3043 Return the argument list ID. This is a number which 3044 identifies the argument list being used. Zero is used for the 3045 global argument list. See |arglist|. 3046 Returns -1 if the arguments are invalid. 3047 3048 Without arguments use the current window. 3049 With {winnr} only use this window in the current tab page. 3050 With {winnr} and {tabnr} use the window in the specified tab 3051 page. 3052 {winnr} can be the window number or the |window-ID|. 3053 3054 *argv()* 3055argv([{nr} [, {winid}]]) 3056 The result is the {nr}th file in the argument list. See 3057 |arglist|. "argv(0)" is the first one. Example: > 3058 :let i = 0 3059 :while i < argc() 3060 : let f = escape(fnameescape(argv(i)), '.') 3061 : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>' 3062 : let i = i + 1 3063 :endwhile 3064< Without the {nr} argument, or when {nr} is -1, a |List| with 3065 the whole |arglist| is returned. 3066 3067 The {winid} argument specifies the window ID, see |argc()|. 3068 For the Vim command line arguments see |v:argv|. 3069 3070asin({expr}) *asin()* 3071 Return the arc sine of {expr} measured in radians, as a |Float| 3072 in the range of [-pi/2, pi/2]. 3073 {expr} must evaluate to a |Float| or a |Number| in the range 3074 [-1, 1]. 3075 Examples: > 3076 :echo asin(0.8) 3077< 0.927295 > 3078 :echo asin(-0.5) 3079< -0.523599 3080 3081 Can also be used as a |method|: > 3082 Compute()->asin() 3083< 3084 {only available when compiled with the |+float| feature} 3085 3086 3087assert_ functions are documented here: |assert-functions-details| 3088 3089 3090 3091atan({expr}) *atan()* 3092 Return the principal value of the arc tangent of {expr}, in 3093 the range [-pi/2, +pi/2] radians, as a |Float|. 3094 {expr} must evaluate to a |Float| or a |Number|. 3095 Examples: > 3096 :echo atan(100) 3097< 1.560797 > 3098 :echo atan(-4.01) 3099< -1.326405 3100 3101 Can also be used as a |method|: > 3102 Compute()->atan() 3103< 3104 {only available when compiled with the |+float| feature} 3105 3106 3107atan2({expr1}, {expr2}) *atan2()* 3108 Return the arc tangent of {expr1} / {expr2}, measured in 3109 radians, as a |Float| in the range [-pi, pi]. 3110 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 3111 Examples: > 3112 :echo atan2(-1, 1) 3113< -0.785398 > 3114 :echo atan2(1, -1) 3115< 2.356194 3116 3117 Can also be used as a |method|: > 3118 Compute()->atan(1) 3119< 3120 {only available when compiled with the |+float| feature} 3121 3122balloon_gettext() *balloon_gettext()* 3123 Return the current text in the balloon. Only for the string, 3124 not used for the List. 3125 3126balloon_show({expr}) *balloon_show()* 3127 Show {expr} inside the balloon. For the GUI {expr} is used as 3128 a string. For a terminal {expr} can be a list, which contains 3129 the lines of the balloon. If {expr} is not a list it will be 3130 split with |balloon_split()|. 3131 If {expr} is an empty string any existing balloon is removed. 3132 3133 Example: > 3134 func GetBalloonContent() 3135 " ... initiate getting the content 3136 return '' 3137 endfunc 3138 set balloonexpr=GetBalloonContent() 3139 3140 func BalloonCallback(result) 3141 call balloon_show(a:result) 3142 endfunc 3143< Can also be used as a |method|: > 3144 GetText()->balloon_show() 3145< 3146 The intended use is that fetching the content of the balloon 3147 is initiated from 'balloonexpr'. It will invoke an 3148 asynchronous method, in which a callback invokes 3149 balloon_show(). The 'balloonexpr' itself can return an 3150 empty string or a placeholder. 3151 3152 When showing a balloon is not possible nothing happens, no 3153 error message. 3154 {only available when compiled with the |+balloon_eval| or 3155 |+balloon_eval_term| feature} 3156 3157balloon_split({msg}) *balloon_split()* 3158 Split {msg} into lines to be displayed in a balloon. The 3159 splits are made for the current window size and optimize to 3160 show debugger output. 3161 Returns a |List| with the split lines. 3162 Can also be used as a |method|: > 3163 GetText()->balloon_split()->balloon_show() 3164 3165< {only available when compiled with the |+balloon_eval_term| 3166 feature} 3167 3168 *browse()* 3169browse({save}, {title}, {initdir}, {default}) 3170 Put up a file requester. This only works when "has("browse")" 3171 returns |TRUE| (only in some GUI versions). 3172 The input fields are: 3173 {save} when |TRUE|, select file to write 3174 {title} title for the requester 3175 {initdir} directory to start browsing in 3176 {default} default file name 3177 An empty string is returned when the "Cancel" button is hit, 3178 something went wrong, or browsing is not possible. 3179 3180 *browsedir()* 3181browsedir({title}, {initdir}) 3182 Put up a directory requester. This only works when 3183 "has("browse")" returns |TRUE| (only in some GUI versions). 3184 On systems where a directory browser is not supported a file 3185 browser is used. In that case: select a file in the directory 3186 to be used. 3187 The input fields are: 3188 {title} title for the requester 3189 {initdir} directory to start browsing in 3190 When the "Cancel" button is hit, something went wrong, or 3191 browsing is not possible, an empty string is returned. 3192 3193bufadd({name}) *bufadd()* 3194 Add a buffer to the buffer list with {name}. 3195 If a buffer for file {name} already exists, return that buffer 3196 number. Otherwise return the buffer number of the newly 3197 created buffer. When {name} is an empty string then a new 3198 buffer is always created. 3199 The buffer will not have 'buflisted' set and not be loaded 3200 yet. To add some text to the buffer use this: > 3201 let bufnr = bufadd('someName') 3202 call bufload(bufnr) 3203 call setbufline(bufnr, 1, ['some', 'text']) 3204< Can also be used as a |method|: > 3205 let bufnr = 'somename'->bufadd() 3206 3207bufexists({expr}) *bufexists()* 3208 The result is a Number, which is |TRUE| if a buffer called 3209 {expr} exists. 3210 If the {expr} argument is a number, buffer numbers are used. 3211 Number zero is the alternate buffer for the current window. 3212 3213 If the {expr} argument is a string it must match a buffer name 3214 exactly. The name can be: 3215 - Relative to the current directory. 3216 - A full path. 3217 - The name of a buffer with 'buftype' set to "nofile". 3218 - A URL name. 3219 Unlisted buffers will be found. 3220 Note that help files are listed by their short name in the 3221 output of |:buffers|, but bufexists() requires using their 3222 long name to be able to find them. 3223 bufexists() may report a buffer exists, but to use the name 3224 with a |:buffer| command you may need to use |expand()|. Esp 3225 for MS-Windows 8.3 names in the form "c:\DOCUME~1" 3226 Use "bufexists(0)" to test for the existence of an alternate 3227 file name. 3228 3229 Can also be used as a |method|: > 3230 let exists = 'somename'->bufexists() 3231< 3232 Obsolete name: buffer_exists(). *buffer_exists()* 3233 3234buflisted({expr}) *buflisted()* 3235 The result is a Number, which is |TRUE| if a buffer called 3236 {expr} exists and is listed (has the 'buflisted' option set). 3237 The {expr} argument is used like with |bufexists()|. 3238 3239 Can also be used as a |method|: > 3240 let listed = 'somename'->buflisted() 3241 3242bufload({expr}) *bufload()* 3243 Ensure the buffer {expr} is loaded. When the buffer name 3244 refers to an existing file then the file is read. Otherwise 3245 the buffer will be empty. If the buffer was already loaded 3246 then there is no change. 3247 If there is an existing swap file for the file of the buffer, 3248 there will be no dialog, the buffer will be loaded anyway. 3249 The {expr} argument is used like with |bufexists()|. 3250 3251 Can also be used as a |method|: > 3252 eval 'somename'->bufload() 3253 3254bufloaded({expr}) *bufloaded()* 3255 The result is a Number, which is |TRUE| if a buffer called 3256 {expr} exists and is loaded (shown in a window or hidden). 3257 The {expr} argument is used like with |bufexists()|. 3258 3259 Can also be used as a |method|: > 3260 let loaded = 'somename'->bufloaded() 3261 3262bufname([{expr}]) *bufname()* 3263 The result is the name of a buffer, as it is displayed by the 3264 ":ls" command. 3265 If {expr} is omitted the current buffer is used. 3266 If {expr} is a Number, that buffer number's name is given. 3267 Number zero is the alternate buffer for the current window. 3268 If {expr} is a String, it is used as a |file-pattern| to match 3269 with the buffer names. This is always done like 'magic' is 3270 set and 'cpoptions' is empty. When there is more than one 3271 match an empty string is returned. 3272 "" or "%" can be used for the current buffer, "#" for the 3273 alternate buffer. 3274 A full match is preferred, otherwise a match at the start, end 3275 or middle of the buffer name is accepted. If you only want a 3276 full match then put "^" at the start and "$" at the end of the 3277 pattern. 3278 Listed buffers are found first. If there is a single match 3279 with a listed buffer, that one is returned. Next unlisted 3280 buffers are searched for. 3281 If the {expr} is a String, but you want to use it as a buffer 3282 number, force it to be a Number by adding zero to it: > 3283 :echo bufname("3" + 0) 3284< Can also be used as a |method|: > 3285 echo bufnr->bufname() 3286 3287< If the buffer doesn't exist, or doesn't have a name, an empty 3288 string is returned. > 3289 bufname("#") alternate buffer name 3290 bufname(3) name of buffer 3 3291 bufname("%") name of current buffer 3292 bufname("file2") name of buffer where "file2" matches. 3293< *buffer_name()* 3294 Obsolete name: buffer_name(). 3295 3296 *bufnr()* 3297bufnr([{expr} [, {create}]]) 3298 The result is the number of a buffer, as it is displayed by 3299 the ":ls" command. For the use of {expr}, see |bufname()| 3300 above. 3301 3302 If the buffer doesn't exist, -1 is returned. Or, if the 3303 {create} argument is present and not zero, a new, unlisted, 3304 buffer is created and its number is returned. Example: > 3305 let newbuf = bufnr('Scratch001', 1) 3306< Using an empty name uses the current buffer. To create a new 3307 buffer with an empty name use |bufadd()|. 3308 3309 bufnr("$") is the last buffer: > 3310 :let last_buffer = bufnr("$") 3311< The result is a Number, which is the highest buffer number 3312 of existing buffers. Note that not all buffers with a smaller 3313 number necessarily exist, because ":bwipeout" may have removed 3314 them. Use bufexists() to test for the existence of a buffer. 3315 3316 Can also be used as a |method|: > 3317 echo bufref->bufnr() 3318< 3319 Obsolete name: buffer_number(). *buffer_number()* 3320 *last_buffer_nr()* 3321 Obsolete name for bufnr("$"): last_buffer_nr(). 3322 3323bufwinid({expr}) *bufwinid()* 3324 The result is a Number, which is the |window-ID| of the first 3325 window associated with buffer {expr}. For the use of {expr}, 3326 see |bufname()| above. If buffer {expr} doesn't exist or 3327 there is no such window, -1 is returned. Example: > 3328 3329 echo "A window containing buffer 1 is " . (bufwinid(1)) 3330< 3331 Only deals with the current tab page. 3332 3333 Can also be used as a |method|: > 3334 FindBuffer()->bufwinid() 3335 3336bufwinnr({expr}) *bufwinnr()* 3337 Like |bufwinid()| but return the window number instead of the 3338 |window-ID|. 3339 If buffer {expr} doesn't exist or there is no such window, -1 3340 is returned. Example: > 3341 3342 echo "A window containing buffer 1 is " . (bufwinnr(1)) 3343 3344< The number can be used with |CTRL-W_w| and ":wincmd w" 3345 |:wincmd|. 3346 3347 Can also be used as a |method|: > 3348 FindBuffer()->bufwinnr() 3349 3350byte2line({byte}) *byte2line()* 3351 Return the line number that contains the character at byte 3352 count {byte} in the current buffer. This includes the 3353 end-of-line character, depending on the 'fileformat' option 3354 for the current buffer. The first character has byte count 3355 one. 3356 Also see |line2byte()|, |go| and |:goto|. 3357 3358 Can also be used as a |method|: > 3359 GetOffset()->byte2line() 3360 3361< {not available when compiled without the |+byte_offset| 3362 feature} 3363 3364byteidx({expr}, {nr}) *byteidx()* 3365 Return byte index of the {nr}'th character in the string 3366 {expr}. Use zero for the first character, it returns zero. 3367 This function is only useful when there are multibyte 3368 characters, otherwise the returned value is equal to {nr}. 3369 Composing characters are not counted separately, their byte 3370 length is added to the preceding base character. See 3371 |byteidxcomp()| below for counting composing characters 3372 separately. 3373 Example : > 3374 echo matchstr(str, ".", byteidx(str, 3)) 3375< will display the fourth character. Another way to do the 3376 same: > 3377 let s = strpart(str, byteidx(str, 3)) 3378 echo strpart(s, 0, byteidx(s, 1)) 3379< Also see |strgetchar()| and |strcharpart()|. 3380 3381 If there are less than {nr} characters -1 is returned. 3382 If there are exactly {nr} characters the length of the string 3383 in bytes is returned. 3384 3385 Can also be used as a |method|: > 3386 GetName()->byteidx(idx) 3387 3388byteidxcomp({expr}, {nr}) *byteidxcomp()* 3389 Like byteidx(), except that a composing character is counted 3390 as a separate character. Example: > 3391 let s = 'e' . nr2char(0x301) 3392 echo byteidx(s, 1) 3393 echo byteidxcomp(s, 1) 3394 echo byteidxcomp(s, 2) 3395< The first and third echo result in 3 ('e' plus composing 3396 character is 3 bytes), the second echo results in 1 ('e' is 3397 one byte). 3398 Only works different from byteidx() when 'encoding' is set to 3399 a Unicode encoding. 3400 3401 Can also be used as a |method|: > 3402 GetName()->byteidxcomp(idx) 3403 3404call({func}, {arglist} [, {dict}]) *call()* *E699* 3405 Call function {func} with the items in |List| {arglist} as 3406 arguments. 3407 {func} can either be a |Funcref| or the name of a function. 3408 a:firstline and a:lastline are set to the cursor line. 3409 Returns the return value of the called function. 3410 {dict} is for functions with the "dict" attribute. It will be 3411 used to set the local variable "self". |Dictionary-function| 3412 3413 Can also be used as a |method|: > 3414 GetFunc()->call([arg, arg], dict) 3415 3416ceil({expr}) *ceil()* 3417 Return the smallest integral value greater than or equal to 3418 {expr} as a |Float| (round up). 3419 {expr} must evaluate to a |Float| or a |Number|. 3420 Examples: > 3421 echo ceil(1.456) 3422< 2.0 > 3423 echo ceil(-5.456) 3424< -5.0 > 3425 echo ceil(4.0) 3426< 4.0 3427 3428 Can also be used as a |method|: > 3429 Compute()->ceil() 3430< 3431 {only available when compiled with the |+float| feature} 3432 3433 3434ch_ functions are documented here: |channel-functions-details| 3435 3436 3437changenr() *changenr()* 3438 Return the number of the most recent change. This is the same 3439 number as what is displayed with |:undolist| and can be used 3440 with the |:undo| command. 3441 When a change was made it is the number of that change. After 3442 redo it is the number of the redone change. After undo it is 3443 one less than the number of the undone change. 3444 3445char2nr({expr} [, {utf8}]) *char2nr()* 3446 Return number value of the first char in {expr}. Examples: > 3447 char2nr(" ") returns 32 3448 char2nr("ABC") returns 65 3449< When {utf8} is omitted or zero, the current 'encoding' is used. 3450 Example for "utf-8": > 3451 char2nr("á") returns 225 3452 char2nr("á"[0]) returns 195 3453< With {utf8} set to 1, always treat as utf-8 characters. 3454 A combining character is a separate character. 3455 |nr2char()| does the opposite. 3456 To turn a string into a list of character numbers: > 3457 let str = "ABC" 3458 let list = map(split(str, '\zs'), {_, val -> char2nr(val)}) 3459< Result: [65, 66, 67] 3460 3461 Can also be used as a |method|: > 3462 GetChar()->char2nr() 3463 3464chdir({dir}) *chdir()* 3465 Change the current working directory to {dir}. The scope of 3466 the directory change depends on the directory of the current 3467 window: 3468 - If the current window has a window-local directory 3469 (|:lcd|), then changes the window local directory. 3470 - Otherwise, if the current tabpage has a local 3471 directory (|:tcd|) then changes the tabpage local 3472 directory. 3473 - Otherwise, changes the global directory. 3474 {dir} must be a String. 3475 If successful, returns the previous working directory. Pass 3476 this to another chdir() to restore the directory. 3477 On failure, returns an empty string. 3478 3479 Example: > 3480 let save_dir = chdir(newdir) 3481 if save_dir != "" 3482 " ... do some work 3483 call chdir(save_dir) 3484 endif 3485 3486< Can also be used as a |method|: > 3487 GetDir()->chdir() 3488< 3489cindent({lnum}) *cindent()* 3490 Get the amount of indent for line {lnum} according the C 3491 indenting rules, as with 'cindent'. 3492 The indent is counted in spaces, the value of 'tabstop' is 3493 relevant. {lnum} is used just like in |getline()|. 3494 When {lnum} is invalid or Vim was not compiled the |+cindent| 3495 feature, -1 is returned. 3496 See |C-indenting|. 3497 3498 Can also be used as a |method|: > 3499 GetLnum()->cindent() 3500 3501clearmatches([{win}]) *clearmatches()* 3502 Clears all matches previously defined for the current window 3503 by |matchadd()| and the |:match| commands. 3504 If {win} is specified, use the window with this number or 3505 window ID instead of the current window. 3506 3507 Can also be used as a |method|: > 3508 GetWin()->clearmatches() 3509< 3510 *col()* 3511col({expr}) The result is a Number, which is the byte index of the column 3512 position given with {expr}. The accepted positions are: 3513 . the cursor position 3514 $ the end of the cursor line (the result is the 3515 number of bytes in the cursor line plus one) 3516 'x position of mark x (if the mark is not set, 0 is 3517 returned) 3518 v In Visual mode: the start of the Visual area (the 3519 cursor is the end). When not in Visual mode 3520 returns the cursor position. Differs from |'<| in 3521 that it's updated right away. 3522 Additionally {expr} can be [lnum, col]: a |List| with the line 3523 and column number. Most useful when the column is "$", to get 3524 the last column of a specific line. When "lnum" or "col" is 3525 out of range then col() returns zero. 3526 To get the line number use |line()|. To get both use 3527 |getpos()|. 3528 For the screen column position use |virtcol()|. 3529 Note that only marks in the current file can be used. 3530 Examples: > 3531 col(".") column of cursor 3532 col("$") length of cursor line plus one 3533 col("'t") column of mark t 3534 col("'" . markname) column of mark markname 3535< The first column is 1. 0 is returned for an error. 3536 For an uppercase mark the column may actually be in another 3537 buffer. 3538 For the cursor position, when 'virtualedit' is active, the 3539 column is one higher if the cursor is after the end of the 3540 line. This can be used to obtain the column in Insert mode: > 3541 :imap <F2> <C-O>:let save_ve = &ve<CR> 3542 \<C-O>:set ve=all<CR> 3543 \<C-O>:echo col(".") . "\n" <Bar> 3544 \let &ve = save_ve<CR> 3545 3546< Can also be used as a |method|: > 3547 GetPos()->col() 3548< 3549 3550complete({startcol}, {matches}) *complete()* *E785* 3551 Set the matches for Insert mode completion. 3552 Can only be used in Insert mode. You need to use a mapping 3553 with CTRL-R = (see |i_CTRL-R|). It does not work after CTRL-O 3554 or with an expression mapping. 3555 {startcol} is the byte offset in the line where the completed 3556 text start. The text up to the cursor is the original text 3557 that will be replaced by the matches. Use col('.') for an 3558 empty string. "col('.') - 1" will replace one character by a 3559 match. 3560 {matches} must be a |List|. Each |List| item is one match. 3561 See |complete-items| for the kind of items that are possible. 3562 Note that the after calling this function you need to avoid 3563 inserting anything that would cause completion to stop. 3564 The match can be selected with CTRL-N and CTRL-P as usual with 3565 Insert mode completion. The popup menu will appear if 3566 specified, see |ins-completion-menu|. 3567 Example: > 3568 inoremap <F5> <C-R>=ListMonths()<CR> 3569 3570 func! ListMonths() 3571 call complete(col('.'), ['January', 'February', 'March', 3572 \ 'April', 'May', 'June', 'July', 'August', 'September', 3573 \ 'October', 'November', 'December']) 3574 return '' 3575 endfunc 3576< This isn't very useful, but it shows how it works. Note that 3577 an empty string is returned to avoid a zero being inserted. 3578 3579 Can also be used as a |method|, the base is passed as the 3580 second argument: > 3581 GetMatches()->complete(col('.')) 3582 3583complete_add({expr}) *complete_add()* 3584 Add {expr} to the list of matches. Only to be used by the 3585 function specified with the 'completefunc' option. 3586 Returns 0 for failure (empty string or out of memory), 3587 1 when the match was added, 2 when the match was already in 3588 the list. 3589 See |complete-functions| for an explanation of {expr}. It is 3590 the same as one item in the list that 'omnifunc' would return. 3591 3592 Can also be used as a |method|: > 3593 GetMoreMatches()->complete_add() 3594 3595complete_check() *complete_check()* 3596 Check for a key typed while looking for completion matches. 3597 This is to be used when looking for matches takes some time. 3598 Returns |TRUE| when searching for matches is to be aborted, 3599 zero otherwise. 3600 Only to be used by the function specified with the 3601 'completefunc' option. 3602 3603 *complete_info()* 3604complete_info([{what}]) 3605 Returns a Dictionary with information about Insert mode 3606 completion. See |ins-completion|. 3607 The items are: 3608 mode Current completion mode name string. 3609 See |complete_info_mode| for the values. 3610 pum_visible |TRUE| if popup menu is visible. 3611 See |pumvisible()|. 3612 items List of completion matches. Each item is a 3613 dictionary containing the entries "word", 3614 "abbr", "menu", "kind", "info" and "user_data". 3615 See |complete-items|. 3616 selected Selected item index. First index is zero. 3617 Index is -1 if no item is selected (showing 3618 typed text only) 3619 inserted Inserted string. [NOT IMPLEMENT YET] 3620 3621 *complete_info_mode* 3622 mode values are: 3623 "" Not in completion mode 3624 "keyword" Keyword completion |i_CTRL-X_CTRL-N| 3625 "ctrl_x" Just pressed CTRL-X |i_CTRL-X| 3626 "whole_line" Whole lines |i_CTRL-X_CTRL-L| 3627 "files" File names |i_CTRL-X_CTRL-F| 3628 "tags" Tags |i_CTRL-X_CTRL-]| 3629 "path_defines" Definition completion |i_CTRL-X_CTRL-D| 3630 "path_patterns" Include completion |i_CTRL-X_CTRL-I| 3631 "dictionary" Dictionary |i_CTRL-X_CTRL-K| 3632 "thesaurus" Thesaurus |i_CTRL-X_CTRL-T| 3633 "cmdline" Vim Command line |i_CTRL-X_CTRL-V| 3634 "function" User defined completion |i_CTRL-X_CTRL-U| 3635 "omni" Omni completion |i_CTRL-X_CTRL-O| 3636 "spell" Spelling suggestions |i_CTRL-X_s| 3637 "eval" |complete()| completion 3638 "unknown" Other internal modes 3639 3640 If the optional {what} list argument is supplied, then only 3641 the items listed in {what} are returned. Unsupported items in 3642 {what} are silently ignored. 3643 3644 To get the position and size of the popup menu, see 3645 |pum_getpos()|. It's also available in |v:event| during the 3646 |CompleteChanged| event. 3647 3648 Examples: > 3649 " Get all items 3650 call complete_info() 3651 " Get only 'mode' 3652 call complete_info(['mode']) 3653 " Get only 'mode' and 'pum_visible' 3654 call complete_info(['mode', 'pum_visible']) 3655 3656< Can also be used as a |method|: > 3657 GetItems()->complete_info() 3658< 3659 *confirm()* 3660confirm({msg} [, {choices} [, {default} [, {type}]]]) 3661 confirm() offers the user a dialog, from which a choice can be 3662 made. It returns the number of the choice. For the first 3663 choice this is 1. 3664 Note: confirm() is only supported when compiled with dialog 3665 support, see |+dialog_con| and |+dialog_gui|. 3666 3667 {msg} is displayed in a |dialog| with {choices} as the 3668 alternatives. When {choices} is missing or empty, "&OK" is 3669 used (and translated). 3670 {msg} is a String, use '\n' to include a newline. Only on 3671 some systems the string is wrapped when it doesn't fit. 3672 3673 {choices} is a String, with the individual choices separated 3674 by '\n', e.g. > 3675 confirm("Save changes?", "&Yes\n&No\n&Cancel") 3676< The letter after the '&' is the shortcut key for that choice. 3677 Thus you can type 'c' to select "Cancel". The shortcut does 3678 not need to be the first letter: > 3679 confirm("file has been modified", "&Save\nSave &All") 3680< For the console, the first letter of each choice is used as 3681 the default shortcut key. 3682 3683 The optional {default} argument is the number of the choice 3684 that is made if the user hits <CR>. Use 1 to make the first 3685 choice the default one. Use 0 to not set a default. If 3686 {default} is omitted, 1 is used. 3687 3688 The optional {type} argument gives the type of dialog. This 3689 is only used for the icon of the GTK, Mac, Motif and Win32 3690 GUI. It can be one of these values: "Error", "Question", 3691 "Info", "Warning" or "Generic". Only the first character is 3692 relevant. When {type} is omitted, "Generic" is used. 3693 3694 If the user aborts the dialog by pressing <Esc>, CTRL-C, 3695 or another valid interrupt key, confirm() returns 0. 3696 3697 An example: > 3698 :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2) 3699 :if choice == 0 3700 : echo "make up your mind!" 3701 :elseif choice == 3 3702 : echo "tasteful" 3703 :else 3704 : echo "I prefer bananas myself." 3705 :endif 3706< In a GUI dialog, buttons are used. The layout of the buttons 3707 depends on the 'v' flag in 'guioptions'. If it is included, 3708 the buttons are always put vertically. Otherwise, confirm() 3709 tries to put the buttons in one horizontal line. If they 3710 don't fit, a vertical layout is used anyway. For some systems 3711 the horizontal layout is always used. 3712 3713 Can also be used as a |method|in: > 3714 BuildMessage()->confirm("&Yes\n&No") 3715< 3716 *copy()* 3717copy({expr}) Make a copy of {expr}. For Numbers and Strings this isn't 3718 different from using {expr} directly. 3719 When {expr} is a |List| a shallow copy is created. This means 3720 that the original |List| can be changed without changing the 3721 copy, and vice versa. But the items are identical, thus 3722 changing an item changes the contents of both |Lists|. 3723 A |Dictionary| is copied in a similar way as a |List|. 3724 Also see |deepcopy()|. 3725 Can also be used as a |method|: > 3726 mylist->copy() 3727 3728cos({expr}) *cos()* 3729 Return the cosine of {expr}, measured in radians, as a |Float|. 3730 {expr} must evaluate to a |Float| or a |Number|. 3731 Examples: > 3732 :echo cos(100) 3733< 0.862319 > 3734 :echo cos(-4.01) 3735< -0.646043 3736 3737 Can also be used as a |method|: > 3738 Compute()->cos() 3739< 3740 {only available when compiled with the |+float| feature} 3741 3742 3743cosh({expr}) *cosh()* 3744 Return the hyperbolic cosine of {expr} as a |Float| in the range 3745 [1, inf]. 3746 {expr} must evaluate to a |Float| or a |Number|. 3747 Examples: > 3748 :echo cosh(0.5) 3749< 1.127626 > 3750 :echo cosh(-0.5) 3751< -1.127626 3752 3753 Can also be used as a |method|: > 3754 Compute()->cosh() 3755< 3756 {only available when compiled with the |+float| feature} 3757 3758 3759count({comp}, {expr} [, {ic} [, {start}]]) *count()* 3760 Return the number of times an item with value {expr} appears 3761 in |String|, |List| or |Dictionary| {comp}. 3762 3763 If {start} is given then start with the item with this index. 3764 {start} can only be used with a |List|. 3765 3766 When {ic} is given and it's |TRUE| then case is ignored. 3767 3768 When {comp} is a string then the number of not overlapping 3769 occurrences of {expr} is returned. Zero is returned when 3770 {expr} is an empty string. 3771 3772 Can also be used as a |method|: > 3773 mylist->count(val) 3774< 3775 *cscope_connection()* 3776cscope_connection([{num} , {dbpath} [, {prepend}]]) 3777 Checks for the existence of a |cscope| connection. If no 3778 parameters are specified, then the function returns: 3779 0, if cscope was not available (not compiled in), or 3780 if there are no cscope connections; 3781 1, if there is at least one cscope connection. 3782 3783 If parameters are specified, then the value of {num} 3784 determines how existence of a cscope connection is checked: 3785 3786 {num} Description of existence check 3787 ----- ------------------------------ 3788 0 Same as no parameters (e.g., "cscope_connection()"). 3789 1 Ignore {prepend}, and use partial string matches for 3790 {dbpath}. 3791 2 Ignore {prepend}, and use exact string matches for 3792 {dbpath}. 3793 3 Use {prepend}, use partial string matches for both 3794 {dbpath} and {prepend}. 3795 4 Use {prepend}, use exact string matches for both 3796 {dbpath} and {prepend}. 3797 3798 Note: All string comparisons are case sensitive! 3799 3800 Examples. Suppose we had the following (from ":cs show"): > 3801 3802 # pid database name prepend path 3803 0 27664 cscope.out /usr/local 3804< 3805 Invocation Return Val ~ 3806 ---------- ---------- > 3807 cscope_connection() 1 3808 cscope_connection(1, "out") 1 3809 cscope_connection(2, "out") 0 3810 cscope_connection(3, "out") 0 3811 cscope_connection(3, "out", "local") 1 3812 cscope_connection(4, "out") 0 3813 cscope_connection(4, "out", "local") 0 3814 cscope_connection(4, "cscope.out", "/usr/local") 1 3815< 3816cursor({lnum}, {col} [, {off}]) *cursor()* 3817cursor({list}) 3818 Positions the cursor at the column (byte count) {col} in the 3819 line {lnum}. The first column is one. 3820 3821 When there is one argument {list} this is used as a |List| 3822 with two, three or four item: 3823 [{lnum}, {col}] 3824 [{lnum}, {col}, {off}] 3825 [{lnum}, {col}, {off}, {curswant}] 3826 This is like the return value of |getpos()| or |getcurpos()|, 3827 but without the first item. 3828 3829 Does not change the jumplist. 3830 If {lnum} is greater than the number of lines in the buffer, 3831 the cursor will be positioned at the last line in the buffer. 3832 If {lnum} is zero, the cursor will stay in the current line. 3833 If {col} is greater than the number of bytes in the line, 3834 the cursor will be positioned at the last character in the 3835 line. 3836 If {col} is zero, the cursor will stay in the current column. 3837 If {curswant} is given it is used to set the preferred column 3838 for vertical movement. Otherwise {col} is used. 3839 3840 When 'virtualedit' is used {off} specifies the offset in 3841 screen columns from the start of the character. E.g., a 3842 position within a <Tab> or after the last character. 3843 Returns 0 when the position could be set, -1 otherwise. 3844 3845 Can also be used as a |method|: > 3846 GetCursorPos()->cursor() 3847 3848debugbreak({pid}) *debugbreak()* 3849 Specifically used to interrupt a program being debugged. It 3850 will cause process {pid} to get a SIGTRAP. Behavior for other 3851 processes is undefined. See |terminal-debugger|. 3852 {only available on MS-Windows} 3853 3854 Can also be used as a |method|: > 3855 GetPid()->debugbreak() 3856 3857deepcopy({expr} [, {noref}]) *deepcopy()* *E698* 3858 Make a copy of {expr}. For Numbers and Strings this isn't 3859 different from using {expr} directly. 3860 When {expr} is a |List| a full copy is created. This means 3861 that the original |List| can be changed without changing the 3862 copy, and vice versa. When an item is a |List| or 3863 |Dictionary|, a copy for it is made, recursively. Thus 3864 changing an item in the copy does not change the contents of 3865 the original |List|. 3866 A |Dictionary| is copied in a similar way as a |List|. 3867 When {noref} is omitted or zero a contained |List| or 3868 |Dictionary| is only copied once. All references point to 3869 this single copy. With {noref} set to 1 every occurrence of a 3870 |List| or |Dictionary| results in a new copy. This also means 3871 that a cyclic reference causes deepcopy() to fail. 3872 *E724* 3873 Nesting is possible up to 100 levels. When there is an item 3874 that refers back to a higher level making a deep copy with 3875 {noref} set to 1 will fail. 3876 Also see |copy()|. 3877 3878 Can also be used as a |method|: > 3879 GetObject()->deepcopy() 3880 3881delete({fname} [, {flags}]) *delete()* 3882 Without {flags} or with {flags} empty: Deletes the file by the 3883 name {fname}. This also works when {fname} is a symbolic link. 3884 3885 When {flags} is "d": Deletes the directory by the name 3886 {fname}. This fails when directory {fname} is not empty. 3887 3888 When {flags} is "rf": Deletes the directory by the name 3889 {fname} and everything in it, recursively. BE CAREFUL! 3890 Note: on MS-Windows it is not possible to delete a directory 3891 that is being used. 3892 3893 A symbolic link itself is deleted, not what it points to. 3894 3895 The result is a Number, which is 0 if the delete operation was 3896 successful and -1 when the deletion failed or partly failed. 3897 3898 Use |remove()| to delete an item from a |List|. 3899 To delete a line from the buffer use |:delete| or 3900 |deletebufline()|. 3901 3902 Can also be used as a |method|: > 3903 GetName()->delete() 3904 3905deletebufline({expr}, {first} [, {last}]) *deletebufline()* 3906 Delete lines {first} to {last} (inclusive) from buffer {expr}. 3907 If {last} is omitted then delete line {first} only. 3908 On success 0 is returned, on failure 1 is returned. 3909 3910 This function works only for loaded buffers. First call 3911 |bufload()| if needed. 3912 3913 For the use of {expr}, see |bufname()| above. 3914 3915 {first} and {last} are used like with |getline()|. Note that 3916 when using |line()| this refers to the current buffer. Use "$" 3917 to refer to the last line in buffer {expr}. 3918 3919 Can also be used as a |method|: > 3920 GetBuffer()->deletebufline(1) 3921< 3922 *did_filetype()* 3923did_filetype() Returns |TRUE| when autocommands are being executed and the 3924 FileType event has been triggered at least once. Can be used 3925 to avoid triggering the FileType event again in the scripts 3926 that detect the file type. |FileType| 3927 Returns |FALSE| when `:setf FALLBACK` was used. 3928 When editing another file, the counter is reset, thus this 3929 really checks if the FileType event has been triggered for the 3930 current buffer. This allows an autocommand that starts 3931 editing another buffer to set 'filetype' and load a syntax 3932 file. 3933 3934diff_filler({lnum}) *diff_filler()* 3935 Returns the number of filler lines above line {lnum}. 3936 These are the lines that were inserted at this point in 3937 another diff'ed window. These filler lines are shown in the 3938 display but don't exist in the buffer. 3939 {lnum} is used like with |getline()|. Thus "." is the current 3940 line, "'m" mark m, etc. 3941 Returns 0 if the current window is not in diff mode. 3942 3943 Can also be used as a |method|: > 3944 GetLnum()->diff_filler() 3945 3946diff_hlID({lnum}, {col}) *diff_hlID()* 3947 Returns the highlight ID for diff mode at line {lnum} column 3948 {col} (byte index). When the current line does not have a 3949 diff change zero is returned. 3950 {lnum} is used like with |getline()|. Thus "." is the current 3951 line, "'m" mark m, etc. 3952 {col} is 1 for the leftmost column, {lnum} is 1 for the first 3953 line. 3954 The highlight ID can be used with |synIDattr()| to obtain 3955 syntax information about the highlighting. 3956 3957 Can also be used as a |method|: > 3958 GetLnum()->diff_hlID(col) 3959 3960 3961echoraw({expr}) *echoraw()* 3962 Output {expr} as-is, including unprintable characters. This 3963 can be used to output a terminal code. For example, to disable 3964 modifyOtherKeys: > 3965 call echoraw(&t_TE) 3966< and to enable it again: > 3967 call echoraw(&t_TI) 3968< Use with care, you can mess up the terminal this way. 3969 3970 3971empty({expr}) *empty()* 3972 Return the Number 1 if {expr} is empty, zero otherwise. 3973 - A |List| or |Dictionary| is empty when it does not have any 3974 items. 3975 - A |String| is empty when its length is zero. 3976 - A |Number| and |Float| are empty when their value is zero. 3977 - |v:false|, |v:none| and |v:null| are empty, |v:true| is not. 3978 - A |Job| is empty when it failed to start. 3979 - A |Channel| is empty when it is closed. 3980 - A |Blob| is empty when its length is zero. 3981 3982 For a long |List| this is much faster than comparing the 3983 length with zero. 3984 3985 Can also be used as a |method|: > 3986 mylist->empty() 3987 3988environ() *environ()* 3989 Return all of environment variables as dictionary. You can 3990 check if an environment variable exists like this: > 3991 :echo has_key(environ(), 'HOME') 3992< Note that the variable name may be CamelCase; to ignore case 3993 use this: > 3994 :echo index(keys(environ()), 'HOME', 0, 1) != -1 3995 3996escape({string}, {chars}) *escape()* 3997 Escape the characters in {chars} that occur in {string} with a 3998 backslash. Example: > 3999 :echo escape('c:\program files\vim', ' \') 4000< results in: > 4001 c:\\program\ files\\vim 4002< Also see |shellescape()| and |fnameescape()|. 4003 4004 Can also be used as a |method|: > 4005 GetText()->escape(' \') 4006< 4007 *eval()* 4008eval({string}) Evaluate {string} and return the result. Especially useful to 4009 turn the result of |string()| back into the original value. 4010 This works for Numbers, Floats, Strings, Blobs and composites 4011 of them. Also works for |Funcref|s that refer to existing 4012 functions. 4013 4014 Can also be used as a |method|: > 4015 argv->join()->eval() 4016 4017eventhandler() *eventhandler()* 4018 Returns 1 when inside an event handler. That is that Vim got 4019 interrupted while waiting for the user to type a character, 4020 e.g., when dropping a file on Vim. This means interactive 4021 commands cannot be used. Otherwise zero is returned. 4022 4023executable({expr}) *executable()* 4024 This function checks if an executable with the name {expr} 4025 exists. {expr} must be the name of the program without any 4026 arguments. 4027 executable() uses the value of $PATH and/or the normal 4028 searchpath for programs. *PATHEXT* 4029 On MS-Windows the ".exe", ".bat", etc. can optionally be 4030 included. Then the extensions in $PATHEXT are tried. Thus if 4031 "foo.exe" does not exist, "foo.exe.bat" can be found. If 4032 $PATHEXT is not set then ".exe;.com;.bat;.cmd" is used. A dot 4033 by itself can be used in $PATHEXT to try using the name 4034 without an extension. When 'shell' looks like a Unix shell, 4035 then the name is also tried without adding an extension. 4036 On MS-Windows it only checks if the file exists and is not a 4037 directory, not if it's really executable. 4038 On MS-Windows an executable in the same directory as Vim is 4039 always found. Since this directory is added to $PATH it 4040 should also work to execute it |win32-PATH|. 4041 The result is a Number: 4042 1 exists 4043 0 does not exist 4044 -1 not implemented on this system 4045 |exepath()| can be used to get the full path of an executable. 4046 4047 Can also be used as a |method|: > 4048 GetCommand()->executable() 4049 4050execute({command} [, {silent}]) *execute()* 4051 Execute an Ex command or commands and return the output as a 4052 string. 4053 {command} can be a string or a List. In case of a List the 4054 lines are executed one by one. 4055 This is equivalent to: > 4056 redir => var 4057 {command} 4058 redir END 4059< 4060 The optional {silent} argument can have these values: 4061 "" no `:silent` used 4062 "silent" `:silent` used 4063 "silent!" `:silent!` used 4064 The default is "silent". Note that with "silent!", unlike 4065 `:redir`, error messages are dropped. When using an external 4066 command the screen may be messed up, use `system()` instead. 4067 *E930* 4068 It is not possible to use `:redir` anywhere in {command}. 4069 4070 To get a list of lines use |split()| on the result: > 4071 split(execute('args'), "\n") 4072 4073< To execute a command in another window than the current one 4074 use `win_execute()`. 4075 4076 When used recursively the output of the recursive call is not 4077 included in the output of the higher level call. 4078 4079 Can also be used as a |method|: > 4080 GetCommand()->execute() 4081 4082exepath({expr}) *exepath()* 4083 If {expr} is an executable and is either an absolute path, a 4084 relative path or found in $PATH, return the full path. 4085 Note that the current directory is used when {expr} starts 4086 with "./", which may be a problem for Vim: > 4087 echo exepath(v:progpath) 4088< If {expr} cannot be found in $PATH or is not executable then 4089 an empty string is returned. 4090 4091 Can also be used as a |method|: > 4092 GetCommand()->exepath() 4093< 4094 *exists()* 4095exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined, 4096 zero otherwise. 4097 4098 For checking for a supported feature use |has()|. 4099 For checking if a file exists use |filereadable()|. 4100 4101 The {expr} argument is a string, which contains one of these: 4102 &option-name Vim option (only checks if it exists, 4103 not if it really works) 4104 +option-name Vim option that works. 4105 $ENVNAME environment variable (could also be 4106 done by comparing with an empty 4107 string) 4108 *funcname built-in function (see |functions|) 4109 or user defined function (see 4110 |user-functions|) that is implemented. 4111 Also works for a variable that is a 4112 Funcref. 4113 ?funcname built-in function that could be 4114 implemented; to be used to check if 4115 "funcname" is valid 4116 varname internal variable (see 4117 |internal-variables|). Also works 4118 for |curly-braces-names|, |Dictionary| 4119 entries, |List| items, etc. Beware 4120 that evaluating an index may cause an 4121 error message for an invalid 4122 expression. E.g.: > 4123 :let l = [1, 2, 3] 4124 :echo exists("l[5]") 4125< 0 > 4126 :echo exists("l[xx]") 4127< E121: Undefined variable: xx 4128 0 4129 :cmdname Ex command: built-in command, user 4130 command or command modifier |:command|. 4131 Returns: 4132 1 for match with start of a command 4133 2 full match with a command 4134 3 matches several user commands 4135 To check for a supported command 4136 always check the return value to be 2. 4137 :2match The |:2match| command. 4138 :3match The |:3match| command. 4139 #event autocommand defined for this event 4140 #event#pattern autocommand defined for this event and 4141 pattern (the pattern is taken 4142 literally and compared to the 4143 autocommand patterns character by 4144 character) 4145 #group autocommand group exists 4146 #group#event autocommand defined for this group and 4147 event. 4148 #group#event#pattern 4149 autocommand defined for this group, 4150 event and pattern. 4151 ##event autocommand for this event is 4152 supported. 4153 4154 Examples: > 4155 exists("&shortname") 4156 exists("$HOSTNAME") 4157 exists("*strftime") 4158 exists("*s:MyFunc") 4159 exists("bufcount") 4160 exists(":Make") 4161 exists("#CursorHold") 4162 exists("#BufReadPre#*.gz") 4163 exists("#filetypeindent") 4164 exists("#filetypeindent#FileType") 4165 exists("#filetypeindent#FileType#*") 4166 exists("##ColorScheme") 4167< There must be no space between the symbol (&/$/*/#) and the 4168 name. 4169 There must be no extra characters after the name, although in 4170 a few cases this is ignored. That may become more strict in 4171 the future, thus don't count on it! 4172 Working example: > 4173 exists(":make") 4174< NOT working example: > 4175 exists(":make install") 4176 4177< Note that the argument must be a string, not the name of the 4178 variable itself. For example: > 4179 exists(bufcount) 4180< This doesn't check for existence of the "bufcount" variable, 4181 but gets the value of "bufcount", and checks if that exists. 4182 4183 Can also be used as a |method|: > 4184 Varname()->exists() 4185 4186exp({expr}) *exp()* 4187 Return the exponential of {expr} as a |Float| in the range 4188 [0, inf]. 4189 {expr} must evaluate to a |Float| or a |Number|. 4190 Examples: > 4191 :echo exp(2) 4192< 7.389056 > 4193 :echo exp(-1) 4194< 0.367879 4195 4196 Can also be used as a |method|: > 4197 Compute()->exp() 4198< 4199 {only available when compiled with the |+float| feature} 4200 4201 4202expand({expr} [, {nosuf} [, {list}]]) *expand()* 4203 Expand wildcards and the following special keywords in {expr}. 4204 'wildignorecase' applies. 4205 4206 If {list} is given and it is |TRUE|, a List will be returned. 4207 Otherwise the result is a String and when there are several 4208 matches, they are separated by <NL> characters. [Note: in 4209 version 5.0 a space was used, which caused problems when a 4210 file name contains a space] 4211 4212 If the expansion fails, the result is an empty string. A name 4213 for a non-existing file is not included, unless {expr} does 4214 not start with '%', '#' or '<', see below. 4215 4216 When {expr} starts with '%', '#' or '<', the expansion is done 4217 like for the |cmdline-special| variables with their associated 4218 modifiers. Here is a short overview: 4219 4220 % current file name 4221 # alternate file name 4222 #n alternate file name n 4223 <cfile> file name under the cursor 4224 <afile> autocmd file name 4225 <abuf> autocmd buffer number (as a String!) 4226 <amatch> autocmd matched name 4227 <sfile> sourced script file or function name 4228 <slnum> sourced script line number or function 4229 line number 4230 <sflnum> script file line number, also when in 4231 a function 4232 <cword> word under the cursor 4233 <cWORD> WORD under the cursor 4234 <client> the {clientid} of the last received 4235 message |server2client()| 4236 Modifiers: 4237 :p expand to full path 4238 :h head (last path component removed) 4239 :t tail (last path component only) 4240 :r root (one extension removed) 4241 :e extension only 4242 4243 Example: > 4244 :let &tags = expand("%:p:h") . "/tags" 4245< Note that when expanding a string that starts with '%', '#' or 4246 '<', any following text is ignored. This does NOT work: > 4247 :let doesntwork = expand("%:h.bak") 4248< Use this: > 4249 :let doeswork = expand("%:h") . ".bak" 4250< Also note that expanding "<cfile>" and others only returns the 4251 referenced file name without further expansion. If "<cfile>" 4252 is "~/.cshrc", you need to do another expand() to have the 4253 "~/" expanded into the path of the home directory: > 4254 :echo expand(expand("<cfile>")) 4255< 4256 There cannot be white space between the variables and the 4257 following modifier. The |fnamemodify()| function can be used 4258 to modify normal file names. 4259 4260 When using '%' or '#', and the current or alternate file name 4261 is not defined, an empty string is used. Using "%:p" in a 4262 buffer with no name, results in the current directory, with a 4263 '/' added. 4264 4265 When {expr} does not start with '%', '#' or '<', it is 4266 expanded like a file name is expanded on the command line. 4267 'suffixes' and 'wildignore' are used, unless the optional 4268 {nosuf} argument is given and it is |TRUE|. 4269 Names for non-existing files are included. The "**" item can 4270 be used to search in a directory tree. For example, to find 4271 all "README" files in the current directory and below: > 4272 :echo expand("**/README") 4273< 4274 expand() can also be used to expand variables and environment 4275 variables that are only known in a shell. But this can be 4276 slow, because a shell may be used to do the expansion. See 4277 |expr-env-expand|. 4278 The expanded variable is still handled like a list of file 4279 names. When an environment variable cannot be expanded, it is 4280 left unchanged. Thus ":echo expand('$FOOBAR')" results in 4281 "$FOOBAR". 4282 4283 See |glob()| for finding existing files. See |system()| for 4284 getting the raw output of an external command. 4285 4286 Can also be used as a |method|: > 4287 Getpattern()->expand() 4288 4289expandcmd({expr}) *expandcmd()* 4290 Expand special items in {expr} like what is done for an Ex 4291 command such as `:edit`. This expands special keywords, like 4292 with |expand()|, and environment variables, anywhere in 4293 {expr}. "~user" and "~/path" are only expanded at the start. 4294 Returns the expanded string. Example: > 4295 :echo expandcmd('make %<.o') 4296 4297< Can also be used as a |method|: > 4298 GetCommand()->expandcmd() 4299< 4300extend({expr1}, {expr2} [, {expr3}]) *extend()* 4301 {expr1} and {expr2} must be both |Lists| or both 4302 |Dictionaries|. 4303 4304 If they are |Lists|: Append {expr2} to {expr1}. 4305 If {expr3} is given insert the items of {expr2} before item 4306 {expr3} in {expr1}. When {expr3} is zero insert before the 4307 first item. When {expr3} is equal to len({expr1}) then 4308 {expr2} is appended. 4309 Examples: > 4310 :echo sort(extend(mylist, [7, 5])) 4311 :call extend(mylist, [2, 3], 1) 4312< When {expr1} is the same List as {expr2} then the number of 4313 items copied is equal to the original length of the List. 4314 E.g., when {expr3} is 1 you get N new copies of the first item 4315 (where N is the original length of the List). 4316 Use |add()| to concatenate one item to a list. To concatenate 4317 two lists into a new list use the + operator: > 4318 :let newlist = [1, 2, 3] + [4, 5] 4319< 4320 If they are |Dictionaries|: 4321 Add all entries from {expr2} to {expr1}. 4322 If a key exists in both {expr1} and {expr2} then {expr3} is 4323 used to decide what to do: 4324 {expr3} = "keep": keep the value of {expr1} 4325 {expr3} = "force": use the value of {expr2} 4326 {expr3} = "error": give an error message *E737* 4327 When {expr3} is omitted then "force" is assumed. 4328 4329 {expr1} is changed when {expr2} is not empty. If necessary 4330 make a copy of {expr1} first. 4331 {expr2} remains unchanged. 4332 When {expr1} is locked and {expr2} is not empty the operation 4333 fails. 4334 Returns {expr1}. 4335 4336 Can also be used as a |method|: > 4337 mylist->extend(otherlist) 4338 4339 4340feedkeys({string} [, {mode}]) *feedkeys()* 4341 Characters in {string} are queued for processing as if they 4342 come from a mapping or were typed by the user. 4343 4344 By default the string is added to the end of the typeahead 4345 buffer, thus if a mapping is still being executed the 4346 characters come after them. Use the 'i' flag to insert before 4347 other characters, they will be executed next, before any 4348 characters from a mapping. 4349 4350 The function does not wait for processing of keys contained in 4351 {string}. 4352 4353 To include special keys into {string}, use double-quotes 4354 and "\..." notation |expr-quote|. For example, 4355 feedkeys("\<CR>") simulates pressing of the <Enter> key. But 4356 feedkeys('\<CR>') pushes 5 characters. 4357 A special code that might be useful is <Ignore>, it exits the 4358 wait for a character without doing anything. *<Ignore>* 4359 4360 {mode} is a String, which can contain these character flags: 4361 'm' Remap keys. This is default. If {mode} is absent, 4362 keys are remapped. 4363 'n' Do not remap keys. 4364 't' Handle keys as if typed; otherwise they are handled as 4365 if coming from a mapping. This matters for undo, 4366 opening folds, etc. 4367 'L' Lowlevel input. Only works for Unix or when using the 4368 GUI. Keys are used as if they were coming from the 4369 terminal. Other flags are not used. *E980* 4370 When a CTRL-C interrupts and 't' is included it sets 4371 the internal "got_int" flag. 4372 'i' Insert the string instead of appending (see above). 4373 'x' Execute commands until typeahead is empty. This is 4374 similar to using ":normal!". You can call feedkeys() 4375 several times without 'x' and then one time with 'x' 4376 (possibly with an empty {string}) to execute all the 4377 typeahead. Note that when Vim ends in Insert mode it 4378 will behave as if <Esc> is typed, to avoid getting 4379 stuck, waiting for a character to be typed before the 4380 script continues. 4381 Note that if you manage to call feedkeys() while 4382 executing commands, thus calling it recursively, then 4383 all typehead will be consumed by the last call. 4384 '!' When used with 'x' will not end Insert mode. Can be 4385 used in a test when a timer is set to exit Insert mode 4386 a little later. Useful for testing CursorHoldI. 4387 4388 Return value is always 0. 4389 4390 Can also be used as a |method|: > 4391 GetInput()->feedkeys() 4392 4393filereadable({file}) *filereadable()* 4394 The result is a Number, which is |TRUE| when a file with the 4395 name {file} exists, and can be read. If {file} doesn't exist, 4396 or is a directory, the result is |FALSE|. {file} is any 4397 expression, which is used as a String. 4398 If you don't care about the file being readable you can use 4399 |glob()|. 4400 {file} is used as-is, you may want to expand wildcards first: > 4401 echo filereadable('~/.vimrc') 4402 0 4403 echo filereadable(expand('~/.vimrc')) 4404 1 4405 4406< Can also be used as a |method|: > 4407 GetName()->filereadable() 4408< *file_readable()* 4409 Obsolete name: file_readable(). 4410 4411 4412filewritable({file}) *filewritable()* 4413 The result is a Number, which is 1 when a file with the 4414 name {file} exists, and can be written. If {file} doesn't 4415 exist, or is not writable, the result is 0. If {file} is a 4416 directory, and we can write to it, the result is 2. 4417 4418 Can also be used as a |method|: > 4419 GetName()->filewriteable() 4420 4421 4422filter({expr1}, {expr2}) *filter()* 4423 {expr1} must be a |List| or a |Dictionary|. 4424 For each item in {expr1} evaluate {expr2} and when the result 4425 is zero remove the item from the |List| or |Dictionary|. 4426 {expr2} must be a |string| or |Funcref|. 4427 4428 If {expr2} is a |string|, inside {expr2} |v:val| has the value 4429 of the current item. For a |Dictionary| |v:key| has the key 4430 of the current item and for a |List| |v:key| has the index of 4431 the current item. 4432 Examples: > 4433 call filter(mylist, 'v:val !~ "OLD"') 4434< Removes the items where "OLD" appears. > 4435 call filter(mydict, 'v:key >= 8') 4436< Removes the items with a key below 8. > 4437 call filter(var, 0) 4438< Removes all the items, thus clears the |List| or |Dictionary|. 4439 4440 Note that {expr2} is the result of expression and is then 4441 used as an expression again. Often it is good to use a 4442 |literal-string| to avoid having to double backslashes. 4443 4444 If {expr2} is a |Funcref| it must take two arguments: 4445 1. the key or the index of the current item. 4446 2. the value of the current item. 4447 The function must return |TRUE| if the item should be kept. 4448 Example that keeps the odd items of a list: > 4449 func Odd(idx, val) 4450 return a:idx % 2 == 1 4451 endfunc 4452 call filter(mylist, function('Odd')) 4453< It is shorter when using a |lambda|: > 4454 call filter(myList, {idx, val -> idx * val <= 42}) 4455< If you do not use "val" you can leave it out: > 4456 call filter(myList, {idx -> idx % 2 == 1}) 4457< 4458 The operation is done in-place. If you want a |List| or 4459 |Dictionary| to remain unmodified make a copy first: > 4460 :let l = filter(copy(mylist), 'v:val =~ "KEEP"') 4461 4462< Returns {expr1}, the |List| or |Dictionary| that was filtered. 4463 When an error is encountered while evaluating {expr2} no 4464 further items in {expr1} are processed. When {expr2} is a 4465 Funcref errors inside a function are ignored, unless it was 4466 defined with the "abort" flag. 4467 4468 Can also be used as a |method|: > 4469 mylist->filter(expr2) 4470 4471finddir({name} [, {path} [, {count}]]) *finddir()* 4472 Find directory {name} in {path}. Supports both downwards and 4473 upwards recursive directory searches. See |file-searching| 4474 for the syntax of {path}. 4475 Returns the path of the first found match. When the found 4476 directory is below the current directory a relative path is 4477 returned. Otherwise a full path is returned. 4478 If {path} is omitted or empty then 'path' is used. 4479 If the optional {count} is given, find {count}'s occurrence of 4480 {name} in {path} instead of the first one. 4481 When {count} is negative return all the matches in a |List|. 4482 This is quite similar to the ex-command |:find|. 4483 {only available when compiled with the |+file_in_path| 4484 feature} 4485 4486 Can also be used as a |method|: > 4487 GetName()->finddir() 4488 4489findfile({name} [, {path} [, {count}]]) *findfile()* 4490 Just like |finddir()|, but find a file instead of a directory. 4491 Uses 'suffixesadd'. 4492 Example: > 4493 :echo findfile("tags.vim", ".;") 4494< Searches from the directory of the current file upwards until 4495 it finds the file "tags.vim". 4496 4497 Can also be used as a |method|: > 4498 GetName()->findfile() 4499 4500float2nr({expr}) *float2nr()* 4501 Convert {expr} to a Number by omitting the part after the 4502 decimal point. 4503 {expr} must evaluate to a |Float| or a Number. 4504 When the value of {expr} is out of range for a |Number| the 4505 result is truncated to 0x7fffffff or -0x7fffffff (or when 4506 64-bit Number support is enabled, 0x7fffffffffffffff or 4507 -0x7fffffffffffffff). NaN results in -0x80000000 (or when 4508 64-bit Number support is enabled, -0x8000000000000000). 4509 Examples: > 4510 echo float2nr(3.95) 4511< 3 > 4512 echo float2nr(-23.45) 4513< -23 > 4514 echo float2nr(1.0e100) 4515< 2147483647 (or 9223372036854775807) > 4516 echo float2nr(-1.0e150) 4517< -2147483647 (or -9223372036854775807) > 4518 echo float2nr(1.0e-100) 4519< 0 4520 4521 Can also be used as a |method|: > 4522 Compute()->float2nr() 4523< 4524 {only available when compiled with the |+float| feature} 4525 4526 4527floor({expr}) *floor()* 4528 Return the largest integral value less than or equal to 4529 {expr} as a |Float| (round down). 4530 {expr} must evaluate to a |Float| or a |Number|. 4531 Examples: > 4532 echo floor(1.856) 4533< 1.0 > 4534 echo floor(-5.456) 4535< -6.0 > 4536 echo floor(4.0) 4537< 4.0 4538 4539 Can also be used as a |method|: > 4540 Compute()->floor() 4541< 4542 {only available when compiled with the |+float| feature} 4543 4544 4545fmod({expr1}, {expr2}) *fmod()* 4546 Return the remainder of {expr1} / {expr2}, even if the 4547 division is not representable. Returns {expr1} - i * {expr2} 4548 for some integer i such that if {expr2} is non-zero, the 4549 result has the same sign as {expr1} and magnitude less than 4550 the magnitude of {expr2}. If {expr2} is zero, the value 4551 returned is zero. The value returned is a |Float|. 4552 {expr1} and {expr2} must evaluate to a |Float| or a |Number|. 4553 Examples: > 4554 :echo fmod(12.33, 1.22) 4555< 0.13 > 4556 :echo fmod(-12.33, 1.22) 4557< -0.13 4558 4559 Can also be used as a |method|: > 4560 Compute()->fmod(1.22) 4561< 4562 {only available when compiled with |+float| feature} 4563 4564 4565fnameescape({string}) *fnameescape()* 4566 Escape {string} for use as file name command argument. All 4567 characters that have a special meaning, such as '%' and '|' 4568 are escaped with a backslash. 4569 For most systems the characters escaped are 4570 " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash 4571 appears in a filename, it depends on the value of 'isfname'. 4572 A leading '+' and '>' is also escaped (special after |:edit| 4573 and |:write|). And a "-" by itself (special after |:cd|). 4574 Example: > 4575 :let fname = '+some str%nge|name' 4576 :exe "edit " . fnameescape(fname) 4577< results in executing: > 4578 edit \+some\ str\%nge\|name 4579< 4580 Can also be used as a |method|: > 4581 GetName()->fnameescape() 4582 4583fnamemodify({fname}, {mods}) *fnamemodify()* 4584 Modify file name {fname} according to {mods}. {mods} is a 4585 string of characters like it is used for file names on the 4586 command line. See |filename-modifiers|. 4587 Example: > 4588 :echo fnamemodify("main.c", ":p:h") 4589< results in: > 4590 /home/mool/vim/vim/src 4591< Note: Environment variables don't work in {fname}, use 4592 |expand()| first then. 4593 4594 Can also be used as a |method|: > 4595 GetName()->fnamemodify(':p:h') 4596 4597foldclosed({lnum}) *foldclosed()* 4598 The result is a Number. If the line {lnum} is in a closed 4599 fold, the result is the number of the first line in that fold. 4600 If the line {lnum} is not in a closed fold, -1 is returned. 4601 4602 Can also be used as a |method|: > 4603 GetLnum()->foldclosed() 4604 4605foldclosedend({lnum}) *foldclosedend()* 4606 The result is a Number. If the line {lnum} is in a closed 4607 fold, the result is the number of the last line in that fold. 4608 If the line {lnum} is not in a closed fold, -1 is returned. 4609 4610 Can also be used as a |method|: > 4611 GetLnum()->foldclosedend() 4612 4613foldlevel({lnum}) *foldlevel()* 4614 The result is a Number, which is the foldlevel of line {lnum} 4615 in the current buffer. For nested folds the deepest level is 4616 returned. If there is no fold at line {lnum}, zero is 4617 returned. It doesn't matter if the folds are open or closed. 4618 When used while updating folds (from 'foldexpr') -1 is 4619 returned for lines where folds are still to be updated and the 4620 foldlevel is unknown. As a special case the level of the 4621 previous line is usually available. 4622 4623 Can also be used as a |method|: > 4624 GetLnum()->foldlevel() 4625< 4626 *foldtext()* 4627foldtext() Returns a String, to be displayed for a closed fold. This is 4628 the default function used for the 'foldtext' option and should 4629 only be called from evaluating 'foldtext'. It uses the 4630 |v:foldstart|, |v:foldend| and |v:folddashes| variables. 4631 The returned string looks like this: > 4632 +-- 45 lines: abcdef 4633< The number of leading dashes depends on the foldlevel. The 4634 "45" is the number of lines in the fold. "abcdef" is the text 4635 in the first non-blank line of the fold. Leading white space, 4636 "//" or "/*" and the text from the 'foldmarker' and 4637 'commentstring' options is removed. 4638 When used to draw the actual foldtext, the rest of the line 4639 will be filled with the fold char from the 'fillchars' 4640 setting. 4641 {not available when compiled without the |+folding| feature} 4642 4643foldtextresult({lnum}) *foldtextresult()* 4644 Returns the text that is displayed for the closed fold at line 4645 {lnum}. Evaluates 'foldtext' in the appropriate context. 4646 When there is no closed fold at {lnum} an empty string is 4647 returned. 4648 {lnum} is used like with |getline()|. Thus "." is the current 4649 line, "'m" mark m, etc. 4650 Useful when exporting folded text, e.g., to HTML. 4651 {not available when compiled without the |+folding| feature} 4652 4653 4654 Can also be used as a |method|: > 4655 GetLnum()->foldtextresult() 4656< 4657 *foreground()* 4658foreground() Move the Vim window to the foreground. Useful when sent from 4659 a client to a Vim server. |remote_send()| 4660 On Win32 systems this might not work, the OS does not always 4661 allow a window to bring itself to the foreground. Use 4662 |remote_foreground()| instead. 4663 {only in the Win32, Athena, Motif and GTK GUI versions and the 4664 Win32 console version} 4665 4666 *funcref()* 4667funcref({name} [, {arglist}] [, {dict}]) 4668 Just like |function()|, but the returned Funcref will lookup 4669 the function by reference, not by name. This matters when the 4670 function {name} is redefined later. 4671 4672 Unlike |function()|, {name} must be an existing user function. 4673 Also for autoloaded functions. {name} cannot be a builtin 4674 function. 4675 4676 Can also be used as a |method|: > 4677 GetFuncname()->funcref([arg]) 4678< 4679 *function()* *E700* *E922* *E923* 4680function({name} [, {arglist}] [, {dict}]) 4681 Return a |Funcref| variable that refers to function {name}. 4682 {name} can be the name of a user defined function or an 4683 internal function. 4684 4685 {name} can also be a Funcref or a partial. When it is a 4686 partial the dict stored in it will be used and the {dict} 4687 argument is not allowed. E.g.: > 4688 let FuncWithArg = function(dict.Func, [arg]) 4689 let Broken = function(dict.Func, [arg], dict) 4690< 4691 When using the Funcref the function will be found by {name}, 4692 also when it was redefined later. Use |funcref()| to keep the 4693 same function. 4694 4695 When {arglist} or {dict} is present this creates a partial. 4696 That means the argument list and/or the dictionary is stored in 4697 the Funcref and will be used when the Funcref is called. 4698 4699 The arguments are passed to the function in front of other 4700 arguments, but after any argument from |method|. Example: > 4701 func Callback(arg1, arg2, name) 4702 ... 4703 let Partial = function('Callback', ['one', 'two']) 4704 ... 4705 call Partial('name') 4706< Invokes the function as with: > 4707 call Callback('one', 'two', 'name') 4708 4709< With a |method|: > 4710 func Callback(one, two, three) 4711 ... 4712 let Partial = function('Callback', ['two']) 4713 ... 4714 eval 'one'->Partial('three') 4715< Invokes the function as with: > 4716 call Callback('one', 'two', 'three') 4717 4718< The function() call can be nested to add more arguments to the 4719 Funcref. The extra arguments are appended to the list of 4720 arguments. Example: > 4721 func Callback(arg1, arg2, name) 4722 ... 4723 let Func = function('Callback', ['one']) 4724 let Func2 = function(Func, ['two']) 4725 ... 4726 call Func2('name') 4727< Invokes the function as with: > 4728 call Callback('one', 'two', 'name') 4729 4730< The Dictionary is only useful when calling a "dict" function. 4731 In that case the {dict} is passed in as "self". Example: > 4732 function Callback() dict 4733 echo "called for " . self.name 4734 endfunction 4735 ... 4736 let context = {"name": "example"} 4737 let Func = function('Callback', context) 4738 ... 4739 call Func() " will echo: called for example 4740< The use of function() is not needed when there are no extra 4741 arguments, these two are equivalent: > 4742 let Func = function('Callback', context) 4743 let Func = context.Callback 4744 4745< The argument list and the Dictionary can be combined: > 4746 function Callback(arg1, count) dict 4747 ... 4748 let context = {"name": "example"} 4749 let Func = function('Callback', ['one'], context) 4750 ... 4751 call Func(500) 4752< Invokes the function as with: > 4753 call context.Callback('one', 500) 4754< 4755 Can also be used as a |method|: > 4756 GetFuncname()->function([arg]) 4757 4758 4759garbagecollect([{atexit}]) *garbagecollect()* 4760 Cleanup unused |Lists|, |Dictionaries|, |Channels| and |Jobs| 4761 that have circular references. 4762 4763 There is hardly ever a need to invoke this function, as it is 4764 automatically done when Vim runs out of memory or is waiting 4765 for the user to press a key after 'updatetime'. Items without 4766 circular references are always freed when they become unused. 4767 This is useful if you have deleted a very big |List| and/or 4768 |Dictionary| with circular references in a script that runs 4769 for a long time. 4770 4771 When the optional {atexit} argument is one, garbage 4772 collection will also be done when exiting Vim, if it wasn't 4773 done before. This is useful when checking for memory leaks. 4774 4775 The garbage collection is not done immediately but only when 4776 it's safe to perform. This is when waiting for the user to 4777 type a character. To force garbage collection immediately use 4778 |test_garbagecollect_now()|. 4779 4780get({list}, {idx} [, {default}]) *get()* 4781 Get item {idx} from |List| {list}. When this item is not 4782 available return {default}. Return zero when {default} is 4783 omitted. 4784 Can also be used as a |method|: > 4785 mylist->get(idx) 4786get({blob}, {idx} [, {default}]) 4787 Get byte {idx} from |Blob| {blob}. When this byte is not 4788 available return {default}. Return -1 when {default} is 4789 omitted. 4790get({dict}, {key} [, {default}]) 4791 Get item with key {key} from |Dictionary| {dict}. When this 4792 item is not available return {default}. Return zero when 4793 {default} is omitted. Useful example: > 4794 let val = get(g:, 'var_name', 'default') 4795< This gets the value of g:var_name if it exists, and uses 4796 'default' when it does not exist. 4797get({func}, {what}) 4798 Get an item with from Funcref {func}. Possible values for 4799 {what} are: 4800 "name" The function name 4801 "func" The function 4802 "dict" The dictionary 4803 "args" The list with arguments 4804 4805 *getbufinfo()* 4806getbufinfo([{expr}]) 4807getbufinfo([{dict}]) 4808 Get information about buffers as a List of Dictionaries. 4809 4810 Without an argument information about all the buffers is 4811 returned. 4812 4813 When the argument is a Dictionary only the buffers matching 4814 the specified criteria are returned. The following keys can 4815 be specified in {dict}: 4816 buflisted include only listed buffers. 4817 bufloaded include only loaded buffers. 4818 bufmodified include only modified buffers. 4819 4820 Otherwise, {expr} specifies a particular buffer to return 4821 information for. For the use of {expr}, see |bufname()| 4822 above. If the buffer is found the returned List has one item. 4823 Otherwise the result is an empty list. 4824 4825 Each returned List item is a dictionary with the following 4826 entries: 4827 bufnr buffer number. 4828 changed TRUE if the buffer is modified. 4829 changedtick number of changes made to the buffer. 4830 hidden TRUE if the buffer is hidden. 4831 lastused timestamp in seconds, like 4832 |localtime()|, when the buffer was 4833 last used. 4834 {only with the |+viminfo| feature} 4835 listed TRUE if the buffer is listed. 4836 lnum current line number in buffer. 4837 linecount number of lines in the buffer (only 4838 valid when loaded) 4839 loaded TRUE if the buffer is loaded. 4840 name full path to the file in the buffer. 4841 signs list of signs placed in the buffer. 4842 Each list item is a dictionary with 4843 the following fields: 4844 id sign identifier 4845 lnum line number 4846 name sign name 4847 variables a reference to the dictionary with 4848 buffer-local variables. 4849 windows list of |window-ID|s that display this 4850 buffer 4851 popups list of popup |window-ID|s that 4852 display this buffer 4853 4854 Examples: > 4855 for buf in getbufinfo() 4856 echo buf.name 4857 endfor 4858 for buf in getbufinfo({'buflisted':1}) 4859 if buf.changed 4860 .... 4861 endif 4862 endfor 4863< 4864 To get buffer-local options use: > 4865 getbufvar({bufnr}, '&option_name') 4866 4867< 4868 *getbufline()* 4869getbufline({expr}, {lnum} [, {end}]) 4870 Return a |List| with the lines starting from {lnum} to {end} 4871 (inclusive) in the buffer {expr}. If {end} is omitted, a 4872 |List| with only the line {lnum} is returned. 4873 4874 For the use of {expr}, see |bufname()| above. 4875 4876 For {lnum} and {end} "$" can be used for the last line of the 4877 buffer. Otherwise a number must be used. 4878 4879 When {lnum} is smaller than 1 or bigger than the number of 4880 lines in the buffer, an empty |List| is returned. 4881 4882 When {end} is greater than the number of lines in the buffer, 4883 it is treated as {end} is set to the number of lines in the 4884 buffer. When {end} is before {lnum} an empty |List| is 4885 returned. 4886 4887 This function works only for loaded buffers. For unloaded and 4888 non-existing buffers, an empty |List| is returned. 4889 4890 Example: > 4891 :let lines = getbufline(bufnr("myfile"), 1, "$") 4892 4893< Can also be used as a |method|: > 4894 GetBufnr()->getbufline(lnum) 4895 4896getbufvar({expr}, {varname} [, {def}]) *getbufvar()* 4897 The result is the value of option or local buffer variable 4898 {varname} in buffer {expr}. Note that the name without "b:" 4899 must be used. 4900 When {varname} is empty returns a dictionary with all the 4901 buffer-local variables. 4902 When {varname} is equal to "&" returns a dictionary with all 4903 the buffer-local options. 4904 Otherwise, when {varname} starts with "&" returns the value of 4905 a buffer-local option. 4906 This also works for a global or buffer-local option, but it 4907 doesn't work for a global variable, window-local variable or 4908 window-local option. 4909 For the use of {expr}, see |bufname()| above. 4910 When the buffer or variable doesn't exist {def} or an empty 4911 string is returned, there is no error message. 4912 Examples: > 4913 :let bufmodified = getbufvar(1, "&mod") 4914 :echo "todo myvar = " . getbufvar("todo", "myvar") 4915 4916< Can also be used as a |method|: > 4917 GetBufnr()->getbufvar(varname) 4918< 4919getchangelist([{expr}]) *getchangelist()* 4920 Returns the |changelist| for the buffer {expr}. For the use 4921 of {expr}, see |bufname()| above. If buffer {expr} doesn't 4922 exist, an empty list is returned. 4923 4924 The returned list contains two entries: a list with the change 4925 locations and the current position in the list. Each 4926 entry in the change list is a dictionary with the following 4927 entries: 4928 col column number 4929 coladd column offset for 'virtualedit' 4930 lnum line number 4931 If buffer {expr} is the current buffer, then the current 4932 position refers to the position in the list. For other 4933 buffers, it is set to the length of the list. 4934 4935 Can also be used as a |method|: > 4936 GetBufnr()->getchangelist() 4937 4938getchar([expr]) *getchar()* 4939 Get a single character from the user or input stream. 4940 If [expr] is omitted, wait until a character is available. 4941 If [expr] is 0, only get a character when one is available. 4942 Return zero otherwise. 4943 If [expr] is 1, only check if a character is available, it is 4944 not consumed. Return zero if no character available. 4945 4946 Without [expr] and when [expr] is 0 a whole character or 4947 special key is returned. If it is a single character, the 4948 result is a number. Use nr2char() to convert it to a String. 4949 Otherwise a String is returned with the encoded character. 4950 For a special key it's a String with a sequence of bytes 4951 starting with 0x80 (decimal: 128). This is the same value as 4952 the String "\<Key>", e.g., "\<Left>". The returned value is 4953 also a String when a modifier (shift, control, alt) was used 4954 that is not included in the character. 4955 4956 When [expr] is 0 and Esc is typed, there will be a short delay 4957 while Vim waits to see if this is the start of an escape 4958 sequence. 4959 4960 When [expr] is 1 only the first byte is returned. For a 4961 one-byte character it is the character itself as a number. 4962 Use nr2char() to convert it to a String. 4963 4964 Use getcharmod() to obtain any additional modifiers. 4965 4966 When the user clicks a mouse button, the mouse event will be 4967 returned. The position can then be found in |v:mouse_col|, 4968 |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|. 4969 |getmousepos()| can also be used. This example positions the 4970 mouse as it would normally happen: > 4971 let c = getchar() 4972 if c == "\<LeftMouse>" && v:mouse_win > 0 4973 exe v:mouse_win . "wincmd w" 4974 exe v:mouse_lnum 4975 exe "normal " . v:mouse_col . "|" 4976 endif 4977< 4978 When using bracketed paste only the first character is 4979 returned, the rest of the pasted text is dropped. 4980 |xterm-bracketed-paste|. 4981 4982 There is no prompt, you will somehow have to make clear to the 4983 user that a character has to be typed. 4984 There is no mapping for the character. 4985 Key codes are replaced, thus when the user presses the <Del> 4986 key you get the code for the <Del> key, not the raw character 4987 sequence. Examples: > 4988 getchar() == "\<Del>" 4989 getchar() == "\<S-Left>" 4990< This example redefines "f" to ignore case: > 4991 :nmap f :call FindChar()<CR> 4992 :function FindChar() 4993 : let c = nr2char(getchar()) 4994 : while col('.') < col('$') - 1 4995 : normal l 4996 : if getline('.')[col('.') - 1] ==? c 4997 : break 4998 : endif 4999 : endwhile 5000 :endfunction 5001< 5002 You may also receive synthetic characters, such as 5003 |<CursorHold>|. Often you will want to ignore this and get 5004 another character: > 5005 :function GetKey() 5006 : let c = getchar() 5007 : while c == "\<CursorHold>" 5008 : let c = getchar() 5009 : endwhile 5010 : return c 5011 :endfunction 5012 5013getcharmod() *getcharmod()* 5014 The result is a Number which is the state of the modifiers for 5015 the last obtained character with getchar() or in another way. 5016 These values are added together: 5017 2 shift 5018 4 control 5019 8 alt (meta) 5020 16 meta (when it's different from ALT) 5021 32 mouse double click 5022 64 mouse triple click 5023 96 mouse quadruple click (== 32 + 64) 5024 128 command (Macintosh only) 5025 Only the modifiers that have not been included in the 5026 character itself are obtained. Thus Shift-a results in "A" 5027 without a modifier. 5028 5029getcharsearch() *getcharsearch()* 5030 Return the current character search information as a {dict} 5031 with the following entries: 5032 5033 char character previously used for a character 5034 search (|t|, |f|, |T|, or |F|); empty string 5035 if no character search has been performed 5036 forward direction of character search; 1 for forward, 5037 0 for backward 5038 until type of character search; 1 for a |t| or |T| 5039 character search, 0 for an |f| or |F| 5040 character search 5041 5042 This can be useful to always have |;| and |,| search 5043 forward/backward regardless of the direction of the previous 5044 character search: > 5045 :nnoremap <expr> ; getcharsearch().forward ? ';' : ',' 5046 :nnoremap <expr> , getcharsearch().forward ? ',' : ';' 5047< Also see |setcharsearch()|. 5048 5049getcmdline() *getcmdline()* 5050 Return the current command-line. Only works when the command 5051 line is being edited, thus requires use of |c_CTRL-\_e| or 5052 |c_CTRL-R_=|. 5053 Example: > 5054 :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR> 5055< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|. 5056 Returns an empty string when entering a password or using 5057 |inputsecret()|. 5058 5059getcmdpos() *getcmdpos()* 5060 Return the position of the cursor in the command line as a 5061 byte count. The first column is 1. 5062 Only works when editing the command line, thus requires use of 5063 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 5064 Returns 0 otherwise. 5065 Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|. 5066 5067getcmdtype() *getcmdtype()* 5068 Return the current command-line type. Possible return values 5069 are: 5070 : normal Ex command 5071 > debug mode command |debug-mode| 5072 / forward search command 5073 ? backward search command 5074 @ |input()| command 5075 - |:insert| or |:append| command 5076 = |i_CTRL-R_=| 5077 Only works when editing the command line, thus requires use of 5078 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping. 5079 Returns an empty string otherwise. 5080 Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|. 5081 5082getcmdwintype() *getcmdwintype()* 5083 Return the current |command-line-window| type. Possible return 5084 values are the same as |getcmdtype()|. Returns an empty string 5085 when not in the command-line window. 5086 5087getcompletion({pat}, {type} [, {filtered}]) *getcompletion()* 5088 Return a list of command-line completion matches. {type} 5089 specifies what for. The following completion types are 5090 supported: 5091 5092 arglist file names in argument list 5093 augroup autocmd groups 5094 buffer buffer names 5095 behave :behave suboptions 5096 color color schemes 5097 command Ex command (and arguments) 5098 compiler compilers 5099 cscope |:cscope| suboptions 5100 diff_buffer |:diffget| and |:diffput| completion 5101 dir directory names 5102 environment environment variable names 5103 event autocommand events 5104 expression Vim expression 5105 file file and directory names 5106 file_in_path file and directory names in |'path'| 5107 filetype filetype names |'filetype'| 5108 function function name 5109 help help subjects 5110 highlight highlight groups 5111 history :history suboptions 5112 locale locale names (as output of locale -a) 5113 mapclear buffer argument 5114 mapping mapping name 5115 menu menus 5116 messages |:messages| suboptions 5117 option options 5118 packadd optional package |pack-add| names 5119 shellcmd Shell command 5120 sign |:sign| suboptions 5121 syntax syntax file names |'syntax'| 5122 syntime |:syntime| suboptions 5123 tag tags 5124 tag_listfiles tags, file names 5125 user user names 5126 var user variables 5127 5128 If {pat} is an empty string, then all the matches are returned. 5129 Otherwise only items matching {pat} are returned. See 5130 |wildcards| for the use of special characters in {pat}. 5131 5132 If the optional {filtered} flag is set to 1, then 'wildignore' 5133 is applied to filter the results. Otherwise all the matches 5134 are returned. The 'wildignorecase' option always applies. 5135 5136 If there are no matches, an empty list is returned. An 5137 invalid value for {type} produces an error. 5138 5139 Can also be used as a |method|: > 5140 GetPattern()->getcompletion('color') 5141< 5142 *getcurpos()* 5143getcurpos() Get the position of the cursor. This is like getpos('.'), but 5144 includes an extra "curswant" item in the list: 5145 [0, lnum, col, off, curswant] ~ 5146 The "curswant" number is the preferred column when moving the 5147 cursor vertically. Also see |getpos()|. 5148 The first "bufnum" item is always zero. 5149 5150 This can be used to save and restore the cursor position: > 5151 let save_cursor = getcurpos() 5152 MoveTheCursorAround 5153 call setpos('.', save_cursor) 5154< Note that this only works within the window. See 5155 |winrestview()| for restoring more state. 5156 *getcwd()* 5157getcwd([{winnr} [, {tabnr}]]) 5158 The result is a String, which is the name of the current 5159 working directory. 5160 5161 With {winnr} return the local current directory of this window 5162 in the current tab page. {winnr} can be the window number or 5163 the |window-ID|. 5164 If {winnr} is -1 return the name of the global working 5165 directory. See also |haslocaldir()|. 5166 5167 With {winnr} and {tabnr} return the local current directory of 5168 the window in the specified tab page. If {winnr} is -1 return 5169 the working directory of the tabpage. 5170 If {winnr} is zero use the current window, if {tabnr} is zero 5171 use the current tabpage. 5172 Without any arguments, return the working directory of the 5173 current window. 5174 Return an empty string if the arguments are invalid. 5175 5176 Examples: > 5177 " Get the working directory of the current window 5178 :echo getcwd() 5179 :echo getcwd(0) 5180 :echo getcwd(0, 0) 5181 " Get the working directory of window 3 in tabpage 2 5182 :echo getcwd(3, 2) 5183 " Get the global working directory 5184 :echo getcwd(-1) 5185 " Get the working directory of tabpage 3 5186 :echo getcwd(-1, 3) 5187 " Get the working directory of current tabpage 5188 :echo getcwd(-1, 0) 5189 5190< Can also be used as a |method|: > 5191 GetWinnr()->getcwd() 5192< 5193getenv({name}) *getenv()* 5194 Return the value of environment variable {name}. 5195 When the variable does not exist |v:null| is returned. That 5196 is different from a variable set to an empty string, although 5197 some systems interpret the empty value as the variable being 5198 deleted. See also |expr-env|. 5199 5200 Can also be used as a |method|: > 5201 GetVarname()->getenv() 5202 5203getfontname([{name}]) *getfontname()* 5204 Without an argument returns the name of the normal font being 5205 used. Like what is used for the Normal highlight group 5206 |hl-Normal|. 5207 With an argument a check is done whether {name} is a valid 5208 font name. If not then an empty string is returned. 5209 Otherwise the actual font name is returned, or {name} if the 5210 GUI does not support obtaining the real name. 5211 Only works when the GUI is running, thus not in your vimrc or 5212 gvimrc file. Use the |GUIEnter| autocommand to use this 5213 function just after the GUI has started. 5214 Note that the GTK GUI accepts any font name, thus checking for 5215 a valid name does not work. 5216 5217getfperm({fname}) *getfperm()* 5218 The result is a String, which is the read, write, and execute 5219 permissions of the given file {fname}. 5220 If {fname} does not exist or its directory cannot be read, an 5221 empty string is returned. 5222 The result is of the form "rwxrwxrwx", where each group of 5223 "rwx" flags represent, in turn, the permissions of the owner 5224 of the file, the group the file belongs to, and other users. 5225 If a user does not have a given permission the flag for this 5226 is replaced with the string "-". Examples: > 5227 :echo getfperm("/etc/passwd") 5228 :echo getfperm(expand("~/.vimrc")) 5229< This will hopefully (from a security point of view) display 5230 the string "rw-r--r--" or even "rw-------". 5231 5232 Can also be used as a |method|: > 5233 GetFilename()->getfperm() 5234< 5235 For setting permissions use |setfperm()|. 5236 5237getfsize({fname}) *getfsize()* 5238 The result is a Number, which is the size in bytes of the 5239 given file {fname}. 5240 If {fname} is a directory, 0 is returned. 5241 If the file {fname} can't be found, -1 is returned. 5242 If the size of {fname} is too big to fit in a Number then -2 5243 is returned. 5244 5245 Can also be used as a |method|: > 5246 GetFilename()->getfsize() 5247 5248getftime({fname}) *getftime()* 5249 The result is a Number, which is the last modification time of 5250 the given file {fname}. The value is measured as seconds 5251 since 1st Jan 1970, and may be passed to strftime(). See also 5252 |localtime()| and |strftime()|. 5253 If the file {fname} can't be found -1 is returned. 5254 5255 Can also be used as a |method|: > 5256 GetFilename()->getftime() 5257 5258getftype({fname}) *getftype()* 5259 The result is a String, which is a description of the kind of 5260 file of the given file {fname}. 5261 If {fname} does not exist an empty string is returned. 5262 Here is a table over different kinds of files and their 5263 results: 5264 Normal file "file" 5265 Directory "dir" 5266 Symbolic link "link" 5267 Block device "bdev" 5268 Character device "cdev" 5269 Socket "socket" 5270 FIFO "fifo" 5271 All other "other" 5272 Example: > 5273 getftype("/home") 5274< Note that a type such as "link" will only be returned on 5275 systems that support it. On some systems only "dir" and 5276 "file" are returned. On MS-Windows a symbolic link to a 5277 directory returns "dir" instead of "link". 5278 5279 Can also be used as a |method|: > 5280 GetFilename()->getftype() 5281 5282getimstatus() *getimstatus()* 5283 The result is a Number, which is |TRUE| when the IME status is 5284 active. 5285 See 'imstatusfunc'. 5286 5287getjumplist([{winnr} [, {tabnr}]]) *getjumplist()* 5288 Returns the |jumplist| for the specified window. 5289 5290 Without arguments use the current window. 5291 With {winnr} only use this window in the current tab page. 5292 {winnr} can also be a |window-ID|. 5293 With {winnr} and {tabnr} use the window in the specified tab 5294 page. 5295 5296 The returned list contains two entries: a list with the jump 5297 locations and the last used jump position number in the list. 5298 Each entry in the jump location list is a dictionary with 5299 the following entries: 5300 bufnr buffer number 5301 col column number 5302 coladd column offset for 'virtualedit' 5303 filename filename if available 5304 lnum line number 5305 5306 Can also be used as a |method|: > 5307 GetWinnr()->getjumplist() 5308 5309< *getline()* 5310getline({lnum} [, {end}]) 5311 Without {end} the result is a String, which is line {lnum} 5312 from the current buffer. Example: > 5313 getline(1) 5314< When {lnum} is a String that doesn't start with a 5315 digit, |line()| is called to translate the String into a Number. 5316 To get the line under the cursor: > 5317 getline(".") 5318< When {lnum} is smaller than 1 or bigger than the number of 5319 lines in the buffer, an empty string is returned. 5320 5321 When {end} is given the result is a |List| where each item is 5322 a line from the current buffer in the range {lnum} to {end}, 5323 including line {end}. 5324 {end} is used in the same way as {lnum}. 5325 Non-existing lines are silently omitted. 5326 When {end} is before {lnum} an empty |List| is returned. 5327 Example: > 5328 :let start = line('.') 5329 :let end = search("^$") - 1 5330 :let lines = getline(start, end) 5331 5332< Can also be used as a |method|: > 5333 ComputeLnum()->getline() 5334 5335< To get lines from another buffer see |getbufline()| 5336 5337getloclist({nr} [, {what}]) *getloclist()* 5338 Returns a list with all the entries in the location list for 5339 window {nr}. {nr} can be the window number or the |window-ID|. 5340 When {nr} is zero the current window is used. 5341 5342 For a location list window, the displayed location list is 5343 returned. For an invalid window number {nr}, an empty list is 5344 returned. Otherwise, same as |getqflist()|. 5345 5346 If the optional {what} dictionary argument is supplied, then 5347 returns the items listed in {what} as a dictionary. Refer to 5348 |getqflist()| for the supported items in {what}. 5349 5350 In addition to the items supported by |getqflist()| in {what}, 5351 the following item is supported by |getloclist()|: 5352 5353 filewinid id of the window used to display files 5354 from the location list. This field is 5355 applicable only when called from a 5356 location list window. See 5357 |location-list-file-window| for more 5358 details. 5359 5360getmatches([{win}]) *getmatches()* 5361 Returns a |List| with all matches previously defined for the 5362 current window by |matchadd()| and the |:match| commands. 5363 |getmatches()| is useful in combination with |setmatches()|, 5364 as |setmatches()| can restore a list of matches saved by 5365 |getmatches()|. 5366 Example: > 5367 :echo getmatches() 5368< [{'group': 'MyGroup1', 'pattern': 'TODO', 5369 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 5370 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 5371 :let m = getmatches() 5372 :call clearmatches() 5373 :echo getmatches() 5374< [] > 5375 :call setmatches(m) 5376 :echo getmatches() 5377< [{'group': 'MyGroup1', 'pattern': 'TODO', 5378 'priority': 10, 'id': 1}, {'group': 'MyGroup2', 5379 'pattern': 'FIXME', 'priority': 10, 'id': 2}] > 5380 :unlet m 5381< 5382getmousepos() *getmousepos()* 5383 Returns a Dictionary with the last known position of the 5384 mouse. This can be used in a mapping for a mouse click or in 5385 a filter of a popup window. The items are: 5386 screenrow screen row 5387 screencol screen column 5388 winid Window ID of the click 5389 winrow row inside "winid" 5390 wincol column inside "winid" 5391 line text line inside "winid" 5392 column text column inside "winid" 5393 All numbers are 1-based. 5394 5395 If not over a window, e.g. when in the command line, then only 5396 "screenrow" and "screencol" are valid, the others are zero. 5397 5398 When on the status line below a window or the vertical 5399 separater right of a window, the "line" and "column" values 5400 are zero. 5401 5402 When the position is after the text then "column" is the 5403 length of the text in bytes. 5404 5405 If the mouse is over a popup window then that window is used. 5406 5407 5408 When using |getchar()| the Vim variables |v:mouse_lnum|, 5409 |v:mouse_col| and |v:mouse_winid| also provide these values. 5410 5411 *getpid()* 5412getpid() Return a Number which is the process ID of the Vim process. 5413 On Unix and MS-Windows this is a unique number, until Vim 5414 exits. 5415 5416 *getpos()* 5417getpos({expr}) Get the position for {expr}. For possible values of {expr} 5418 see |line()|. For getting the cursor position see 5419 |getcurpos()|. 5420 The result is a |List| with four numbers: 5421 [bufnum, lnum, col, off] 5422 "bufnum" is zero, unless a mark like '0 or 'A is used, then it 5423 is the buffer number of the mark. 5424 "lnum" and "col" are the position in the buffer. The first 5425 column is 1. 5426 The "off" number is zero, unless 'virtualedit' is used. Then 5427 it is the offset in screen columns from the start of the 5428 character. E.g., a position within a <Tab> or after the last 5429 character. 5430 Note that for '< and '> Visual mode matters: when it is "V" 5431 (visual line mode) the column of '< is zero and the column of 5432 '> is a large number. 5433 This can be used to save and restore the position of a mark: > 5434 let save_a_mark = getpos("'a") 5435 ... 5436 call setpos("'a", save_a_mark) 5437< Also see |getcurpos()| and |setpos()|. 5438 5439 Can also be used as a |method|: > 5440 GetMark()->getpos() 5441 5442 5443getqflist([{what}]) *getqflist()* 5444 Returns a list with all the current quickfix errors. Each 5445 list item is a dictionary with these entries: 5446 bufnr number of buffer that has the file name, use 5447 bufname() to get the name 5448 module module name 5449 lnum line number in the buffer (first line is 1) 5450 col column number (first column is 1) 5451 vcol |TRUE|: "col" is visual column 5452 |FALSE|: "col" is byte index 5453 nr error number 5454 pattern search pattern used to locate the error 5455 text description of the error 5456 type type of the error, 'E', '1', etc. 5457 valid |TRUE|: recognized error message 5458 5459 When there is no error list or it's empty, an empty list is 5460 returned. Quickfix list entries with non-existing buffer 5461 number are returned with "bufnr" set to zero. 5462 5463 Useful application: Find pattern matches in multiple files and 5464 do something with them: > 5465 :vimgrep /theword/jg *.c 5466 :for d in getqflist() 5467 : echo bufname(d.bufnr) ':' d.lnum '=' d.text 5468 :endfor 5469< 5470 If the optional {what} dictionary argument is supplied, then 5471 returns only the items listed in {what} as a dictionary. The 5472 following string items are supported in {what}: 5473 changedtick get the total number of changes made 5474 to the list |quickfix-changedtick| 5475 context get the |quickfix-context| 5476 efm errorformat to use when parsing "lines". If 5477 not present, then the 'errorformat' option 5478 value is used. 5479 id get information for the quickfix list with 5480 |quickfix-ID|; zero means the id for the 5481 current list or the list specified by "nr" 5482 idx index of the current entry in the quickfix 5483 list specified by 'id' or 'nr'. 5484 See |quickfix-index| 5485 items quickfix list entries 5486 lines parse a list of lines using 'efm' and return 5487 the resulting entries. Only a |List| type is 5488 accepted. The current quickfix list is not 5489 modified. See |quickfix-parse|. 5490 nr get information for this quickfix list; zero 5491 means the current quickfix list and "$" means 5492 the last quickfix list 5493 qfbufnr number of the buffer displayed in the quickfix 5494 window. Returns 0 if the quickfix buffer is 5495 not present. See |quickfix-buffer|. 5496 size number of entries in the quickfix list 5497 title get the list title |quickfix-title| 5498 winid get the quickfix |window-ID| 5499 all all of the above quickfix properties 5500 Non-string items in {what} are ignored. To get the value of a 5501 particular item, set it to zero. 5502 If "nr" is not present then the current quickfix list is used. 5503 If both "nr" and a non-zero "id" are specified, then the list 5504 specified by "id" is used. 5505 To get the number of lists in the quickfix stack, set "nr" to 5506 "$" in {what}. The "nr" value in the returned dictionary 5507 contains the quickfix stack size. 5508 When "lines" is specified, all the other items except "efm" 5509 are ignored. The returned dictionary contains the entry 5510 "items" with the list of entries. 5511 5512 The returned dictionary contains the following entries: 5513 changedtick total number of changes made to the 5514 list |quickfix-changedtick| 5515 context quickfix list context. See |quickfix-context| 5516 If not present, set to "". 5517 id quickfix list ID |quickfix-ID|. If not 5518 present, set to 0. 5519 idx index of the current entry in the list. If not 5520 present, set to 0. 5521 items quickfix list entries. If not present, set to 5522 an empty list. 5523 nr quickfix list number. If not present, set to 0 5524 qfbufnr number of the buffer displayed in the quickfix 5525 window. If not present, set to 0. 5526 size number of entries in the quickfix list. If not 5527 present, set to 0. 5528 title quickfix list title text. If not present, set 5529 to "". 5530 winid quickfix |window-ID|. If not present, set to 0 5531 5532 Examples (See also |getqflist-examples|): > 5533 :echo getqflist({'all': 1}) 5534 :echo getqflist({'nr': 2, 'title': 1}) 5535 :echo getqflist({'lines' : ["F1:10:L10"]}) 5536< 5537getreg([{regname} [, 1 [, {list}]]]) *getreg()* 5538 The result is a String, which is the contents of register 5539 {regname}. Example: > 5540 :let cliptext = getreg('*') 5541< When {regname} was not set the result is an empty string. 5542 5543 getreg('=') returns the last evaluated value of the expression 5544 register. (For use in maps.) 5545 getreg('=', 1) returns the expression itself, so that it can 5546 be restored with |setreg()|. For other registers the extra 5547 argument is ignored, thus you can always give it. 5548 5549 If {list} is present and |TRUE|, the result type is changed 5550 to |List|. Each list item is one text line. Use it if you care 5551 about zero bytes possibly present inside register: without 5552 third argument both NLs and zero bytes are represented as NLs 5553 (see |NL-used-for-Nul|). 5554 When the register was not set an empty list is returned. 5555 5556 If {regname} is not specified, |v:register| is used. 5557 5558 Can also be used as a |method|: > 5559 GetRegname()->getreg() 5560 5561 5562getregtype([{regname}]) *getregtype()* 5563 The result is a String, which is type of register {regname}. 5564 The value will be one of: 5565 "v" for |characterwise| text 5566 "V" for |linewise| text 5567 "<CTRL-V>{width}" for |blockwise-visual| text 5568 "" for an empty or unknown register 5569 <CTRL-V> is one character with value 0x16. 5570 If {regname} is not specified, |v:register| is used. 5571 5572 Can also be used as a |method|: > 5573 GetRegname()->getregtype() 5574 5575gettabinfo([{arg}]) *gettabinfo()* 5576 If {arg} is not specified, then information about all the tab 5577 pages is returned as a List. Each List item is a Dictionary. 5578 Otherwise, {arg} specifies the tab page number and information 5579 about that one is returned. If the tab page does not exist an 5580 empty List is returned. 5581 5582 Each List item is a Dictionary with the following entries: 5583 tabnr tab page number. 5584 variables a reference to the dictionary with 5585 tabpage-local variables 5586 windows List of |window-ID|s in the tab page. 5587 5588 Can also be used as a |method|: > 5589 GetTabnr()->gettabinfo() 5590 5591gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()* 5592 Get the value of a tab-local variable {varname} in tab page 5593 {tabnr}. |t:var| 5594 Tabs are numbered starting with one. 5595 When {varname} is empty a dictionary with all tab-local 5596 variables is returned. 5597 Note that the name without "t:" must be used. 5598 When the tab or variable doesn't exist {def} or an empty 5599 string is returned, there is no error message. 5600 5601 Can also be used as a |method|: > 5602 GetTabnr()->gettabvar(varname) 5603 5604gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()* 5605 Get the value of window-local variable {varname} in window 5606 {winnr} in tab page {tabnr}. 5607 When {varname} is empty a dictionary with all window-local 5608 variables is returned. 5609 When {varname} is equal to "&" get the values of all 5610 window-local options in a Dictionary. 5611 Otherwise, when {varname} starts with "&" get the value of a 5612 window-local option. 5613 Note that {varname} must be the name without "w:". 5614 Tabs are numbered starting with one. For the current tabpage 5615 use |getwinvar()|. 5616 {winnr} can be the window number or the |window-ID|. 5617 When {winnr} is zero the current window is used. 5618 This also works for a global option, buffer-local option and 5619 window-local option, but it doesn't work for a global variable 5620 or buffer-local variable. 5621 When the tab, window or variable doesn't exist {def} or an 5622 empty string is returned, there is no error message. 5623 Examples: > 5624 :let list_is_on = gettabwinvar(1, 2, '&list') 5625 :echo "myvar = " . gettabwinvar(3, 1, 'myvar') 5626< 5627 To obtain all window-local variables use: > 5628 gettabwinvar({tabnr}, {winnr}, '&') 5629 5630< Can also be used as a |method|: > 5631 GetTabnr()->gettabwinvar(winnr, varname) 5632 5633gettagstack([{nr}]) *gettagstack()* 5634 The result is a Dict, which is the tag stack of window {nr}. 5635 {nr} can be the window number or the |window-ID|. 5636 When {nr} is not specified, the current window is used. 5637 When window {nr} doesn't exist, an empty Dict is returned. 5638 5639 The returned dictionary contains the following entries: 5640 curidx Current index in the stack. When at 5641 top of the stack, set to (length + 1). 5642 Index of bottom of the stack is 1. 5643 items List of items in the stack. Each item 5644 is a dictionary containing the 5645 entries described below. 5646 length Number of entries in the stack. 5647 5648 Each item in the stack is a dictionary with the following 5649 entries: 5650 bufnr buffer number of the current jump 5651 from cursor position before the tag jump. 5652 See |getpos()| for the format of the 5653 returned list. 5654 matchnr current matching tag number. Used when 5655 multiple matching tags are found for a 5656 name. 5657 tagname name of the tag 5658 5659 See |tagstack| for more information about the tag stack. 5660 5661 Can also be used as a |method|: > 5662 GetWinnr()->gettagstack() 5663 5664getwininfo([{winid}]) *getwininfo()* 5665 Returns information about windows as a List with Dictionaries. 5666 5667 If {winid} is given Information about the window with that ID 5668 is returned. If the window does not exist the result is an 5669 empty list. 5670 5671 Without {winid} information about all the windows in all the 5672 tab pages is returned. 5673 5674 Each List item is a Dictionary with the following entries: 5675 botline last displayed buffer line 5676 bufnr number of buffer in the window 5677 height window height (excluding winbar) 5678 loclist 1 if showing a location list 5679 {only with the +quickfix feature} 5680 quickfix 1 if quickfix or location list window 5681 {only with the +quickfix feature} 5682 terminal 1 if a terminal window 5683 {only with the +terminal feature} 5684 tabnr tab page number 5685 topline first displayed buffer line 5686 variables a reference to the dictionary with 5687 window-local variables 5688 width window width 5689 winbar 1 if the window has a toolbar, 0 5690 otherwise 5691 wincol leftmost screen column of the window, 5692 col from |win_screenpos()| 5693 winid |window-ID| 5694 winnr window number 5695 winrow topmost screen column of the window, 5696 row from |win_screenpos()| 5697 5698 Can also be used as a |method|: > 5699 GetWinnr()->getwininfo() 5700 5701getwinpos([{timeout}]) *getwinpos()* 5702 The result is a List with two numbers, the result of 5703 |getwinposx()| and |getwinposy()| combined: 5704 [x-pos, y-pos] 5705 {timeout} can be used to specify how long to wait in msec for 5706 a response from the terminal. When omitted 100 msec is used. 5707 Use a longer time for a remote terminal. 5708 When using a value less than 10 and no response is received 5709 within that time, a previously reported position is returned, 5710 if available. This can be used to poll for the position and 5711 do some work in the meantime: > 5712 while 1 5713 let res = getwinpos(1) 5714 if res[0] >= 0 5715 break 5716 endif 5717 " Do some work here 5718 endwhile 5719< 5720 5721 Can also be used as a |method|: > 5722 GetTimeout()->getwinpos() 5723< 5724 *getwinposx()* 5725getwinposx() The result is a Number, which is the X coordinate in pixels of 5726 the left hand side of the GUI Vim window. Also works for an 5727 xterm (uses a timeout of 100 msec). 5728 The result will be -1 if the information is not available. 5729 The value can be used with `:winpos`. 5730 5731 *getwinposy()* 5732getwinposy() The result is a Number, which is the Y coordinate in pixels of 5733 the top of the GUI Vim window. Also works for an xterm (uses 5734 a timeout of 100 msec). 5735 The result will be -1 if the information is not available. 5736 The value can be used with `:winpos`. 5737 5738getwinvar({winnr}, {varname} [, {def}]) *getwinvar()* 5739 Like |gettabwinvar()| for the current tabpage. 5740 Examples: > 5741 :let list_is_on = getwinvar(2, '&list') 5742 :echo "myvar = " . getwinvar(1, 'myvar') 5743 5744< Can also be used as a |method|: > 5745 GetWinnr()->getwinvar(varname) 5746< 5747glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()* 5748 Expand the file wildcards in {expr}. See |wildcards| for the 5749 use of special characters. 5750 5751 Unless the optional {nosuf} argument is given and is |TRUE|, 5752 the 'suffixes' and 'wildignore' options apply: Names matching 5753 one of the patterns in 'wildignore' will be skipped and 5754 'suffixes' affect the ordering of matches. 5755 'wildignorecase' always applies. 5756 5757 When {list} is present and it is |TRUE| the result is a List 5758 with all matching files. The advantage of using a List is, 5759 you also get filenames containing newlines correctly. 5760 Otherwise the result is a String and when there are several 5761 matches, they are separated by <NL> characters. 5762 5763 If the expansion fails, the result is an empty String or List. 5764 5765 You can also use |readdir()| if you need to do complicated 5766 things, such as limiting the number of matches. 5767 5768 A name for a non-existing file is not included. A symbolic 5769 link is only included if it points to an existing file. 5770 However, when the {alllinks} argument is present and it is 5771 |TRUE| then all symbolic links are included. 5772 5773 For most systems backticks can be used to get files names from 5774 any external command. Example: > 5775 :let tagfiles = glob("`find . -name tags -print`") 5776 :let &tags = substitute(tagfiles, "\n", ",", "g") 5777< The result of the program inside the backticks should be one 5778 item per line. Spaces inside an item are allowed. 5779 5780 See |expand()| for expanding special Vim variables. See 5781 |system()| for getting the raw output of an external command. 5782 5783 Can also be used as a |method|: > 5784 GetExpr()->glob() 5785 5786glob2regpat({expr}) *glob2regpat()* 5787 Convert a file pattern, as used by glob(), into a search 5788 pattern. The result can be used to match with a string that 5789 is a file name. E.g. > 5790 if filename =~ glob2regpat('Make*.mak') 5791< This is equivalent to: > 5792 if filename =~ '^Make.*\.mak$' 5793< When {expr} is an empty string the result is "^$", match an 5794 empty string. 5795 Note that the result depends on the system. On MS-Windows 5796 a backslash usually means a path separator. 5797 5798 Can also be used as a |method|: > 5799 GetExpr()->glob2regpat() 5800< *globpath()* 5801globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]) 5802 Perform glob() for {expr} on all directories in {path} and 5803 concatenate the results. Example: > 5804 :echo globpath(&rtp, "syntax/c.vim") 5805< 5806 {path} is a comma-separated list of directory names. Each 5807 directory name is prepended to {expr} and expanded like with 5808 |glob()|. A path separator is inserted when needed. 5809 To add a comma inside a directory name escape it with a 5810 backslash. Note that on MS-Windows a directory may have a 5811 trailing backslash, remove it if you put a comma after it. 5812 If the expansion fails for one of the directories, there is no 5813 error message. 5814 5815 Unless the optional {nosuf} argument is given and is |TRUE|, 5816 the 'suffixes' and 'wildignore' options apply: Names matching 5817 one of the patterns in 'wildignore' will be skipped and 5818 'suffixes' affect the ordering of matches. 5819 5820 When {list} is present and it is |TRUE| the result is a List 5821 with all matching files. The advantage of using a List is, you 5822 also get filenames containing newlines correctly. Otherwise 5823 the result is a String and when there are several matches, 5824 they are separated by <NL> characters. Example: > 5825 :echo globpath(&rtp, "syntax/c.vim", 0, 1) 5826< 5827 {alllinks} is used as with |glob()|. 5828 5829 The "**" item can be used to search in a directory tree. 5830 For example, to find all "README.txt" files in the directories 5831 in 'runtimepath' and below: > 5832 :echo globpath(&rtp, "**/README.txt") 5833< Upwards search and limiting the depth of "**" is not 5834 supported, thus using 'path' will not always work properly. 5835 5836 Can also be used as a |method|, the base is passed as the 5837 second argument: > 5838 GetExpr()->globpath(&rtp) 5839< 5840 *has()* 5841has({feature} [, {check}]) 5842 When {check} is omitted or is zero: The result is a Number, 5843 which is 1 if the feature {feature} is supported, zero 5844 otherwise. The {feature} argument is a string, case is 5845 ignored. See |feature-list| below. 5846 5847 When {check} is present and not zero: The result is a Number, 5848 which is 1 if the feature {feature} could ever be supported, 5849 zero otherwise. This is useful to check for a typo in 5850 {feature} and to detect dead code. Keep in mind that an older 5851 Vim version will not know about a feature added later and 5852 features that have been abandoned will not be know by the 5853 current Vim version. 5854 5855 Also see |exists()|. 5856 5857 Note that to skip code that has a syntax error when the 5858 feature is not available, Vim may skip the rest of the line 5859 and miss a following `endif`. Therefore put the `endif` on a 5860 separate line: > 5861 if has('feature') 5862 let x = this->breaks->without->the->feature 5863 endif 5864< If the `endif` would be moved to the second line as "| endif" it 5865 would not be found. 5866 5867 5868has_key({dict}, {key}) *has_key()* 5869 The result is a Number, which is 1 if |Dictionary| {dict} has 5870 an entry with key {key}. Zero otherwise. 5871 5872 Can also be used as a |method|: > 5873 mydict->has_key(key) 5874 5875haslocaldir([{winnr} [, {tabnr}]]) *haslocaldir()* 5876 The result is a Number: 5877 1 when the window has set a local directory via |:lcd| 5878 2 when the tab-page has set a local directory via |:tcd| 5879 0 otherwise. 5880 5881 Without arguments use the current window. 5882 With {winnr} use this window in the current tab page. 5883 With {winnr} and {tabnr} use the window in the specified tab 5884 page. 5885 {winnr} can be the window number or the |window-ID|. 5886 If {winnr} is -1 it is ignored and only the tabpage is used. 5887 Return 0 if the arguments are invalid. 5888 Examples: > 5889 if haslocaldir() == 1 5890 " window local directory case 5891 elseif haslocaldir() == 2 5892 " tab-local directory case 5893 else 5894 " global directory case 5895 endif 5896 5897 " current window 5898 :echo haslocaldir() 5899 :echo haslocaldir(0) 5900 :echo haslocaldir(0, 0) 5901 " window n in current tab page 5902 :echo haslocaldir(n) 5903 :echo haslocaldir(n, 0) 5904 " window n in tab page m 5905 :echo haslocaldir(n, m) 5906 " tab page m 5907 :echo haslocaldir(-1, m) 5908< 5909 Can also be used as a |method|: > 5910 GetWinnr()->haslocaldir() 5911 5912hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()* 5913 The result is a Number, which is 1 if there is a mapping that 5914 contains {what} in somewhere in the rhs (what it is mapped to) 5915 and this mapping exists in one of the modes indicated by 5916 {mode}. 5917 When {abbr} is there and it is |TRUE| use abbreviations 5918 instead of mappings. Don't forget to specify Insert and/or 5919 Command-line mode. 5920 Both the global mappings and the mappings local to the current 5921 buffer are checked for a match. 5922 If no matching mapping is found 0 is returned. 5923 The following characters are recognized in {mode}: 5924 n Normal mode 5925 v Visual and Select mode 5926 x Visual mode 5927 s Select mode 5928 o Operator-pending mode 5929 i Insert mode 5930 l Language-Argument ("r", "f", "t", etc.) 5931 c Command-line mode 5932 When {mode} is omitted, "nvo" is used. 5933 5934 This function is useful to check if a mapping already exists 5935 to a function in a Vim script. Example: > 5936 :if !hasmapto('\ABCdoit') 5937 : map <Leader>d \ABCdoit 5938 :endif 5939< This installs the mapping to "\ABCdoit" only if there isn't 5940 already a mapping to "\ABCdoit". 5941 5942 Can also be used as a |method|: > 5943 GetRHS()->hasmapto() 5944 5945histadd({history}, {item}) *histadd()* 5946 Add the String {item} to the history {history} which can be 5947 one of: *hist-names* 5948 "cmd" or ":" command line history 5949 "search" or "/" search pattern history 5950 "expr" or "=" typed expression history 5951 "input" or "@" input line history 5952 "debug" or ">" debug command history 5953 empty the current or last used history 5954 The {history} string does not need to be the whole name, one 5955 character is sufficient. 5956 If {item} does already exist in the history, it will be 5957 shifted to become the newest entry. 5958 The result is a Number: 1 if the operation was successful, 5959 otherwise 0 is returned. 5960 5961 Example: > 5962 :call histadd("input", strftime("%Y %b %d")) 5963 :let date=input("Enter date: ") 5964< This function is not available in the |sandbox|. 5965 5966 Can also be used as a |method|, the base is passed as the 5967 second argument: > 5968 GetHistory()->histadd('search') 5969 5970histdel({history} [, {item}]) *histdel()* 5971 Clear {history}, i.e. delete all its entries. See |hist-names| 5972 for the possible values of {history}. 5973 5974 If the parameter {item} evaluates to a String, it is used as a 5975 regular expression. All entries matching that expression will 5976 be removed from the history (if there are any). 5977 Upper/lowercase must match, unless "\c" is used |/\c|. 5978 If {item} evaluates to a Number, it will be interpreted as 5979 an index, see |:history-indexing|. The respective entry will 5980 be removed if it exists. 5981 5982 The result is a Number: 1 for a successful operation, 5983 otherwise 0 is returned. 5984 5985 Examples: 5986 Clear expression register history: > 5987 :call histdel("expr") 5988< 5989 Remove all entries starting with "*" from the search history: > 5990 :call histdel("/", '^\*') 5991< 5992 The following three are equivalent: > 5993 :call histdel("search", histnr("search")) 5994 :call histdel("search", -1) 5995 :call histdel("search", '^'.histget("search", -1).'$') 5996< 5997 To delete the last search pattern and use the last-but-one for 5998 the "n" command and 'hlsearch': > 5999 :call histdel("search", -1) 6000 :let @/ = histget("search", -1) 6001< 6002 Can also be used as a |method|: > 6003 GetHistory()->histdel() 6004 6005histget({history} [, {index}]) *histget()* 6006 The result is a String, the entry with Number {index} from 6007 {history}. See |hist-names| for the possible values of 6008 {history}, and |:history-indexing| for {index}. If there is 6009 no such entry, an empty String is returned. When {index} is 6010 omitted, the most recent item from the history is used. 6011 6012 Examples: 6013 Redo the second last search from history. > 6014 :execute '/' . histget("search", -2) 6015 6016< Define an Ex command ":H {num}" that supports re-execution of 6017 the {num}th entry from the output of |:history|. > 6018 :command -nargs=1 H execute histget("cmd", 0+<args>) 6019< 6020 Can also be used as a |method|: > 6021 GetHistory()->histget() 6022 6023histnr({history}) *histnr()* 6024 The result is the Number of the current entry in {history}. 6025 See |hist-names| for the possible values of {history}. 6026 If an error occurred, -1 is returned. 6027 6028 Example: > 6029 :let inp_index = histnr("expr") 6030 6031< Can also be used as a |method|: > 6032 GetHistory()->histnr() 6033< 6034hlexists({name}) *hlexists()* 6035 The result is a Number, which is non-zero if a highlight group 6036 called {name} exists. This is when the group has been 6037 defined in some way. Not necessarily when highlighting has 6038 been defined for it, it may also have been used for a syntax 6039 item. 6040 *highlight_exists()* 6041 Obsolete name: highlight_exists(). 6042 6043 Can also be used as a |method|: > 6044 GetName()->hlexists() 6045< 6046 *hlID()* 6047hlID({name}) The result is a Number, which is the ID of the highlight group 6048 with name {name}. When the highlight group doesn't exist, 6049 zero is returned. 6050 This can be used to retrieve information about the highlight 6051 group. For example, to get the background color of the 6052 "Comment" group: > 6053 :echo synIDattr(synIDtrans(hlID("Comment")), "bg") 6054< *highlightID()* 6055 Obsolete name: highlightID(). 6056 6057 Can also be used as a |method|: > 6058 GetName()->hlID() 6059 6060hostname() *hostname()* 6061 The result is a String, which is the name of the machine on 6062 which Vim is currently running. Machine names greater than 6063 256 characters long are truncated. 6064 6065iconv({expr}, {from}, {to}) *iconv()* 6066 The result is a String, which is the text {expr} converted 6067 from encoding {from} to encoding {to}. 6068 When the conversion completely fails an empty string is 6069 returned. When some characters could not be converted they 6070 are replaced with "?". 6071 The encoding names are whatever the iconv() library function 6072 can accept, see ":!man 3 iconv". 6073 Most conversions require Vim to be compiled with the |+iconv| 6074 feature. Otherwise only UTF-8 to latin1 conversion and back 6075 can be done. 6076 This can be used to display messages with special characters, 6077 no matter what 'encoding' is set to. Write the message in 6078 UTF-8 and use: > 6079 echo iconv(utf8_str, "utf-8", &enc) 6080< Note that Vim uses UTF-8 for all Unicode encodings, conversion 6081 from/to UCS-2 is automatically changed to use UTF-8. You 6082 cannot use UCS-2 in a string anyway, because of the NUL bytes. 6083 6084 Can also be used as a |method|: > 6085 GetText()->iconv('latin1', 'utf-8') 6086< 6087 *indent()* 6088indent({lnum}) The result is a Number, which is indent of line {lnum} in the 6089 current buffer. The indent is counted in spaces, the value 6090 of 'tabstop' is relevant. {lnum} is used just like in 6091 |getline()|. 6092 When {lnum} is invalid -1 is returned. 6093 6094 Can also be used as a |method|: > 6095 GetLnum()->indent() 6096 6097index({object}, {expr} [, {start} [, {ic}]]) *index()* 6098 If {object} is a |List| return the lowest index where the item 6099 has a value equal to {expr}. There is no automatic 6100 conversion, so the String "4" is different from the Number 4. 6101 And the number 4 is different from the Float 4.0. The value 6102 of 'ignorecase' is not used here, case always matters. 6103 6104 If {object} is |Blob| return the lowest index where the byte 6105 value is equal to {expr}. 6106 6107 If {start} is given then start looking at the item with index 6108 {start} (may be negative for an item relative to the end). 6109 When {ic} is given and it is |TRUE|, ignore case. Otherwise 6110 case must match. 6111 -1 is returned when {expr} is not found in {object}. 6112 Example: > 6113 :let idx = index(words, "the") 6114 :if index(numbers, 123) >= 0 6115 6116< Can also be used as a |method|: > 6117 GetObject()->index(what) 6118 6119input({prompt} [, {text} [, {completion}]]) *input()* 6120 The result is a String, which is whatever the user typed on 6121 the command-line. The {prompt} argument is either a prompt 6122 string, or a blank string (for no prompt). A '\n' can be used 6123 in the prompt to start a new line. 6124 The highlighting set with |:echohl| is used for the prompt. 6125 The input is entered just like a command-line, with the same 6126 editing commands and mappings. There is a separate history 6127 for lines typed for input(). 6128 Example: > 6129 :if input("Coffee or beer? ") == "beer" 6130 : echo "Cheers!" 6131 :endif 6132< 6133 If the optional {text} argument is present and not empty, this 6134 is used for the default reply, as if the user typed this. 6135 Example: > 6136 :let color = input("Color? ", "white") 6137 6138< The optional {completion} argument specifies the type of 6139 completion supported for the input. Without it completion is 6140 not performed. The supported completion types are the same as 6141 that can be supplied to a user-defined command using the 6142 "-complete=" argument. Refer to |:command-completion| for 6143 more information. Example: > 6144 let fname = input("File: ", "", "file") 6145< 6146 NOTE: This function must not be used in a startup file, for 6147 the versions that only run in GUI mode (e.g., the Win32 GUI). 6148 Note: When input() is called from within a mapping it will 6149 consume remaining characters from that mapping, because a 6150 mapping is handled like the characters were typed. 6151 Use |inputsave()| before input() and |inputrestore()| 6152 after input() to avoid that. Another solution is to avoid 6153 that further characters follow in the mapping, e.g., by using 6154 |:execute| or |:normal|. 6155 6156 Example with a mapping: > 6157 :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR> 6158 :function GetFoo() 6159 : call inputsave() 6160 : let g:Foo = input("enter search pattern: ") 6161 : call inputrestore() 6162 :endfunction 6163 6164< Can also be used as a |method|: > 6165 GetPrompt()->input() 6166 6167inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()* 6168 Like |input()|, but when the GUI is running and text dialogs 6169 are supported, a dialog window pops up to input the text. 6170 Example: > 6171 :let n = inputdialog("value for shiftwidth", shiftwidth()) 6172 :if n != "" 6173 : let &sw = n 6174 :endif 6175< When the dialog is cancelled {cancelreturn} is returned. When 6176 omitted an empty string is returned. 6177 Hitting <Enter> works like pressing the OK button. Hitting 6178 <Esc> works like pressing the Cancel button. 6179 NOTE: Command-line completion is not supported. 6180 6181 Can also be used as a |method|: > 6182 GetPrompt()->inputdialog() 6183 6184inputlist({textlist}) *inputlist()* 6185 {textlist} must be a |List| of strings. This |List| is 6186 displayed, one string per line. The user will be prompted to 6187 enter a number, which is returned. 6188 The user can also select an item by clicking on it with the 6189 mouse. For the first string 0 is returned. When clicking 6190 above the first item a negative number is returned. When 6191 clicking on the prompt one more than the length of {textlist} 6192 is returned. 6193 Make sure {textlist} has less than 'lines' entries, otherwise 6194 it won't work. It's a good idea to put the entry number at 6195 the start of the string. And put a prompt in the first item. 6196 Example: > 6197 let color = inputlist(['Select color:', '1. red', 6198 \ '2. green', '3. blue']) 6199 6200< Can also be used as a |method|: > 6201 GetChoices()->inputlist() 6202 6203inputrestore() *inputrestore()* 6204 Restore typeahead that was saved with a previous |inputsave()|. 6205 Should be called the same number of times inputsave() is 6206 called. Calling it more often is harmless though. 6207 Returns 1 when there is nothing to restore, 0 otherwise. 6208 6209inputsave() *inputsave()* 6210 Preserve typeahead (also from mappings) and clear it, so that 6211 a following prompt gets input from the user. Should be 6212 followed by a matching inputrestore() after the prompt. Can 6213 be used several times, in which case there must be just as 6214 many inputrestore() calls. 6215 Returns 1 when out of memory, 0 otherwise. 6216 6217inputsecret({prompt} [, {text}]) *inputsecret()* 6218 This function acts much like the |input()| function with but 6219 two exceptions: 6220 a) the user's response will be displayed as a sequence of 6221 asterisks ("*") thereby keeping the entry secret, and 6222 b) the user's response will not be recorded on the input 6223 |history| stack. 6224 The result is a String, which is whatever the user actually 6225 typed on the command-line in response to the issued prompt. 6226 NOTE: Command-line completion is not supported. 6227 6228 Can also be used as a |method|: > 6229 GetPrompt()->inputsecret() 6230 6231insert({object}, {item} [, {idx}]) *insert()* 6232 When {object} is a |List| or a |Blob| insert {item} at the start 6233 of it. 6234 6235 If {idx} is specified insert {item} before the item with index 6236 {idx}. If {idx} is zero it goes before the first item, just 6237 like omitting {idx}. A negative {idx} is also possible, see 6238 |list-index|. -1 inserts just before the last item. 6239 6240 Returns the resulting |List| or |Blob|. Examples: > 6241 :let mylist = insert([2, 3, 5], 1) 6242 :call insert(mylist, 4, -1) 6243 :call insert(mylist, 6, len(mylist)) 6244< The last example can be done simpler with |add()|. 6245 Note that when {item} is a |List| it is inserted as a single 6246 item. Use |extend()| to concatenate |Lists|. 6247 6248 Can also be used as a |method|: > 6249 mylist->insert(item) 6250 6251interrupt() *interrupt()* 6252 Interrupt script execution. It works more or less like the 6253 user typing CTRL-C, most commands won't execute and control 6254 returns to the user. This is useful to abort execution 6255 from lower down, e.g. in an autocommand. Example: > 6256 :function s:check_typoname(file) 6257 : if fnamemodify(a:file, ':t') == '[' 6258 : echomsg 'Maybe typo' 6259 : call interrupt() 6260 : endif 6261 :endfunction 6262 :au BufWritePre * call s:check_typoname(expand('<amatch>')) 6263 6264invert({expr}) *invert()* 6265 Bitwise invert. The argument is converted to a number. A 6266 List, Dict or Float argument causes an error. Example: > 6267 :let bits = invert(bits) 6268< Can also be used as a |method|: > 6269 :let bits = bits->invert() 6270 6271isdirectory({directory}) *isdirectory()* 6272 The result is a Number, which is |TRUE| when a directory 6273 with the name {directory} exists. If {directory} doesn't 6274 exist, or isn't a directory, the result is |FALSE|. {directory} 6275 is any expression, which is used as a String. 6276 6277 Can also be used as a |method|: > 6278 GetName()->isdirectory() 6279 6280isinf({expr}) *isinf()* 6281 Return 1 if {expr} is a positive infinity, or -1 a negative 6282 infinity, otherwise 0. > 6283 :echo isinf(1.0 / 0.0) 6284< 1 > 6285 :echo isinf(-1.0 / 0.0) 6286< -1 6287 6288 Can also be used as a |method|: > 6289 Compute()->isinf() 6290< 6291 {only available when compiled with the |+float| feature} 6292 6293islocked({expr}) *islocked()* *E786* 6294 The result is a Number, which is |TRUE| when {expr} is the 6295 name of a locked variable. 6296 {expr} must be the name of a variable, |List| item or 6297 |Dictionary| entry, not the variable itself! Example: > 6298 :let alist = [0, ['a', 'b'], 2, 3] 6299 :lockvar 1 alist 6300 :echo islocked('alist') " 1 6301 :echo islocked('alist[1]') " 0 6302 6303< When {expr} is a variable that does not exist you get an error 6304 message. Use |exists()| to check for existence. 6305 6306 Can also be used as a |method|: > 6307 GetName()->islocked() 6308 6309isnan({expr}) *isnan()* 6310 Return |TRUE| if {expr} is a float with value NaN. > 6311 echo isnan(0.0 / 0.0) 6312< 1 6313 6314 Can also be used as a |method|: > 6315 Compute()->isnan() 6316< 6317 {only available when compiled with the |+float| feature} 6318 6319items({dict}) *items()* 6320 Return a |List| with all the key-value pairs of {dict}. Each 6321 |List| item is a list with two items: the key of a {dict} 6322 entry and the value of this entry. The |List| is in arbitrary 6323 order. Also see |keys()| and |values()|. 6324 Example: > 6325 for [key, value] in items(mydict) 6326 echo key . ': ' . value 6327 endfor 6328 6329< Can also be used as a |method|: > 6330 mydict->items() 6331 6332job_ functions are documented here: |job-functions-details| 6333 6334 6335join({list} [, {sep}]) *join()* 6336 Join the items in {list} together into one String. 6337 When {sep} is specified it is put in between the items. If 6338 {sep} is omitted a single space is used. 6339 Note that {sep} is not added at the end. You might want to 6340 add it there too: > 6341 let lines = join(mylist, "\n") . "\n" 6342< String items are used as-is. |Lists| and |Dictionaries| are 6343 converted into a string like with |string()|. 6344 The opposite function is |split()|. 6345 6346 Can also be used as a |method|: > 6347 mylist->join() 6348 6349js_decode({string}) *js_decode()* 6350 This is similar to |json_decode()| with these differences: 6351 - Object key names do not have to be in quotes. 6352 - Strings can be in single quotes. 6353 - Empty items in an array (between two commas) are allowed and 6354 result in v:none items. 6355 6356 Can also be used as a |method|: > 6357 ReadObject()->js_decode() 6358 6359js_encode({expr}) *js_encode()* 6360 This is similar to |json_encode()| with these differences: 6361 - Object key names are not in quotes. 6362 - v:none items in an array result in an empty item between 6363 commas. 6364 For example, the Vim object: 6365 [1,v:none,{"one":1},v:none] ~ 6366 Will be encoded as: 6367 [1,,{one:1},,] ~ 6368 While json_encode() would produce: 6369 [1,null,{"one":1},null] ~ 6370 This encoding is valid for JavaScript. It is more efficient 6371 than JSON, especially when using an array with optional items. 6372 6373 Can also be used as a |method|: > 6374 GetObject()->js_encode() 6375 6376json_decode({string}) *json_decode()* 6377 This parses a JSON formatted string and returns the equivalent 6378 in Vim values. See |json_encode()| for the relation between 6379 JSON and Vim values. 6380 The decoding is permissive: 6381 - A trailing comma in an array and object is ignored, e.g. 6382 "[1, 2, ]" is the same as "[1, 2]". 6383 - Integer keys are accepted in objects, e.g. {1:2} is the 6384 same as {"1":2}. 6385 - More floating point numbers are recognized, e.g. "1." for 6386 "1.0", or "001.2" for "1.2". Special floating point values 6387 "Infinity", "-Infinity" and "NaN" (capitalization ignored) 6388 are accepted. 6389 - Leading zeroes in integer numbers are ignored, e.g. "012" 6390 for "12" or "-012" for "-12". 6391 - Capitalization is ignored in literal names null, true or 6392 false, e.g. "NULL" for "null", "True" for "true". 6393 - Control characters U+0000 through U+001F which are not 6394 escaped in strings are accepted, e.g. " " (tab 6395 character in string) for "\t". 6396 - An empty JSON expression or made of only spaces is accepted 6397 and results in v:none. 6398 - Backslash in an invalid 2-character sequence escape is 6399 ignored, e.g. "\a" is decoded as "a". 6400 - A correct surrogate pair in JSON strings should normally be 6401 a 12 character sequence such as "\uD834\uDD1E", but 6402 json_decode() silently accepts truncated surrogate pairs 6403 such as "\uD834" or "\uD834\u" 6404 *E938* 6405 A duplicate key in an object, valid in rfc7159, is not 6406 accepted by json_decode() as the result must be a valid Vim 6407 type, e.g. this fails: {"a":"b", "a":"c"} 6408 6409 Can also be used as a |method|: > 6410 ReadObject()->json_decode() 6411 6412json_encode({expr}) *json_encode()* 6413 Encode {expr} as JSON and return this as a string. 6414 The encoding is specified in: 6415 https://tools.ietf.org/html/rfc7159.html 6416 Vim values are converted as follows: 6417 |Number| decimal number 6418 |Float| floating point number 6419 Float nan "NaN" 6420 Float inf "Infinity" 6421 Float -inf "-Infinity" 6422 |String| in double quotes (possibly null) 6423 |Funcref| not possible, error 6424 |List| as an array (possibly null); when 6425 used recursively: [] 6426 |Dict| as an object (possibly null); when 6427 used recursively: {} 6428 |Blob| as an array of the individual bytes 6429 v:false "false" 6430 v:true "true" 6431 v:none "null" 6432 v:null "null" 6433 Note that NaN and Infinity are passed on as values. This is 6434 missing in the JSON standard, but several implementations do 6435 allow it. If not then you will get an error. 6436 6437 Can also be used as a |method|: > 6438 GetObject()->json_encode() 6439 6440keys({dict}) *keys()* 6441 Return a |List| with all the keys of {dict}. The |List| is in 6442 arbitrary order. Also see |items()| and |values()|. 6443 6444 Can also be used as a |method|: > 6445 mydict->keys() 6446 6447< *len()* *E701* 6448len({expr}) The result is a Number, which is the length of the argument. 6449 When {expr} is a String or a Number the length in bytes is 6450 used, as with |strlen()|. 6451 When {expr} is a |List| the number of items in the |List| is 6452 returned. 6453 When {expr} is a |Blob| the number of bytes is returned. 6454 When {expr} is a |Dictionary| the number of entries in the 6455 |Dictionary| is returned. 6456 Otherwise an error is given. 6457 6458 Can also be used as a |method|: > 6459 mylist->len() 6460 6461< *libcall()* *E364* *E368* 6462libcall({libname}, {funcname}, {argument}) 6463 Call function {funcname} in the run-time library {libname} 6464 with single argument {argument}. 6465 This is useful to call functions in a library that you 6466 especially made to be used with Vim. Since only one argument 6467 is possible, calling standard library functions is rather 6468 limited. 6469 The result is the String returned by the function. If the 6470 function returns NULL, this will appear as an empty string "" 6471 to Vim. 6472 If the function returns a number, use libcallnr()! 6473 If {argument} is a number, it is passed to the function as an 6474 int; if {argument} is a string, it is passed as a 6475 null-terminated string. 6476 This function will fail in |restricted-mode|. 6477 6478 libcall() allows you to write your own 'plug-in' extensions to 6479 Vim without having to recompile the program. It is NOT a 6480 means to call system functions! If you try to do so Vim will 6481 very probably crash. 6482 6483 For Win32, the functions you write must be placed in a DLL 6484 and use the normal C calling convention (NOT Pascal which is 6485 used in Windows System DLLs). The function must take exactly 6486 one parameter, either a character pointer or a long integer, 6487 and must return a character pointer or NULL. The character 6488 pointer returned must point to memory that will remain valid 6489 after the function has returned (e.g. in static data in the 6490 DLL). If it points to allocated memory, that memory will 6491 leak away. Using a static buffer in the function should work, 6492 it's then freed when the DLL is unloaded. 6493 6494 WARNING: If the function returns a non-valid pointer, Vim may 6495 crash! This also happens if the function returns a number, 6496 because Vim thinks it's a pointer. 6497 For Win32 systems, {libname} should be the filename of the DLL 6498 without the ".DLL" suffix. A full path is only required if 6499 the DLL is not in the usual places. 6500 For Unix: When compiling your own plugins, remember that the 6501 object code must be compiled as position-independent ('PIC'). 6502 {only in Win32 and some Unix versions, when the |+libcall| 6503 feature is present} 6504 Examples: > 6505 :echo libcall("libc.so", "getenv", "HOME") 6506 6507< Can also be used as a |method|, the base is passed as the 6508 third argument: > 6509 GetValue()->libcall("libc.so", "getenv") 6510< 6511 *libcallnr()* 6512libcallnr({libname}, {funcname}, {argument}) 6513 Just like |libcall()|, but used for a function that returns an 6514 int instead of a string. 6515 {only in Win32 on some Unix versions, when the |+libcall| 6516 feature is present} 6517 Examples: > 6518 :echo libcallnr("/usr/lib/libc.so", "getpid", "") 6519 :call libcallnr("libc.so", "printf", "Hello World!\n") 6520 :call libcallnr("libc.so", "sleep", 10) 6521< 6522 Can also be used as a |method|, the base is passed as the 6523 third argument: > 6524 GetValue()->libcallnr("libc.so", "printf") 6525< 6526 6527line({expr} [, {winid}]) *line()* 6528 The result is a Number, which is the line number of the file 6529 position given with {expr}. The accepted positions are: 6530 . the cursor position 6531 $ the last line in the current buffer 6532 'x position of mark x (if the mark is not set, 0 is 6533 returned) 6534 w0 first line visible in current window (one if the 6535 display isn't updated, e.g. in silent Ex mode) 6536 w$ last line visible in current window (this is one 6537 less than "w0" if no lines are visible) 6538 v In Visual mode: the start of the Visual area (the 6539 cursor is the end). When not in Visual mode 6540 returns the cursor position. Differs from |'<| in 6541 that it's updated right away. 6542 Note that a mark in another file can be used. The line number 6543 then applies to another buffer. 6544 To get the column number use |col()|. To get both use 6545 |getpos()|. 6546 With the optional {winid} argument the values are obtained for 6547 that window instead of the current window. 6548 Examples: > 6549 line(".") line number of the cursor 6550 line(".", winid) idem, in window "winid" 6551 line("'t") line number of mark t 6552 line("'" . marker) line number of mark marker 6553< 6554 To jump to the last known position when opening a file see 6555 |last-position-jump|. 6556 6557 Can also be used as a |method|: > 6558 GetValue()->line() 6559 6560line2byte({lnum}) *line2byte()* 6561 Return the byte count from the start of the buffer for line 6562 {lnum}. This includes the end-of-line character, depending on 6563 the 'fileformat' option for the current buffer. The first 6564 line returns 1. 'encoding' matters, 'fileencoding' is ignored. 6565 This can also be used to get the byte count for the line just 6566 below the last line: > 6567 line2byte(line("$") + 1) 6568< This is the buffer size plus one. If 'fileencoding' is empty 6569 it is the file size plus one. 6570 When {lnum} is invalid, or the |+byte_offset| feature has been 6571 disabled at compile time, -1 is returned. 6572 Also see |byte2line()|, |go| and |:goto|. 6573 6574 Can also be used as a |method|: > 6575 GetLnum()->line2byte() 6576 6577lispindent({lnum}) *lispindent()* 6578 Get the amount of indent for line {lnum} according the lisp 6579 indenting rules, as with 'lisp'. 6580 The indent is counted in spaces, the value of 'tabstop' is 6581 relevant. {lnum} is used just like in |getline()|. 6582 When {lnum} is invalid or Vim was not compiled the 6583 |+lispindent| feature, -1 is returned. 6584 6585 Can also be used as a |method|: > 6586 GetLnum()->lispindent() 6587 6588list2str({list} [, {utf8}]) *list2str()* 6589 Convert each number in {list} to a character string can 6590 concatenate them all. Examples: > 6591 list2str([32]) returns " " 6592 list2str([65, 66, 67]) returns "ABC" 6593< The same can be done (slowly) with: > 6594 join(map(list, {nr, val -> nr2char(val)}), '') 6595< |str2list()| does the opposite. 6596 6597 When {utf8} is omitted or zero, the current 'encoding' is used. 6598 With {utf8} is 1, always return utf-8 characters. 6599 With utf-8 composing characters work as expected: > 6600 list2str([97, 769]) returns "á" 6601< 6602 Can also be used as a |method|: > 6603 GetList()->list2str() 6604 6605listener_add({callback} [, {buf}]) *listener_add()* 6606 Add a callback function that will be invoked when changes have 6607 been made to buffer {buf}. 6608 {buf} refers to a buffer name or number. For the accepted 6609 values, see |bufname()|. When {buf} is omitted the current 6610 buffer is used. 6611 Returns a unique ID that can be passed to |listener_remove()|. 6612 6613 The {callback} is invoked with five arguments: 6614 a:bufnr the buffer that was changed 6615 a:start first changed line number 6616 a:end first line number below the change 6617 a:added number of lines added, negative if lines were 6618 deleted 6619 a:changes a List of items with details about the changes 6620 6621 Example: > 6622 func Listener(bufnr, start, end, added, changes) 6623 echo 'lines ' .. a:start .. ' until ' .. a:end .. ' changed' 6624 endfunc 6625 call listener_add('Listener', bufnr) 6626 6627< The List cannot be changed. Each item in a:changes is a 6628 dictionary with these entries: 6629 lnum the first line number of the change 6630 end the first line below the change 6631 added number of lines added; negative if lines were 6632 deleted 6633 col first column in "lnum" that was affected by 6634 the change; one if unknown or the whole line 6635 was affected; this is a byte index, first 6636 character has a value of one. 6637 When lines are inserted the values are: 6638 lnum line above which the new line is added 6639 end equal to "lnum" 6640 added number of lines inserted 6641 col 1 6642 When lines are deleted the values are: 6643 lnum the first deleted line 6644 end the line below the first deleted line, before 6645 the deletion was done 6646 added negative, number of lines deleted 6647 col 1 6648 When lines are changed: 6649 lnum the first changed line 6650 end the line below the last changed line 6651 added 0 6652 col first column with a change or 1 6653 6654 The entries are in the order the changes were made, thus the 6655 most recent change is at the end. The line numbers are valid 6656 when the callback is invoked, but later changes may make them 6657 invalid, thus keeping a copy for later might not work. 6658 6659 The {callback} is invoked just before the screen is updated, 6660 when |listener_flush()| is called or when a change is being 6661 made that changes the line count in a way it causes a line 6662 number in the list of changes to become invalid. 6663 6664 The {callback} is invoked with the text locked, see 6665 |textlock|. If you do need to make changes to the buffer, use 6666 a timer to do this later |timer_start()|. 6667 6668 The {callback} is not invoked when the buffer is first loaded. 6669 Use the |BufReadPost| autocmd event to handle the initial text 6670 of a buffer. 6671 The {callback} is also not invoked when the buffer is 6672 unloaded, use the |BufUnload| autocmd event for that. 6673 6674 Can also be used as a |method|, the base is passed as the 6675 second argument: > 6676 GetBuffer()->listener_add(callback) 6677 6678listener_flush([{buf}]) *listener_flush()* 6679 Invoke listener callbacks for buffer {buf}. If there are no 6680 pending changes then no callbacks are invoked. 6681 6682 {buf} refers to a buffer name or number. For the accepted 6683 values, see |bufname()|. When {buf} is omitted the current 6684 buffer is used. 6685 6686 Can also be used as a |method|: > 6687 GetBuffer()->listener_flush() 6688 6689listener_remove({id}) *listener_remove()* 6690 Remove a listener previously added with listener_add(). 6691 Returns zero when {id} could not be found, one when {id} was 6692 removed. 6693 6694 Can also be used as a |method|: > 6695 GetListenerId()->listener_remove() 6696 6697localtime() *localtime()* 6698 Return the current time, measured as seconds since 1st Jan 6699 1970. See also |strftime()|, |strptime()| and |getftime()|. 6700 6701 6702log({expr}) *log()* 6703 Return the natural logarithm (base e) of {expr} as a |Float|. 6704 {expr} must evaluate to a |Float| or a |Number| in the range 6705 (0, inf]. 6706 Examples: > 6707 :echo log(10) 6708< 2.302585 > 6709 :echo log(exp(5)) 6710< 5.0 6711 6712 Can also be used as a |method|: > 6713 Compute()->log() 6714< 6715 {only available when compiled with the |+float| feature} 6716 6717 6718log10({expr}) *log10()* 6719 Return the logarithm of Float {expr} to base 10 as a |Float|. 6720 {expr} must evaluate to a |Float| or a |Number|. 6721 Examples: > 6722 :echo log10(1000) 6723< 3.0 > 6724 :echo log10(0.01) 6725< -2.0 6726 6727 Can also be used as a |method|: > 6728 Compute()->log10() 6729< 6730 {only available when compiled with the |+float| feature} 6731 6732luaeval({expr} [, {expr}]) *luaeval()* 6733 Evaluate Lua expression {expr} and return its result converted 6734 to Vim data structures. Second {expr} may hold additional 6735 argument accessible as _A inside first {expr}. 6736 Strings are returned as they are. 6737 Boolean objects are converted to numbers. 6738 Numbers are converted to |Float| values if vim was compiled 6739 with |+float| and to numbers otherwise. 6740 Dictionaries and lists obtained by vim.eval() are returned 6741 as-is. 6742 Other objects are returned as zero without any errors. 6743 See |lua-luaeval| for more details. 6744 6745 Can also be used as a |method|: > 6746 GetExpr()->luaeval() 6747 6748< {only available when compiled with the |+lua| feature} 6749 6750map({expr1}, {expr2}) *map()* 6751 {expr1} must be a |List| or a |Dictionary|. 6752 Replace each item in {expr1} with the result of evaluating 6753 {expr2}. {expr2} must be a |string| or |Funcref|. 6754 6755 If {expr2} is a |string|, inside {expr2} |v:val| has the value 6756 of the current item. For a |Dictionary| |v:key| has the key 6757 of the current item and for a |List| |v:key| has the index of 6758 the current item. 6759 Example: > 6760 :call map(mylist, '"> " . v:val . " <"') 6761< This puts "> " before and " <" after each item in "mylist". 6762 6763 Note that {expr2} is the result of an expression and is then 6764 used as an expression again. Often it is good to use a 6765 |literal-string| to avoid having to double backslashes. You 6766 still have to double ' quotes 6767 6768 If {expr2} is a |Funcref| it is called with two arguments: 6769 1. The key or the index of the current item. 6770 2. the value of the current item. 6771 The function must return the new value of the item. Example 6772 that changes each value by "key-value": > 6773 func KeyValue(key, val) 6774 return a:key . '-' . a:val 6775 endfunc 6776 call map(myDict, function('KeyValue')) 6777< It is shorter when using a |lambda|: > 6778 call map(myDict, {key, val -> key . '-' . val}) 6779< If you do not use "val" you can leave it out: > 6780 call map(myDict, {key -> 'item: ' . key}) 6781< If you do not use "key" you can use a short name: > 6782 call map(myDict, {_, val -> 'item: ' . val}) 6783< 6784 The operation is done in-place. If you want a |List| or 6785 |Dictionary| to remain unmodified make a copy first: > 6786 :let tlist = map(copy(mylist), ' v:val . "\t"') 6787 6788< Returns {expr1}, the |List| or |Dictionary| that was filtered. 6789 When an error is encountered while evaluating {expr2} no 6790 further items in {expr1} are processed. When {expr2} is a 6791 Funcref errors inside a function are ignored, unless it was 6792 defined with the "abort" flag. 6793 6794 Can also be used as a |method|: > 6795 mylist->map(expr2) 6796 6797maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()* 6798 When {dict} is omitted or zero: Return the rhs of mapping 6799 {name} in mode {mode}. The returned String has special 6800 characters translated like in the output of the ":map" command 6801 listing. 6802 6803 When there is no mapping for {name}, an empty String is 6804 returned. When the mapping for {name} is empty, then "<Nop>" 6805 is returned. 6806 6807 The {name} can have special key names, like in the ":map" 6808 command. 6809 6810 {mode} can be one of these strings: 6811 "n" Normal 6812 "v" Visual (including Select) 6813 "o" Operator-pending 6814 "i" Insert 6815 "c" Cmd-line 6816 "s" Select 6817 "x" Visual 6818 "l" langmap |language-mapping| 6819 "t" Terminal-Job 6820 "" Normal, Visual and Operator-pending 6821 When {mode} is omitted, the modes for "" are used. 6822 6823 When {abbr} is there and it is |TRUE| use abbreviations 6824 instead of mappings. 6825 6826 When {dict} is there and it is |TRUE| return a dictionary 6827 containing all the information of the mapping with the 6828 following items: 6829 "lhs" The {lhs} of the mapping. 6830 "rhs" The {rhs} of the mapping as typed. 6831 "silent" 1 for a |:map-silent| mapping, else 0. 6832 "noremap" 1 if the {rhs} of the mapping is not remappable. 6833 "script" 1 if mapping was defined with <script>. 6834 "expr" 1 for an expression mapping (|:map-<expr>|). 6835 "buffer" 1 for a buffer local mapping (|:map-local|). 6836 "mode" Modes for which the mapping is defined. In 6837 addition to the modes mentioned above, these 6838 characters will be used: 6839 " " Normal, Visual and Operator-pending 6840 "!" Insert and Commandline mode 6841 (|mapmode-ic|) 6842 "sid" The script local ID, used for <sid> mappings 6843 (|<SID>|). 6844 "lnum" The line number in "sid", zero if unknown. 6845 "nowait" Do not wait for other, longer mappings. 6846 (|:map-<nowait>|). 6847 6848 The mappings local to the current buffer are checked first, 6849 then the global mappings. 6850 This function can be used to map a key even when it's already 6851 mapped, and have it do the original mapping too. Sketch: > 6852 exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n') 6853 6854< Can also be used as a |method|: > 6855 GetKey()->maparg('n') 6856 6857mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()* 6858 Check if there is a mapping that matches with {name} in mode 6859 {mode}. See |maparg()| for {mode} and special names in 6860 {name}. 6861 When {abbr} is there and it is |TRUE| use abbreviations 6862 instead of mappings. 6863 A match happens with a mapping that starts with {name} and 6864 with a mapping which is equal to the start of {name}. 6865 6866 matches mapping "a" "ab" "abc" ~ 6867 mapcheck("a") yes yes yes 6868 mapcheck("abc") yes yes yes 6869 mapcheck("ax") yes no no 6870 mapcheck("b") no no no 6871 6872 The difference with maparg() is that mapcheck() finds a 6873 mapping that matches with {name}, while maparg() only finds a 6874 mapping for {name} exactly. 6875 When there is no mapping that starts with {name}, an empty 6876 String is returned. If there is one, the RHS of that mapping 6877 is returned. If there are several mappings that start with 6878 {name}, the RHS of one of them is returned. This will be 6879 "<Nop>" if the RHS is empty. 6880 The mappings local to the current buffer are checked first, 6881 then the global mappings. 6882 This function can be used to check if a mapping can be added 6883 without being ambiguous. Example: > 6884 :if mapcheck("_vv") == "" 6885 : map _vv :set guifont=7x13<CR> 6886 :endif 6887< This avoids adding the "_vv" mapping when there already is a 6888 mapping for "_v" or for "_vvv". 6889 6890 Can also be used as a |method|: > 6891 GetKey()->mapcheck('n') 6892 6893match({expr}, {pat} [, {start} [, {count}]]) *match()* 6894 When {expr} is a |List| then this returns the index of the 6895 first item where {pat} matches. Each item is used as a 6896 String, |Lists| and |Dictionaries| are used as echoed. 6897 6898 Otherwise, {expr} is used as a String. The result is a 6899 Number, which gives the index (byte offset) in {expr} where 6900 {pat} matches. 6901 6902 A match at the first character or |List| item returns zero. 6903 If there is no match -1 is returned. 6904 6905 For getting submatches see |matchlist()|. 6906 Example: > 6907 :echo match("testing", "ing") " results in 4 6908 :echo match([1, 'x'], '\a') " results in 1 6909< See |string-match| for how {pat} is used. 6910 *strpbrk()* 6911 Vim doesn't have a strpbrk() function. But you can do: > 6912 :let sepidx = match(line, '[.,;: \t]') 6913< *strcasestr()* 6914 Vim doesn't have a strcasestr() function. But you can add 6915 "\c" to the pattern to ignore case: > 6916 :let idx = match(haystack, '\cneedle') 6917< 6918 If {start} is given, the search starts from byte index 6919 {start} in a String or item {start} in a |List|. 6920 The result, however, is still the index counted from the 6921 first character/item. Example: > 6922 :echo match("testing", "ing", 2) 6923< result is again "4". > 6924 :echo match("testing", "ing", 4) 6925< result is again "4". > 6926 :echo match("testing", "t", 2) 6927< result is "3". 6928 For a String, if {start} > 0 then it is like the string starts 6929 {start} bytes later, thus "^" will match at {start}. Except 6930 when {count} is given, then it's like matches before the 6931 {start} byte are ignored (this is a bit complicated to keep it 6932 backwards compatible). 6933 For a String, if {start} < 0, it will be set to 0. For a list 6934 the index is counted from the end. 6935 If {start} is out of range ({start} > strlen({expr}) for a 6936 String or {start} > len({expr}) for a |List|) -1 is returned. 6937 6938 When {count} is given use the {count}'th match. When a match 6939 is found in a String the search for the next one starts one 6940 character further. Thus this example results in 1: > 6941 echo match("testing", "..", 0, 2) 6942< In a |List| the search continues in the next item. 6943 Note that when {count} is added the way {start} works changes, 6944 see above. 6945 6946 See |pattern| for the patterns that are accepted. 6947 The 'ignorecase' option is used to set the ignore-caseness of 6948 the pattern. 'smartcase' is NOT used. The matching is always 6949 done like 'magic' is set and 'cpoptions' is empty. 6950 Note that a match at the start is preferred, thus when the 6951 pattern is using "*" (any number of matches) it tends to find 6952 zero matches at the start instead of a number of matches 6953 further down in the text. 6954 6955 Can also be used as a |method|: > 6956 GetList()->match('word') 6957< 6958 *matchadd()* *E798* *E799* *E801* *E957* 6959matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]]) 6960 Defines a pattern to be highlighted in the current window (a 6961 "match"). It will be highlighted with {group}. Returns an 6962 identification number (ID), which can be used to delete the 6963 match using |matchdelete()|. The ID is bound to the window. 6964 Matching is case sensitive and magic, unless case sensitivity 6965 or magicness are explicitly overridden in {pattern}. The 6966 'magic', 'smartcase' and 'ignorecase' options are not used. 6967 The "Conceal" value is special, it causes the match to be 6968 concealed. 6969 6970 The optional {priority} argument assigns a priority to the 6971 match. A match with a high priority will have its 6972 highlighting overrule that of a match with a lower priority. 6973 A priority is specified as an integer (negative numbers are no 6974 exception). If the {priority} argument is not specified, the 6975 default priority is 10. The priority of 'hlsearch' is zero, 6976 hence all matches with a priority greater than zero will 6977 overrule it. Syntax highlighting (see 'syntax') is a separate 6978 mechanism, and regardless of the chosen priority a match will 6979 always overrule syntax highlighting. 6980 6981 The optional {id} argument allows the request for a specific 6982 match ID. If a specified ID is already taken, an error 6983 message will appear and the match will not be added. An ID 6984 is specified as a positive integer (zero excluded). IDs 1, 2 6985 and 3 are reserved for |:match|, |:2match| and |:3match|, 6986 respectively. If the {id} argument is not specified or -1, 6987 |matchadd()| automatically chooses a free ID. 6988 6989 The optional {dict} argument allows for further custom 6990 values. Currently this is used to specify a match specific 6991 conceal character that will be shown for |hl-Conceal| 6992 highlighted matches. The dict can have the following members: 6993 6994 conceal Special character to show instead of the 6995 match (only for |hl-Conceal| highlighted 6996 matches, see |:syn-cchar|) 6997 window Instead of the current window use the 6998 window with this number or window ID. 6999 7000 The number of matches is not limited, as it is the case with 7001 the |:match| commands. 7002 7003 Example: > 7004 :highlight MyGroup ctermbg=green guibg=green 7005 :let m = matchadd("MyGroup", "TODO") 7006< Deletion of the pattern: > 7007 :call matchdelete(m) 7008 7009< A list of matches defined by |matchadd()| and |:match| are 7010 available from |getmatches()|. All matches can be deleted in 7011 one operation by |clearmatches()|. 7012 7013 Can also be used as a |method|: > 7014 GetGroup()->matchadd('TODO') 7015< 7016 *matchaddpos()* 7017matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) 7018 Same as |matchadd()|, but requires a list of positions {pos} 7019 instead of a pattern. This command is faster than |matchadd()| 7020 because it does not require to handle regular expressions and 7021 sets buffer line boundaries to redraw screen. It is supposed 7022 to be used when fast match additions and deletions are 7023 required, for example to highlight matching parentheses. 7024 7025 The list {pos} can contain one of these items: 7026 - A number. This whole line will be highlighted. The first 7027 line has number 1. 7028 - A list with one number, e.g., [23]. The whole line with this 7029 number will be highlighted. 7030 - A list with two numbers, e.g., [23, 11]. The first number is 7031 the line number, the second one is the column number (first 7032 column is 1, the value must correspond to the byte index as 7033 |col()| would return). The character at this position will 7034 be highlighted. 7035 - A list with three numbers, e.g., [23, 11, 3]. As above, but 7036 the third number gives the length of the highlight in bytes. 7037 7038 The maximum number of positions is 8. 7039 7040 Example: > 7041 :highlight MyGroup ctermbg=green guibg=green 7042 :let m = matchaddpos("MyGroup", [[23, 24], 34]) 7043< Deletion of the pattern: > 7044 :call matchdelete(m) 7045 7046< Matches added by |matchaddpos()| are returned by 7047 |getmatches()| with an entry "pos1", "pos2", etc., with the 7048 value a list like the {pos} item. 7049 7050 Can also be used as a |method|: > 7051 GetGroup()->matchaddpos([23, 11]) 7052 7053matcharg({nr}) *matcharg()* 7054 Selects the {nr} match item, as set with a |:match|, 7055 |:2match| or |:3match| command. 7056 Return a |List| with two elements: 7057 The name of the highlight group used 7058 The pattern used. 7059 When {nr} is not 1, 2 or 3 returns an empty |List|. 7060 When there is no match item set returns ['', '']. 7061 This is useful to save and restore a |:match|. 7062 Highlighting matches using the |:match| commands are limited 7063 to three matches. |matchadd()| does not have this limitation. 7064 7065 Can also be used as a |method|: > 7066 GetMatch()->matcharg() 7067 7068matchdelete({id} [, {win}) *matchdelete()* *E802* *E803* 7069 Deletes a match with ID {id} previously defined by |matchadd()| 7070 or one of the |:match| commands. Returns 0 if successful, 7071 otherwise -1. See example for |matchadd()|. All matches can 7072 be deleted in one operation by |clearmatches()|. 7073 If {win} is specified, use the window with this number or 7074 window ID instead of the current window. 7075 7076 Can also be used as a |method|: > 7077 GetMatch()->matchdelete() 7078 7079matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()* 7080 Same as |match()|, but return the index of first character 7081 after the match. Example: > 7082 :echo matchend("testing", "ing") 7083< results in "7". 7084 *strspn()* *strcspn()* 7085 Vim doesn't have a strspn() or strcspn() function, but you can 7086 do it with matchend(): > 7087 :let span = matchend(line, '[a-zA-Z]') 7088 :let span = matchend(line, '[^a-zA-Z]') 7089< Except that -1 is returned when there are no matches. 7090 7091 The {start}, if given, has the same meaning as for |match()|. > 7092 :echo matchend("testing", "ing", 2) 7093< results in "7". > 7094 :echo matchend("testing", "ing", 5) 7095< result is "-1". 7096 When {expr} is a |List| the result is equal to |match()|. 7097 7098 Can also be used as a |method|: > 7099 GetText()->matchend('word') 7100 7101matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()* 7102 Same as |match()|, but return a |List|. The first item in the 7103 list is the matched string, same as what matchstr() would 7104 return. Following items are submatches, like "\1", "\2", etc. 7105 in |:substitute|. When an optional submatch didn't match an 7106 empty string is used. Example: > 7107 echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)') 7108< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', ''] 7109 When there is no match an empty list is returned. 7110 7111 Can also be used as a |method|: > 7112 GetList()->matchlist('word') 7113 7114matchstr({expr}, {pat} [, {start} [, {count}]]) *matchstr()* 7115 Same as |match()|, but return the matched string. Example: > 7116 :echo matchstr("testing", "ing") 7117< results in "ing". 7118 When there is no match "" is returned. 7119 The {start}, if given, has the same meaning as for |match()|. > 7120 :echo matchstr("testing", "ing", 2) 7121< results in "ing". > 7122 :echo matchstr("testing", "ing", 5) 7123< result is "". 7124 When {expr} is a |List| then the matching item is returned. 7125 The type isn't changed, it's not necessarily a String. 7126 7127 Can also be used as a |method|: > 7128 GetText()->matchstr('word') 7129 7130matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()* 7131 Same as |matchstr()|, but return the matched string, the start 7132 position and the end position of the match. Example: > 7133 :echo matchstrpos("testing", "ing") 7134< results in ["ing", 4, 7]. 7135 When there is no match ["", -1, -1] is returned. 7136 The {start}, if given, has the same meaning as for |match()|. > 7137 :echo matchstrpos("testing", "ing", 2) 7138< results in ["ing", 4, 7]. > 7139 :echo matchstrpos("testing", "ing", 5) 7140< result is ["", -1, -1]. 7141 When {expr} is a |List| then the matching item, the index 7142 of first item where {pat} matches, the start position and the 7143 end position of the match are returned. > 7144 :echo matchstrpos([1, '__x'], '\a') 7145< result is ["x", 1, 2, 3]. 7146 The type isn't changed, it's not necessarily a String. 7147 7148 Can also be used as a |method|: > 7149 GetText()->matchstrpos('word') 7150< 7151 7152 *max()* 7153max({expr}) Return the maximum value of all items in {expr}. 7154 {expr} can be a List or a Dictionary. For a Dictionary, 7155 it returns the maximum of all values in the Dictionary. 7156 If {expr} is neither a List nor a Dictionary, or one of the 7157 items in {expr} cannot be used as a Number this results in 7158 an error. An empty |List| or |Dictionary| results in zero. 7159 7160 Can also be used as a |method|: > 7161 mylist->max() 7162 7163 7164menu_info({name} [, {mode}]) *menu_info()* 7165 Return information about the specified menu {name} in 7166 mode {mode}. The menu name should be specified without the 7167 shortcut character ('&'). 7168 7169 {mode} can be one of these strings: 7170 "n" Normal 7171 "v" Visual (including Select) 7172 "o" Operator-pending 7173 "i" Insert 7174 "c" Cmd-line 7175 "s" Select 7176 "x" Visual 7177 "t" Terminal-Job 7178 "" Normal, Visual and Operator-pending 7179 "!" Insert and Cmd-line 7180 When {mode} is omitted, the modes for "" are used. 7181 7182 Returns a |Dictionary| containing the following items: 7183 accel menu item accelerator text |menu-text| 7184 display display name (name without '&') 7185 enabled v:true if this menu item is enabled 7186 Refer to |:menu-enable| 7187 icon name of the icon file (for toolbar) 7188 |toolbar-icon| 7189 iconidx index of a built-in icon 7190 modes modes for which the menu is defined. In 7191 addition to the modes mentioned above, these 7192 characters will be used: 7193 " " Normal, Visual and Operator-pending 7194 name menu item name. 7195 noremenu v:true if the {rhs} of the menu item is not 7196 remappable else v:false. 7197 priority menu order priority |menu-priority| 7198 rhs right-hand-side of the menu item. The returned 7199 string has special characters translated like 7200 in the output of the ":menu" command listing. 7201 When the {rhs} of a menu item is empty, then 7202 "<Nop>" is returned. 7203 script v:true if script-local remapping of {rhs} is 7204 allowed else v:false. See |:menu-script|. 7205 shortcut shortcut key (character after '&' in 7206 the menu name) |menu-shortcut| 7207 silent v:true if the menu item is created 7208 with <silent> argument |:menu-silent| 7209 submenus |List| containing the names of 7210 all the submenus. Present only if the menu 7211 item has submenus. 7212 7213 Returns an empty dictionary if the menu item is not found. 7214 7215 Examples: > 7216 :echo menu_info('Edit.Cut') 7217 :echo menu_info('File.Save', 'n') 7218< 7219 Can also be used as a |method|: > 7220 GetMenuName()->menu_info('v') 7221 7222 7223< *min()* 7224min({expr}) Return the minimum value of all items in {expr}. 7225 {expr} can be a List or a Dictionary. For a Dictionary, 7226 it returns the minimum of all values in the Dictionary. 7227 If {expr} is neither a List nor a Dictionary, or one of the 7228 items in {expr} cannot be used as a Number this results in 7229 an error. An empty |List| or |Dictionary| results in zero. 7230 7231 Can also be used as a |method|: > 7232 mylist->min() 7233 7234< *mkdir()* *E739* 7235mkdir({name} [, {path} [, {prot}]]) 7236 Create directory {name}. 7237 7238 If {path} is "p" then intermediate directories are created as 7239 necessary. Otherwise it must be "". 7240 7241 If {prot} is given it is used to set the protection bits of 7242 the new directory. The default is 0755 (rwxr-xr-x: r/w for 7243 the user readable for others). Use 0700 to make it unreadable 7244 for others. This is only used for the last part of {name}. 7245 Thus if you create /tmp/foo/bar then /tmp/foo will be created 7246 with 0755. 7247 Example: > 7248 :call mkdir($HOME . "/tmp/foo/bar", "p", 0700) 7249 7250< This function is not available in the |sandbox|. 7251 7252 There is no error if the directory already exists and the "p" 7253 flag is passed (since patch 8.0.1708). However, without the 7254 "p" option the call will fail. 7255 7256 The function result is a Number, which is 1 if the call was 7257 successful or 0 if the directory creation failed or partly 7258 failed. 7259 7260 Not available on all systems. To check use: > 7261 :if exists("*mkdir") 7262 7263< Can also be used as a |method|: > 7264 GetName()->mkdir() 7265< 7266 *mode()* 7267mode([expr]) Return a string that indicates the current mode. 7268 If [expr] is supplied and it evaluates to a non-zero Number or 7269 a non-empty String (|non-zero-arg|), then the full mode is 7270 returned, otherwise only the first letter is returned. 7271 Also see |state()|. 7272 7273 n Normal, Terminal-Normal 7274 no Operator-pending 7275 nov Operator-pending (forced characterwise |o_v|) 7276 noV Operator-pending (forced linewise |o_V|) 7277 noCTRL-V Operator-pending (forced blockwise |o_CTRL-V|); 7278 CTRL-V is one character 7279 niI Normal using |i_CTRL-O| in |Insert-mode| 7280 niR Normal using |i_CTRL-O| in |Replace-mode| 7281 niV Normal using |i_CTRL-O| in |Virtual-Replace-mode| 7282 v Visual by character 7283 V Visual by line 7284 CTRL-V Visual blockwise 7285 s Select by character 7286 S Select by line 7287 CTRL-S Select blockwise 7288 i Insert 7289 ic Insert mode completion |compl-generic| 7290 ix Insert mode |i_CTRL-X| completion 7291 R Replace |R| 7292 Rc Replace mode completion |compl-generic| 7293 Rv Virtual Replace |gR| 7294 Rx Replace mode |i_CTRL-X| completion 7295 c Command-line editing 7296 cv Vim Ex mode |gQ| 7297 ce Normal Ex mode |Q| 7298 r Hit-enter prompt 7299 rm The -- more -- prompt 7300 r? A |:confirm| query of some sort 7301 ! Shell or external command is executing 7302 t Terminal-Job mode: keys go to the job 7303 This is useful in the 'statusline' option or when used 7304 with |remote_expr()| In most other places it always returns 7305 "c" or "n". 7306 Note that in the future more modes and more specific modes may 7307 be added. It's better not to compare the whole string but only 7308 the leading character(s). 7309 Also see |visualmode()|. 7310 7311 Can also be used as a |method|: > 7312 DoFull()->mode() 7313 7314mzeval({expr}) *mzeval()* 7315 Evaluate MzScheme expression {expr} and return its result 7316 converted to Vim data structures. 7317 Numbers and strings are returned as they are. 7318 Pairs (including lists and improper lists) and vectors are 7319 returned as Vim |Lists|. 7320 Hash tables are represented as Vim |Dictionary| type with keys 7321 converted to strings. 7322 All other types are converted to string with display function. 7323 Examples: > 7324 :mz (define l (list 1 2 3)) 7325 :mz (define h (make-hash)) (hash-set! h "list" l) 7326 :echo mzeval("l") 7327 :echo mzeval("h") 7328< 7329 Can also be used as a |method|: > 7330 GetExpr()->mzeval() 7331< 7332 {only available when compiled with the |+mzscheme| feature} 7333 7334nextnonblank({lnum}) *nextnonblank()* 7335 Return the line number of the first line at or below {lnum} 7336 that is not blank. Example: > 7337 if getline(nextnonblank(1)) =~ "Java" 7338< When {lnum} is invalid or there is no non-blank line at or 7339 below it, zero is returned. 7340 See also |prevnonblank()|. 7341 7342 Can also be used as a |method|: > 7343 GetLnum()->nextnonblank() 7344 7345nr2char({expr} [, {utf8}]) *nr2char()* 7346 Return a string with a single character, which has the number 7347 value {expr}. Examples: > 7348 nr2char(64) returns "@" 7349 nr2char(32) returns " " 7350< When {utf8} is omitted or zero, the current 'encoding' is used. 7351 Example for "utf-8": > 7352 nr2char(300) returns I with bow character 7353< With {utf8} set to 1, always return utf-8 characters. 7354 Note that a NUL character in the file is specified with 7355 nr2char(10), because NULs are represented with newline 7356 characters. nr2char(0) is a real NUL and terminates the 7357 string, thus results in an empty string. 7358 To turn a list of character numbers into a string: > 7359 let list = [65, 66, 67] 7360 let str = join(map(list, {_, val -> nr2char(val)}), '') 7361< Result: "ABC" 7362 7363 Can also be used as a |method|: > 7364 GetNumber()->nr2char() 7365 7366or({expr}, {expr}) *or()* 7367 Bitwise OR on the two arguments. The arguments are converted 7368 to a number. A List, Dict or Float argument causes an error. 7369 Example: > 7370 :let bits = or(bits, 0x80) 7371< Can also be used as a |method|: > 7372 :let bits = bits->or(0x80) 7373 7374 7375pathshorten({expr}) *pathshorten()* 7376 Shorten directory names in the path {expr} and return the 7377 result. The tail, the file name, is kept as-is. The other 7378 components in the path are reduced to single letters. Leading 7379 '~' and '.' characters are kept. Example: > 7380 :echo pathshorten('~/.vim/autoload/myfile.vim') 7381< ~/.v/a/myfile.vim ~ 7382 It doesn't matter if the path exists or not. 7383 7384 Can also be used as a |method|: > 7385 GetDirectories()->pathshorten() 7386 7387perleval({expr}) *perleval()* 7388 Evaluate Perl expression {expr} in scalar context and return 7389 its result converted to Vim data structures. If value can't be 7390 converted, it is returned as a string Perl representation. 7391 Note: If you want an array or hash, {expr} must return a 7392 reference to it. 7393 Example: > 7394 :echo perleval('[1 .. 4]') 7395< [1, 2, 3, 4] 7396 7397 Can also be used as a |method|: > 7398 GetExpr()->perleval() 7399 7400< {only available when compiled with the |+perl| feature} 7401 7402 7403popup_ functions are documented here: |popup-functions|. 7404 7405 7406pow({x}, {y}) *pow()* 7407 Return the power of {x} to the exponent {y} as a |Float|. 7408 {x} and {y} must evaluate to a |Float| or a |Number|. 7409 Examples: > 7410 :echo pow(3, 3) 7411< 27.0 > 7412 :echo pow(2, 16) 7413< 65536.0 > 7414 :echo pow(32, 0.20) 7415< 2.0 7416 7417 Can also be used as a |method|: > 7418 Compute()->pow(3) 7419< 7420 {only available when compiled with the |+float| feature} 7421 7422prevnonblank({lnum}) *prevnonblank()* 7423 Return the line number of the first line at or above {lnum} 7424 that is not blank. Example: > 7425 let ind = indent(prevnonblank(v:lnum - 1)) 7426< When {lnum} is invalid or there is no non-blank line at or 7427 above it, zero is returned. 7428 Also see |nextnonblank()|. 7429 7430 Can also be used as a |method|: > 7431 GetLnum()->prevnonblank() 7432 7433printf({fmt}, {expr1} ...) *printf()* 7434 Return a String with {fmt}, where "%" items are replaced by 7435 the formatted form of their respective arguments. Example: > 7436 printf("%4d: E%d %.30s", lnum, errno, msg) 7437< May result in: 7438 " 99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~ 7439 7440 When used as a |method| the base is passed as the second 7441 argument: > 7442 Compute()->printf("result: %d") 7443 7444< Often used items are: 7445 %s string 7446 %6S string right-aligned in 6 display cells 7447 %6s string right-aligned in 6 bytes 7448 %.9s string truncated to 9 bytes 7449 %c single byte 7450 %d decimal number 7451 %5d decimal number padded with spaces to 5 characters 7452 %x hex number 7453 %04x hex number padded with zeros to at least 4 characters 7454 %X hex number using upper case letters 7455 %o octal number 7456 %08b binary number padded with zeros to at least 8 chars 7457 %f floating point number as 12.23, inf, -inf or nan 7458 %F floating point number as 12.23, INF, -INF or NAN 7459 %e floating point number as 1.23e3, inf, -inf or nan 7460 %E floating point number as 1.23E3, INF, -INF or NAN 7461 %g floating point number, as %f or %e depending on value 7462 %G floating point number, as %F or %E depending on value 7463 %% the % character itself 7464 7465 Conversion specifications start with '%' and end with the 7466 conversion type. All other characters are copied unchanged to 7467 the result. 7468 7469 The "%" starts a conversion specification. The following 7470 arguments appear in sequence: 7471 7472 % [flags] [field-width] [.precision] type 7473 7474 flags 7475 Zero or more of the following flags: 7476 7477 # The value should be converted to an "alternate 7478 form". For c, d, and s conversions, this option 7479 has no effect. For o conversions, the precision 7480 of the number is increased to force the first 7481 character of the output string to a zero (except 7482 if a zero value is printed with an explicit 7483 precision of zero). 7484 For b and B conversions, a non-zero result has 7485 the string "0b" (or "0B" for B conversions) 7486 prepended to it. 7487 For x and X conversions, a non-zero result has 7488 the string "0x" (or "0X" for X conversions) 7489 prepended to it. 7490 7491 0 (zero) Zero padding. For all conversions the converted 7492 value is padded on the left with zeros rather 7493 than blanks. If a precision is given with a 7494 numeric conversion (d, b, B, o, x, and X), the 0 7495 flag is ignored. 7496 7497 - A negative field width flag; the converted value 7498 is to be left adjusted on the field boundary. 7499 The converted value is padded on the right with 7500 blanks, rather than on the left with blanks or 7501 zeros. A - overrides a 0 if both are given. 7502 7503 ' ' (space) A blank should be left before a positive 7504 number produced by a signed conversion (d). 7505 7506 + A sign must always be placed before a number 7507 produced by a signed conversion. A + overrides 7508 a space if both are used. 7509 7510 field-width 7511 An optional decimal digit string specifying a minimum 7512 field width. If the converted value has fewer bytes 7513 than the field width, it will be padded with spaces on 7514 the left (or right, if the left-adjustment flag has 7515 been given) to fill out the field width. 7516 7517 .precision 7518 An optional precision, in the form of a period '.' 7519 followed by an optional digit string. If the digit 7520 string is omitted, the precision is taken as zero. 7521 This gives the minimum number of digits to appear for 7522 d, o, x, and X conversions, or the maximum number of 7523 bytes to be printed from a string for s conversions. 7524 For floating point it is the number of digits after 7525 the decimal point. 7526 7527 type 7528 A character that specifies the type of conversion to 7529 be applied, see below. 7530 7531 A field width or precision, or both, may be indicated by an 7532 asterisk '*' instead of a digit string. In this case, a 7533 Number argument supplies the field width or precision. A 7534 negative field width is treated as a left adjustment flag 7535 followed by a positive field width; a negative precision is 7536 treated as though it were missing. Example: > 7537 :echo printf("%d: %.*s", nr, width, line) 7538< This limits the length of the text used from "line" to 7539 "width" bytes. 7540 7541 The conversion specifiers and their meanings are: 7542 7543 *printf-d* *printf-b* *printf-B* *printf-o* 7544 *printf-x* *printf-X* 7545 dbBoxX The Number argument is converted to signed decimal 7546 (d), unsigned binary (b and B), unsigned octal (o), or 7547 unsigned hexadecimal (x and X) notation. The letters 7548 "abcdef" are used for x conversions; the letters 7549 "ABCDEF" are used for X conversions. 7550 The precision, if any, gives the minimum number of 7551 digits that must appear; if the converted value 7552 requires fewer digits, it is padded on the left with 7553 zeros. 7554 In no case does a non-existent or small field width 7555 cause truncation of a numeric field; if the result of 7556 a conversion is wider than the field width, the field 7557 is expanded to contain the conversion result. 7558 The 'h' modifier indicates the argument is 16 bits. 7559 The 'l' modifier indicates the argument is 32 bits. 7560 The 'L' modifier indicates the argument is 64 bits. 7561 Generally, these modifiers are not useful. They are 7562 ignored when type is known from the argument. 7563 7564 i alias for d 7565 D alias for ld 7566 U alias for lu 7567 O alias for lo 7568 7569 *printf-c* 7570 c The Number argument is converted to a byte, and the 7571 resulting character is written. 7572 7573 *printf-s* 7574 s The text of the String argument is used. If a 7575 precision is specified, no more bytes than the number 7576 specified are used. 7577 If the argument is not a String type, it is 7578 automatically converted to text with the same format 7579 as ":echo". 7580 *printf-S* 7581 S The text of the String argument is used. If a 7582 precision is specified, no more display cells than the 7583 number specified are used. 7584 7585 *printf-f* *E807* 7586 f F The Float argument is converted into a string of the 7587 form 123.456. The precision specifies the number of 7588 digits after the decimal point. When the precision is 7589 zero the decimal point is omitted. When the precision 7590 is not specified 6 is used. A really big number 7591 (out of range or dividing by zero) results in "inf" 7592 or "-inf" with %f (INF or -INF with %F). 7593 "0.0 / 0.0" results in "nan" with %f (NAN with %F). 7594 Example: > 7595 echo printf("%.2f", 12.115) 7596< 12.12 7597 Note that roundoff depends on the system libraries. 7598 Use |round()| when in doubt. 7599 7600 *printf-e* *printf-E* 7601 e E The Float argument is converted into a string of the 7602 form 1.234e+03 or 1.234E+03 when using 'E'. The 7603 precision specifies the number of digits after the 7604 decimal point, like with 'f'. 7605 7606 *printf-g* *printf-G* 7607 g G The Float argument is converted like with 'f' if the 7608 value is between 0.001 (inclusive) and 10000000.0 7609 (exclusive). Otherwise 'e' is used for 'g' and 'E' 7610 for 'G'. When no precision is specified superfluous 7611 zeroes and '+' signs are removed, except for the zero 7612 immediately after the decimal point. Thus 10000000.0 7613 results in 1.0e7. 7614 7615 *printf-%* 7616 % A '%' is written. No argument is converted. The 7617 complete conversion specification is "%%". 7618 7619 When a Number argument is expected a String argument is also 7620 accepted and automatically converted. 7621 When a Float or String argument is expected a Number argument 7622 is also accepted and automatically converted. 7623 Any other argument type results in an error message. 7624 7625 *E766* *E767* 7626 The number of {exprN} arguments must exactly match the number 7627 of "%" items. If there are not sufficient or too many 7628 arguments an error is given. Up to 18 arguments can be used. 7629 7630 7631prompt_setcallback({buf}, {expr}) *prompt_setcallback()* 7632 Set prompt callback for buffer {buf} to {expr}. When {expr} 7633 is an empty string the callback is removed. This has only 7634 effect if {buf} has 'buftype' set to "prompt". 7635 7636 The callback is invoked when pressing Enter. The current 7637 buffer will always be the prompt buffer. A new line for a 7638 prompt is added before invoking the callback, thus the prompt 7639 for which the callback was invoked will be in the last but one 7640 line. 7641 If the callback wants to add text to the buffer, it must 7642 insert it above the last line, since that is where the current 7643 prompt is. This can also be done asynchronously. 7644 The callback is invoked with one argument, which is the text 7645 that was entered at the prompt. This can be an empty string 7646 if the user only typed Enter. 7647 Example: > 7648 call prompt_setcallback(bufnr(), function('s:TextEntered')) 7649 func s:TextEntered(text) 7650 if a:text == 'exit' || a:text == 'quit' 7651 stopinsert 7652 close 7653 else 7654 call append(line('$') - 1, 'Entered: "' . a:text . '"') 7655 " Reset 'modified' to allow the buffer to be closed. 7656 set nomodified 7657 endif 7658 endfunc 7659 7660< Can also be used as a |method|: > 7661 GetBuffer()->prompt_setcallback(callback) 7662 7663 7664prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()* 7665 Set a callback for buffer {buf} to {expr}. When {expr} is an 7666 empty string the callback is removed. This has only effect if 7667 {buf} has 'buftype' set to "prompt". 7668 7669 This callback will be invoked when pressing CTRL-C in Insert 7670 mode. Without setting a callback Vim will exit Insert mode, 7671 as in any buffer. 7672 7673 Can also be used as a |method|: > 7674 GetBuffer()->prompt_setinterrupt(callback) 7675 7676prompt_setprompt({buf}, {text}) *prompt_setprompt()* 7677 Set prompt for buffer {buf} to {text}. You most likely want 7678 {text} to end in a space. 7679 The result is only visible if {buf} has 'buftype' set to 7680 "prompt". Example: > 7681 call prompt_setprompt(bufnr(), 'command: ') 7682< 7683 Can also be used as a |method|: > 7684 GetBuffer()->prompt_setprompt('command: ') 7685 7686prop_ functions are documented here: |text-prop-functions|. 7687 7688pum_getpos() *pum_getpos()* 7689 If the popup menu (see |ins-completion-menu|) is not visible, 7690 returns an empty |Dictionary|, otherwise, returns a 7691 |Dictionary| with the following keys: 7692 height nr of items visible 7693 width screen cells 7694 row top screen row (0 first row) 7695 col leftmost screen column (0 first col) 7696 size total nr of items 7697 scrollbar |TRUE| if scrollbar is visible 7698 7699 The values are the same as in |v:event| during 7700 |CompleteChanged|. 7701 7702pumvisible() *pumvisible()* 7703 Returns non-zero when the popup menu is visible, zero 7704 otherwise. See |ins-completion-menu|. 7705 This can be used to avoid some things that would remove the 7706 popup menu. 7707 7708py3eval({expr}) *py3eval()* 7709 Evaluate Python expression {expr} and return its result 7710 converted to Vim data structures. 7711 Numbers and strings are returned as they are (strings are 7712 copied though, Unicode strings are additionally converted to 7713 'encoding'). 7714 Lists are represented as Vim |List| type. 7715 Dictionaries are represented as Vim |Dictionary| type with 7716 keys converted to strings. 7717 7718 Can also be used as a |method|: > 7719 GetExpr()->py3eval() 7720 7721< {only available when compiled with the |+python3| feature} 7722 7723 *E858* *E859* 7724pyeval({expr}) *pyeval()* 7725 Evaluate Python expression {expr} and return its result 7726 converted to Vim data structures. 7727 Numbers and strings are returned as they are (strings are 7728 copied though). 7729 Lists are represented as Vim |List| type. 7730 Dictionaries are represented as Vim |Dictionary| type, 7731 non-string keys result in error. 7732 7733 Can also be used as a |method|: > 7734 GetExpr()->pyeval() 7735 7736< {only available when compiled with the |+python| feature} 7737 7738pyxeval({expr}) *pyxeval()* 7739 Evaluate Python expression {expr} and return its result 7740 converted to Vim data structures. 7741 Uses Python 2 or 3, see |python_x| and 'pyxversion'. 7742 See also: |pyeval()|, |py3eval()| 7743 7744 Can also be used as a |method|: > 7745 GetExpr()->pyxeval() 7746 7747< {only available when compiled with the |+python| or the 7748 |+python3| feature} 7749 7750 *E726* *E727* 7751range({expr} [, {max} [, {stride}]]) *range()* 7752 Returns a |List| with Numbers: 7753 - If only {expr} is specified: [0, 1, ..., {expr} - 1] 7754 - If {max} is specified: [{expr}, {expr} + 1, ..., {max}] 7755 - If {stride} is specified: [{expr}, {expr} + {stride}, ..., 7756 {max}] (increasing {expr} with {stride} each time, not 7757 producing a value past {max}). 7758 When the maximum is one before the start the result is an 7759 empty list. When the maximum is more than one before the 7760 start this is an error. 7761 Examples: > 7762 range(4) " [0, 1, 2, 3] 7763 range(2, 4) " [2, 3, 4] 7764 range(2, 9, 3) " [2, 5, 8] 7765 range(2, -2, -1) " [2, 1, 0, -1, -2] 7766 range(0) " [] 7767 range(2, 0) " error! 7768< 7769 Can also be used as a |method|: > 7770 GetExpr()->range() 7771< 7772 7773rand([{expr}]) *rand()* *random* 7774 Return a pseudo-random Number generated with an xoshiro128** 7775 algorithm using seed {expr}. The returned number is 32 bits, 7776 also on 64 bits systems, for consistency. 7777 {expr} can be initialized by |srand()| and will be updated by 7778 rand(). If {expr} is omitted, an internal seed value is used 7779 and updated. 7780 7781 Examples: > 7782 :echo rand() 7783 :let seed = srand() 7784 :echo rand(seed) 7785 :echo rand(seed) % 16 " random number 0 - 15 7786< 7787 *readdir()* 7788readdir({directory} [, {expr}]) 7789 Return a list with file and directory names in {directory}. 7790 You can also use |glob()| if you don't need to do complicated 7791 things, such as limiting the number of matches. 7792 7793 When {expr} is omitted all entries are included. 7794 When {expr} is given, it is evaluated to check what to do: 7795 If {expr} results in -1 then no further entries will 7796 be handled. 7797 If {expr} results in 0 then this entry will not be 7798 added to the list. 7799 If {expr} results in 1 then this entry will be added 7800 to the list. 7801 Each time {expr} is evaluated |v:val| is set to the entry name. 7802 When {expr} is a function the name is passed as the argument. 7803 For example, to get a list of files ending in ".txt": > 7804 readdir(dirname, {n -> n =~ '.txt$'}) 7805< To skip hidden and backup files: > 7806 readdir(dirname, {n -> n !~ '^\.\|\~$'}) 7807 7808< If you want to get a directory tree: > 7809 function! s:tree(dir) 7810 return {a:dir : map(readdir(a:dir), 7811 \ {_, x -> isdirectory(x) ? 7812 \ {x : s:tree(a:dir . '/' . x)} : x})} 7813 endfunction 7814 echo s:tree(".") 7815< 7816 Can also be used as a |method|: > 7817 GetDirName()->readdir() 7818< 7819 *readfile()* 7820readfile({fname} [, {type} [, {max}]]) 7821 Read file {fname} and return a |List|, each line of the file 7822 as an item. Lines are broken at NL characters. Macintosh 7823 files separated with CR will result in a single long line 7824 (unless a NL appears somewhere). 7825 All NUL characters are replaced with a NL character. 7826 When {type} contains "b" binary mode is used: 7827 - When the last line ends in a NL an extra empty list item is 7828 added. 7829 - No CR characters are removed. 7830 When {type} contains "B" a |Blob| is returned with the binary 7831 data of the file unmodified. 7832 Otherwise: 7833 - CR characters that appear before a NL are removed. 7834 - Whether the last line ends in a NL or not does not matter. 7835 - When 'encoding' is Unicode any UTF-8 byte order mark is 7836 removed from the text. 7837 When {max} is given this specifies the maximum number of lines 7838 to be read. Useful if you only want to check the first ten 7839 lines of a file: > 7840 :for line in readfile(fname, '', 10) 7841 : if line =~ 'Date' | echo line | endif 7842 :endfor 7843< When {max} is negative -{max} lines from the end of the file 7844 are returned, or as many as there are. 7845 When {max} is zero the result is an empty list. 7846 Note that without {max} the whole file is read into memory. 7847 Also note that there is no recognition of encoding. Read a 7848 file into a buffer if you need to. 7849 When the file can't be opened an error message is given and 7850 the result is an empty list. 7851 Also see |writefile()|. 7852 7853 Can also be used as a |method|: > 7854 GetFileName()->readfile() 7855 7856reg_executing() *reg_executing()* 7857 Returns the single letter name of the register being executed. 7858 Returns an empty string when no register is being executed. 7859 See |@|. 7860 7861reg_recording() *reg_recording()* 7862 Returns the single letter name of the register being recorded. 7863 Returns an empty string when not recording. See |q|. 7864 7865reltime([{start} [, {end}]]) *reltime()* 7866 Return an item that represents a time value. The format of 7867 the item depends on the system. It can be passed to 7868 |reltimestr()| to convert it to a string or |reltimefloat()| 7869 to convert to a Float. 7870 Without an argument it returns the current time. 7871 With one argument is returns the time passed since the time 7872 specified in the argument. 7873 With two arguments it returns the time passed between {start} 7874 and {end}. 7875 The {start} and {end} arguments must be values returned by 7876 reltime(). 7877 7878 Can also be used as a |method|: > 7879 GetStart()->reltime() 7880< 7881 {only available when compiled with the |+reltime| feature} 7882 7883reltimefloat({time}) *reltimefloat()* 7884 Return a Float that represents the time value of {time}. 7885 Example: > 7886 let start = reltime() 7887 call MyFunction() 7888 let seconds = reltimefloat(reltime(start)) 7889< See the note of reltimestr() about overhead. 7890 Also see |profiling|. 7891 7892 Can also be used as a |method|: > 7893 reltime(start)->reltimefloat() 7894 7895< {only available when compiled with the |+reltime| feature} 7896 7897reltimestr({time}) *reltimestr()* 7898 Return a String that represents the time value of {time}. 7899 This is the number of seconds, a dot and the number of 7900 microseconds. Example: > 7901 let start = reltime() 7902 call MyFunction() 7903 echo reltimestr(reltime(start)) 7904< Note that overhead for the commands will be added to the time. 7905 The accuracy depends on the system. 7906 Leading spaces are used to make the string align nicely. You 7907 can use split() to remove it. > 7908 echo split(reltimestr(reltime(start)))[0] 7909< Also see |profiling|. 7910 7911 Can also be used as a |method|: > 7912 reltime(start)->reltimestr() 7913 7914< {only available when compiled with the |+reltime| feature} 7915 7916 *remote_expr()* *E449* 7917remote_expr({server}, {string} [, {idvar} [, {timeout}]]) 7918 Send the {string} to {server}. The string is sent as an 7919 expression and the result is returned after evaluation. 7920 The result must be a String or a |List|. A |List| is turned 7921 into a String by joining the items with a line break in 7922 between (not at the end), like with join(expr, "\n"). 7923 If {idvar} is present and not empty, it is taken as the name 7924 of a variable and a {serverid} for later use with 7925 |remote_read()| is stored there. 7926 If {timeout} is given the read times out after this many 7927 seconds. Otherwise a timeout of 600 seconds is used. 7928 See also |clientserver| |RemoteReply|. 7929 This function is not available in the |sandbox|. 7930 {only available when compiled with the |+clientserver| feature} 7931 Note: Any errors will cause a local error message to be issued 7932 and the result will be the empty string. 7933 7934 Variables will be evaluated in the global namespace, 7935 independent of a function currently being active. Except 7936 when in debug mode, then local function variables and 7937 arguments can be evaluated. 7938 7939 Examples: > 7940 :echo remote_expr("gvim", "2+2") 7941 :echo remote_expr("gvim1", "b:current_syntax") 7942< 7943 Can also be used as a |method|: > 7944 ServerName()->remote_expr(expr) 7945 7946remote_foreground({server}) *remote_foreground()* 7947 Move the Vim server with the name {server} to the foreground. 7948 This works like: > 7949 remote_expr({server}, "foreground()") 7950< Except that on Win32 systems the client does the work, to work 7951 around the problem that the OS doesn't always allow the server 7952 to bring itself to the foreground. 7953 Note: This does not restore the window if it was minimized, 7954 like foreground() does. 7955 This function is not available in the |sandbox|. 7956 7957 Can also be used as a |method|: > 7958 ServerName()->remote_foreground() 7959 7960< {only in the Win32, Athena, Motif and GTK GUI versions and the 7961 Win32 console version} 7962 7963 7964remote_peek({serverid} [, {retvar}]) *remote_peek()* 7965 Returns a positive number if there are available strings 7966 from {serverid}. Copies any reply string into the variable 7967 {retvar} if specified. {retvar} must be a string with the 7968 name of a variable. 7969 Returns zero if none are available. 7970 Returns -1 if something is wrong. 7971 See also |clientserver|. 7972 This function is not available in the |sandbox|. 7973 {only available when compiled with the |+clientserver| feature} 7974 Examples: > 7975 :let repl = "" 7976 :echo "PEEK: ".remote_peek(id, "repl").": ".repl 7977 7978< Can also be used as a |method|: > 7979 ServerId()->remote_peek() 7980 7981remote_read({serverid}, [{timeout}]) *remote_read()* 7982 Return the oldest available reply from {serverid} and consume 7983 it. Unless a {timeout} in seconds is given, it blocks until a 7984 reply is available. 7985 See also |clientserver|. 7986 This function is not available in the |sandbox|. 7987 {only available when compiled with the |+clientserver| feature} 7988 Example: > 7989 :echo remote_read(id) 7990 7991< Can also be used as a |method|: > 7992 ServerId()->remote_read() 7993< 7994 *remote_send()* *E241* 7995remote_send({server}, {string} [, {idvar}]) 7996 Send the {string} to {server}. The string is sent as input 7997 keys and the function returns immediately. At the Vim server 7998 the keys are not mapped |:map|. 7999 If {idvar} is present, it is taken as the name of a variable 8000 and a {serverid} for later use with remote_read() is stored 8001 there. 8002 See also |clientserver| |RemoteReply|. 8003 This function is not available in the |sandbox|. 8004 {only available when compiled with the |+clientserver| feature} 8005 8006 Note: Any errors will be reported in the server and may mess 8007 up the display. 8008 Examples: > 8009 :echo remote_send("gvim", ":DropAndReply ".file, "serverid"). 8010 \ remote_read(serverid) 8011 8012 :autocmd NONE RemoteReply * 8013 \ echo remote_read(expand("<amatch>")) 8014 :echo remote_send("gvim", ":sleep 10 | echo ". 8015 \ 'server2client(expand("<client>"), "HELLO")<CR>') 8016< 8017 Can also be used as a |method|: > 8018 ServerName()->remote_send(keys) 8019< 8020 *remote_startserver()* *E941* *E942* 8021remote_startserver({name}) 8022 Become the server {name}. This fails if already running as a 8023 server, when |v:servername| is not empty. 8024 8025 Can also be used as a |method|: > 8026 ServerName()->remote_startserver() 8027 8028< {only available when compiled with the |+clientserver| feature} 8029 8030remove({list}, {idx} [, {end}]) *remove()* 8031 Without {end}: Remove the item at {idx} from |List| {list} and 8032 return the item. 8033 With {end}: Remove items from {idx} to {end} (inclusive) and 8034 return a List with these items. When {idx} points to the same 8035 item as {end} a list with one item is returned. When {end} 8036 points to an item before {idx} this is an error. 8037 See |list-index| for possible values of {idx} and {end}. 8038 Example: > 8039 :echo "last item: " . remove(mylist, -1) 8040 :call remove(mylist, 0, 9) 8041< 8042 Use |delete()| to remove a file. 8043 8044 Can also be used as a |method|: > 8045 mylist->remove(idx) 8046 8047remove({blob}, {idx} [, {end}]) 8048 Without {end}: Remove the byte at {idx} from |Blob| {blob} and 8049 return the byte. 8050 With {end}: Remove bytes from {idx} to {end} (inclusive) and 8051 return a |Blob| with these bytes. When {idx} points to the same 8052 byte as {end} a |Blob| with one byte is returned. When {end} 8053 points to a byte before {idx} this is an error. 8054 Example: > 8055 :echo "last byte: " . remove(myblob, -1) 8056 :call remove(mylist, 0, 9) 8057 8058remove({dict}, {key}) 8059 Remove the entry from {dict} with key {key} and return it. 8060 Example: > 8061 :echo "removed " . remove(dict, "one") 8062< If there is no {key} in {dict} this is an error. 8063 8064rename({from}, {to}) *rename()* 8065 Rename the file by the name {from} to the name {to}. This 8066 should also work to move files across file systems. The 8067 result is a Number, which is 0 if the file was renamed 8068 successfully, and non-zero when the renaming failed. 8069 NOTE: If {to} exists it is overwritten without warning. 8070 This function is not available in the |sandbox|. 8071 8072 Can also be used as a |method|: > 8073 GetOldName()->rename(newname) 8074 8075repeat({expr}, {count}) *repeat()* 8076 Repeat {expr} {count} times and return the concatenated 8077 result. Example: > 8078 :let separator = repeat('-', 80) 8079< When {count} is zero or negative the result is empty. 8080 When {expr} is a |List| the result is {expr} concatenated 8081 {count} times. Example: > 8082 :let longlist = repeat(['a', 'b'], 3) 8083< Results in ['a', 'b', 'a', 'b', 'a', 'b']. 8084 8085 Can also be used as a |method|: > 8086 mylist->repeat(count) 8087 8088resolve({filename}) *resolve()* *E655* 8089 On MS-Windows, when {filename} is a shortcut (a .lnk file), 8090 returns the path the shortcut points to in a simplified form. 8091 When {filename} is a symbolic link or junction point, return 8092 the full path to the target. If the target of junction is 8093 removed, return {filename}. 8094 On Unix, repeat resolving symbolic links in all path 8095 components of {filename} and return the simplified result. 8096 To cope with link cycles, resolving of symbolic links is 8097 stopped after 100 iterations. 8098 On other systems, return the simplified {filename}. 8099 The simplification step is done as by |simplify()|. 8100 resolve() keeps a leading path component specifying the 8101 current directory (provided the result is still a relative 8102 path name) and also keeps a trailing path separator. 8103 8104 Can also be used as a |method|: > 8105 GetName()->resolve() 8106 8107reverse({object}) *reverse()* 8108 Reverse the order of items in {object} in-place. 8109 {object} can be a |List| or a |Blob|. 8110 Returns {object}. 8111 If you want an object to remain unmodified make a copy first: > 8112 :let revlist = reverse(copy(mylist)) 8113< Can also be used as a |method|: > 8114 mylist->reverse() 8115 8116round({expr}) *round()* 8117 Round off {expr} to the nearest integral value and return it 8118 as a |Float|. If {expr} lies halfway between two integral 8119 values, then use the larger one (away from zero). 8120 {expr} must evaluate to a |Float| or a |Number|. 8121 Examples: > 8122 echo round(0.456) 8123< 0.0 > 8124 echo round(4.5) 8125< 5.0 > 8126 echo round(-4.5) 8127< -5.0 8128 8129 Can also be used as a |method|: > 8130 Compute()->round() 8131< 8132 {only available when compiled with the |+float| feature} 8133 8134rubyeval({expr}) *rubyeval()* 8135 Evaluate Ruby expression {expr} and return its result 8136 converted to Vim data structures. 8137 Numbers, floats and strings are returned as they are (strings 8138 are copied though). 8139 Arrays are represented as Vim |List| type. 8140 Hashes are represented as Vim |Dictionary| type. 8141 Other objects are represented as strings resulted from their 8142 "Object#to_s" method. 8143 8144 Can also be used as a |method|: > 8145 GetRubyExpr()->rubyeval() 8146 8147< {only available when compiled with the |+ruby| feature} 8148 8149screenattr({row}, {col}) *screenattr()* 8150 Like |screenchar()|, but return the attribute. This is a rather 8151 arbitrary number that can only be used to compare to the 8152 attribute at other positions. 8153 8154 Can also be used as a |method|: > 8155 GetRow()->screenattr(col) 8156 8157screenchar({row}, {col}) *screenchar()* 8158 The result is a Number, which is the character at position 8159 [row, col] on the screen. This works for every possible 8160 screen position, also status lines, window separators and the 8161 command line. The top left position is row one, column one 8162 The character excludes composing characters. For double-byte 8163 encodings it may only be the first byte. 8164 This is mainly to be used for testing. 8165 Returns -1 when row or col is out of range. 8166 8167 Can also be used as a |method|: > 8168 GetRow()->screenchar(col) 8169 8170screenchars({row}, {col}) *screenchars()* 8171 The result is a List of Numbers. The first number is the same 8172 as what |screenchar()| returns. Further numbers are 8173 composing characters on top of the base character. 8174 This is mainly to be used for testing. 8175 Returns an empty List when row or col is out of range. 8176 8177 Can also be used as a |method|: > 8178 GetRow()->screenchars(col) 8179 8180screencol() *screencol()* 8181 The result is a Number, which is the current screen column of 8182 the cursor. The leftmost column has number 1. 8183 This function is mainly used for testing. 8184 8185 Note: Always returns the current screen column, thus if used 8186 in a command (e.g. ":echo screencol()") it will return the 8187 column inside the command line, which is 1 when the command is 8188 executed. To get the cursor position in the file use one of 8189 the following mappings: > 8190 nnoremap <expr> GG ":echom ".screencol()."\n" 8191 nnoremap <silent> GG :echom screencol()<CR> 8192< 8193screenpos({winid}, {lnum}, {col}) *screenpos()* 8194 The result is a Dict with the screen position of the text 8195 character in window {winid} at buffer line {lnum} and column 8196 {col}. {col} is a one-based byte index. 8197 The Dict has these members: 8198 row screen row 8199 col first screen column 8200 endcol last screen column 8201 curscol cursor screen column 8202 If the specified position is not visible, all values are zero. 8203 The "endcol" value differs from "col" when the character 8204 occupies more than one screen cell. E.g. for a Tab "col" can 8205 be 1 and "endcol" can be 8. 8206 The "curscol" value is where the cursor would be placed. For 8207 a Tab it would be the same as "endcol", while for a double 8208 width character it would be the same as "col". 8209 8210 Can also be used as a |method|: > 8211 GetWinid()->screenpos(lnum, col) 8212 8213screenrow() *screenrow()* 8214 The result is a Number, which is the current screen row of the 8215 cursor. The top line has number one. 8216 This function is mainly used for testing. 8217 Alternatively you can use |winline()|. 8218 8219 Note: Same restrictions as with |screencol()|. 8220 8221screenstring({row}, {col}) *screenstring()* 8222 The result is a String that contains the base character and 8223 any composing characters at position [row, col] on the screen. 8224 This is like |screenchars()| but returning a String with the 8225 characters. 8226 This is mainly to be used for testing. 8227 Returns an empty String when row or col is out of range. 8228 8229 Can also be used as a |method|: > 8230 GetRow()->screenstring(col) 8231 8232search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()* 8233 Search for regexp pattern {pattern}. The search starts at the 8234 cursor position (you can use |cursor()| to set it). 8235 8236 When a match has been found its line number is returned. 8237 If there is no match a 0 is returned and the cursor doesn't 8238 move. No error message is given. 8239 8240 {flags} is a String, which can contain these character flags: 8241 'b' search Backward instead of forward 8242 'c' accept a match at the Cursor position 8243 'e' move to the End of the match 8244 'n' do Not move the cursor 8245 'p' return number of matching sub-Pattern (see below) 8246 's' Set the ' mark at the previous location of the cursor 8247 'w' Wrap around the end of the file 8248 'W' don't Wrap around the end of the file 8249 'z' start searching at the cursor column instead of zero 8250 If neither 'w' or 'W' is given, the 'wrapscan' option applies. 8251 8252 If the 's' flag is supplied, the ' mark is set, only if the 8253 cursor is moved. The 's' flag cannot be combined with the 'n' 8254 flag. 8255 8256 'ignorecase', 'smartcase' and 'magic' are used. 8257 8258 When the 'z' flag is not given, searching always starts in 8259 column zero and then matches before the cursor are skipped. 8260 When the 'c' flag is present in 'cpo' the next search starts 8261 after the match. Without the 'c' flag the next search starts 8262 one column further. 8263 8264 When the {stopline} argument is given then the search stops 8265 after searching this line. This is useful to restrict the 8266 search to a range of lines. Examples: > 8267 let match = search('(', 'b', line("w0")) 8268 let end = search('END', '', line("w$")) 8269< When {stopline} is used and it is not zero this also implies 8270 that the search does not wrap around the end of the file. 8271 A zero value is equal to not giving the argument. 8272 8273 When the {timeout} argument is given the search stops when 8274 more than this many milliseconds have passed. Thus when 8275 {timeout} is 500 the search stops after half a second. 8276 The value must not be negative. A zero value is like not 8277 giving the argument. 8278 {only available when compiled with the |+reltime| feature} 8279 8280 *search()-sub-match* 8281 With the 'p' flag the returned value is one more than the 8282 first sub-match in \(\). One if none of them matched but the 8283 whole pattern did match. 8284 To get the column number too use |searchpos()|. 8285 8286 The cursor will be positioned at the match, unless the 'n' 8287 flag is used. 8288 8289 Example (goes over all files in the argument list): > 8290 :let n = 1 8291 :while n <= argc() " loop over all files in arglist 8292 : exe "argument " . n 8293 : " start at the last char in the file and wrap for the 8294 : " first search to find match at start of file 8295 : normal G$ 8296 : let flags = "w" 8297 : while search("foo", flags) > 0 8298 : s/foo/bar/g 8299 : let flags = "W" 8300 : endwhile 8301 : update " write the file if modified 8302 : let n = n + 1 8303 :endwhile 8304< 8305 Example for using some flags: > 8306 :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe') 8307< This will search for the keywords "if", "else", and "endif" 8308 under or after the cursor. Because of the 'p' flag, it 8309 returns 1, 2, or 3 depending on which keyword is found, or 0 8310 if the search fails. With the cursor on the first word of the 8311 line: 8312 if (foo == 0) | let foo = foo + 1 | endif ~ 8313 the function returns 1. Without the 'c' flag, the function 8314 finds the "endif" and returns 3. The same thing happens 8315 without the 'e' flag if the cursor is on the "f" of "if". 8316 The 'n' flag tells the function not to move the cursor. 8317 8318 Can also be used as a |method|: > 8319 GetPattern()->search() 8320 8321searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()* 8322 Search for the declaration of {name}. 8323 8324 With a non-zero {global} argument it works like |gD|, find 8325 first match in the file. Otherwise it works like |gd|, find 8326 first match in the function. 8327 8328 With a non-zero {thisblock} argument matches in a {} block 8329 that ends before the cursor position are ignored. Avoids 8330 finding variable declarations only valid in another scope. 8331 8332 Moves the cursor to the found match. 8333 Returns zero for success, non-zero for failure. 8334 Example: > 8335 if searchdecl('myvar') == 0 8336 echo getline('.') 8337 endif 8338< 8339 Can also be used as a |method|: > 8340 GetName()->searchdecl() 8341< 8342 *searchpair()* 8343searchpair({start}, {middle}, {end} [, {flags} [, {skip} 8344 [, {stopline} [, {timeout}]]]]) 8345 Search for the match of a nested start-end pair. This can be 8346 used to find the "endif" that matches an "if", while other 8347 if/endif pairs in between are ignored. 8348 The search starts at the cursor. The default is to search 8349 forward, include 'b' in {flags} to search backward. 8350 If a match is found, the cursor is positioned at it and the 8351 line number is returned. If no match is found 0 or -1 is 8352 returned and the cursor doesn't move. No error message is 8353 given. 8354 8355 {start}, {middle} and {end} are patterns, see |pattern|. They 8356 must not contain \( \) pairs. Use of \%( \) is allowed. When 8357 {middle} is not empty, it is found when searching from either 8358 direction, but only when not in a nested start-end pair. A 8359 typical use is: > 8360 searchpair('\<if\>', '\<else\>', '\<endif\>') 8361< By leaving {middle} empty the "else" is skipped. 8362 8363 {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with 8364 |search()|. Additionally: 8365 'r' Repeat until no more matches found; will find the 8366 outer pair. Implies the 'W' flag. 8367 'm' Return number of matches instead of line number with 8368 the match; will be > 1 when 'r' is used. 8369 Note: it's nearly always a good idea to use the 'W' flag, to 8370 avoid wrapping around the end of the file. 8371 8372 When a match for {start}, {middle} or {end} is found, the 8373 {skip} expression is evaluated with the cursor positioned on 8374 the start of the match. It should return non-zero if this 8375 match is to be skipped. E.g., because it is inside a comment 8376 or a string. 8377 When {skip} is omitted or empty, every match is accepted. 8378 When evaluating {skip} causes an error the search is aborted 8379 and -1 returned. 8380 {skip} can be a string, a lambda, a funcref or a partial. 8381 Anything else makes the function fail. 8382 8383 For {stopline} and {timeout} see |search()|. 8384 8385 The value of 'ignorecase' is used. 'magic' is ignored, the 8386 patterns are used like it's on. 8387 8388 The search starts exactly at the cursor. A match with 8389 {start}, {middle} or {end} at the next character, in the 8390 direction of searching, is the first one found. Example: > 8391 if 1 8392 if 2 8393 endif 2 8394 endif 1 8395< When starting at the "if 2", with the cursor on the "i", and 8396 searching forwards, the "endif 2" is found. When starting on 8397 the character just before the "if 2", the "endif 1" will be 8398 found. That's because the "if 2" will be found first, and 8399 then this is considered to be a nested if/endif from "if 2" to 8400 "endif 2". 8401 When searching backwards and {end} is more than one character, 8402 it may be useful to put "\zs" at the end of the pattern, so 8403 that when the cursor is inside a match with the end it finds 8404 the matching start. 8405 8406 Example, to find the "endif" command in a Vim script: > 8407 8408 :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W', 8409 \ 'getline(".") =~ "^\\s*\""') 8410 8411< The cursor must be at or after the "if" for which a match is 8412 to be found. Note that single-quote strings are used to avoid 8413 having to double the backslashes. The skip expression only 8414 catches comments at the start of a line, not after a command. 8415 Also, a word "en" or "if" halfway a line is considered a 8416 match. 8417 Another example, to search for the matching "{" of a "}": > 8418 8419 :echo searchpair('{', '', '}', 'bW') 8420 8421< This works when the cursor is at or before the "}" for which a 8422 match is to be found. To reject matches that syntax 8423 highlighting recognized as strings: > 8424 8425 :echo searchpair('{', '', '}', 'bW', 8426 \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"') 8427< 8428 *searchpairpos()* 8429searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} 8430 [, {stopline} [, {timeout}]]]]) 8431 Same as |searchpair()|, but returns a |List| with the line and 8432 column position of the match. The first element of the |List| 8433 is the line number and the second element is the byte index of 8434 the column position of the match. If no match is found, 8435 returns [0, 0]. > 8436 8437 :let [lnum,col] = searchpairpos('{', '', '}', 'n') 8438< 8439 See |match-parens| for a bigger and more useful example. 8440 8441searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()* 8442 Same as |search()|, but returns a |List| with the line and 8443 column position of the match. The first element of the |List| 8444 is the line number and the second element is the byte index of 8445 the column position of the match. If no match is found, 8446 returns [0, 0]. 8447 Example: > 8448 :let [lnum, col] = searchpos('mypattern', 'n') 8449 8450< When the 'p' flag is given then there is an extra item with 8451 the sub-pattern match number |search()-sub-match|. Example: > 8452 :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np') 8453< In this example "submatch" is 2 when a lowercase letter is 8454 found |/\l|, 3 when an uppercase letter is found |/\u|. 8455 8456 Can also be used as a |method|: > 8457 GetPattern()->searchpos() 8458 8459server2client({clientid}, {string}) *server2client()* 8460 Send a reply string to {clientid}. The most recent {clientid} 8461 that sent a string can be retrieved with expand("<client>"). 8462 {only available when compiled with the |+clientserver| feature} 8463 Note: 8464 This id has to be stored before the next command can be 8465 received. I.e. before returning from the received command and 8466 before calling any commands that waits for input. 8467 See also |clientserver|. 8468 Example: > 8469 :echo server2client(expand("<client>"), "HELLO") 8470 8471< Can also be used as a |method|: > 8472 GetClientId()->server2client(string) 8473< 8474serverlist() *serverlist()* 8475 Return a list of available server names, one per line. 8476 When there are no servers or the information is not available 8477 an empty string is returned. See also |clientserver|. 8478 {only available when compiled with the |+clientserver| feature} 8479 Example: > 8480 :echo serverlist() 8481< 8482setbufline({expr}, {lnum}, {text}) *setbufline()* 8483 Set line {lnum} to {text} in buffer {expr}. This works like 8484 |setline()| for the specified buffer. 8485 8486 This function works only for loaded buffers. First call 8487 |bufload()| if needed. 8488 8489 To insert lines use |appendbufline()|. 8490 Any text properties in {lnum} are cleared. 8491 8492 {text} can be a string to set one line, or a list of strings 8493 to set multiple lines. If the list extends below the last 8494 line then those lines are added. 8495 8496 For the use of {expr}, see |bufname()| above. 8497 8498 {lnum} is used like with |setline()|. 8499 When {lnum} is just below the last line the {text} will be 8500 added below the last line. 8501 8502 When {expr} is not a valid buffer, the buffer is not loaded or 8503 {lnum} is not valid then 1 is returned. On success 0 is 8504 returned. 8505 8506 Can also be used as a |method|, the base is passed as the 8507 third argument: > 8508 GetText()->setbufline(buf, lnum) 8509 8510setbufvar({expr}, {varname}, {val}) *setbufvar()* 8511 Set option or local variable {varname} in buffer {expr} to 8512 {val}. 8513 This also works for a global or local window option, but it 8514 doesn't work for a global or local window variable. 8515 For a local window option the global value is unchanged. 8516 For the use of {expr}, see |bufname()| above. 8517 Note that the variable name without "b:" must be used. 8518 Examples: > 8519 :call setbufvar(1, "&mod", 1) 8520 :call setbufvar("todo", "myvar", "foobar") 8521< This function is not available in the |sandbox|. 8522 8523 Can also be used as a |method|, the base is passed as the 8524 third argument: > 8525 GetValue()->setbufvar(buf, varname) 8526 8527setcharsearch({dict}) *setcharsearch()* 8528 Set the current character search information to {dict}, 8529 which contains one or more of the following entries: 8530 8531 char character which will be used for a subsequent 8532 |,| or |;| command; an empty string clears the 8533 character search 8534 forward direction of character search; 1 for forward, 8535 0 for backward 8536 until type of character search; 1 for a |t| or |T| 8537 character search, 0 for an |f| or |F| 8538 character search 8539 8540 This can be useful to save/restore a user's character search 8541 from a script: > 8542 :let prevsearch = getcharsearch() 8543 :" Perform a command which clobbers user's search 8544 :call setcharsearch(prevsearch) 8545< Also see |getcharsearch()|. 8546 8547 Can also be used as a |method|: > 8548 SavedSearch()->setcharsearch() 8549 8550setcmdpos({pos}) *setcmdpos()* 8551 Set the cursor position in the command line to byte position 8552 {pos}. The first position is 1. 8553 Use |getcmdpos()| to obtain the current position. 8554 Only works while editing the command line, thus you must use 8555 |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='. For 8556 |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is 8557 set after the command line is set to the expression. For 8558 |c_CTRL-R_=| it is set after evaluating the expression but 8559 before inserting the resulting text. 8560 When the number is too big the cursor is put at the end of the 8561 line. A number smaller than one has undefined results. 8562 Returns 0 when successful, 1 when not editing the command 8563 line. 8564 8565 Can also be used as a |method|: > 8566 GetPos()->setcmdpos() 8567 8568setenv({name}, {val}) *setenv()* 8569 Set environment variable {name} to {val}. 8570 When {val} is |v:null| the environment variable is deleted. 8571 See also |expr-env|. 8572 8573 Can also be used as a |method|, the base is passed as the 8574 second argument: > 8575 GetPath()->setenv('PATH') 8576 8577setfperm({fname}, {mode}) *setfperm()* *chmod* 8578 Set the file permissions for {fname} to {mode}. 8579 {mode} must be a string with 9 characters. It is of the form 8580 "rwxrwxrwx", where each group of "rwx" flags represent, in 8581 turn, the permissions of the owner of the file, the group the 8582 file belongs to, and other users. A '-' character means the 8583 permission is off, any other character means on. Multi-byte 8584 characters are not supported. 8585 8586 For example "rw-r-----" means read-write for the user, 8587 readable by the group, not accessible by others. "xx-x-----" 8588 would do the same thing. 8589 8590 Returns non-zero for success, zero for failure. 8591 8592 Can also be used as a |method|: > 8593 GetFilename()->setfperm(mode) 8594< 8595 To read permissions see |getfperm()|. 8596 8597 8598setline({lnum}, {text}) *setline()* 8599 Set line {lnum} of the current buffer to {text}. To insert 8600 lines use |append()|. To set lines in another buffer use 8601 |setbufline()|. Any text properties in {lnum} are cleared. 8602 8603 {lnum} is used like with |getline()|. 8604 When {lnum} is just below the last line the {text} will be 8605 added below the last line. 8606 8607 If this succeeds, 0 is returned. If this fails (most likely 8608 because {lnum} is invalid) 1 is returned. 8609 8610 Example: > 8611 :call setline(5, strftime("%c")) 8612 8613< When {text} is a |List| then line {lnum} and following lines 8614 will be set to the items in the list. Example: > 8615 :call setline(5, ['aaa', 'bbb', 'ccc']) 8616< This is equivalent to: > 8617 :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']] 8618 : call setline(n, l) 8619 :endfor 8620 8621< Note: The '[ and '] marks are not set. 8622 8623 Can also be used as a |method|, the base is passed as the 8624 second argument: > 8625 GetText()->setline(lnum) 8626 8627setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()* 8628 Create or replace or add to the location list for window {nr}. 8629 {nr} can be the window number or the |window-ID|. 8630 When {nr} is zero the current window is used. 8631 8632 For a location list window, the displayed location list is 8633 modified. For an invalid window number {nr}, -1 is returned. 8634 Otherwise, same as |setqflist()|. 8635 Also see |location-list|. 8636 8637 If the optional {what} dictionary argument is supplied, then 8638 only the items listed in {what} are set. Refer to |setqflist()| 8639 for the list of supported keys in {what}. 8640 8641 Can also be used as a |method|, the base is passed as the 8642 second argument: > 8643 GetLoclist()->setloclist(winnr) 8644 8645setmatches({list} [, {win}]) *setmatches()* 8646 Restores a list of matches saved by |getmatches()| for the 8647 current window. Returns 0 if successful, otherwise -1. All 8648 current matches are cleared before the list is restored. See 8649 example for |getmatches()|. 8650 If {win} is specified, use the window with this number or 8651 window ID instead of the current window. 8652 8653 Can also be used as a |method|: > 8654 GetMatches()->setmatches() 8655< 8656 *setpos()* 8657setpos({expr}, {list}) 8658 Set the position for {expr}. Possible values: 8659 . the cursor 8660 'x mark x 8661 8662 {list} must be a |List| with four or five numbers: 8663 [bufnum, lnum, col, off] 8664 [bufnum, lnum, col, off, curswant] 8665 8666 "bufnum" is the buffer number. Zero can be used for the 8667 current buffer. When setting an uppercase mark "bufnum" is 8668 used for the mark position. For other marks it specifies the 8669 buffer to set the mark in. You can use the |bufnr()| function 8670 to turn a file name into a buffer number. 8671 For setting the cursor and the ' mark "bufnum" is ignored, 8672 since these are associated with a window, not a buffer. 8673 Does not change the jumplist. 8674 8675 "lnum" and "col" are the position in the buffer. The first 8676 column is 1. Use a zero "lnum" to delete a mark. If "col" is 8677 smaller than 1 then 1 is used. 8678 8679 The "off" number is only used when 'virtualedit' is set. Then 8680 it is the offset in screen columns from the start of the 8681 character. E.g., a position within a <Tab> or after the last 8682 character. 8683 8684 The "curswant" number is only used when setting the cursor 8685 position. It sets the preferred column for when moving the 8686 cursor vertically. When the "curswant" number is missing the 8687 preferred column is not set. When it is present and setting a 8688 mark position it is not used. 8689 8690 Note that for '< and '> changing the line number may result in 8691 the marks to be effectively be swapped, so that '< is always 8692 before '>. 8693 8694 Returns 0 when the position could be set, -1 otherwise. 8695 An error message is given if {expr} is invalid. 8696 8697 Also see |getpos()| and |getcurpos()|. 8698 8699 This does not restore the preferred column for moving 8700 vertically; if you set the cursor position with this, |j| and 8701 |k| motions will jump to previous columns! Use |cursor()| to 8702 also set the preferred column. Also see the "curswant" key in 8703 |winrestview()|. 8704 8705 Can also be used as a |method|: > 8706 GetPosition()->setpos('.') 8707 8708setqflist({list} [, {action} [, {what}]]) *setqflist()* 8709 Create or replace or add to the quickfix list. 8710 8711 If the optional {what} dictionary argument is supplied, then 8712 only the items listed in {what} are set. The first {list} 8713 argument is ignored. See below for the supported items in 8714 {what}. 8715 8716 When {what} is not present, the items in {list} or used. Each 8717 item must be a dictionary. Non-dictionary items in {list} are 8718 ignored. Each dictionary item can contain the following 8719 entries: 8720 8721 bufnr buffer number; must be the number of a valid 8722 buffer 8723 filename name of a file; only used when "bufnr" is not 8724 present or it is invalid. 8725 module name of a module; if given it will be used in 8726 quickfix error window instead of the filename. 8727 lnum line number in the file 8728 pattern search pattern used to locate the error 8729 col column number 8730 vcol when non-zero: "col" is visual column 8731 when zero: "col" is byte index 8732 nr error number 8733 text description of the error 8734 type single-character error type, 'E', 'W', etc. 8735 valid recognized error message 8736 8737 The "col", "vcol", "nr", "type" and "text" entries are 8738 optional. Either "lnum" or "pattern" entry can be used to 8739 locate a matching error line. 8740 If the "filename" and "bufnr" entries are not present or 8741 neither the "lnum" or "pattern" entries are present, then the 8742 item will not be handled as an error line. 8743 If both "pattern" and "lnum" are present then "pattern" will 8744 be used. 8745 If the "valid" entry is not supplied, then the valid flag is 8746 set when "bufnr" is a valid buffer or "filename" exists. 8747 If you supply an empty {list}, the quickfix list will be 8748 cleared. 8749 Note that the list is not exactly the same as what 8750 |getqflist()| returns. 8751 8752 {action} values: *E927* 8753 'a' The items from {list} are added to the existing 8754 quickfix list. If there is no existing list, then a 8755 new list is created. 8756 8757 'r' The items from the current quickfix list are replaced 8758 with the items from {list}. This can also be used to 8759 clear the list: > 8760 :call setqflist([], 'r') 8761< 8762 'f' All the quickfix lists in the quickfix stack are 8763 freed. 8764 8765 If {action} is not present or is set to ' ', then a new list 8766 is created. The new quickfix list is added after the current 8767 quickfix list in the stack and all the following lists are 8768 freed. To add a new quickfix list at the end of the stack, 8769 set "nr" in {what} to "$". 8770 8771 The following items can be specified in dictionary {what}: 8772 context quickfix list context. See |quickfix-context| 8773 efm errorformat to use when parsing text from 8774 "lines". If this is not present, then the 8775 'errorformat' option value is used. 8776 See |quickfix-parse| 8777 id quickfix list identifier |quickfix-ID| 8778 idx index of the current entry in the quickfix 8779 list specified by 'id' or 'nr'. If set to '$', 8780 then the last entry in the list is set as the 8781 current entry. See |quickfix-index| 8782 items list of quickfix entries. Same as the {list} 8783 argument. 8784 lines use 'errorformat' to parse a list of lines and 8785 add the resulting entries to the quickfix list 8786 {nr} or {id}. Only a |List| value is supported. 8787 See |quickfix-parse| 8788 nr list number in the quickfix stack; zero 8789 means the current quickfix list and "$" means 8790 the last quickfix list. 8791 title quickfix list title text. See |quickfix-title| 8792 Unsupported keys in {what} are ignored. 8793 If the "nr" item is not present, then the current quickfix list 8794 is modified. When creating a new quickfix list, "nr" can be 8795 set to a value one greater than the quickfix stack size. 8796 When modifying a quickfix list, to guarantee that the correct 8797 list is modified, "id" should be used instead of "nr" to 8798 specify the list. 8799 8800 Examples (See also |setqflist-examples|): > 8801 :call setqflist([], 'r', {'title': 'My search'}) 8802 :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'}) 8803 :call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]}) 8804< 8805 Returns zero for success, -1 for failure. 8806 8807 This function can be used to create a quickfix list 8808 independent of the 'errorformat' setting. Use a command like 8809 `:cc 1` to jump to the first position. 8810 8811 Can also be used as a |method|, the base is passed as the 8812 second argument: > 8813 GetErrorlist()->setqflist() 8814< 8815 *setreg()* 8816setreg({regname}, {value} [, {options}]) 8817 Set the register {regname} to {value}. 8818 If {regname} is "" or "@", the unnamed register '"' is used. 8819 {value} may be any value returned by |getreg()|, including 8820 a |List|. 8821 If {options} contains "a" or {regname} is upper case, 8822 then the value is appended. 8823 {options} can also contain a register type specification: 8824 "c" or "v" |characterwise| mode 8825 "l" or "V" |linewise| mode 8826 "b" or "<CTRL-V>" |blockwise-visual| mode 8827 If a number immediately follows "b" or "<CTRL-V>" then this is 8828 used as the width of the selection - if it is not specified 8829 then the width of the block is set to the number of characters 8830 in the longest line (counting a <Tab> as 1 character). 8831 8832 If {options} contains no register settings, then the default 8833 is to use character mode unless {value} ends in a <NL> for 8834 string {value} and linewise mode for list {value}. Blockwise 8835 mode is never selected automatically. 8836 Returns zero for success, non-zero for failure. 8837 8838 *E883* 8839 Note: you may not use |List| containing more than one item to 8840 set search and expression registers. Lists containing no 8841 items act like empty strings. 8842 8843 Examples: > 8844 :call setreg(v:register, @*) 8845 :call setreg('*', @%, 'ac') 8846 :call setreg('a', "1\n2\n3", 'b5') 8847 8848< This example shows using the functions to save and restore a 8849 register: > 8850 :let var_a = getreg('a', 1, 1) 8851 :let var_amode = getregtype('a') 8852 .... 8853 :call setreg('a', var_a, var_amode) 8854< Note: you may not reliably restore register value 8855 without using the third argument to |getreg()| as without it 8856 newlines are represented as newlines AND Nul bytes are 8857 represented as newlines as well, see |NL-used-for-Nul|. 8858 8859 You can also change the type of a register by appending 8860 nothing: > 8861 :call setreg('a', '', 'al') 8862 8863< Can also be used as a |method|, the base is passed as the 8864 second argument: > 8865 GetText()->setreg('a') 8866 8867settabvar({tabnr}, {varname}, {val}) *settabvar()* 8868 Set tab-local variable {varname} to {val} in tab page {tabnr}. 8869 |t:var| 8870 Note that autocommands are blocked, side effects may not be 8871 triggered, e.g. when setting 'filetype'. 8872 Note that the variable name without "t:" must be used. 8873 Tabs are numbered starting with one. 8874 This function is not available in the |sandbox|. 8875 8876 Can also be used as a |method|, the base is passed as the 8877 third argument: > 8878 GetValue()->settabvar(tab, name) 8879 8880settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()* 8881 Set option or local variable {varname} in window {winnr} to 8882 {val}. 8883 Tabs are numbered starting with one. For the current tabpage 8884 use |setwinvar()|. 8885 {winnr} can be the window number or the |window-ID|. 8886 When {winnr} is zero the current window is used. 8887 Note that autocommands are blocked, side effects may not be 8888 triggered, e.g. when setting 'filetype' or 'syntax'. 8889 This also works for a global or local buffer option, but it 8890 doesn't work for a global or local buffer variable. 8891 For a local buffer option the global value is unchanged. 8892 Note that the variable name without "w:" must be used. 8893 Examples: > 8894 :call settabwinvar(1, 1, "&list", 0) 8895 :call settabwinvar(3, 2, "myvar", "foobar") 8896< This function is not available in the |sandbox|. 8897 8898 Can also be used as a |method|, the base is passed as the 8899 fourth argument: > 8900 GetValue()->settabvar(tab, winnr, name) 8901 8902settagstack({nr}, {dict} [, {action}]) *settagstack()* 8903 Modify the tag stack of the window {nr} using {dict}. 8904 {nr} can be the window number or the |window-ID|. 8905 8906 For a list of supported items in {dict}, refer to 8907 |gettagstack()|. "curidx" takes effect before changing the tag 8908 stack. 8909 *E962* 8910 How the tag stack is modified depends on the {action} 8911 argument: 8912 - If {action} is not present or is set to 'r', then the tag 8913 stack is replaced. 8914 - If {action} is set to 'a', then new entries from {dict} are 8915 pushed (added) onto the tag stack. 8916 - If {action} is set to 't', then all the entries from the 8917 current entry in the tag stack or "curidx" in {dict} are 8918 removed and then new entries are pushed to the stack. 8919 8920 The current index is set to one after the length of the tag 8921 stack after the modification. 8922 8923 Returns zero for success, -1 for failure. 8924 8925 Examples (for more examples see |tagstack-examples||): 8926 Empty the tag stack of window 3: > 8927 call settagstack(3, {'items' : []}) 8928 8929< Save and restore the tag stack: > 8930 let stack = gettagstack(1003) 8931 " do something else 8932 call settagstack(1003, stack) 8933 unlet stack 8934< 8935 Can also be used as a |method|, the base is passed as the 8936 second argument: > 8937 GetStack()->settagstack(winnr) 8938 8939setwinvar({winnr}, {varname}, {val}) *setwinvar()* 8940 Like |settabwinvar()| for the current tab page. 8941 Examples: > 8942 :call setwinvar(1, "&list", 0) 8943 :call setwinvar(2, "myvar", "foobar") 8944 8945< Can also be used as a |method|, the base is passed as the 8946 third argument: > 8947 GetValue()->setwinvar(winnr, name) 8948 8949sha256({string}) *sha256()* 8950 Returns a String with 64 hex characters, which is the SHA256 8951 checksum of {string}. 8952 8953 Can also be used as a |method|: > 8954 GetText()->sha256() 8955 8956< {only available when compiled with the |+cryptv| feature} 8957 8958shellescape({string} [, {special}]) *shellescape()* 8959 Escape {string} for use as a shell command argument. 8960 On MS-Windows, when 'shellslash' is not set, it will enclose 8961 {string} in double quotes and double all double quotes within 8962 {string}. 8963 Otherwise it will enclose {string} in single quotes and 8964 replace all "'" with "'\''". 8965 8966 When the {special} argument is present and it's a non-zero 8967 Number or a non-empty String (|non-zero-arg|), then special 8968 items such as "!", "%", "#" and "<cword>" will be preceded by 8969 a backslash. This backslash will be removed again by the |:!| 8970 command. 8971 8972 The "!" character will be escaped (again with a |non-zero-arg| 8973 {special}) when 'shell' contains "csh" in the tail. That is 8974 because for csh and tcsh "!" is used for history replacement 8975 even when inside single quotes. 8976 8977 With a |non-zero-arg| {special} the <NL> character is also 8978 escaped. When 'shell' containing "csh" in the tail it's 8979 escaped a second time. 8980 8981 Example of use with a |:!| command: > 8982 :exe '!dir ' . shellescape(expand('<cfile>'), 1) 8983< This results in a directory listing for the file under the 8984 cursor. Example of use with |system()|: > 8985 :call system("chmod +w -- " . shellescape(expand("%"))) 8986< See also |::S|. 8987 8988 Can also be used as a |method|: > 8989 GetCommand()->shellescape() 8990 8991shiftwidth([{col}]) *shiftwidth()* 8992 Returns the effective value of 'shiftwidth'. This is the 8993 'shiftwidth' value unless it is zero, in which case it is the 8994 'tabstop' value. This function was introduced with patch 8995 7.3.694 in 2012, everybody should have it by now (however it 8996 did not allow for the optional {col} argument until 8.1.542). 8997 8998 When there is one argument {col} this is used as column number 8999 for which to return the 'shiftwidth' value. This matters for the 9000 'vartabstop' feature. If the 'vartabstop' setting is enabled and 9001 no {col} argument is given, column 1 will be assumed. 9002 9003 Can also be used as a |method|: > 9004 GetColumn()->shiftwidth() 9005 9006sign_ functions are documented here: |sign-functions-details| 9007 9008 9009simplify({filename}) *simplify()* 9010 Simplify the file name as much as possible without changing 9011 the meaning. Shortcuts (on MS-Windows) or symbolic links (on 9012 Unix) are not resolved. If the first path component in 9013 {filename} designates the current directory, this will be 9014 valid for the result as well. A trailing path separator is 9015 not removed either. 9016 Example: > 9017 simplify("./dir/.././/file/") == "./file/" 9018< Note: The combination "dir/.." is only removed if "dir" is 9019 a searchable directory or does not exist. On Unix, it is also 9020 removed when "dir" is a symbolic link within the same 9021 directory. In order to resolve all the involved symbolic 9022 links before simplifying the path name, use |resolve()|. 9023 9024 Can also be used as a |method|: > 9025 GetName()->simplify() 9026 9027sin({expr}) *sin()* 9028 Return the sine of {expr}, measured in radians, as a |Float|. 9029 {expr} must evaluate to a |Float| or a |Number|. 9030 Examples: > 9031 :echo sin(100) 9032< -0.506366 > 9033 :echo sin(-4.01) 9034< 0.763301 9035 9036 Can also be used as a |method|: > 9037 Compute()->sin() 9038< 9039 {only available when compiled with the |+float| feature} 9040 9041 9042sinh({expr}) *sinh()* 9043 Return the hyperbolic sine of {expr} as a |Float| in the range 9044 [-inf, inf]. 9045 {expr} must evaluate to a |Float| or a |Number|. 9046 Examples: > 9047 :echo sinh(0.5) 9048< 0.521095 > 9049 :echo sinh(-0.9) 9050< -1.026517 9051 9052 Can also be used as a |method|: > 9053 Compute()->sinh() 9054< 9055 {only available when compiled with the |+float| feature} 9056 9057 9058sort({list} [, {func} [, {dict}]]) *sort()* *E702* 9059 Sort the items in {list} in-place. Returns {list}. 9060 9061 If you want a list to remain unmodified make a copy first: > 9062 :let sortedlist = sort(copy(mylist)) 9063 9064< When {func} is omitted, is empty or zero, then sort() uses the 9065 string representation of each item to sort on. Numbers sort 9066 after Strings, |Lists| after Numbers. For sorting text in the 9067 current buffer use |:sort|. 9068 9069 When {func} is given and it is '1' or 'i' then case is 9070 ignored. 9071 9072 When {func} is given and it is 'n' then all items will be 9073 sorted numerical (Implementation detail: This uses the 9074 strtod() function to parse numbers, Strings, Lists, Dicts and 9075 Funcrefs will be considered as being 0). 9076 9077 When {func} is given and it is 'N' then all items will be 9078 sorted numerical. This is like 'n' but a string containing 9079 digits will be used as the number they represent. 9080 9081 When {func} is given and it is 'f' then all items will be 9082 sorted numerical. All values must be a Number or a Float. 9083 9084 When {func} is a |Funcref| or a function name, this function 9085 is called to compare items. The function is invoked with two 9086 items as argument and must return zero if they are equal, 1 or 9087 bigger if the first one sorts after the second one, -1 or 9088 smaller if the first one sorts before the second one. 9089 9090 {dict} is for functions with the "dict" attribute. It will be 9091 used to set the local variable "self". |Dictionary-function| 9092 9093 The sort is stable, items which compare equal (as number or as 9094 string) will keep their relative position. E.g., when sorting 9095 on numbers, text strings will sort next to each other, in the 9096 same order as they were originally. 9097 9098 Can also be used as a |method|: > 9099 mylist->sort() 9100 9101< Also see |uniq()|. 9102 9103 Example: > 9104 func MyCompare(i1, i2) 9105 return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1 9106 endfunc 9107 let sortedlist = sort(mylist, "MyCompare") 9108< A shorter compare version for this specific simple case, which 9109 ignores overflow: > 9110 func MyCompare(i1, i2) 9111 return a:i1 - a:i2 9112 endfunc 9113< 9114sound_clear() *sound_clear()* 9115 Stop playing all sounds. 9116 {only available when compiled with the |+sound| feature} 9117 9118 *sound_playevent()* 9119sound_playevent({name} [, {callback}]) 9120 Play a sound identified by {name}. Which event names are 9121 supported depends on the system. Often the XDG sound names 9122 are used. On Ubuntu they may be found in 9123 /usr/share/sounds/freedesktop/stereo. Example: > 9124 call sound_playevent('bell') 9125< On MS-Windows, {name} can be SystemAsterisk, SystemDefault, 9126 SystemExclamation, SystemExit, SystemHand, SystemQuestion, 9127 SystemStart, SystemWelcome, etc. 9128 9129 When {callback} is specified it is invoked when the sound is 9130 finished. The first argument is the sound ID, the second 9131 argument is the status: 9132 0 sound was played to the end 9133 1 sound was interrupted 9134 2 error occurred after sound started 9135 Example: > 9136 func Callback(id, status) 9137 echomsg "sound " .. a:id .. " finished with " .. a:status 9138 endfunc 9139 call sound_playevent('bell', 'Callback') 9140 9141< MS-Windows: {callback} doesn't work for this function. 9142 9143 Returns the sound ID, which can be passed to `sound_stop()`. 9144 Returns zero if the sound could not be played. 9145 9146 Can also be used as a |method|: > 9147 GetSoundName()->sound_playevent() 9148 9149< {only available when compiled with the |+sound| feature} 9150 9151 *sound_playfile()* 9152sound_playfile({path} [, {callback}]) 9153 Like `sound_playevent()` but play sound file {path}. {path} 9154 must be a full path. On Ubuntu you may find files to play 9155 with this command: > 9156 :!find /usr/share/sounds -type f | grep -v index.theme 9157 9158< Can also be used as a |method|: > 9159 GetSoundPath()->sound_playfile() 9160 9161< {only available when compiled with the |+sound| feature} 9162 9163 9164sound_stop({id}) *sound_stop()* 9165 Stop playing sound {id}. {id} must be previously returned by 9166 `sound_playevent()` or `sound_playfile()`. 9167 9168 On MS-Windows, this does not work for event sound started by 9169 `sound_playevent()`. To stop event sounds, use `sound_clear()`. 9170 9171 Can also be used as a |method|: > 9172 soundid->sound_stop() 9173 9174< {only available when compiled with the |+sound| feature} 9175 9176 *soundfold()* 9177soundfold({word}) 9178 Return the sound-folded equivalent of {word}. Uses the first 9179 language in 'spelllang' for the current window that supports 9180 soundfolding. 'spell' must be set. When no sound folding is 9181 possible the {word} is returned unmodified. 9182 This can be used for making spelling suggestions. Note that 9183 the method can be quite slow. 9184 9185 Can also be used as a |method|: > 9186 GetWord()->soundfold() 9187< 9188 *spellbadword()* 9189spellbadword([{sentence}]) 9190 Without argument: The result is the badly spelled word under 9191 or after the cursor. The cursor is moved to the start of the 9192 bad word. When no bad word is found in the cursor line the 9193 result is an empty string and the cursor doesn't move. 9194 9195 With argument: The result is the first word in {sentence} that 9196 is badly spelled. If there are no spelling mistakes the 9197 result is an empty string. 9198 9199 The return value is a list with two items: 9200 - The badly spelled word or an empty string. 9201 - The type of the spelling error: 9202 "bad" spelling mistake 9203 "rare" rare word 9204 "local" word only valid in another region 9205 "caps" word should start with Capital 9206 Example: > 9207 echo spellbadword("the quik brown fox") 9208< ['quik', 'bad'] ~ 9209 9210 The spelling information for the current window is used. The 9211 'spell' option must be set and the value of 'spelllang' is 9212 used. 9213 9214 Can also be used as a |method|: > 9215 GetText()->spellbadword() 9216< 9217 *spellsuggest()* 9218spellsuggest({word} [, {max} [, {capital}]]) 9219 Return a |List| with spelling suggestions to replace {word}. 9220 When {max} is given up to this number of suggestions are 9221 returned. Otherwise up to 25 suggestions are returned. 9222 9223 When the {capital} argument is given and it's non-zero only 9224 suggestions with a leading capital will be given. Use this 9225 after a match with 'spellcapcheck'. 9226 9227 {word} can be a badly spelled word followed by other text. 9228 This allows for joining two words that were split. The 9229 suggestions also include the following text, thus you can 9230 replace a line. 9231 9232 {word} may also be a good word. Similar words will then be 9233 returned. {word} itself is not included in the suggestions, 9234 although it may appear capitalized. 9235 9236 The spelling information for the current window is used. The 9237 'spell' option must be set and the values of 'spelllang' and 9238 'spellsuggest' are used. 9239 9240 Can also be used as a |method|: > 9241 GetWord()->spellsuggest() 9242 9243split({expr} [, {pattern} [, {keepempty}]]) *split()* 9244 Make a |List| out of {expr}. When {pattern} is omitted or 9245 empty each white-separated sequence of characters becomes an 9246 item. 9247 Otherwise the string is split where {pattern} matches, 9248 removing the matched characters. 'ignorecase' is not used 9249 here, add \c to ignore case. |/\c| 9250 When the first or last item is empty it is omitted, unless the 9251 {keepempty} argument is given and it's non-zero. 9252 Other empty items are kept when {pattern} matches at least one 9253 character or when {keepempty} is non-zero. 9254 Example: > 9255 :let words = split(getline('.'), '\W\+') 9256< To split a string in individual characters: > 9257 :for c in split(mystring, '\zs') 9258< If you want to keep the separator you can also use '\zs' at 9259 the end of the pattern: > 9260 :echo split('abc:def:ghi', ':\zs') 9261< ['abc:', 'def:', 'ghi'] ~ 9262 Splitting a table where the first element can be empty: > 9263 :let items = split(line, ':', 1) 9264< The opposite function is |join()|. 9265 9266 Can also be used as a |method|: > 9267 GetString()->split() 9268 9269sqrt({expr}) *sqrt()* 9270 Return the non-negative square root of Float {expr} as a 9271 |Float|. 9272 {expr} must evaluate to a |Float| or a |Number|. When {expr} 9273 is negative the result is NaN (Not a Number). 9274 Examples: > 9275 :echo sqrt(100) 9276< 10.0 > 9277 :echo sqrt(-4.01) 9278< nan 9279 "nan" may be different, it depends on system libraries. 9280 9281 Can also be used as a |method|: > 9282 Compute()->sqrt() 9283< 9284 {only available when compiled with the |+float| feature} 9285 9286 9287srand([{expr}]) *srand()* 9288 Initialize seed used by |rand()|: 9289 - If {expr} is not given, seed values are initialized by 9290 reading from /dev/urandom, if possible, or using time(NULL) 9291 a.k.a. epoch time otherwise; this only has second accuracy. 9292 - If {expr} is given it must be a Number. It is used to 9293 initialize the seed values. This is useful for testing or 9294 when a predictable sequence is intended. 9295 9296 Examples: > 9297 :let seed = srand() 9298 :let seed = srand(userinput) 9299 :echo rand(seed) 9300 9301state([{what}]) *state()* 9302 Return a string which contains characters indicating the 9303 current state. Mostly useful in callbacks that want to do 9304 work that may not always be safe. Roughly this works like: 9305 - callback uses state() to check if work is safe to do. 9306 Yes: then do it right away. 9307 No: add to work queue and add a |SafeState| and/or 9308 |SafeStateAgain| autocommand (|SafeState| triggers at 9309 toplevel, |SafeStateAgain| triggers after handling 9310 messages and callbacks). 9311 - When SafeState or SafeStateAgain is triggered and executes 9312 your autocommand, check with `state()` if the work can be 9313 done now, and if yes remove it from the queue and execute. 9314 Remove the autocommand if the queue is now empty. 9315 Also see |mode()|. 9316 9317 When {what} is given only characters in this string will be 9318 added. E.g, this checks if the screen has scrolled: > 9319 if state('s') == '' 9320 " screen has not scrolled 9321< 9322 These characters indicate the state, generally indicating that 9323 something is busy: 9324 m halfway a mapping, :normal command, feedkeys() or 9325 stuffed command 9326 o operator pending or waiting for a command argument, 9327 e.g. after |f| 9328 a Insert mode autocomplete active 9329 x executing an autocommand 9330 w blocked on waiting, e.g. ch_evalexpr(), ch_read() and 9331 ch_readraw() when reading json. 9332 S not triggering SafeState or SafeStateAgain 9333 c callback invoked, including timer (repeats for 9334 recursiveness up to "ccc") 9335 s screen has scrolled for messages 9336 9337str2float({expr}) *str2float()* 9338 Convert String {expr} to a Float. This mostly works the same 9339 as when using a floating point number in an expression, see 9340 |floating-point-format|. But it's a bit more permissive. 9341 E.g., "1e40" is accepted, while in an expression you need to 9342 write "1.0e40". The hexadecimal form "0x123" is also 9343 accepted, but not others, like binary or octal. 9344 Text after the number is silently ignored. 9345 The decimal point is always '.', no matter what the locale is 9346 set to. A comma ends the number: "12,345.67" is converted to 9347 12.0. You can strip out thousands separators with 9348 |substitute()|: > 9349 let f = str2float(substitute(text, ',', '', 'g')) 9350< 9351 Can also be used as a |method|: > 9352 let f = text->substitute(',', '', 'g')->str2float() 9353< 9354 {only available when compiled with the |+float| feature} 9355 9356str2list({expr} [, {utf8}]) *str2list()* 9357 Return a list containing the number values which represent 9358 each character in String {expr}. Examples: > 9359 str2list(" ") returns [32] 9360 str2list("ABC") returns [65, 66, 67] 9361< |list2str()| does the opposite. 9362 9363 When {utf8} is omitted or zero, the current 'encoding' is used. 9364 With {utf8} set to 1, always treat the String as utf-8 9365 characters. With utf-8 composing characters are handled 9366 properly: > 9367 str2list("á") returns [97, 769] 9368 9369< Can also be used as a |method|: > 9370 GetString()->str2list() 9371 9372 9373str2nr({expr} [, {base} [, {quoted}]]) *str2nr()* 9374 Convert string {expr} to a number. 9375 {base} is the conversion base, it can be 2, 8, 10 or 16. 9376 When {quoted} is present and non-zero then embedded single 9377 quotes are ignored, thus "1'000'000" is a million. 9378 9379 When {base} is omitted base 10 is used. This also means that 9380 a leading zero doesn't cause octal conversion to be used, as 9381 with the default String to Number conversion. Example: > 9382 let nr = str2nr('0123') 9383< 9384 When {base} is 16 a leading "0x" or "0X" is ignored. With a 9385 different base the result will be zero. Similarly, when 9386 {base} is 8 a leading "0" is ignored, and when {base} is 2 a 9387 leading "0b" or "0B" is ignored. 9388 Text after the number is silently ignored. 9389 9390 Can also be used as a |method|: > 9391 GetText()->str2nr() 9392 9393strcharpart({src}, {start} [, {len}]) *strcharpart()* 9394 Like |strpart()| but using character index and length instead 9395 of byte index and length. 9396 When a character index is used where a character does not 9397 exist it is assumed to be one character. For example: > 9398 strcharpart('abc', -1, 2) 9399< results in 'a'. 9400 9401 Can also be used as a |method|: > 9402 GetText()->strcharpart(5) 9403 9404strchars({expr} [, {skipcc}]) *strchars()* 9405 The result is a Number, which is the number of characters 9406 in String {expr}. 9407 When {skipcc} is omitted or zero, composing characters are 9408 counted separately. 9409 When {skipcc} set to 1, Composing characters are ignored. 9410 Also see |strlen()|, |strdisplaywidth()| and |strwidth()|. 9411 9412 {skipcc} is only available after 7.4.755. For backward 9413 compatibility, you can define a wrapper function: > 9414 if has("patch-7.4.755") 9415 function s:strchars(str, skipcc) 9416 return strchars(a:str, a:skipcc) 9417 endfunction 9418 else 9419 function s:strchars(str, skipcc) 9420 if a:skipcc 9421 return strlen(substitute(a:str, ".", "x", "g")) 9422 else 9423 return strchars(a:str) 9424 endif 9425 endfunction 9426 endif 9427< 9428 Can also be used as a |method|: > 9429 GetText()->strchars() 9430 9431strdisplaywidth({expr} [, {col}]) *strdisplaywidth()* 9432 The result is a Number, which is the number of display cells 9433 String {expr} occupies on the screen when it starts at {col} 9434 (first column is zero). When {col} is omitted zero is used. 9435 Otherwise it is the screen column where to start. This 9436 matters for Tab characters. 9437 The option settings of the current window are used. This 9438 matters for anything that's displayed differently, such as 9439 'tabstop' and 'display'. 9440 When {expr} contains characters with East Asian Width Class 9441 Ambiguous, this function's return value depends on 'ambiwidth'. 9442 Also see |strlen()|, |strwidth()| and |strchars()|. 9443 9444 Can also be used as a |method|: > 9445 GetText()->strdisplaywidth() 9446 9447strftime({format} [, {time}]) *strftime()* 9448 The result is a String, which is a formatted date and time, as 9449 specified by the {format} string. The given {time} is used, 9450 or the current time if no time is given. The accepted 9451 {format} depends on your system, thus this is not portable! 9452 See the manual page of the C function strftime() for the 9453 format. The maximum length of the result is 80 characters. 9454 See also |localtime()|, |getftime()| and |strptime()|. 9455 The language can be changed with the |:language| command. 9456 Examples: > 9457 :echo strftime("%c") Sun Apr 27 11:49:23 1997 9458 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25 9459 :echo strftime("%y%m%d %T") 970427 11:53:55 9460 :echo strftime("%H:%M") 11:55 9461 :echo strftime("%c", getftime("file.c")) 9462 Show mod time of file.c. 9463< Not available on all systems. To check use: > 9464 :if exists("*strftime") 9465 9466< Can also be used as a |method|: > 9467 GetFormat()->strftime() 9468 9469strgetchar({str}, {index}) *strgetchar()* 9470 Get character {index} from {str}. This uses a character 9471 index, not a byte index. Composing characters are considered 9472 separate characters here. 9473 Also see |strcharpart()| and |strchars()|. 9474 9475 Can also be used as a |method|: > 9476 GetText()->strgetchar(5) 9477 9478stridx({haystack}, {needle} [, {start}]) *stridx()* 9479 The result is a Number, which gives the byte index in 9480 {haystack} of the first occurrence of the String {needle}. 9481 If {start} is specified, the search starts at index {start}. 9482 This can be used to find a second match: > 9483 :let colon1 = stridx(line, ":") 9484 :let colon2 = stridx(line, ":", colon1 + 1) 9485< The search is done case-sensitive. 9486 For pattern searches use |match()|. 9487 -1 is returned if the {needle} does not occur in {haystack}. 9488 See also |strridx()|. 9489 Examples: > 9490 :echo stridx("An Example", "Example") 3 9491 :echo stridx("Starting point", "Start") 0 9492 :echo stridx("Starting point", "start") -1 9493< *strstr()* *strchr()* 9494 stridx() works similar to the C function strstr(). When used 9495 with a single character it works similar to strchr(). 9496 9497 Can also be used as a |method|: > 9498 GetHaystack()->stridx(needle) 9499< 9500 *string()* 9501string({expr}) Return {expr} converted to a String. If {expr} is a Number, 9502 Float, String, Blob or a composition of them, then the result 9503 can be parsed back with |eval()|. 9504 {expr} type result ~ 9505 String 'string' (single quotes are doubled) 9506 Number 123 9507 Float 123.123456 or 1.123456e8 9508 Funcref function('name') 9509 Blob 0z00112233.44556677.8899 9510 List [item, item] 9511 Dictionary {key: value, key: value} 9512 9513 When a List or Dictionary has a recursive reference it is 9514 replaced by "[...]" or "{...}". Using eval() on the result 9515 will then fail. 9516 9517 Can also be used as a |method|: > 9518 mylist->string() 9519 9520< Also see |strtrans()|. 9521 9522 *strlen()* 9523strlen({expr}) The result is a Number, which is the length of the String 9524 {expr} in bytes. 9525 If the argument is a Number it is first converted to a String. 9526 For other types an error is given. 9527 If you want to count the number of multi-byte characters use 9528 |strchars()|. 9529 Also see |len()|, |strdisplaywidth()| and |strwidth()|. 9530 9531 Can also be used as a |method|: > 9532 GetString()->strlen() 9533 9534strpart({src}, {start} [, {len}]) *strpart()* 9535 The result is a String, which is part of {src}, starting from 9536 byte {start}, with the byte length {len}. 9537 To count characters instead of bytes use |strcharpart()|. 9538 9539 When bytes are selected which do not exist, this doesn't 9540 result in an error, the bytes are simply omitted. 9541 If {len} is missing, the copy continues from {start} till the 9542 end of the {src}. > 9543 strpart("abcdefg", 3, 2) == "de" 9544 strpart("abcdefg", -2, 4) == "ab" 9545 strpart("abcdefg", 5, 4) == "fg" 9546 strpart("abcdefg", 3) == "defg" 9547 9548< Note: To get the first character, {start} must be 0. For 9549 example, to get three bytes under and after the cursor: > 9550 strpart(getline("."), col(".") - 1, 3) 9551< 9552 Can also be used as a |method|: > 9553 GetText()->strpart(5) 9554 9555strptime({format}, {timestring}) *strptime()* 9556 The result is a Number, which is a unix timestamp representing 9557 the date and time in {timestring}, which is expected to match 9558 the format specified in {format}. 9559 9560 The accepted {format} depends on your system, thus this is not 9561 portable! See the manual page of the C function strptime() 9562 for the format. Especially avoid "%c". The value of $TZ also 9563 matters. 9564 9565 If the {timestring} cannot be parsed with {format} zero is 9566 returned. If you do not know the format of {timestring} you 9567 can try different {format} values until you get a non-zero 9568 result. 9569 9570 See also |strftime()|. 9571 Examples: > 9572 :echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23") 9573< 862156163 > 9574 :echo strftime("%c", strptime("%y%m%d %T", "970427 11:53:55")) 9575< Sun Apr 27 11:53:55 1997 > 9576 :echo strftime("%c", strptime("%Y%m%d%H%M%S", "19970427115355") + 3600) 9577< Sun Apr 27 12:53:55 1997 9578 9579 Not available on all systems. To check use: > 9580 :if exists("*strptime") 9581 9582 9583strridx({haystack}, {needle} [, {start}]) *strridx()* 9584 The result is a Number, which gives the byte index in 9585 {haystack} of the last occurrence of the String {needle}. 9586 When {start} is specified, matches beyond this index are 9587 ignored. This can be used to find a match before a previous 9588 match: > 9589 :let lastcomma = strridx(line, ",") 9590 :let comma2 = strridx(line, ",", lastcomma - 1) 9591< The search is done case-sensitive. 9592 For pattern searches use |match()|. 9593 -1 is returned if the {needle} does not occur in {haystack}. 9594 If the {needle} is empty the length of {haystack} is returned. 9595 See also |stridx()|. Examples: > 9596 :echo strridx("an angry armadillo", "an") 3 9597< *strrchr()* 9598 When used with a single character it works similar to the C 9599 function strrchr(). 9600 9601 Can also be used as a |method|: > 9602 GetHaystack()->strridx(needle) 9603 9604strtrans({expr}) *strtrans()* 9605 The result is a String, which is {expr} with all unprintable 9606 characters translated into printable characters |'isprint'|. 9607 Like they are shown in a window. Example: > 9608 echo strtrans(@a) 9609< This displays a newline in register a as "^@" instead of 9610 starting a new line. 9611 9612 Can also be used as a |method|: > 9613 GetString()->strtrans() 9614 9615strwidth({expr}) *strwidth()* 9616 The result is a Number, which is the number of display cells 9617 String {expr} occupies. A Tab character is counted as one 9618 cell, alternatively use |strdisplaywidth()|. 9619 When {expr} contains characters with East Asian Width Class 9620 Ambiguous, this function's return value depends on 'ambiwidth'. 9621 Also see |strlen()|, |strdisplaywidth()| and |strchars()|. 9622 9623 Can also be used as a |method|: > 9624 GetString()->strwidth() 9625 9626submatch({nr} [, {list}]) *submatch()* *E935* 9627 Only for an expression in a |:substitute| command or 9628 substitute() function. 9629 Returns the {nr}'th submatch of the matched text. When {nr} 9630 is 0 the whole matched text is returned. 9631 Note that a NL in the string can stand for a line break of a 9632 multi-line match or a NUL character in the text. 9633 Also see |sub-replace-expression|. 9634 9635 If {list} is present and non-zero then submatch() returns 9636 a list of strings, similar to |getline()| with two arguments. 9637 NL characters in the text represent NUL characters in the 9638 text. 9639 Only returns more than one item for |:substitute|, inside 9640 |substitute()| this list will always contain one or zero 9641 items, since there are no real line breaks. 9642 9643 When substitute() is used recursively only the submatches in 9644 the current (deepest) call can be obtained. 9645 9646 Examples: > 9647 :s/\d\+/\=submatch(0) + 1/ 9648 :echo substitute(text, '\d\+', '\=submatch(0) + 1', '') 9649< This finds the first number in the line and adds one to it. 9650 A line break is included as a newline character. 9651 9652 Can also be used as a |method|: > 9653 GetNr()->submatch() 9654 9655substitute({expr}, {pat}, {sub}, {flags}) *substitute()* 9656 The result is a String, which is a copy of {expr}, in which 9657 the first match of {pat} is replaced with {sub}. 9658 When {flags} is "g", all matches of {pat} in {expr} are 9659 replaced. Otherwise {flags} should be "". 9660 9661 This works like the ":substitute" command (without any flags). 9662 But the matching with {pat} is always done like the 'magic' 9663 option is set and 'cpoptions' is empty (to make scripts 9664 portable). 'ignorecase' is still relevant, use |/\c| or |/\C| 9665 if you want to ignore or match case and ignore 'ignorecase'. 9666 'smartcase' is not used. See |string-match| for how {pat} is 9667 used. 9668 9669 A "~" in {sub} is not replaced with the previous {sub}. 9670 Note that some codes in {sub} have a special meaning 9671 |sub-replace-special|. For example, to replace something with 9672 "\n" (two characters), use "\\\\n" or '\\n'. 9673 9674 When {pat} does not match in {expr}, {expr} is returned 9675 unmodified. 9676 9677 Example: > 9678 :let &path = substitute(&path, ",\\=[^,]*$", "", "") 9679< This removes the last component of the 'path' option. > 9680 :echo substitute("testing", ".*", "\\U\\0", "") 9681< results in "TESTING". 9682 9683 When {sub} starts with "\=", the remainder is interpreted as 9684 an expression. See |sub-replace-expression|. Example: > 9685 :echo substitute(s, '%\(\x\x\)', 9686 \ '\=nr2char("0x" . submatch(1))', 'g') 9687 9688< When {sub} is a Funcref that function is called, with one 9689 optional argument. Example: > 9690 :echo substitute(s, '%\(\x\x\)', SubNr, 'g') 9691< The optional argument is a list which contains the whole 9692 matched string and up to nine submatches, like what 9693 |submatch()| returns. Example: > 9694 :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g') 9695 9696< Can also be used as a |method|: > 9697 GetString()->substitute(pat, sub, flags) 9698 9699swapinfo({fname}) *swapinfo()* 9700 The result is a dictionary, which holds information about the 9701 swapfile {fname}. The available fields are: 9702 version Vim version 9703 user user name 9704 host host name 9705 fname original file name 9706 pid PID of the Vim process that created the swap 9707 file 9708 mtime last modification time in seconds 9709 inode Optional: INODE number of the file 9710 dirty 1 if file was modified, 0 if not 9711 Note that "user" and "host" are truncated to at most 39 bytes. 9712 In case of failure an "error" item is added with the reason: 9713 Cannot open file: file not found or in accessible 9714 Cannot read file: cannot read first block 9715 Not a swap file: does not contain correct block ID 9716 Magic number mismatch: Info in first block is invalid 9717 9718 Can also be used as a |method|: > 9719 GetFilename()->swapinfo() 9720 9721swapname({expr}) *swapname()* 9722 The result is the swap file path of the buffer {expr}. 9723 For the use of {expr}, see |bufname()| above. 9724 If buffer {expr} is the current buffer, the result is equal to 9725 |:swapname| (unless no swap file). 9726 If buffer {expr} has no swap file, returns an empty string. 9727 9728 Can also be used as a |method|: > 9729 GetBufname()->swapname() 9730 9731synID({lnum}, {col}, {trans}) *synID()* 9732 The result is a Number, which is the syntax ID at the position 9733 {lnum} and {col} in the current window. 9734 The syntax ID can be used with |synIDattr()| and 9735 |synIDtrans()| to obtain syntax information about text. 9736 9737 {col} is 1 for the leftmost column, {lnum} is 1 for the first 9738 line. 'synmaxcol' applies, in a longer line zero is returned. 9739 Note that when the position is after the last character, 9740 that's where the cursor can be in Insert mode, synID() returns 9741 zero. 9742 9743 When {trans} is |TRUE|, transparent items are reduced to the 9744 item that they reveal. This is useful when wanting to know 9745 the effective color. When {trans} is |FALSE|, the transparent 9746 item is returned. This is useful when wanting to know which 9747 syntax item is effective (e.g. inside parens). 9748 Warning: This function can be very slow. Best speed is 9749 obtained by going through the file in forward direction. 9750 9751 Example (echoes the name of the syntax item under the cursor): > 9752 :echo synIDattr(synID(line("."), col("."), 1), "name") 9753< 9754 9755synIDattr({synID}, {what} [, {mode}]) *synIDattr()* 9756 The result is a String, which is the {what} attribute of 9757 syntax ID {synID}. This can be used to obtain information 9758 about a syntax item. 9759 {mode} can be "gui", "cterm" or "term", to get the attributes 9760 for that mode. When {mode} is omitted, or an invalid value is 9761 used, the attributes for the currently active highlighting are 9762 used (GUI, cterm or term). 9763 Use synIDtrans() to follow linked highlight groups. 9764 {what} result 9765 "name" the name of the syntax item 9766 "fg" foreground color (GUI: color name used to set 9767 the color, cterm: color number as a string, 9768 term: empty string) 9769 "bg" background color (as with "fg") 9770 "font" font name (only available in the GUI) 9771 |highlight-font| 9772 "sp" special color (as with "fg") |highlight-guisp| 9773 "fg#" like "fg", but for the GUI and the GUI is 9774 running the name in "#RRGGBB" form 9775 "bg#" like "fg#" for "bg" 9776 "sp#" like "fg#" for "sp" 9777 "bold" "1" if bold 9778 "italic" "1" if italic 9779 "reverse" "1" if reverse 9780 "inverse" "1" if inverse (= reverse) 9781 "standout" "1" if standout 9782 "underline" "1" if underlined 9783 "undercurl" "1" if undercurled 9784 "strike" "1" if strikethrough 9785 9786 Example (echoes the color of the syntax item under the 9787 cursor): > 9788 :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg") 9789< 9790 Can also be used as a |method|: > 9791 :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg") 9792 9793 9794synIDtrans({synID}) *synIDtrans()* 9795 The result is a Number, which is the translated syntax ID of 9796 {synID}. This is the syntax group ID of what is being used to 9797 highlight the character. Highlight links given with 9798 ":highlight link" are followed. 9799 9800 Can also be used as a |method|: > 9801 :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg") 9802 9803synconcealed({lnum}, {col}) *synconcealed()* 9804 The result is a List with currently three items: 9805 1. The first item in the list is 0 if the character at the 9806 position {lnum} and {col} is not part of a concealable 9807 region, 1 if it is. 9808 2. The second item in the list is a string. If the first item 9809 is 1, the second item contains the text which will be 9810 displayed in place of the concealed text, depending on the 9811 current setting of 'conceallevel' and 'listchars'. 9812 3. The third and final item in the list is a number 9813 representing the specific syntax region matched in the 9814 line. When the character is not concealed the value is 9815 zero. This allows detection of the beginning of a new 9816 concealable region if there are two consecutive regions 9817 with the same replacement character. For an example, if 9818 the text is "123456" and both "23" and "45" are concealed 9819 and replaced by the character "X", then: 9820 call returns ~ 9821 synconcealed(lnum, 1) [0, '', 0] 9822 synconcealed(lnum, 2) [1, 'X', 1] 9823 synconcealed(lnum, 3) [1, 'X', 1] 9824 synconcealed(lnum, 4) [1, 'X', 2] 9825 synconcealed(lnum, 5) [1, 'X', 2] 9826 synconcealed(lnum, 6) [0, '', 0] 9827 9828 9829synstack({lnum}, {col}) *synstack()* 9830 Return a |List|, which is the stack of syntax items at the 9831 position {lnum} and {col} in the current window. Each item in 9832 the List is an ID like what |synID()| returns. 9833 The first item in the List is the outer region, following are 9834 items contained in that one. The last one is what |synID()| 9835 returns, unless not the whole item is highlighted or it is a 9836 transparent item. 9837 This function is useful for debugging a syntax file. 9838 Example that shows the syntax stack under the cursor: > 9839 for id in synstack(line("."), col(".")) 9840 echo synIDattr(id, "name") 9841 endfor 9842< When the position specified with {lnum} and {col} is invalid 9843 nothing is returned. The position just after the last 9844 character in a line and the first column in an empty line are 9845 valid positions. 9846 9847system({expr} [, {input}]) *system()* *E677* 9848 Get the output of the shell command {expr} as a string. See 9849 |systemlist()| to get the output as a List. 9850 9851 When {input} is given and is a string this string is written 9852 to a file and passed as stdin to the command. The string is 9853 written as-is, you need to take care of using the correct line 9854 separators yourself. 9855 If {input} is given and is a |List| it is written to the file 9856 in a way |writefile()| does with {binary} set to "b" (i.e. 9857 with a newline between each list item with newlines inside 9858 list items converted to NULs). 9859 When {input} is given and is a number that is a valid id for 9860 an existing buffer then the content of the buffer is written 9861 to the file line by line, each line terminated by a NL and 9862 NULs characters where the text has a NL. 9863 9864 Pipes are not used, the 'shelltemp' option is not used. 9865 9866 When prepended by |:silent| the terminal will not be set to 9867 cooked mode. This is meant to be used for commands that do 9868 not need the user to type. It avoids stray characters showing 9869 up on the screen which require |CTRL-L| to remove. > 9870 :silent let f = system('ls *.vim') 9871< 9872 Note: Use |shellescape()| or |::S| with |expand()| or 9873 |fnamemodify()| to escape special characters in a command 9874 argument. Newlines in {expr} may cause the command to fail. 9875 The characters in 'shellquote' and 'shellxquote' may also 9876 cause trouble. 9877 This is not to be used for interactive commands. 9878 9879 The result is a String. Example: > 9880 :let files = system("ls " . shellescape(expand('%:h'))) 9881 :let files = system('ls ' . expand('%:h:S')) 9882 9883< To make the result more system-independent, the shell output 9884 is filtered to replace <CR> with <NL> for Macintosh, and 9885 <CR><NL> with <NL> for DOS-like systems. 9886 To avoid the string being truncated at a NUL, all NUL 9887 characters are replaced with SOH (0x01). 9888 9889 The command executed is constructed using several options: 9890 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote' 9891 ({tmp} is an automatically generated file name). 9892 For Unix, braces are put around {expr} to allow for 9893 concatenated commands. 9894 9895 The command will be executed in "cooked" mode, so that a 9896 CTRL-C will interrupt the command (on Unix at least). 9897 9898 The resulting error code can be found in |v:shell_error|. 9899 This function will fail in |restricted-mode|. 9900 9901 Note that any wrong value in the options mentioned above may 9902 make the function fail. It has also been reported to fail 9903 when using a security agent application. 9904 Unlike ":!cmd" there is no automatic check for changed files. 9905 Use |:checktime| to force a check. 9906 9907 Can also be used as a |method|: > 9908 :echo GetCmd()->system() 9909 9910 9911systemlist({expr} [, {input}]) *systemlist()* 9912 Same as |system()|, but returns a |List| with lines (parts of 9913 output separated by NL) with NULs transformed into NLs. Output 9914 is the same as |readfile()| will output with {binary} argument 9915 set to "b", except that there is no extra empty item when the 9916 result ends in a NL. 9917 Note that on MS-Windows you may get trailing CR characters. 9918 9919 To see the difference between "echo hello" and "echo -n hello" 9920 use |system()| and |split()|: > 9921 echo system('echo hello')->split('\n', 1) 9922< 9923 Returns an empty string on error. 9924 9925 Can also be used as a |method|: > 9926 :echo GetCmd()->systemlist() 9927 9928 9929tabpagebuflist([{arg}]) *tabpagebuflist()* 9930 The result is a |List|, where each item is the number of the 9931 buffer associated with each window in the current tab page. 9932 {arg} specifies the number of the tab page to be used. When 9933 omitted the current tab page is used. 9934 When {arg} is invalid the number zero is returned. 9935 To get a list of all buffers in all tabs use this: > 9936 let buflist = [] 9937 for i in range(tabpagenr('$')) 9938 call extend(buflist, tabpagebuflist(i + 1)) 9939 endfor 9940< Note that a buffer may appear in more than one window. 9941 9942 Can also be used as a |method|: > 9943 GetTabpage()->tabpagebuflist() 9944 9945tabpagenr([{arg}]) *tabpagenr()* 9946 The result is a Number, which is the number of the current 9947 tab page. The first tab page has number 1. 9948 When the optional argument is "$", the number of the last tab 9949 page is returned (the tab page count). 9950 The number can be used with the |:tab| command. 9951 9952 9953tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()* 9954 Like |winnr()| but for tab page {tabarg}. 9955 {tabarg} specifies the number of tab page to be used. 9956 {arg} is used like with |winnr()|: 9957 - When omitted the current window number is returned. This is 9958 the window which will be used when going to this tab page. 9959 - When "$" the number of windows is returned. 9960 - When "#" the previous window nr is returned. 9961 Useful examples: > 9962 tabpagewinnr(1) " current window of tab page 1 9963 tabpagewinnr(4, '$') " number of windows in tab page 4 9964< When {tabarg} is invalid zero is returned. 9965 9966 Can also be used as a |method|: > 9967 GetTabpage()->tabpagewinnr() 9968< 9969 *tagfiles()* 9970tagfiles() Returns a |List| with the file names used to search for tags 9971 for the current buffer. This is the 'tags' option expanded. 9972 9973 9974taglist({expr} [, {filename}]) *taglist()* 9975 Returns a list of tags matching the regular expression {expr}. 9976 9977 If {filename} is passed it is used to prioritize the results 9978 in the same way that |:tselect| does. See |tag-priority|. 9979 {filename} should be the full path of the file. 9980 9981 Each list item is a dictionary with at least the following 9982 entries: 9983 name Name of the tag. 9984 filename Name of the file where the tag is 9985 defined. It is either relative to the 9986 current directory or a full path. 9987 cmd Ex command used to locate the tag in 9988 the file. 9989 kind Type of the tag. The value for this 9990 entry depends on the language specific 9991 kind values. Only available when 9992 using a tags file generated by 9993 Exuberant ctags or hdrtag. 9994 static A file specific tag. Refer to 9995 |static-tag| for more information. 9996 More entries may be present, depending on the content of the 9997 tags file: access, implementation, inherits and signature. 9998 Refer to the ctags documentation for information about these 9999 fields. For C code the fields "struct", "class" and "enum" 10000 may appear, they give the name of the entity the tag is 10001 contained in. 10002 10003 The ex-command "cmd" can be either an ex search pattern, a 10004 line number or a line number followed by a byte number. 10005 10006 If there are no matching tags, then an empty list is returned. 10007 10008 To get an exact tag match, the anchors '^' and '$' should be 10009 used in {expr}. This also make the function work faster. 10010 Refer to |tag-regexp| for more information about the tag 10011 search regular expression pattern. 10012 10013 Refer to |'tags'| for information about how the tags file is 10014 located by Vim. Refer to |tags-file-format| for the format of 10015 the tags file generated by the different ctags tools. 10016 10017 Can also be used as a |method|: > 10018 GetTagpattern()->taglist() 10019 10020tan({expr}) *tan()* 10021 Return the tangent of {expr}, measured in radians, as a |Float| 10022 in the range [-inf, inf]. 10023 {expr} must evaluate to a |Float| or a |Number|. 10024 Examples: > 10025 :echo tan(10) 10026< 0.648361 > 10027 :echo tan(-4.01) 10028< -1.181502 10029 10030 Can also be used as a |method|: > 10031 Compute()->tan() 10032< 10033 {only available when compiled with the |+float| feature} 10034 10035 10036tanh({expr}) *tanh()* 10037 Return the hyperbolic tangent of {expr} as a |Float| in the 10038 range [-1, 1]. 10039 {expr} must evaluate to a |Float| or a |Number|. 10040 Examples: > 10041 :echo tanh(0.5) 10042< 0.462117 > 10043 :echo tanh(-1) 10044< -0.761594 10045 10046 Can also be used as a |method|: > 10047 Compute()->tanh() 10048< 10049 {only available when compiled with the |+float| feature} 10050 10051 10052tempname() *tempname()* *temp-file-name* 10053 The result is a String, which is the name of a file that 10054 doesn't exist. It can be used for a temporary file. The name 10055 is different for at least 26 consecutive calls. Example: > 10056 :let tmpfile = tempname() 10057 :exe "redir > " . tmpfile 10058< For Unix, the file will be in a private directory |tempfile|. 10059 For MS-Windows forward slashes are used when the 'shellslash' 10060 option is set or when 'shellcmdflag' starts with '-'. 10061 10062 10063term_ functions are documented here: |terminal-function-details| 10064 10065test_ functions are documented here: |test-functions-details| 10066 10067 10068 *timer_info()* 10069timer_info([{id}]) 10070 Return a list with information about timers. 10071 When {id} is given only information about this timer is 10072 returned. When timer {id} does not exist an empty list is 10073 returned. 10074 When {id} is omitted information about all timers is returned. 10075 10076 For each timer the information is stored in a Dictionary with 10077 these items: 10078 "id" the timer ID 10079 "time" time the timer was started with 10080 "remaining" time until the timer fires 10081 "repeat" number of times the timer will still fire; 10082 -1 means forever 10083 "callback" the callback 10084 "paused" 1 if the timer is paused, 0 otherwise 10085 10086 Can also be used as a |method|: > 10087 GetTimer()->timer_info() 10088 10089< {only available when compiled with the |+timers| feature} 10090 10091timer_pause({timer}, {paused}) *timer_pause()* 10092 Pause or unpause a timer. A paused timer does not invoke its 10093 callback when its time expires. Unpausing a timer may cause 10094 the callback to be invoked almost immediately if enough time 10095 has passed. 10096 10097 Pausing a timer is useful to avoid the callback to be called 10098 for a short time. 10099 10100 If {paused} evaluates to a non-zero Number or a non-empty 10101 String, then the timer is paused, otherwise it is unpaused. 10102 See |non-zero-arg|. 10103 10104 Can also be used as a |method|: > 10105 GetTimer()->timer_pause(1) 10106 10107< {only available when compiled with the |+timers| feature} 10108 10109 *timer_start()* *timer* *timers* 10110timer_start({time}, {callback} [, {options}]) 10111 Create a timer and return the timer ID. 10112 10113 {time} is the waiting time in milliseconds. This is the 10114 minimum time before invoking the callback. When the system is 10115 busy or Vim is not waiting for input the time will be longer. 10116 10117 {callback} is the function to call. It can be the name of a 10118 function or a |Funcref|. It is called with one argument, which 10119 is the timer ID. The callback is only invoked when Vim is 10120 waiting for input. 10121 10122 {options} is a dictionary. Supported entries: 10123 "repeat" Number of times to repeat calling the 10124 callback. -1 means forever. When not present 10125 the callback will be called once. 10126 If the timer causes an error three times in a 10127 row the repeat is cancelled. This avoids that 10128 Vim becomes unusable because of all the error 10129 messages. 10130 10131 Example: > 10132 func MyHandler(timer) 10133 echo 'Handler called' 10134 endfunc 10135 let timer = timer_start(500, 'MyHandler', 10136 \ {'repeat': 3}) 10137< This will invoke MyHandler() three times at 500 msec 10138 intervals. 10139 10140 Can also be used as a |method|: > 10141 GetMsec()->timer_start(callback) 10142 10143< Not available in the |sandbox|. 10144 {only available when compiled with the |+timers| feature} 10145 10146timer_stop({timer}) *timer_stop()* 10147 Stop a timer. The timer callback will no longer be invoked. 10148 {timer} is an ID returned by timer_start(), thus it must be a 10149 Number. If {timer} does not exist there is no error. 10150 10151 Can also be used as a |method|: > 10152 GetTimer()->timer_stop() 10153 10154< {only available when compiled with the |+timers| feature} 10155 10156timer_stopall() *timer_stopall()* 10157 Stop all timers. The timer callbacks will no longer be 10158 invoked. Useful if a timer is misbehaving. If there are no 10159 timers there is no error. 10160 10161 {only available when compiled with the |+timers| feature} 10162 10163tolower({expr}) *tolower()* 10164 The result is a copy of the String given, with all uppercase 10165 characters turned into lowercase (just like applying |gu| to 10166 the string). 10167 10168 Can also be used as a |method|: > 10169 GetText()->tolower() 10170 10171toupper({expr}) *toupper()* 10172 The result is a copy of the String given, with all lowercase 10173 characters turned into uppercase (just like applying |gU| to 10174 the string). 10175 10176 Can also be used as a |method|: > 10177 GetText()->toupper() 10178 10179tr({src}, {fromstr}, {tostr}) *tr()* 10180 The result is a copy of the {src} string with all characters 10181 which appear in {fromstr} replaced by the character in that 10182 position in the {tostr} string. Thus the first character in 10183 {fromstr} is translated into the first character in {tostr} 10184 and so on. Exactly like the unix "tr" command. 10185 This code also deals with multibyte characters properly. 10186 10187 Examples: > 10188 echo tr("hello there", "ht", "HT") 10189< returns "Hello THere" > 10190 echo tr("<blob>", "<>", "{}") 10191< returns "{blob}" 10192 10193 Can also be used as a |method|: > 10194 GetText()->tr(from, to) 10195 10196trim({text} [, {mask}]) *trim()* 10197 Return {text} as a String where any character in {mask} is 10198 removed from the beginning and end of {text}. 10199 If {mask} is not given, {mask} is all characters up to 0x20, 10200 which includes Tab, space, NL and CR, plus the non-breaking 10201 space character 0xa0. 10202 This code deals with multibyte characters properly. 10203 10204 Examples: > 10205 echo trim(" some text ") 10206< returns "some text" > 10207 echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL" 10208< returns "RESERVE_TAIL" > 10209 echo trim("rm<Xrm<>X>rrm", "rm<>") 10210< returns "Xrm<>X" (characters in the middle are not removed) 10211 10212 Can also be used as a |method|: > 10213 GetText()->trim() 10214 10215trunc({expr}) *trunc()* 10216 Return the largest integral value with magnitude less than or 10217 equal to {expr} as a |Float| (truncate towards zero). 10218 {expr} must evaluate to a |Float| or a |Number|. 10219 Examples: > 10220 echo trunc(1.456) 10221< 1.0 > 10222 echo trunc(-5.456) 10223< -5.0 > 10224 echo trunc(4.0) 10225< 4.0 10226 10227 Can also be used as a |method|: > 10228 Compute()->trunc() 10229< 10230 {only available when compiled with the |+float| feature} 10231 10232 *type()* 10233type({expr}) The result is a Number representing the type of {expr}. 10234 Instead of using the number directly, it is better to use the 10235 v:t_ variable that has the value: 10236 Number: 0 |v:t_number| 10237 String: 1 |v:t_string| 10238 Funcref: 2 |v:t_func| 10239 List: 3 |v:t_list| 10240 Dictionary: 4 |v:t_dict| 10241 Float: 5 |v:t_float| 10242 Boolean: 6 |v:t_bool| (v:false and v:true) 10243 None: 7 |v:t_none| (v:null and v:none) 10244 Job: 8 |v:t_job| 10245 Channel: 9 |v:t_channel| 10246 Blob: 10 |v:t_blob| 10247 For backward compatibility, this method can be used: > 10248 :if type(myvar) == type(0) 10249 :if type(myvar) == type("") 10250 :if type(myvar) == type(function("tr")) 10251 :if type(myvar) == type([]) 10252 :if type(myvar) == type({}) 10253 :if type(myvar) == type(0.0) 10254 :if type(myvar) == type(v:false) 10255 :if type(myvar) == type(v:none) 10256< To check if the v:t_ variables exist use this: > 10257 :if exists('v:t_number') 10258 10259< Can also be used as a |method|: > 10260 mylist->type() 10261 10262undofile({name}) *undofile()* 10263 Return the name of the undo file that would be used for a file 10264 with name {name} when writing. This uses the 'undodir' 10265 option, finding directories that exist. It does not check if 10266 the undo file exists. 10267 {name} is always expanded to the full path, since that is what 10268 is used internally. 10269 If {name} is empty undofile() returns an empty string, since a 10270 buffer without a file name will not write an undo file. 10271 Useful in combination with |:wundo| and |:rundo|. 10272 When compiled without the |+persistent_undo| option this always 10273 returns an empty string. 10274 10275 Can also be used as a |method|: > 10276 GetFilename()->undofile() 10277 10278undotree() *undotree()* 10279 Return the current state of the undo tree in a dictionary with 10280 the following items: 10281 "seq_last" The highest undo sequence number used. 10282 "seq_cur" The sequence number of the current position in 10283 the undo tree. This differs from "seq_last" 10284 when some changes were undone. 10285 "time_cur" Time last used for |:earlier| and related 10286 commands. Use |strftime()| to convert to 10287 something readable. 10288 "save_last" Number of the last file write. Zero when no 10289 write yet. 10290 "save_cur" Number of the current position in the undo 10291 tree. 10292 "synced" Non-zero when the last undo block was synced. 10293 This happens when waiting from input from the 10294 user. See |undo-blocks|. 10295 "entries" A list of dictionaries with information about 10296 undo blocks. 10297 10298 The first item in the "entries" list is the oldest undo item. 10299 Each List item is a Dictionary with these items: 10300 "seq" Undo sequence number. Same as what appears in 10301 |:undolist|. 10302 "time" Timestamp when the change happened. Use 10303 |strftime()| to convert to something readable. 10304 "newhead" Only appears in the item that is the last one 10305 that was added. This marks the last change 10306 and where further changes will be added. 10307 "curhead" Only appears in the item that is the last one 10308 that was undone. This marks the current 10309 position in the undo tree, the block that will 10310 be used by a redo command. When nothing was 10311 undone after the last change this item will 10312 not appear anywhere. 10313 "save" Only appears on the last block before a file 10314 write. The number is the write count. The 10315 first write has number 1, the last one the 10316 "save_last" mentioned above. 10317 "alt" Alternate entry. This is again a List of undo 10318 blocks. Each item may again have an "alt" 10319 item. 10320 10321uniq({list} [, {func} [, {dict}]]) *uniq()* *E882* 10322 Remove second and succeeding copies of repeated adjacent 10323 {list} items in-place. Returns {list}. If you want a list 10324 to remain unmodified make a copy first: > 10325 :let newlist = uniq(copy(mylist)) 10326< The default compare function uses the string representation of 10327 each item. For the use of {func} and {dict} see |sort()|. 10328 10329 Can also be used as a |method|: > 10330 mylist->uniq() 10331 10332values({dict}) *values()* 10333 Return a |List| with all the values of {dict}. The |List| is 10334 in arbitrary order. Also see |items()| and |keys()|. 10335 10336 Can also be used as a |method|: > 10337 mydict->values() 10338 10339virtcol({expr}) *virtcol()* 10340 The result is a Number, which is the screen column of the file 10341 position given with {expr}. That is, the last screen position 10342 occupied by the character at that position, when the screen 10343 would be of unlimited width. When there is a <Tab> at the 10344 position, the returned Number will be the column at the end of 10345 the <Tab>. For example, for a <Tab> in column 1, with 'ts' 10346 set to 8, it returns 8. |conceal| is ignored. 10347 For the byte position use |col()|. 10348 For the use of {expr} see |col()|. 10349 When 'virtualedit' is used {expr} can be [lnum, col, off], where 10350 "off" is the offset in screen columns from the start of the 10351 character. E.g., a position within a <Tab> or after the last 10352 character. When "off" is omitted zero is used. 10353 When Virtual editing is active in the current mode, a position 10354 beyond the end of the line can be returned. |'virtualedit'| 10355 The accepted positions are: 10356 . the cursor position 10357 $ the end of the cursor line (the result is the 10358 number of displayed characters in the cursor line 10359 plus one) 10360 'x position of mark x (if the mark is not set, 0 is 10361 returned) 10362 v In Visual mode: the start of the Visual area (the 10363 cursor is the end). When not in Visual mode 10364 returns the cursor position. Differs from |'<| in 10365 that it's updated right away. 10366 Note that only marks in the current file can be used. 10367 Examples: > 10368 virtcol(".") with text "foo^Lbar", with cursor on the "^L", returns 5 10369 virtcol("$") with text "foo^Lbar", returns 9 10370 virtcol("'t") with text " there", with 't at 'h', returns 6 10371< The first column is 1. 0 is returned for an error. 10372 A more advanced example that echoes the maximum length of 10373 all lines: > 10374 echo max(map(range(1, line('$')), "virtcol([v:val, '$'])")) 10375 10376< Can also be used as a |method|: > 10377 GetPos()->virtcol() 10378 10379 10380visualmode([{expr}]) *visualmode()* 10381 The result is a String, which describes the last Visual mode 10382 used in the current buffer. Initially it returns an empty 10383 string, but once Visual mode has been used, it returns "v", 10384 "V", or "<CTRL-V>" (a single CTRL-V character) for 10385 character-wise, line-wise, or block-wise Visual mode 10386 respectively. 10387 Example: > 10388 :exe "normal " . visualmode() 10389< This enters the same Visual mode as before. It is also useful 10390 in scripts if you wish to act differently depending on the 10391 Visual mode that was used. 10392 If Visual mode is active, use |mode()| to get the Visual mode 10393 (e.g., in a |:vmap|). 10394 If {expr} is supplied and it evaluates to a non-zero Number or 10395 a non-empty String, then the Visual mode will be cleared and 10396 the old value is returned. See |non-zero-arg|. 10397 10398wildmenumode() *wildmenumode()* 10399 Returns |TRUE| when the wildmenu is active and |FALSE| 10400 otherwise. See 'wildmenu' and 'wildmode'. 10401 This can be used in mappings to handle the 'wildcharm' option 10402 gracefully. (Makes only sense with |mapmode-c| mappings). 10403 10404 For example to make <c-j> work like <down> in wildmode, use: > 10405 :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>" 10406< 10407 (Note, this needs the 'wildcharm' option set appropriately). 10408 10409win_execute({id}, {command} [, {silent}]) *win_execute()* 10410 Like `execute()` but in the context of window {id}. 10411 The window will temporarily be made the current window, 10412 without triggering autocommands. When executing {command} 10413 autocommands will be triggered, this may have unexpected side 10414 effects. Use |:noautocmd| if needed. 10415 Example: > 10416 call win_execute(winid, 'set syntax=python') 10417< Doing the same with `setwinvar()` would not trigger 10418 autocommands and not actually show syntax highlighting. 10419 *E994* 10420 Not all commands are allowed in popup windows. 10421 When window {id} does not exist then no error is given. 10422 10423 Can also be used as a |method|, the base is passed as the 10424 second argument: > 10425 GetCommand()->win_execute(winid) 10426 10427win_findbuf({bufnr}) *win_findbuf()* 10428 Returns a list with |window-ID|s for windows that contain 10429 buffer {bufnr}. When there is none the list is empty. 10430 10431 Can also be used as a |method|: > 10432 GetBufnr()->win_findbuf() 10433 10434win_getid([{win} [, {tab}]]) *win_getid()* 10435 Get the |window-ID| for the specified window. 10436 When {win} is missing use the current window. 10437 With {win} this is the window number. The top window has 10438 number 1. 10439 Without {tab} use the current tab, otherwise the tab with 10440 number {tab}. The first tab has number one. 10441 Return zero if the window cannot be found. 10442 10443 Can also be used as a |method|: > 10444 GetWinnr()->win_getid() 10445 10446 10447win_gettype([{nr}]) *win_gettype()* 10448 Return the type of the window: 10449 "popup" popup window |popup| 10450 "command" command-line window |cmdwin| 10451 (empty) normal window 10452 "unknown" window {nr} not found 10453 10454 When {nr} is omitted return the type of the current window. 10455 When {nr} is given return the type of this window by number or 10456 |window-ID|. 10457 10458 Also see the 'buftype' option. When running a terminal in a 10459 popup window then 'buftype' is "terminal" and win_gettype() 10460 returns "popup". 10461 10462 10463win_gotoid({expr}) *win_gotoid()* 10464 Go to window with ID {expr}. This may also change the current 10465 tabpage. 10466 Return 1 if successful, 0 if the window cannot be found. 10467 10468 Can also be used as a |method|: > 10469 GetWinid()->win_gotoid() 10470 10471win_id2tabwin({expr}) *win_id2tabwin()* 10472 Return a list with the tab number and window number of window 10473 with ID {expr}: [tabnr, winnr]. 10474 Return [0, 0] if the window cannot be found. 10475 10476 Can also be used as a |method|: > 10477 GetWinid()->win_id2tabwin() 10478 10479win_id2win({expr}) *win_id2win()* 10480 Return the window number of window with ID {expr}. 10481 Return 0 if the window cannot be found in the current tabpage. 10482 10483 Can also be used as a |method|: > 10484 GetWinid()->win_id2win() 10485 10486win_screenpos({nr}) *win_screenpos()* 10487 Return the screen position of window {nr} as a list with two 10488 numbers: [row, col]. The first window always has position 10489 [1, 1], unless there is a tabline, then it is [2, 1]. 10490 {nr} can be the window number or the |window-ID|. 10491 Return [0, 0] if the window cannot be found in the current 10492 tabpage. 10493 10494 Can also be used as a |method|: > 10495 GetWinid()->win_screenpos() 10496< 10497win_splitmove({nr}, {target} [, {options}]) *win_splitmove()* 10498 Move the window {nr} to a new split of the window {target}. 10499 This is similar to moving to {target}, creating a new window 10500 using |:split| but having the same contents as window {nr}, and 10501 then closing {nr}. 10502 10503 Both {nr} and {target} can be window numbers or |window-ID|s. 10504 Both must be in the current tab page. 10505 10506 Returns zero for success, non-zero for failure. 10507 10508 {options} is a Dictionary with the following optional entries: 10509 "vertical" When TRUE, the split is created vertically, 10510 like with |:vsplit|. 10511 "rightbelow" When TRUE, the split is made below or to the 10512 right (if vertical). When FALSE, it is done 10513 above or to the left (if vertical). When not 10514 present, the values of 'splitbelow' and 10515 'splitright' are used. 10516 10517 Can also be used as a |method|: > 10518 GetWinid()->win_splitmove(target) 10519< 10520 10521 *winbufnr()* 10522winbufnr({nr}) The result is a Number, which is the number of the buffer 10523 associated with window {nr}. {nr} can be the window number or 10524 the |window-ID|. 10525 When {nr} is zero, the number of the buffer in the current 10526 window is returned. 10527 When window {nr} doesn't exist, -1 is returned. 10528 Example: > 10529 :echo "The file in the current window is " . bufname(winbufnr(0)) 10530< 10531 Can also be used as a |method|: > 10532 FindWindow()->winbufnr()->bufname() 10533< 10534 *wincol()* 10535wincol() The result is a Number, which is the virtual column of the 10536 cursor in the window. This is counting screen cells from the 10537 left side of the window. The leftmost column is one. 10538 10539 *windowsversion()* 10540windowsversion() 10541 The result is a String. For MS-Windows it indicates the OS 10542 version. E.g, Windows 10 is "10.0", Windows 8 is "6.2", 10543 Windows XP is "5.1". For non-MS-Windows systems the result is 10544 an empty string. 10545 10546winheight({nr}) *winheight()* 10547 The result is a Number, which is the height of window {nr}. 10548 {nr} can be the window number or the |window-ID|. 10549 When {nr} is zero, the height of the current window is 10550 returned. When window {nr} doesn't exist, -1 is returned. 10551 An existing window always has a height of zero or more. 10552 This excludes any window toolbar line. 10553 Examples: > 10554 :echo "The current window has " . winheight(0) . " lines." 10555 10556< Can also be used as a |method|: > 10557 GetWinid()->winheight() 10558< 10559winlayout([{tabnr}]) *winlayout()* 10560 The result is a nested List containing the layout of windows 10561 in a tabpage. 10562 10563 Without {tabnr} use the current tabpage, otherwise the tabpage 10564 with number {tabnr}. If the tabpage {tabnr} is not found, 10565 returns an empty list. 10566 10567 For a leaf window, it returns: 10568 ['leaf', {winid}] 10569 For horizontally split windows, which form a column, it 10570 returns: 10571 ['col', [{nested list of windows}]] 10572 For vertically split windows, which form a row, it returns: 10573 ['row', [{nested list of windows}]] 10574 10575 Example: > 10576 " Only one window in the tab page 10577 :echo winlayout() 10578 ['leaf', 1000] 10579 " Two horizontally split windows 10580 :echo winlayout() 10581 ['col', [['leaf', 1000], ['leaf', 1001]]] 10582 " The second tab page, with three horizontally split 10583 " windows, with two vertically split windows in the 10584 " middle window 10585 :echo winlayout(2) 10586 ['col', [['leaf', 1002], ['row', [['leaf', 1003], 10587 ['leaf', 1001]]], ['leaf', 1000]]] 10588< 10589 Can also be used as a |method|: > 10590 GetTabnr()->winlayout() 10591< 10592 *winline()* 10593winline() The result is a Number, which is the screen line of the cursor 10594 in the window. This is counting screen lines from the top of 10595 the window. The first line is one. 10596 If the cursor was moved the view on the file will be updated 10597 first, this may cause a scroll. 10598 10599 *winnr()* 10600winnr([{arg}]) The result is a Number, which is the number of the current 10601 window. The top window has number 1. 10602 Returns zero for a popup window. 10603 10604 The optional argument {arg} supports the following values: 10605 $ the number of the last window (the window 10606 count). 10607 # the number of the last accessed window (where 10608 |CTRL-W_p| goes to). If there is no previous 10609 window or it is in another tab page 0 is 10610 returned. 10611 {N}j the number of the Nth window below the 10612 current window (where |CTRL-W_j| goes to). 10613 {N}k the number of the Nth window above the current 10614 window (where |CTRL-W_k| goes to). 10615 {N}h the number of the Nth window left of the 10616 current window (where |CTRL-W_h| goes to). 10617 {N}l the number of the Nth window right of the 10618 current window (where |CTRL-W_l| goes to). 10619 The number can be used with |CTRL-W_w| and ":wincmd w" 10620 |:wincmd|. 10621 Also see |tabpagewinnr()| and |win_getid()|. 10622 Examples: > 10623 let window_count = winnr('$') 10624 let prev_window = winnr('#') 10625 let wnum = winnr('3k') 10626 10627< Can also be used as a |method|: > 10628 GetWinval()->winnr() 10629< 10630 *winrestcmd()* 10631winrestcmd() Returns a sequence of |:resize| commands that should restore 10632 the current window sizes. Only works properly when no windows 10633 are opened or closed and the current window and tab page is 10634 unchanged. 10635 Example: > 10636 :let cmd = winrestcmd() 10637 :call MessWithWindowSizes() 10638 :exe cmd 10639< 10640 *winrestview()* 10641winrestview({dict}) 10642 Uses the |Dictionary| returned by |winsaveview()| to restore 10643 the view of the current window. 10644 Note: The {dict} does not have to contain all values, that are 10645 returned by |winsaveview()|. If values are missing, those 10646 settings won't be restored. So you can use: > 10647 :call winrestview({'curswant': 4}) 10648< 10649 This will only set the curswant value (the column the cursor 10650 wants to move on vertical movements) of the cursor to column 5 10651 (yes, that is 5), while all other settings will remain the 10652 same. This is useful, if you set the cursor position manually. 10653 10654 If you have changed the values the result is unpredictable. 10655 If the window size changed the result won't be the same. 10656 10657 Can also be used as a |method|: > 10658 GetView()->winrestview() 10659< 10660 *winsaveview()* 10661winsaveview() Returns a |Dictionary| that contains information to restore 10662 the view of the current window. Use |winrestview()| to 10663 restore the view. 10664 This is useful if you have a mapping that jumps around in the 10665 buffer and you want to go back to the original view. 10666 This does not save fold information. Use the 'foldenable' 10667 option to temporarily switch off folding, so that folds are 10668 not opened when moving around. This may have side effects. 10669 The return value includes: 10670 lnum cursor line number 10671 col cursor column (Note: the first column 10672 zero, as opposed to what getpos() 10673 returns) 10674 coladd cursor column offset for 'virtualedit' 10675 curswant column for vertical movement 10676 topline first line in the window 10677 topfill filler lines, only in diff mode 10678 leftcol first column displayed 10679 skipcol columns skipped 10680 Note that no option values are saved. 10681 10682 10683winwidth({nr}) *winwidth()* 10684 The result is a Number, which is the width of window {nr}. 10685 {nr} can be the window number or the |window-ID|. 10686 When {nr} is zero, the width of the current window is 10687 returned. When window {nr} doesn't exist, -1 is returned. 10688 An existing window always has a width of zero or more. 10689 Examples: > 10690 :echo "The current window has " . winwidth(0) . " columns." 10691 :if winwidth(0) <= 50 10692 : 50 wincmd | 10693 :endif 10694< For getting the terminal or screen size, see the 'columns' 10695 option. 10696 10697 Can also be used as a |method|: > 10698 GetWinid()->winwidth() 10699 10700 10701wordcount() *wordcount()* 10702 The result is a dictionary of byte/chars/word statistics for 10703 the current buffer. This is the same info as provided by 10704 |g_CTRL-G| 10705 The return value includes: 10706 bytes Number of bytes in the buffer 10707 chars Number of chars in the buffer 10708 words Number of words in the buffer 10709 cursor_bytes Number of bytes before cursor position 10710 (not in Visual mode) 10711 cursor_chars Number of chars before cursor position 10712 (not in Visual mode) 10713 cursor_words Number of words before cursor position 10714 (not in Visual mode) 10715 visual_bytes Number of bytes visually selected 10716 (only in Visual mode) 10717 visual_chars Number of chars visually selected 10718 (only in Visual mode) 10719 visual_words Number of words visually selected 10720 (only in Visual mode) 10721 10722 10723 *writefile()* 10724writefile({object}, {fname} [, {flags}]) 10725 When {object} is a |List| write it to file {fname}. Each list 10726 item is separated with a NL. Each list item must be a String 10727 or Number. 10728 When {flags} contains "b" then binary mode is used: There will 10729 not be a NL after the last list item. An empty item at the 10730 end does cause the last line in the file to end in a NL. 10731 10732 When {object} is a |Blob| write the bytes to file {fname} 10733 unmodified. 10734 10735 When {flags} contains "a" then append mode is used, lines are 10736 appended to the file: > 10737 :call writefile(["foo"], "event.log", "a") 10738 :call writefile(["bar"], "event.log", "a") 10739< 10740 When {flags} contains "s" then fsync() is called after writing 10741 the file. This flushes the file to disk, if possible. This 10742 takes more time but avoids losing the file if the system 10743 crashes. 10744 When {flags} does not contain "S" or "s" then fsync() is 10745 called if the 'fsync' option is set. 10746 When {flags} contains "S" then fsync() is not called, even 10747 when 'fsync' is set. 10748 10749 All NL characters are replaced with a NUL character. 10750 Inserting CR characters needs to be done before passing {list} 10751 to writefile(). 10752 An existing file is overwritten, if possible. 10753 When the write fails -1 is returned, otherwise 0. There is an 10754 error message if the file can't be created or when writing 10755 fails. 10756 Also see |readfile()|. 10757 To copy a file byte for byte: > 10758 :let fl = readfile("foo", "b") 10759 :call writefile(fl, "foocopy", "b") 10760 10761< Can also be used as a |method|: > 10762 GetText()->writefile("thefile") 10763 10764 10765xor({expr}, {expr}) *xor()* 10766 Bitwise XOR on the two arguments. The arguments are converted 10767 to a number. A List, Dict or Float argument causes an error. 10768 Example: > 10769 :let bits = xor(bits, 0x80) 10770< 10771 Can also be used as a |method|: > 10772 :let bits = bits->xor(0x80) 10773< 10774 10775 *feature-list* 10776There are three types of features: 107771. Features that are only supported when they have been enabled when Vim 10778 was compiled |+feature-list|. Example: > 10779 :if has("cindent") 107802. Features that are only supported when certain conditions have been met. 10781 Example: > 10782 :if has("gui_running") 10783< *has-patch* 107843. Beyond a certain version or at a certain version and including a specific 10785 patch. The "patch-7.4.248" feature means that the Vim version is 7.5 or 10786 later, or it is version 7.4 and patch 248 was included. Example: > 10787 :if has("patch-7.4.248") 10788< Note that it's possible for patch 248 to be omitted even though 249 is 10789 included. Only happens when cherry-picking patches. 10790 Note that this form only works for patch 7.4.237 and later, before that 10791 you need to check for the patch and the v:version. Example (checking 10792 version 6.2.148 or later): > 10793 :if v:version > 602 || (v:version == 602 && has("patch148")) 10794 10795Hint: To find out if Vim supports backslashes in a file name (MS-Windows), 10796use: `if exists('+shellslash')` 10797 10798 10799acl Compiled with |ACL| support. 10800all_builtin_terms Compiled with all builtin terminals enabled. 10801amiga Amiga version of Vim. 10802arabic Compiled with Arabic support |Arabic|. 10803arp Compiled with ARP support (Amiga). 10804autocmd Compiled with autocommand support. (always true) 10805autochdir Compiled with support for 'autochdir' 10806autoservername Automatically enable |clientserver| 10807balloon_eval Compiled with |balloon-eval| support. 10808balloon_multiline GUI supports multiline balloons. 10809beos BeOS version of Vim. 10810browse Compiled with |:browse| support, and browse() will 10811 work. 10812browsefilter Compiled with support for |browsefilter|. 10813bsd Compiled on an OS in the BSD family (excluding macOS). 10814builtin_terms Compiled with some builtin terminals. 10815byte_offset Compiled with support for 'o' in 'statusline' 10816channel Compiled with support for |channel| and |job| 10817cindent Compiled with 'cindent' support. 10818clientserver Compiled with remote invocation support |clientserver|. 10819clipboard Compiled with 'clipboard' support. 10820clipboard_working Compiled with 'clipboard' support and it can be used. 10821cmdline_compl Compiled with |cmdline-completion| support. 10822cmdline_hist Compiled with |cmdline-history| support. 10823cmdline_info Compiled with 'showcmd' and 'ruler' support. 10824comments Compiled with |'comments'| support. 10825compatible Compiled to be very Vi compatible. 10826conpty Platform where |ConPTY| can be used. 10827cryptv Compiled with encryption support |encryption|. 10828cscope Compiled with |cscope| support. 10829cursorbind Compiled with |'cursorbind'| (always true) 10830debug Compiled with "DEBUG" defined. 10831dialog_con Compiled with console dialog support. 10832dialog_gui Compiled with GUI dialog support. 10833diff Compiled with |vimdiff| and 'diff' support. 10834digraphs Compiled with support for digraphs. 10835directx Compiled with support for DirectX and 'renderoptions'. 10836dnd Compiled with support for the "~ register |quote_~|. 10837ebcdic Compiled on a machine with ebcdic character set. 10838emacs_tags Compiled with support for Emacs tags. 10839eval Compiled with expression evaluation support. Always 10840 true, of course! 10841ex_extra |+ex_extra| (always true) 10842extra_search Compiled with support for |'incsearch'| and 10843 |'hlsearch'| 10844farsi Support for Farsi was removed |farsi|. 10845file_in_path Compiled with support for |gf| and |<cfile>| 10846filterpipe When 'shelltemp' is off pipes are used for shell 10847 read/write/filter commands 10848find_in_path Compiled with support for include file searches 10849 |+find_in_path|. 10850float Compiled with support for |Float|. 10851fname_case Case in file names matters (for Amiga and MS-Windows 10852 this is not present). 10853folding Compiled with |folding| support. 10854footer Compiled with GUI footer support. |gui-footer| 10855fork Compiled to use fork()/exec() instead of system(). 10856gettext Compiled with message translation |multi-lang| 10857gui Compiled with GUI enabled. 10858gui_athena Compiled with Athena GUI. 10859gui_gnome Compiled with Gnome support (gui_gtk is also defined). 10860gui_gtk Compiled with GTK+ GUI (any version). 10861gui_gtk2 Compiled with GTK+ 2 GUI (gui_gtk is also defined). 10862gui_gtk3 Compiled with GTK+ 3 GUI (gui_gtk is also defined). 10863gui_haiku Compiled with Haiku GUI. 10864gui_mac Compiled with Macintosh GUI. 10865gui_motif Compiled with Motif GUI. 10866gui_photon Compiled with Photon GUI. 10867gui_running Vim is running in the GUI, or it will start soon. 10868gui_win32 Compiled with MS Windows Win32 GUI. 10869gui_win32s idem, and Win32s system being used (Windows 3.1) 10870haiku Haiku version of Vim. 10871hangul_input Compiled with Hangul input support. |hangul| 10872hpux HP-UX version of Vim. 10873iconv Can use iconv() for conversion. 10874insert_expand Compiled with support for CTRL-X expansion commands in 10875 Insert mode. (always true) 10876job Compiled with support for |channel| and |job| 10877ipv6 Compiled with support for IPv6 networking in |channel|. 10878jumplist Compiled with |jumplist| support. 10879keymap Compiled with 'keymap' support. 10880lambda Compiled with |lambda| support. 10881langmap Compiled with 'langmap' support. 10882libcall Compiled with |libcall()| support. 10883linebreak Compiled with 'linebreak', 'breakat', 'showbreak' and 10884 'breakindent' support. 10885linux Linux version of Vim. 10886lispindent Compiled with support for lisp indenting. 10887listcmds Compiled with commands for the buffer list |:files| 10888 and the argument list |arglist|. 10889localmap Compiled with local mappings and abbr. |:map-local| 10890lua Compiled with Lua interface |Lua|. 10891mac Any Macintosh version of Vim cf. osx 10892macunix Synonym for osxdarwin 10893menu Compiled with support for |:menu|. 10894mksession Compiled with support for |:mksession|. 10895modify_fname Compiled with file name modifiers. |filename-modifiers| 10896 (always true) 10897mouse Compiled with support mouse. 10898mouse_dec Compiled with support for Dec terminal mouse. 10899mouse_gpm Compiled with support for gpm (Linux console mouse) 10900mouse_gpm_enabled GPM mouse is working 10901mouse_netterm Compiled with support for netterm mouse. 10902mouse_pterm Compiled with support for qnx pterm mouse. 10903mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse) 10904mouse_sgr Compiled with support for sgr mouse. 10905mouse_urxvt Compiled with support for urxvt mouse. 10906mouse_xterm Compiled with support for xterm mouse. 10907mouseshape Compiled with support for 'mouseshape'. 10908multi_byte Compiled with support for 'encoding' (always true) 10909multi_byte_encoding 'encoding' is set to a multi-byte encoding. 10910multi_byte_ime Compiled with support for IME input method. 10911multi_lang Compiled with support for multiple languages. 10912mzscheme Compiled with MzScheme interface |mzscheme|. 10913netbeans_enabled Compiled with support for |netbeans| and connected. 10914netbeans_intg Compiled with support for |netbeans|. 10915num64 Compiled with 64-bit |Number| support. 10916ole Compiled with OLE automation support for Win32. 10917osx Compiled for macOS cf. mac 10918osxdarwin Compiled for macOS, with |mac-darwin-feature| 10919packages Compiled with |packages| support. 10920path_extra Compiled with up/downwards search in 'path' and 'tags' 10921perl Compiled with Perl interface. 10922persistent_undo Compiled with support for persistent undo history. 10923postscript Compiled with PostScript file printing. 10924printer Compiled with |:hardcopy| support. 10925profile Compiled with |:profile| support. 10926python Python 2.x interface available. |has-python| 10927python_compiled Compiled with Python 2.x interface. |has-python| 10928python_dynamic Python 2.x interface is dynamically loaded. |has-python| 10929python3 Python 3.x interface available. |has-python| 10930python3_compiled Compiled with Python 3.x interface. |has-python| 10931python3_dynamic Python 3.x interface is dynamically loaded. |has-python| 10932pythonx Python 2.x and/or 3.x interface available. |python_x| 10933qnx QNX version of Vim. 10934quickfix Compiled with |quickfix| support. 10935reltime Compiled with |reltime()| support. 10936rightleft Compiled with 'rightleft' support. 10937ruby Compiled with Ruby interface |ruby|. 10938scrollbind Compiled with 'scrollbind' support. (always true) 10939showcmd Compiled with 'showcmd' support. 10940signs Compiled with |:sign| support. 10941smartindent Compiled with 'smartindent' support. 10942sound Compiled with sound support, e.g. `sound_playevent()` 10943spell Compiled with spell checking support |spell|. 10944startuptime Compiled with |--startuptime| support. 10945statusline Compiled with support for 'statusline', 'rulerformat' 10946 and special formats of 'titlestring' and 'iconstring'. 10947sun SunOS version of Vim. 10948sun_workshop Support for Sun |workshop| has been removed. 10949syntax Compiled with syntax highlighting support |syntax|. 10950syntax_items There are active syntax highlighting items for the 10951 current buffer. 10952system Compiled to use system() instead of fork()/exec(). 10953tag_binary Compiled with binary searching in tags files 10954 |tag-binary-search|. 10955tag_old_static Support for old static tags was removed, see 10956 |tag-old-static|. 10957tcl Compiled with Tcl interface. 10958termguicolors Compiled with true color in terminal support. 10959terminal Compiled with |terminal| support. 10960terminfo Compiled with terminfo instead of termcap. 10961termresponse Compiled with support for |t_RV| and |v:termresponse|. 10962textobjects Compiled with support for |text-objects|. 10963textprop Compiled with support for |text-properties|. 10964tgetent Compiled with tgetent support, able to use a termcap 10965 or terminfo file. 10966timers Compiled with |timer_start()| support. 10967title Compiled with window title support |'title'|. 10968toolbar Compiled with support for |gui-toolbar|. 10969ttyin input is a terminal (tty) 10970ttyout output is a terminal (tty) 10971unix Unix version of Vim. *+unix* 10972unnamedplus Compiled with support for "unnamedplus" in 'clipboard' 10973user_commands User-defined commands. (always true) 10974vartabs Compiled with variable tabstop support |'vartabstop'|. 10975vcon Win32: Virtual console support is working, can use 10976 'termguicolors'. Also see |+vtp|. 10977vertsplit Compiled with vertically split windows |:vsplit|. 10978 (always true) 10979vim_starting True while initial source'ing takes place. |startup| 10980 *vim_starting* 10981viminfo Compiled with viminfo support. 10982vimscript-1 Compiled Vim script version 1 support 10983vimscript-2 Compiled Vim script version 2 support 10984vimscript-3 Compiled Vim script version 3 support 10985virtualedit Compiled with 'virtualedit' option. (always true) 10986visual Compiled with Visual mode. (always true) 10987visualextra Compiled with extra Visual mode commands. (always 10988 true) |blockwise-operators|. 10989vms VMS version of Vim. 10990vreplace Compiled with |gR| and |gr| commands. (always true) 10991vtp Compiled for vcon support |+vtp| (check vcon to find 10992 out if it works in the current console). 10993wildignore Compiled with 'wildignore' option. 10994wildmenu Compiled with 'wildmenu' option. 10995win16 old version for MS-Windows 3.1 (always false) 10996win32 Win32 version of Vim (MS-Windows 95 and later, 32 or 10997 64 bits) 10998win32unix Win32 version of Vim, using Unix files (Cygwin) 10999win64 Win64 version of Vim (MS-Windows 64 bit). 11000win95 Win32 version for MS-Windows 95/98/ME (always false) 11001winaltkeys Compiled with 'winaltkeys' option. 11002windows Compiled with support for more than one window. 11003 (always true) 11004writebackup Compiled with 'writebackup' default on. 11005xfontset Compiled with X fontset support |xfontset|. 11006xim Compiled with X input method support |xim|. 11007xpm Compiled with pixmap support. 11008xpm_w32 Compiled with pixmap support for Win32. (Only for 11009 backward compatibility. Use "xpm" instead.) 11010xsmp Compiled with X session management support. 11011xsmp_interact Compiled with interactive X session management support. 11012xterm_clipboard Compiled with support for xterm clipboard. 11013xterm_save Compiled with support for saving and restoring the 11014 xterm screen. 11015x11 Compiled with X11 support. 11016 11017 *string-match* 11018Matching a pattern in a String 11019 11020A regexp pattern as explained at |pattern| is normally used to find a match in 11021the buffer lines. When a pattern is used to find a match in a String, almost 11022everything works in the same way. The difference is that a String is handled 11023like it is one line. When it contains a "\n" character, this is not seen as a 11024line break for the pattern. It can be matched with a "\n" in the pattern, or 11025with ".". Example: > 11026 :let a = "aaaa\nxxxx" 11027 :echo matchstr(a, "..\n..") 11028 aa 11029 xx 11030 :echo matchstr(a, "a.x") 11031 a 11032 x 11033 11034Don't forget that "^" will only match at the first character of the String and 11035"$" at the last character of the string. They don't match after or before a 11036"\n". 11037 11038============================================================================== 110395. Defining functions *user-functions* 11040 11041New functions can be defined. These can be called just like builtin 11042functions. The function executes a sequence of Ex commands. Normal mode 11043commands can be executed with the |:normal| command. 11044 11045This section is about the legacy functions. For the Vim9 functions, which 11046execute much faster, support type checking and more, see |vim9.txt|. 11047 11048The function name must start with an uppercase letter, to avoid confusion with 11049builtin functions. To prevent from using the same name in different scripts 11050avoid obvious, short names. A good habit is to start the function name with 11051the name of the script, e.g., "HTMLcolor()". 11052 11053It's also possible to use curly braces, see |curly-braces-names|. And the 11054|autoload| facility is useful to define a function only when it's called. 11055 11056 *local-function* 11057A function local to a script must start with "s:". A local script function 11058can only be called from within the script and from functions, user commands 11059and autocommands defined in the script. It is also possible to call the 11060function from a mapping defined in the script, but then |<SID>| must be used 11061instead of "s:" when the mapping is expanded outside of the script. 11062There are only script-local functions, no buffer-local or window-local 11063functions. 11064 11065 *:fu* *:function* *E128* *E129* *E123* 11066:fu[nction] List all functions and their arguments. 11067 11068:fu[nction] {name} List function {name}. 11069 {name} can also be a |Dictionary| entry that is a 11070 |Funcref|: > 11071 :function dict.init 11072 11073:fu[nction] /{pattern} List functions with a name matching {pattern}. 11074 Example that lists all functions ending with "File": > 11075 :function /File$ 11076< 11077 *:function-verbose* 11078When 'verbose' is non-zero, listing a function will also display where it was 11079last defined. Example: > 11080 11081 :verbose function SetFileTypeSH 11082 function SetFileTypeSH(name) 11083 Last set from /usr/share/vim/vim-7.0/filetype.vim 11084< 11085See |:verbose-cmd| for more information. 11086 11087 *E124* *E125* *E853* *E884* 11088:fu[nction][!] {name}([arguments]) [range] [abort] [dict] [closure] 11089 Define a new function by the name {name}. The body of 11090 the function follows in the next lines, until the 11091 matching |:endfunction|. 11092 11093 The name must be made of alphanumeric characters and 11094 '_', and must start with a capital or "s:" (see 11095 above). Note that using "b:" or "g:" is not allowed. 11096 (since patch 7.4.260 E884 is given if the function 11097 name has a colon in the name, e.g. for "foo:bar()". 11098 Before that patch no error was given). 11099 11100 {name} can also be a |Dictionary| entry that is a 11101 |Funcref|: > 11102 :function dict.init(arg) 11103< "dict" must be an existing dictionary. The entry 11104 "init" is added if it didn't exist yet. Otherwise [!] 11105 is required to overwrite an existing function. The 11106 result is a |Funcref| to a numbered function. The 11107 function can only be used with a |Funcref| and will be 11108 deleted if there are no more references to it. 11109 *E127* *E122* 11110 When a function by this name already exists and [!] is 11111 not used an error message is given. There is one 11112 exception: When sourcing a script again, a function 11113 that was previously defined in that script will be 11114 silently replaced. 11115 When [!] is used, an existing function is silently 11116 replaced. Unless it is currently being executed, that 11117 is an error. 11118 NOTE: Use ! wisely. If used without care it can cause 11119 an existing function to be replaced unexpectedly, 11120 which is hard to debug. 11121 11122 For the {arguments} see |function-argument|. 11123 11124 *:func-range* *a:firstline* *a:lastline* 11125 When the [range] argument is added, the function is 11126 expected to take care of a range itself. The range is 11127 passed as "a:firstline" and "a:lastline". If [range] 11128 is excluded, ":{range}call" will call the function for 11129 each line in the range, with the cursor on the start 11130 of each line. See |function-range-example|. 11131 The cursor is still moved to the first line of the 11132 range, as is the case with all Ex commands. 11133 *:func-abort* 11134 When the [abort] argument is added, the function will 11135 abort as soon as an error is detected. 11136 *:func-dict* 11137 When the [dict] argument is added, the function must 11138 be invoked through an entry in a |Dictionary|. The 11139 local variable "self" will then be set to the 11140 dictionary. See |Dictionary-function|. 11141 *:func-closure* *E932* 11142 When the [closure] argument is added, the function 11143 can access variables and arguments from the outer 11144 scope. This is usually called a closure. In this 11145 example Bar() uses "x" from the scope of Foo(). It 11146 remains referenced even after Foo() returns: > 11147 :function! Foo() 11148 : let x = 0 11149 : function! Bar() closure 11150 : let x += 1 11151 : return x 11152 : endfunction 11153 : return funcref('Bar') 11154 :endfunction 11155 11156 :let F = Foo() 11157 :echo F() 11158< 1 > 11159 :echo F() 11160< 2 > 11161 :echo F() 11162< 3 11163 11164 *function-search-undo* 11165 The last used search pattern and the redo command "." 11166 will not be changed by the function. This also 11167 implies that the effect of |:nohlsearch| is undone 11168 when the function returns. 11169 11170 *:endf* *:endfunction* *E126* *E193* *W22* 11171:endf[unction] [argument] 11172 The end of a function definition. Best is to put it 11173 on a line by its own, without [argument]. 11174 11175 [argument] can be: 11176 | command command to execute next 11177 \n command command to execute next 11178 " comment always ignored 11179 anything else ignored, warning given when 11180 'verbose' is non-zero 11181 The support for a following command was added in Vim 11182 8.0.0654, before that any argument was silently 11183 ignored. 11184 11185 To be able to define a function inside an `:execute` 11186 command, use line breaks instead of |:bar|: > 11187 :exe "func Foo()\necho 'foo'\nendfunc" 11188< 11189 *:delf* *:delfunction* *E130* *E131* *E933* 11190:delf[unction][!] {name} 11191 Delete function {name}. 11192 {name} can also be a |Dictionary| entry that is a 11193 |Funcref|: > 11194 :delfunc dict.init 11195< This will remove the "init" entry from "dict". The 11196 function is deleted if there are no more references to 11197 it. 11198 With the ! there is no error if the function does not 11199 exist. 11200 *:retu* *:return* *E133* 11201:retu[rn] [expr] Return from a function. When "[expr]" is given, it is 11202 evaluated and returned as the result of the function. 11203 If "[expr]" is not given, the number 0 is returned. 11204 When a function ends without an explicit ":return", 11205 the number 0 is returned. 11206 Note that there is no check for unreachable lines, 11207 thus there is no warning if commands follow ":return". 11208 11209 If the ":return" is used after a |:try| but before the 11210 matching |:finally| (if present), the commands 11211 following the ":finally" up to the matching |:endtry| 11212 are executed first. This process applies to all 11213 nested ":try"s inside the function. The function 11214 returns at the outermost ":endtry". 11215 11216 *function-argument* *a:var* 11217An argument can be defined by giving its name. In the function this can then 11218be used as "a:name" ("a:" for argument). 11219 *a:0* *a:1* *a:000* *E740* *...* 11220Up to 20 arguments can be given, separated by commas. After the named 11221arguments an argument "..." can be specified, which means that more arguments 11222may optionally be following. In the function the extra arguments can be used 11223as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which 11224can be 0). "a:000" is set to a |List| that contains these arguments. Note 11225that "a:1" is the same as "a:000[0]". 11226 *E742* 11227The a: scope and the variables in it cannot be changed, they are fixed. 11228However, if a composite type is used, such as |List| or |Dictionary| , you can 11229change their contents. Thus you can pass a |List| to a function and have the 11230function add an item to it. If you want to make sure the function cannot 11231change a |List| or |Dictionary| use |:lockvar|. 11232 11233It is also possible to define a function without any arguments. You must 11234still supply the () then. 11235 11236It is allowed to define another function inside a function body. 11237 11238 *optional-function-argument* 11239You can provide default values for positional named arguments. This makes 11240them optional for function calls. When a positional argument is not 11241specified at a call, the default expression is used to initialize it. 11242This only works for functions declared with `:function` or `:def`, not for 11243lambda expressions |expr-lambda|. 11244 11245Example: > 11246 function Something(key, value = 10) 11247 echo a:key .. ": " .. a:value 11248 endfunction 11249 call Something('empty') "empty: 10" 11250 call Something('key', 20) "key: 20" 11251 11252The argument default expressions are evaluated at the time of the function 11253call, not definition. Thus it is possible to use an expression which is 11254invalid the moment the function is defined. The expressions are also only 11255evaluated when arguments are not specified during a call. 11256 11257You can pass |v:none| to use the default expression. Note that this means you 11258cannot pass v:none as an ordinary value when an argument has a default 11259expression. 11260 11261Example: > 11262 function Something(a = 10, b = 20, c = 30) 11263 endfunction 11264 call Something(1, v:none, 3) " b = 20 11265< 11266 *E989* 11267Optional arguments with default expressions must occur after any mandatory 11268arguments. You can use "..." after all optional named arguments. 11269 11270It is possible for later argument defaults to refer to prior arguments, 11271but not the other way around. They must be prefixed with "a:", as with all 11272arguments. 11273 11274Example that works: > 11275 :function Okay(mandatory, optional = a:mandatory) 11276 :endfunction 11277Example that does NOT work: > 11278 :function NoGood(first = a:second, second = 10) 11279 :endfunction 11280< 11281When not using "...", the number of arguments in a function call must be at 11282least equal to the number of mandatory named arguments. When using "...", the 11283number of arguments may be larger than the total of mandatory and optional 11284arguments. 11285 11286 *local-variables* 11287Inside a function local variables can be used. These will disappear when the 11288function returns. Global variables need to be accessed with "g:". 11289 11290Example: > 11291 :function Table(title, ...) 11292 : echohl Title 11293 : echo a:title 11294 : echohl None 11295 : echo a:0 . " items:" 11296 : for s in a:000 11297 : echon ' ' . s 11298 : endfor 11299 :endfunction 11300 11301This function can then be called with: > 11302 call Table("Table", "line1", "line2") 11303 call Table("Empty Table") 11304 11305To return more than one value, return a |List|: > 11306 :function Compute(n1, n2) 11307 : if a:n2 == 0 11308 : return ["fail", 0] 11309 : endif 11310 : return ["ok", a:n1 / a:n2] 11311 :endfunction 11312 11313This function can then be called with: > 11314 :let [success, div] = Compute(102, 6) 11315 :if success == "ok" 11316 : echo div 11317 :endif 11318< 11319 *:cal* *:call* *E107* *E117* 11320:[range]cal[l] {name}([arguments]) 11321 Call a function. The name of the function and its arguments 11322 are as specified with `:function`. Up to 20 arguments can be 11323 used. The returned value is discarded. 11324 Without a range and for functions that accept a range, the 11325 function is called once. When a range is given the cursor is 11326 positioned at the start of the first line before executing the 11327 function. 11328 When a range is given and the function doesn't handle it 11329 itself, the function is executed for each line in the range, 11330 with the cursor in the first column of that line. The cursor 11331 is left at the last line (possibly moved by the last function 11332 call). The arguments are re-evaluated for each line. Thus 11333 this works: 11334 *function-range-example* > 11335 :function Mynumber(arg) 11336 : echo line(".") . " " . a:arg 11337 :endfunction 11338 :1,5call Mynumber(getline(".")) 11339< 11340 The "a:firstline" and "a:lastline" are defined anyway, they 11341 can be used to do something different at the start or end of 11342 the range. 11343 11344 Example of a function that handles the range itself: > 11345 11346 :function Cont() range 11347 : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ ' 11348 :endfunction 11349 :4,8call Cont() 11350< 11351 This function inserts the continuation character "\" in front 11352 of all the lines in the range, except the first one. 11353 11354 When the function returns a composite value it can be further 11355 dereferenced, but the range will not be used then. Example: > 11356 :4,8call GetDict().method() 11357< Here GetDict() gets the range but method() does not. 11358 11359 *E132* 11360The recursiveness of user functions is restricted with the |'maxfuncdepth'| 11361option. 11362 11363It is also possible to use `:eval`. It does not support a range, but does 11364allow for method chaining, e.g.: > 11365 eval GetList()->Filter()->append('$') 11366 11367A function can also be called as part of evaluating an expression or when it 11368is used as a method: > 11369 let x = GetList() 11370 let y = GetList()->Filter() 11371 11372 11373AUTOMATICALLY LOADING FUNCTIONS ~ 11374 *autoload-functions* 11375When using many or large functions, it's possible to automatically define them 11376only when they are used. There are two methods: with an autocommand and with 11377the "autoload" directory in 'runtimepath'. 11378 11379 11380Using an autocommand ~ 11381 11382This is introduced in the user manual, section |41.14|. 11383 11384The autocommand is useful if you have a plugin that is a long Vim script file. 11385You can define the autocommand and quickly quit the script with `:finish`. 11386That makes Vim startup faster. The autocommand should then load the same file 11387again, setting a variable to skip the `:finish` command. 11388 11389Use the FuncUndefined autocommand event with a pattern that matches the 11390function(s) to be defined. Example: > 11391 11392 :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim 11393 11394The file "~/vim/bufnetfuncs.vim" should then define functions that start with 11395"BufNet". Also see |FuncUndefined|. 11396 11397 11398Using an autoload script ~ 11399 *autoload* *E746* 11400This is introduced in the user manual, section |41.15|. 11401 11402Using a script in the "autoload" directory is simpler, but requires using 11403exactly the right file name. A function that can be autoloaded has a name 11404like this: > 11405 11406 :call filename#funcname() 11407 11408When such a function is called, and it is not defined yet, Vim will search the 11409"autoload" directories in 'runtimepath' for a script file called 11410"filename.vim". For example "~/.vim/autoload/filename.vim". That file should 11411then define the function like this: > 11412 11413 function filename#funcname() 11414 echo "Done!" 11415 endfunction 11416 11417The file name and the name used before the # in the function must match 11418exactly, and the defined function must have the name exactly as it will be 11419called. 11420 11421It is possible to use subdirectories. Every # in the function name works like 11422a path separator. Thus when calling a function: > 11423 11424 :call foo#bar#func() 11425 11426Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'. 11427 11428This also works when reading a variable that has not been set yet: > 11429 11430 :let l = foo#bar#lvar 11431 11432However, when the autoload script was already loaded it won't be loaded again 11433for an unknown variable. 11434 11435When assigning a value to such a variable nothing special happens. This can 11436be used to pass settings to the autoload script before it's loaded: > 11437 11438 :let foo#bar#toggle = 1 11439 :call foo#bar#func() 11440 11441Note that when you make a mistake and call a function that is supposed to be 11442defined in an autoload script, but the script doesn't actually define the 11443function, the script will be sourced every time you try to call the function. 11444And you will get an error message every time. 11445 11446Also note that if you have two script files, and one calls a function in the 11447other and vice versa, before the used function is defined, it won't work. 11448Avoid using the autoload functionality at the toplevel. 11449 11450Hint: If you distribute a bunch of scripts you can pack them together with the 11451|vimball| utility. Also read the user manual |distribute-script|. 11452 11453============================================================================== 114546. Curly braces names *curly-braces-names* 11455 11456In most places where you can use a variable, you can use a "curly braces name" 11457variable. This is a regular variable name with one or more expressions 11458wrapped in braces {} like this: > 11459 my_{adjective}_variable 11460 11461When Vim encounters this, it evaluates the expression inside the braces, puts 11462that in place of the expression, and re-interprets the whole as a variable 11463name. So in the above example, if the variable "adjective" was set to 11464"noisy", then the reference would be to "my_noisy_variable", whereas if 11465"adjective" was set to "quiet", then it would be to "my_quiet_variable". 11466 11467One application for this is to create a set of variables governed by an option 11468value. For example, the statement > 11469 echo my_{&background}_message 11470 11471would output the contents of "my_dark_message" or "my_light_message" depending 11472on the current value of 'background'. 11473 11474You can use multiple brace pairs: > 11475 echo my_{adverb}_{adjective}_message 11476..or even nest them: > 11477 echo my_{ad{end_of_word}}_message 11478where "end_of_word" is either "verb" or "jective". 11479 11480However, the expression inside the braces must evaluate to a valid single 11481variable name, e.g. this is invalid: > 11482 :let foo='a + b' 11483 :echo c{foo}d 11484.. since the result of expansion is "ca + bd", which is not a variable name. 11485 11486 *curly-braces-function-names* 11487You can call and define functions by an evaluated name in a similar way. 11488Example: > 11489 :let func_end='whizz' 11490 :call my_func_{func_end}(parameter) 11491 11492This would call the function "my_func_whizz(parameter)". 11493 11494This does NOT work: > 11495 :let i = 3 11496 :let @{i} = '' " error 11497 :echo @{i} " error 11498 11499============================================================================== 115007. Commands *expression-commands* 11501 11502:let {var-name} = {expr1} *:let* *E18* 11503 Set internal variable {var-name} to the result of the 11504 expression {expr1}. The variable will get the type 11505 from the {expr}. If {var-name} didn't exist yet, it 11506 is created. 11507 11508:let {var-name}[{idx}] = {expr1} *E689* 11509 Set a list item to the result of the expression 11510 {expr1}. {var-name} must refer to a list and {idx} 11511 must be a valid index in that list. For nested list 11512 the index can be repeated. 11513 This cannot be used to add an item to a |List|. 11514 This cannot be used to set a byte in a String. You 11515 can do that like this: > 11516 :let var = var[0:2] . 'X' . var[4:] 11517< When {var-name} is a |Blob| then {idx} can be the 11518 length of the blob, in which case one byte is 11519 appended. 11520 11521 *E711* *E719* 11522:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710* 11523 Set a sequence of items in a |List| to the result of 11524 the expression {expr1}, which must be a list with the 11525 correct number of items. 11526 {idx1} can be omitted, zero is used instead. 11527 {idx2} can be omitted, meaning the end of the list. 11528 When the selected range of items is partly past the 11529 end of the list, items will be added. 11530 11531 *:let+=* *:let-=* *:letstar=* 11532 *:let/=* *:let%=* *:let.=* *:let..=* *E734* *E985* 11533:let {var} += {expr1} Like ":let {var} = {var} + {expr1}". 11534:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}". 11535:let {var} *= {expr1} Like ":let {var} = {var} * {expr1}". 11536:let {var} /= {expr1} Like ":let {var} = {var} / {expr1}". 11537:let {var} %= {expr1} Like ":let {var} = {var} % {expr1}". 11538:let {var} .= {expr1} Like ":let {var} = {var} . {expr1}". 11539:let {var} ..= {expr1} Like ":let {var} = {var} .. {expr1}". 11540 These fail if {var} was not set yet and when the type 11541 of {var} and {expr1} don't fit the operator. 11542 `.=` is not supported with Vim script version 2 and 11543 later, see |vimscript-version|. 11544 11545 11546:let ${env-name} = {expr1} *:let-environment* *:let-$* 11547 Set environment variable {env-name} to the result of 11548 the expression {expr1}. The type is always String. 11549 11550 On some systems making an environment variable empty 11551 causes it to be deleted. Many systems do not make a 11552 difference between an environment variable that is not 11553 set and an environment variable that is empty. 11554 11555:let ${env-name} .= {expr1} 11556 Append {expr1} to the environment variable {env-name}. 11557 If the environment variable didn't exist yet this 11558 works like "=". 11559 11560:let @{reg-name} = {expr1} *:let-register* *:let-@* 11561 Write the result of the expression {expr1} in register 11562 {reg-name}. {reg-name} must be a single letter, and 11563 must be the name of a writable register (see 11564 |registers|). "@@" can be used for the unnamed 11565 register, "@/" for the search pattern. 11566 If the result of {expr1} ends in a <CR> or <NL>, the 11567 register will be linewise, otherwise it will be set to 11568 characterwise. 11569 This can be used to clear the last search pattern: > 11570 :let @/ = "" 11571< This is different from searching for an empty string, 11572 that would match everywhere. 11573 11574:let @{reg-name} .= {expr1} 11575 Append {expr1} to register {reg-name}. If the 11576 register was empty it's like setting it to {expr1}. 11577 11578:let &{option-name} = {expr1} *:let-option* *:let-&* 11579 Set option {option-name} to the result of the 11580 expression {expr1}. A String or Number value is 11581 always converted to the type of the option. 11582 For an option local to a window or buffer the effect 11583 is just like using the |:set| command: both the local 11584 value and the global value are changed. 11585 Example: > 11586 :let &path = &path . ',/usr/local/include' 11587< This also works for terminal codes in the form t_xx. 11588 But only for alphanumerical names. Example: > 11589 :let &t_k1 = "\<Esc>[234;" 11590< When the code does not exist yet it will be created as 11591 a terminal key code, there is no error. 11592 11593:let &{option-name} .= {expr1} 11594 For a string option: Append {expr1} to the value. 11595 Does not insert a comma like |:set+=|. 11596 11597:let &{option-name} += {expr1} 11598:let &{option-name} -= {expr1} 11599 For a number or boolean option: Add or subtract 11600 {expr1}. 11601 11602:let &l:{option-name} = {expr1} 11603:let &l:{option-name} .= {expr1} 11604:let &l:{option-name} += {expr1} 11605:let &l:{option-name} -= {expr1} 11606 Like above, but only set the local value of an option 11607 (if there is one). Works like |:setlocal|. 11608 11609:let &g:{option-name} = {expr1} 11610:let &g:{option-name} .= {expr1} 11611:let &g:{option-name} += {expr1} 11612:let &g:{option-name} -= {expr1} 11613 Like above, but only set the global value of an option 11614 (if there is one). Works like |:setglobal|. 11615 11616:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688* 11617 {expr1} must evaluate to a |List|. The first item in 11618 the list is assigned to {name1}, the second item to 11619 {name2}, etc. 11620 The number of names must match the number of items in 11621 the |List|. 11622 Each name can be one of the items of the ":let" 11623 command as mentioned above. 11624 Example: > 11625 :let [s, item] = GetItem(s) 11626< Detail: {expr1} is evaluated first, then the 11627 assignments are done in sequence. This matters if 11628 {name2} depends on {name1}. Example: > 11629 :let x = [0, 1] 11630 :let i = 0 11631 :let [i, x[i]] = [1, 2] 11632 :echo x 11633< The result is [0, 2]. 11634 11635:let [{name1}, {name2}, ...] .= {expr1} 11636:let [{name1}, {name2}, ...] += {expr1} 11637:let [{name1}, {name2}, ...] -= {expr1} 11638 Like above, but append/add/subtract the value for each 11639 |List| item. 11640 11641:let [{name}, ..., ; {lastname}] = {expr1} *E452* 11642 Like |:let-unpack| above, but the |List| may have more 11643 items than there are names. A list of the remaining 11644 items is assigned to {lastname}. If there are no 11645 remaining items {lastname} is set to an empty list. 11646 Example: > 11647 :let [a, b; rest] = ["aval", "bval", 3, 4] 11648< 11649:let [{name}, ..., ; {lastname}] .= {expr1} 11650:let [{name}, ..., ; {lastname}] += {expr1} 11651:let [{name}, ..., ; {lastname}] -= {expr1} 11652 Like above, but append/add/subtract the value for each 11653 |List| item. 11654 11655 *:let=<<* *:let-heredoc* 11656 *E990* *E991* *E172* *E221* 11657:let {var-name} =<< [trim] {endmarker} 11658text... 11659text... 11660{endmarker} 11661 Set internal variable {var-name} to a List containing 11662 the lines of text bounded by the string {endmarker}. 11663 {endmarker} must not contain white space. 11664 {endmarker} cannot start with a lower case character. 11665 The last line should end only with the {endmarker} 11666 string without any other character. Watch out for 11667 white space after {endmarker}! 11668 11669 Without "trim" any white space characters in the lines 11670 of text are preserved. If "trim" is specified before 11671 {endmarker}, then indentation is stripped so you can 11672 do: > 11673 let text =<< trim END 11674 if ok 11675 echo 'done' 11676 endif 11677 END 11678< Results in: ["if ok", " echo 'done'", "endif"] 11679 The marker must line up with "let" and the indentation 11680 of the first line is removed from all the text lines. 11681 Specifically: all the leading indentation exactly 11682 matching the leading indentation of the first 11683 non-empty text line is stripped from the input lines. 11684 All leading indentation exactly matching the leading 11685 indentation before `let` is stripped from the line 11686 containing {endmarker}. Note that the difference 11687 between space and tab matters here. 11688 11689 If {var-name} didn't exist yet, it is created. 11690 Cannot be followed by another command, but can be 11691 followed by a comment. 11692 11693 To avoid line continuation to be applied, consider 11694 adding 'C' to 'cpoptions': > 11695 set cpo+=C 11696 let var =<< END 11697 \ leading backslash 11698 END 11699 set cpo-=C 11700< 11701 Examples: > 11702 let var1 =<< END 11703 Sample text 1 11704 Sample text 2 11705 Sample text 3 11706 END 11707 11708 let data =<< trim DATA 11709 1 2 3 4 11710 5 6 7 8 11711 DATA 11712< 11713 *E121* 11714:let {var-name} .. List the value of variable {var-name}. Multiple 11715 variable names may be given. Special names recognized 11716 here: *E738* 11717 g: global variables 11718 b: local buffer variables 11719 w: local window variables 11720 t: local tab page variables 11721 s: script-local variables 11722 l: local function variables 11723 v: Vim variables. 11724 11725:let List the values of all variables. The type of the 11726 variable is indicated before the value: 11727 <nothing> String 11728 # Number 11729 * Funcref 11730 11731:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795* 11732 Remove the internal variable {name}. Several variable 11733 names can be given, they are all removed. The name 11734 may also be a |List| or |Dictionary| item. 11735 With [!] no error message is given for non-existing 11736 variables. 11737 One or more items from a |List| can be removed: > 11738 :unlet list[3] " remove fourth item 11739 :unlet list[3:] " remove fourth item to last 11740< One item from a |Dictionary| can be removed at a time: > 11741 :unlet dict['two'] 11742 :unlet dict.two 11743< This is especially useful to clean up used global 11744 variables and script-local variables (these are not 11745 deleted when the script ends). Function-local 11746 variables are automatically deleted when the function 11747 ends. 11748 11749:unl[et] ${env-name} ... *:unlet-environment* *:unlet-$* 11750 Remove environment variable {env-name}. 11751 Can mix {name} and ${env-name} in one :unlet command. 11752 No error message is given for a non-existing 11753 variable, also without !. 11754 If the system does not support deleting an environment 11755 variable, it is made empty. 11756 11757 *:cons* *:const* 11758:cons[t] {var-name} = {expr1} 11759:cons[t] [{name1}, {name2}, ...] = {expr1} 11760:cons[t] [{name}, ..., ; {lastname}] = {expr1} 11761:cons[t] {var-name} =<< [trim] {marker} 11762text... 11763text... 11764{marker} 11765 Similar to |:let|, but additionally lock the variable 11766 after setting the value. This is the same as locking 11767 the variable with |:lockvar| just after |:let|, thus: > 11768 :const x = 1 11769< is equivalent to: > 11770 :let x = 1 11771 :lockvar 1 x 11772< This is useful if you want to make sure the variable 11773 is not modified. 11774 *E995* 11775 |:const| does not allow to for changing a variable: > 11776 :let x = 1 11777 :const x = 2 " Error! 11778< *E996* 11779 Note that environment variables, option values and 11780 register values cannot be used here, since they cannot 11781 be locked. 11782 11783:cons[t] 11784:cons[t] {var-name} 11785 If no argument is given or only {var-name} is given, 11786 the behavior is the same as |:let|. 11787 11788:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv* 11789 Lock the internal variable {name}. Locking means that 11790 it can no longer be changed (until it is unlocked). 11791 A locked variable can be deleted: > 11792 :lockvar v 11793 :let v = 'asdf' " fails! 11794 :unlet v 11795< *E741* *E940* 11796 If you try to change a locked variable you get an 11797 error message: "E741: Value is locked: {name}". 11798 If you try to lock or unlock a built-in variable you 11799 get an error message: "E940: Cannot lock or unlock 11800 variable {name}". 11801 11802 [depth] is relevant when locking a |List| or 11803 |Dictionary|. It specifies how deep the locking goes: 11804 1 Lock the |List| or |Dictionary| itself, 11805 cannot add or remove items, but can 11806 still change their values. 11807 2 Also lock the values, cannot change 11808 the items. If an item is a |List| or 11809 |Dictionary|, cannot add or remove 11810 items, but can still change the 11811 values. 11812 3 Like 2 but for the |List| / 11813 |Dictionary| in the |List| / 11814 |Dictionary|, one level deeper. 11815 The default [depth] is 2, thus when {name} is a |List| 11816 or |Dictionary| the values cannot be changed. 11817 *E743* 11818 For unlimited depth use [!] and omit [depth]. 11819 However, there is a maximum depth of 100 to catch 11820 loops. 11821 11822 Note that when two variables refer to the same |List| 11823 and you lock one of them, the |List| will also be 11824 locked when used through the other variable. 11825 Example: > 11826 :let l = [0, 1, 2, 3] 11827 :let cl = l 11828 :lockvar l 11829 :let cl[1] = 99 " won't work! 11830< You may want to make a copy of a list to avoid this. 11831 See |deepcopy()|. 11832 11833 11834:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo* 11835 Unlock the internal variable {name}. Does the 11836 opposite of |:lockvar|. 11837 11838:if {expr1} *:if* *:end* *:endif* *:en* *E171* *E579* *E580* 11839:en[dif] Execute the commands until the next matching ":else" 11840 or ":endif" if {expr1} evaluates to non-zero. 11841 11842 From Vim version 4.5 until 5.0, every Ex command in 11843 between the ":if" and ":endif" is ignored. These two 11844 commands were just to allow for future expansions in a 11845 backward compatible way. Nesting was allowed. Note 11846 that any ":else" or ":elseif" was ignored, the "else" 11847 part was not executed either. 11848 11849 You can use this to remain compatible with older 11850 versions: > 11851 :if version >= 500 11852 : version-5-specific-commands 11853 :endif 11854< The commands still need to be parsed to find the 11855 "endif". Sometimes an older Vim has a problem with a 11856 new command. For example, ":silent" is recognized as 11857 a ":substitute" command. In that case ":execute" can 11858 avoid problems: > 11859 :if version >= 600 11860 : execute "silent 1,$delete" 11861 :endif 11862< 11863 NOTE: The ":append" and ":insert" commands don't work 11864 properly in between ":if" and ":endif". 11865 11866 *:else* *:el* *E581* *E583* 11867:el[se] Execute the commands until the next matching ":else" 11868 or ":endif" if they previously were not being 11869 executed. 11870 11871 *:elseif* *:elsei* *E582* *E584* 11872:elsei[f] {expr1} Short for ":else" ":if", with the addition that there 11873 is no extra ":endif". 11874 11875:wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw* 11876 *E170* *E585* *E588* *E733* 11877:endw[hile] Repeat the commands between ":while" and ":endwhile", 11878 as long as {expr1} evaluates to non-zero. 11879 When an error is detected from a command inside the 11880 loop, execution continues after the "endwhile". 11881 Example: > 11882 :let lnum = 1 11883 :while lnum <= line("$") 11884 :call FixLine(lnum) 11885 :let lnum = lnum + 1 11886 :endwhile 11887< 11888 NOTE: The ":append" and ":insert" commands don't work 11889 properly inside a ":while" and ":for" loop. 11890 11891:for {var} in {object} *:for* *E690* *E732* 11892:endfo[r] *:endfo* *:endfor* 11893 Repeat the commands between ":for" and ":endfor" for 11894 each item in {object}. {object} can be a |List| or 11895 a |Blob|. Variable {var} is set to the value of each 11896 item. When an error is detected for a command inside 11897 the loop, execution continues after the "endfor". 11898 Changing {object} inside the loop affects what items 11899 are used. Make a copy if this is unwanted: > 11900 :for item in copy(mylist) 11901< 11902 When {object} is a |List| and not making a copy, Vim 11903 stores a reference to the next item in the |List| 11904 before executing the commands with the current item. 11905 Thus the current item can be removed without effect. 11906 Removing any later item means it will not be found. 11907 Thus the following example works (an inefficient way 11908 to make a |List| empty): > 11909 for item in mylist 11910 call remove(mylist, 0) 11911 endfor 11912< Note that reordering the |List| (e.g., with sort() or 11913 reverse()) may have unexpected effects. 11914 11915 When {object} is a |Blob|, Vim always makes a copy to 11916 iterate over. Unlike with |List|, modifying the 11917 |Blob| does not affect the iteration. 11918 11919:for [{var1}, {var2}, ...] in {listlist} 11920:endfo[r] 11921 Like ":for" above, but each item in {listlist} must be 11922 a list, of which each item is assigned to {var1}, 11923 {var2}, etc. Example: > 11924 :for [lnum, col] in [[1, 3], [2, 5], [3, 8]] 11925 :echo getline(lnum)[col] 11926 :endfor 11927< 11928 *:continue* *:con* *E586* 11929:con[tinue] When used inside a ":while" or ":for" loop, jumps back 11930 to the start of the loop. 11931 If it is used after a |:try| inside the loop but 11932 before the matching |:finally| (if present), the 11933 commands following the ":finally" up to the matching 11934 |:endtry| are executed first. This process applies to 11935 all nested ":try"s inside the loop. The outermost 11936 ":endtry" then jumps back to the start of the loop. 11937 11938 *:break* *:brea* *E587* 11939:brea[k] When used inside a ":while" or ":for" loop, skips to 11940 the command after the matching ":endwhile" or 11941 ":endfor". 11942 If it is used after a |:try| inside the loop but 11943 before the matching |:finally| (if present), the 11944 commands following the ":finally" up to the matching 11945 |:endtry| are executed first. This process applies to 11946 all nested ":try"s inside the loop. The outermost 11947 ":endtry" then jumps to the command after the loop. 11948 11949:try *:try* *:endt* *:endtry* *E600* *E601* *E602* 11950:endt[ry] Change the error handling for the commands between 11951 ":try" and ":endtry" including everything being 11952 executed across ":source" commands, function calls, 11953 or autocommand invocations. 11954 11955 When an error or interrupt is detected and there is 11956 a |:finally| command following, execution continues 11957 after the ":finally". Otherwise, or when the 11958 ":endtry" is reached thereafter, the next 11959 (dynamically) surrounding ":try" is checked for 11960 a corresponding ":finally" etc. Then the script 11961 processing is terminated. Whether a function 11962 definition has an "abort" argument does not matter. 11963 Example: > 11964 try | call Unknown() | finally | echomsg "cleanup" | endtry 11965 echomsg "not reached" 11966< 11967 Moreover, an error or interrupt (dynamically) inside 11968 ":try" and ":endtry" is converted to an exception. It 11969 can be caught as if it were thrown by a |:throw| 11970 command (see |:catch|). In this case, the script 11971 processing is not terminated. 11972 11973 The value "Vim:Interrupt" is used for an interrupt 11974 exception. An error in a Vim command is converted 11975 to a value of the form "Vim({command}):{errmsg}", 11976 other errors are converted to a value of the form 11977 "Vim:{errmsg}". {command} is the full command name, 11978 and {errmsg} is the message that is displayed if the 11979 error exception is not caught, always beginning with 11980 the error number. 11981 Examples: > 11982 try | sleep 100 | catch /^Vim:Interrupt$/ | endtry 11983 try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry 11984< 11985 *:cat* *:catch* *E603* *E604* *E605* 11986:cat[ch] /{pattern}/ The following commands until the next |:catch|, 11987 |:finally|, or |:endtry| that belongs to the same 11988 |:try| as the ":catch" are executed when an exception 11989 matching {pattern} is being thrown and has not yet 11990 been caught by a previous ":catch". Otherwise, these 11991 commands are skipped. 11992 When {pattern} is omitted all errors are caught. 11993 Examples: > 11994 :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C) 11995 :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors 11996 :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts 11997 :catch /^Vim(write):/ " catch all errors in :write 11998 :catch /^Vim\%((\a\+)\)\=:E123:/ " catch error E123 11999 :catch /my-exception/ " catch user exception 12000 :catch /.*/ " catch everything 12001 :catch " same as /.*/ 12002< 12003 Another character can be used instead of / around the 12004 {pattern}, so long as it does not have a special 12005 meaning (e.g., '|' or '"') and doesn't occur inside 12006 {pattern}. 12007 Information about the exception is available in 12008 |v:exception|. Also see |throw-variables|. 12009 NOTE: It is not reliable to ":catch" the TEXT of 12010 an error message because it may vary in different 12011 locales. 12012 12013 *:fina* *:finally* *E606* *E607* 12014:fina[lly] The following commands until the matching |:endtry| 12015 are executed whenever the part between the matching 12016 |:try| and the ":finally" is left: either by falling 12017 through to the ":finally" or by a |:continue|, 12018 |:break|, |:finish|, or |:return|, or by an error or 12019 interrupt or exception (see |:throw|). 12020 12021 *:th* *:throw* *E608* 12022:th[row] {expr1} The {expr1} is evaluated and thrown as an exception. 12023 If the ":throw" is used after a |:try| but before the 12024 first corresponding |:catch|, commands are skipped 12025 until the first ":catch" matching {expr1} is reached. 12026 If there is no such ":catch" or if the ":throw" is 12027 used after a ":catch" but before the |:finally|, the 12028 commands following the ":finally" (if present) up to 12029 the matching |:endtry| are executed. If the ":throw" 12030 is after the ":finally", commands up to the ":endtry" 12031 are skipped. At the ":endtry", this process applies 12032 again for the next dynamically surrounding ":try" 12033 (which may be found in a calling function or sourcing 12034 script), until a matching ":catch" has been found. 12035 If the exception is not caught, the command processing 12036 is terminated. 12037 Example: > 12038 :try | throw "oops" | catch /^oo/ | echo "caught" | endtry 12039< Note that "catch" may need to be on a separate line 12040 for when an error causes the parsing to skip the whole 12041 line and not see the "|" that separates the commands. 12042 12043 *:ec* *:echo* 12044:ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The 12045 first {expr1} starts on a new line. 12046 Also see |:comment|. 12047 Use "\n" to start a new line. Use "\r" to move the 12048 cursor to the first column. 12049 Uses the highlighting set by the |:echohl| command. 12050 Cannot be followed by a comment. 12051 Example: > 12052 :echo "the value of 'shell' is" &shell 12053< *:echo-redraw* 12054 A later redraw may make the message disappear again. 12055 And since Vim mostly postpones redrawing until it's 12056 finished with a sequence of commands this happens 12057 quite often. To avoid that a command from before the 12058 ":echo" causes a redraw afterwards (redraws are often 12059 postponed until you type something), force a redraw 12060 with the |:redraw| command. Example: > 12061 :new | redraw | echo "there is a new window" 12062< 12063 *:echon* 12064:echon {expr1} .. Echoes each {expr1}, without anything added. Also see 12065 |:comment|. 12066 Uses the highlighting set by the |:echohl| command. 12067 Cannot be followed by a comment. 12068 Example: > 12069 :echon "the value of 'shell' is " &shell 12070< 12071 Note the difference between using ":echo", which is a 12072 Vim command, and ":!echo", which is an external shell 12073 command: > 12074 :!echo % --> filename 12075< The arguments of ":!" are expanded, see |:_%|. > 12076 :!echo "%" --> filename or "filename" 12077< Like the previous example. Whether you see the double 12078 quotes or not depends on your 'shell'. > 12079 :echo % --> nothing 12080< The '%' is an illegal character in an expression. > 12081 :echo "%" --> % 12082< This just echoes the '%' character. > 12083 :echo expand("%") --> filename 12084< This calls the expand() function to expand the '%'. 12085 12086 *:echoh* *:echohl* 12087:echoh[l] {name} Use the highlight group {name} for the following 12088 |:echo|, |:echon| and |:echomsg| commands. Also used 12089 for the |input()| prompt. Example: > 12090 :echohl WarningMsg | echo "Don't panic!" | echohl None 12091< Don't forget to set the group back to "None", 12092 otherwise all following echo's will be highlighted. 12093 12094 *:echom* *:echomsg* 12095:echom[sg] {expr1} .. Echo the expression(s) as a true message, saving the 12096 message in the |message-history|. 12097 Spaces are placed between the arguments as with the 12098 |:echo| command. But unprintable characters are 12099 displayed, not interpreted. 12100 The parsing works slightly different from |:echo|, 12101 more like |:execute|. All the expressions are first 12102 evaluated and concatenated before echoing anything. 12103 If expressions does not evaluate to a Number or 12104 String, string() is used to turn it into a string. 12105 Uses the highlighting set by the |:echohl| command. 12106 Example: > 12107 :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see." 12108< See |:echo-redraw| to avoid the message disappearing 12109 when the screen is redrawn. 12110 *:echoe* *:echoerr* 12111:echoe[rr] {expr1} .. Echo the expression(s) as an error message, saving the 12112 message in the |message-history|. When used in a 12113 script or function the line number will be added. 12114 Spaces are placed between the arguments as with the 12115 |:echomsg| command. When used inside a try conditional, 12116 the message is raised as an error exception instead 12117 (see |try-echoerr|). 12118 Example: > 12119 :echoerr "This script just failed!" 12120< If you just want a highlighted message use |:echohl|. 12121 And to get a beep: > 12122 :exe "normal \<Esc>" 12123< 12124 *:eval* 12125:eval {expr} Evaluate {expr} and discard the result. Example: > 12126 :eval Getlist()->Filter()->append('$') 12127 12128< The expression is supposed to have a side effect, 12129 since the resulting value is not used. In the example 12130 the `append()` call appends the List with text to the 12131 buffer. This is similar to `:call` but works with any 12132 expression. 12133 12134 The command can be shortened to `:ev` or `:eva`, but 12135 these are hard to recognize and therefore not to be 12136 used. 12137 12138 The command cannot be followed by "|" and another 12139 command, since "|" is seen as part of the expression. 12140 12141 12142 *:exe* *:execute* 12143:exe[cute] {expr1} .. Executes the string that results from the evaluation 12144 of {expr1} as an Ex command. 12145 Multiple arguments are concatenated, with a space in 12146 between. To avoid the extra space use the "." 12147 operator to concatenate strings into one argument. 12148 {expr1} is used as the processed command, command line 12149 editing keys are not recognized. 12150 Cannot be followed by a comment. 12151 Examples: > 12152 :execute "buffer" nextbuf 12153 :execute "normal" count . "w" 12154< 12155 ":execute" can be used to append a command to commands 12156 that don't accept a '|'. Example: > 12157 :execute '!ls' | echo "theend" 12158 12159< ":execute" is also a nice way to avoid having to type 12160 control characters in a Vim script for a ":normal" 12161 command: > 12162 :execute "normal ixxx\<Esc>" 12163< This has an <Esc> character, see |expr-string|. 12164 12165 Be careful to correctly escape special characters in 12166 file names. The |fnameescape()| function can be used 12167 for Vim commands, |shellescape()| for |:!| commands. 12168 Examples: > 12169 :execute "e " . fnameescape(filename) 12170 :execute "!ls " . shellescape(filename, 1) 12171< 12172 Note: The executed string may be any command-line, but 12173 starting or ending "if", "while" and "for" does not 12174 always work, because when commands are skipped the 12175 ":execute" is not evaluated and Vim loses track of 12176 where blocks start and end. Also "break" and 12177 "continue" should not be inside ":execute". 12178 This example does not work, because the ":execute" is 12179 not evaluated and Vim does not see the "while", and 12180 gives an error for finding an ":endwhile": > 12181 :if 0 12182 : execute 'while i > 5' 12183 : echo "test" 12184 : endwhile 12185 :endif 12186< 12187 It is allowed to have a "while" or "if" command 12188 completely in the executed string: > 12189 :execute 'while i < 5 | echo i | let i = i + 1 | endwhile' 12190< 12191 12192 *:exe-comment* 12193 ":execute", ":echo" and ":echon" cannot be followed by 12194 a comment directly, because they see the '"' as the 12195 start of a string. But, you can use '|' followed by a 12196 comment. Example: > 12197 :echo "foo" | "this is a comment 12198 12199============================================================================== 122008. Exception handling *exception-handling* 12201 12202The Vim script language comprises an exception handling feature. This section 12203explains how it can be used in a Vim script. 12204 12205Exceptions may be raised by Vim on an error or on interrupt, see 12206|catch-errors| and |catch-interrupt|. You can also explicitly throw an 12207exception by using the ":throw" command, see |throw-catch|. 12208 12209 12210TRY CONDITIONALS *try-conditionals* 12211 12212Exceptions can be caught or can cause cleanup code to be executed. You can 12213use a try conditional to specify catch clauses (that catch exceptions) and/or 12214a finally clause (to be executed for cleanup). 12215 A try conditional begins with a |:try| command and ends at the matching 12216|:endtry| command. In between, you can use a |:catch| command to start 12217a catch clause, or a |:finally| command to start a finally clause. There may 12218be none or multiple catch clauses, but there is at most one finally clause, 12219which must not be followed by any catch clauses. The lines before the catch 12220clauses and the finally clause is called a try block. > 12221 12222 :try 12223 : ... 12224 : ... TRY BLOCK 12225 : ... 12226 :catch /{pattern}/ 12227 : ... 12228 : ... CATCH CLAUSE 12229 : ... 12230 :catch /{pattern}/ 12231 : ... 12232 : ... CATCH CLAUSE 12233 : ... 12234 :finally 12235 : ... 12236 : ... FINALLY CLAUSE 12237 : ... 12238 :endtry 12239 12240The try conditional allows to watch code for exceptions and to take the 12241appropriate actions. Exceptions from the try block may be caught. Exceptions 12242from the try block and also the catch clauses may cause cleanup actions. 12243 When no exception is thrown during execution of the try block, the control 12244is transferred to the finally clause, if present. After its execution, the 12245script continues with the line following the ":endtry". 12246 When an exception occurs during execution of the try block, the remaining 12247lines in the try block are skipped. The exception is matched against the 12248patterns specified as arguments to the ":catch" commands. The catch clause 12249after the first matching ":catch" is taken, other catch clauses are not 12250executed. The catch clause ends when the next ":catch", ":finally", or 12251":endtry" command is reached - whatever is first. Then, the finally clause 12252(if present) is executed. When the ":endtry" is reached, the script execution 12253continues in the following line as usual. 12254 When an exception that does not match any of the patterns specified by the 12255":catch" commands is thrown in the try block, the exception is not caught by 12256that try conditional and none of the catch clauses is executed. Only the 12257finally clause, if present, is taken. The exception pends during execution of 12258the finally clause. It is resumed at the ":endtry", so that commands after 12259the ":endtry" are not executed and the exception might be caught elsewhere, 12260see |try-nesting|. 12261 When during execution of a catch clause another exception is thrown, the 12262remaining lines in that catch clause are not executed. The new exception is 12263not matched against the patterns in any of the ":catch" commands of the same 12264try conditional and none of its catch clauses is taken. If there is, however, 12265a finally clause, it is executed, and the exception pends during its 12266execution. The commands following the ":endtry" are not executed. The new 12267exception might, however, be caught elsewhere, see |try-nesting|. 12268 When during execution of the finally clause (if present) an exception is 12269thrown, the remaining lines in the finally clause are skipped. If the finally 12270clause has been taken because of an exception from the try block or one of the 12271catch clauses, the original (pending) exception is discarded. The commands 12272following the ":endtry" are not executed, and the exception from the finally 12273clause is propagated and can be caught elsewhere, see |try-nesting|. 12274 12275The finally clause is also executed, when a ":break" or ":continue" for 12276a ":while" loop enclosing the complete try conditional is executed from the 12277try block or a catch clause. Or when a ":return" or ":finish" is executed 12278from the try block or a catch clause of a try conditional in a function or 12279sourced script, respectively. The ":break", ":continue", ":return", or 12280":finish" pends during execution of the finally clause and is resumed when the 12281":endtry" is reached. It is, however, discarded when an exception is thrown 12282from the finally clause. 12283 When a ":break" or ":continue" for a ":while" loop enclosing the complete 12284try conditional or when a ":return" or ":finish" is encountered in the finally 12285clause, the rest of the finally clause is skipped, and the ":break", 12286":continue", ":return" or ":finish" is executed as usual. If the finally 12287clause has been taken because of an exception or an earlier ":break", 12288":continue", ":return", or ":finish" from the try block or a catch clause, 12289this pending exception or command is discarded. 12290 12291For examples see |throw-catch| and |try-finally|. 12292 12293 12294NESTING OF TRY CONDITIONALS *try-nesting* 12295 12296Try conditionals can be nested arbitrarily. That is, a complete try 12297conditional can be put into the try block, a catch clause, or the finally 12298clause of another try conditional. If the inner try conditional does not 12299catch an exception thrown in its try block or throws a new exception from one 12300of its catch clauses or its finally clause, the outer try conditional is 12301checked according to the rules above. If the inner try conditional is in the 12302try block of the outer try conditional, its catch clauses are checked, but 12303otherwise only the finally clause is executed. It does not matter for 12304nesting, whether the inner try conditional is directly contained in the outer 12305one, or whether the outer one sources a script or calls a function containing 12306the inner try conditional. 12307 12308When none of the active try conditionals catches an exception, just their 12309finally clauses are executed. Thereafter, the script processing terminates. 12310An error message is displayed in case of an uncaught exception explicitly 12311thrown by a ":throw" command. For uncaught error and interrupt exceptions 12312implicitly raised by Vim, the error message(s) or interrupt message are shown 12313as usual. 12314 12315For examples see |throw-catch|. 12316 12317 12318EXAMINING EXCEPTION HANDLING CODE *except-examine* 12319 12320Exception handling code can get tricky. If you are in doubt what happens, set 12321'verbose' to 13 or use the ":13verbose" command modifier when sourcing your 12322script file. Then you see when an exception is thrown, discarded, caught, or 12323finished. When using a verbosity level of at least 14, things pending in 12324a finally clause are also shown. This information is also given in debug mode 12325(see |debug-scripts|). 12326 12327 12328THROWING AND CATCHING EXCEPTIONS *throw-catch* 12329 12330You can throw any number or string as an exception. Use the |:throw| command 12331and pass the value to be thrown as argument: > 12332 :throw 4711 12333 :throw "string" 12334< *throw-expression* 12335You can also specify an expression argument. The expression is then evaluated 12336first, and the result is thrown: > 12337 :throw 4705 + strlen("string") 12338 :throw strpart("strings", 0, 6) 12339 12340An exception might be thrown during evaluation of the argument of the ":throw" 12341command. Unless it is caught there, the expression evaluation is abandoned. 12342The ":throw" command then does not throw a new exception. 12343 Example: > 12344 12345 :function! Foo(arg) 12346 : try 12347 : throw a:arg 12348 : catch /foo/ 12349 : endtry 12350 : return 1 12351 :endfunction 12352 : 12353 :function! Bar() 12354 : echo "in Bar" 12355 : return 4710 12356 :endfunction 12357 : 12358 :throw Foo("arrgh") + Bar() 12359 12360This throws "arrgh", and "in Bar" is not displayed since Bar() is not 12361executed. > 12362 :throw Foo("foo") + Bar() 12363however displays "in Bar" and throws 4711. 12364 12365Any other command that takes an expression as argument might also be 12366abandoned by an (uncaught) exception during the expression evaluation. The 12367exception is then propagated to the caller of the command. 12368 Example: > 12369 12370 :if Foo("arrgh") 12371 : echo "then" 12372 :else 12373 : echo "else" 12374 :endif 12375 12376Here neither of "then" or "else" is displayed. 12377 12378 *catch-order* 12379Exceptions can be caught by a try conditional with one or more |:catch| 12380commands, see |try-conditionals|. The values to be caught by each ":catch" 12381command can be specified as a pattern argument. The subsequent catch clause 12382gets executed when a matching exception is caught. 12383 Example: > 12384 12385 :function! Foo(value) 12386 : try 12387 : throw a:value 12388 : catch /^\d\+$/ 12389 : echo "Number thrown" 12390 : catch /.*/ 12391 : echo "String thrown" 12392 : endtry 12393 :endfunction 12394 : 12395 :call Foo(0x1267) 12396 :call Foo('string') 12397 12398The first call to Foo() displays "Number thrown", the second "String thrown". 12399An exception is matched against the ":catch" commands in the order they are 12400specified. Only the first match counts. So you should place the more 12401specific ":catch" first. The following order does not make sense: > 12402 12403 : catch /.*/ 12404 : echo "String thrown" 12405 : catch /^\d\+$/ 12406 : echo "Number thrown" 12407 12408The first ":catch" here matches always, so that the second catch clause is 12409never taken. 12410 12411 *throw-variables* 12412If you catch an exception by a general pattern, you may access the exact value 12413in the variable |v:exception|: > 12414 12415 : catch /^\d\+$/ 12416 : echo "Number thrown. Value is" v:exception 12417 12418You may also be interested where an exception was thrown. This is stored in 12419|v:throwpoint|. Note that "v:exception" and "v:throwpoint" are valid for the 12420exception most recently caught as long it is not finished. 12421 Example: > 12422 12423 :function! Caught() 12424 : if v:exception != "" 12425 : echo 'Caught "' . v:exception . '" in ' . v:throwpoint 12426 : else 12427 : echo 'Nothing caught' 12428 : endif 12429 :endfunction 12430 : 12431 :function! Foo() 12432 : try 12433 : try 12434 : try 12435 : throw 4711 12436 : finally 12437 : call Caught() 12438 : endtry 12439 : catch /.*/ 12440 : call Caught() 12441 : throw "oops" 12442 : endtry 12443 : catch /.*/ 12444 : call Caught() 12445 : finally 12446 : call Caught() 12447 : endtry 12448 :endfunction 12449 : 12450 :call Foo() 12451 12452This displays > 12453 12454 Nothing caught 12455 Caught "4711" in function Foo, line 4 12456 Caught "oops" in function Foo, line 10 12457 Nothing caught 12458 12459A practical example: The following command ":LineNumber" displays the line 12460number in the script or function where it has been used: > 12461 12462 :function! LineNumber() 12463 : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "") 12464 :endfunction 12465 :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry 12466< 12467 *try-nested* 12468An exception that is not caught by a try conditional can be caught by 12469a surrounding try conditional: > 12470 12471 :try 12472 : try 12473 : throw "foo" 12474 : catch /foobar/ 12475 : echo "foobar" 12476 : finally 12477 : echo "inner finally" 12478 : endtry 12479 :catch /foo/ 12480 : echo "foo" 12481 :endtry 12482 12483The inner try conditional does not catch the exception, just its finally 12484clause is executed. The exception is then caught by the outer try 12485conditional. The example displays "inner finally" and then "foo". 12486 12487 *throw-from-catch* 12488You can catch an exception and throw a new one to be caught elsewhere from the 12489catch clause: > 12490 12491 :function! Foo() 12492 : throw "foo" 12493 :endfunction 12494 : 12495 :function! Bar() 12496 : try 12497 : call Foo() 12498 : catch /foo/ 12499 : echo "Caught foo, throw bar" 12500 : throw "bar" 12501 : endtry 12502 :endfunction 12503 : 12504 :try 12505 : call Bar() 12506 :catch /.*/ 12507 : echo "Caught" v:exception 12508 :endtry 12509 12510This displays "Caught foo, throw bar" and then "Caught bar". 12511 12512 *rethrow* 12513There is no real rethrow in the Vim script language, but you may throw 12514"v:exception" instead: > 12515 12516 :function! Bar() 12517 : try 12518 : call Foo() 12519 : catch /.*/ 12520 : echo "Rethrow" v:exception 12521 : throw v:exception 12522 : endtry 12523 :endfunction 12524< *try-echoerr* 12525Note that this method cannot be used to "rethrow" Vim error or interrupt 12526exceptions, because it is not possible to fake Vim internal exceptions. 12527Trying so causes an error exception. You should throw your own exception 12528denoting the situation. If you want to cause a Vim error exception containing 12529the original error exception value, you can use the |:echoerr| command: > 12530 12531 :try 12532 : try 12533 : asdf 12534 : catch /.*/ 12535 : echoerr v:exception 12536 : endtry 12537 :catch /.*/ 12538 : echo v:exception 12539 :endtry 12540 12541This code displays 12542 12543 Vim(echoerr):Vim:E492: Not an editor command: asdf ~ 12544 12545 12546CLEANUP CODE *try-finally* 12547 12548Scripts often change global settings and restore them at their end. If the 12549user however interrupts the script by pressing CTRL-C, the settings remain in 12550an inconsistent state. The same may happen to you in the development phase of 12551a script when an error occurs or you explicitly throw an exception without 12552catching it. You can solve these problems by using a try conditional with 12553a finally clause for restoring the settings. Its execution is guaranteed on 12554normal control flow, on error, on an explicit ":throw", and on interrupt. 12555(Note that errors and interrupts from inside the try conditional are converted 12556to exceptions. When not caught, they terminate the script after the finally 12557clause has been executed.) 12558Example: > 12559 12560 :try 12561 : let s:saved_ts = &ts 12562 : set ts=17 12563 : 12564 : " Do the hard work here. 12565 : 12566 :finally 12567 : let &ts = s:saved_ts 12568 : unlet s:saved_ts 12569 :endtry 12570 12571This method should be used locally whenever a function or part of a script 12572changes global settings which need to be restored on failure or normal exit of 12573that function or script part. 12574 12575 *break-finally* 12576Cleanup code works also when the try block or a catch clause is left by 12577a ":continue", ":break", ":return", or ":finish". 12578 Example: > 12579 12580 :let first = 1 12581 :while 1 12582 : try 12583 : if first 12584 : echo "first" 12585 : let first = 0 12586 : continue 12587 : else 12588 : throw "second" 12589 : endif 12590 : catch /.*/ 12591 : echo v:exception 12592 : break 12593 : finally 12594 : echo "cleanup" 12595 : endtry 12596 : echo "still in while" 12597 :endwhile 12598 :echo "end" 12599 12600This displays "first", "cleanup", "second", "cleanup", and "end". > 12601 12602 :function! Foo() 12603 : try 12604 : return 4711 12605 : finally 12606 : echo "cleanup\n" 12607 : endtry 12608 : echo "Foo still active" 12609 :endfunction 12610 : 12611 :echo Foo() "returned by Foo" 12612 12613This displays "cleanup" and "4711 returned by Foo". You don't need to add an 12614extra ":return" in the finally clause. (Above all, this would override the 12615return value.) 12616 12617 *except-from-finally* 12618Using either of ":continue", ":break", ":return", ":finish", or ":throw" in 12619a finally clause is possible, but not recommended since it abandons the 12620cleanup actions for the try conditional. But, of course, interrupt and error 12621exceptions might get raised from a finally clause. 12622 Example where an error in the finally clause stops an interrupt from 12623working correctly: > 12624 12625 :try 12626 : try 12627 : echo "Press CTRL-C for interrupt" 12628 : while 1 12629 : endwhile 12630 : finally 12631 : unlet novar 12632 : endtry 12633 :catch /novar/ 12634 :endtry 12635 :echo "Script still running" 12636 :sleep 1 12637 12638If you need to put commands that could fail into a finally clause, you should 12639think about catching or ignoring the errors in these commands, see 12640|catch-errors| and |ignore-errors|. 12641 12642 12643CATCHING ERRORS *catch-errors* 12644 12645If you want to catch specific errors, you just have to put the code to be 12646watched in a try block and add a catch clause for the error message. The 12647presence of the try conditional causes all errors to be converted to an 12648exception. No message is displayed and |v:errmsg| is not set then. To find 12649the right pattern for the ":catch" command, you have to know how the format of 12650the error exception is. 12651 Error exceptions have the following format: > 12652 12653 Vim({cmdname}):{errmsg} 12654or > 12655 Vim:{errmsg} 12656 12657{cmdname} is the name of the command that failed; the second form is used when 12658the command name is not known. {errmsg} is the error message usually produced 12659when the error occurs outside try conditionals. It always begins with 12660a capital "E", followed by a two or three-digit error number, a colon, and 12661a space. 12662 12663Examples: 12664 12665The command > 12666 :unlet novar 12667normally produces the error message > 12668 E108: No such variable: "novar" 12669which is converted inside try conditionals to an exception > 12670 Vim(unlet):E108: No such variable: "novar" 12671 12672The command > 12673 :dwim 12674normally produces the error message > 12675 E492: Not an editor command: dwim 12676which is converted inside try conditionals to an exception > 12677 Vim:E492: Not an editor command: dwim 12678 12679You can catch all ":unlet" errors by a > 12680 :catch /^Vim(unlet):/ 12681or all errors for misspelled command names by a > 12682 :catch /^Vim:E492:/ 12683 12684Some error messages may be produced by different commands: > 12685 :function nofunc 12686and > 12687 :delfunction nofunc 12688both produce the error message > 12689 E128: Function name must start with a capital: nofunc 12690which is converted inside try conditionals to an exception > 12691 Vim(function):E128: Function name must start with a capital: nofunc 12692or > 12693 Vim(delfunction):E128: Function name must start with a capital: nofunc 12694respectively. You can catch the error by its number independently on the 12695command that caused it if you use the following pattern: > 12696 :catch /^Vim(\a\+):E128:/ 12697 12698Some commands like > 12699 :let x = novar 12700produce multiple error messages, here: > 12701 E121: Undefined variable: novar 12702 E15: Invalid expression: novar 12703Only the first is used for the exception value, since it is the most specific 12704one (see |except-several-errors|). So you can catch it by > 12705 :catch /^Vim(\a\+):E121:/ 12706 12707You can catch all errors related to the name "nofunc" by > 12708 :catch /\<nofunc\>/ 12709 12710You can catch all Vim errors in the ":write" and ":read" commands by > 12711 :catch /^Vim(\(write\|read\)):E\d\+:/ 12712 12713You can catch all Vim errors by the pattern > 12714 :catch /^Vim\((\a\+)\)\=:E\d\+:/ 12715< 12716 *catch-text* 12717NOTE: You should never catch the error message text itself: > 12718 :catch /No such variable/ 12719only works in the English locale, but not when the user has selected 12720a different language by the |:language| command. It is however helpful to 12721cite the message text in a comment: > 12722 :catch /^Vim(\a\+):E108:/ " No such variable 12723 12724 12725IGNORING ERRORS *ignore-errors* 12726 12727You can ignore errors in a specific Vim command by catching them locally: > 12728 12729 :try 12730 : write 12731 :catch 12732 :endtry 12733 12734But you are strongly recommended NOT to use this simple form, since it could 12735catch more than you want. With the ":write" command, some autocommands could 12736be executed and cause errors not related to writing, for instance: > 12737 12738 :au BufWritePre * unlet novar 12739 12740There could even be such errors you are not responsible for as a script 12741writer: a user of your script might have defined such autocommands. You would 12742then hide the error from the user. 12743 It is much better to use > 12744 12745 :try 12746 : write 12747 :catch /^Vim(write):/ 12748 :endtry 12749 12750which only catches real write errors. So catch only what you'd like to ignore 12751intentionally. 12752 12753For a single command that does not cause execution of autocommands, you could 12754even suppress the conversion of errors to exceptions by the ":silent!" 12755command: > 12756 :silent! nunmap k 12757This works also when a try conditional is active. 12758 12759 12760CATCHING INTERRUPTS *catch-interrupt* 12761 12762When there are active try conditionals, an interrupt (CTRL-C) is converted to 12763the exception "Vim:Interrupt". You can catch it like every exception. The 12764script is not terminated, then. 12765 Example: > 12766 12767 :function! TASK1() 12768 : sleep 10 12769 :endfunction 12770 12771 :function! TASK2() 12772 : sleep 20 12773 :endfunction 12774 12775 :while 1 12776 : let command = input("Type a command: ") 12777 : try 12778 : if command == "" 12779 : continue 12780 : elseif command == "END" 12781 : break 12782 : elseif command == "TASK1" 12783 : call TASK1() 12784 : elseif command == "TASK2" 12785 : call TASK2() 12786 : else 12787 : echo "\nIllegal command:" command 12788 : continue 12789 : endif 12790 : catch /^Vim:Interrupt$/ 12791 : echo "\nCommand interrupted" 12792 : " Caught the interrupt. Continue with next prompt. 12793 : endtry 12794 :endwhile 12795 12796You can interrupt a task here by pressing CTRL-C; the script then asks for 12797a new command. If you press CTRL-C at the prompt, the script is terminated. 12798 12799For testing what happens when CTRL-C would be pressed on a specific line in 12800your script, use the debug mode and execute the |>quit| or |>interrupt| 12801command on that line. See |debug-scripts|. 12802 12803 12804CATCHING ALL *catch-all* 12805 12806The commands > 12807 12808 :catch /.*/ 12809 :catch // 12810 :catch 12811 12812catch everything, error exceptions, interrupt exceptions and exceptions 12813explicitly thrown by the |:throw| command. This is useful at the top level of 12814a script in order to catch unexpected things. 12815 Example: > 12816 12817 :try 12818 : 12819 : " do the hard work here 12820 : 12821 :catch /MyException/ 12822 : 12823 : " handle known problem 12824 : 12825 :catch /^Vim:Interrupt$/ 12826 : echo "Script interrupted" 12827 :catch /.*/ 12828 : echo "Internal error (" . v:exception . ")" 12829 : echo " - occurred at " . v:throwpoint 12830 :endtry 12831 :" end of script 12832 12833Note: Catching all might catch more things than you want. Thus, you are 12834strongly encouraged to catch only for problems that you can really handle by 12835specifying a pattern argument to the ":catch". 12836 Example: Catching all could make it nearly impossible to interrupt a script 12837by pressing CTRL-C: > 12838 12839 :while 1 12840 : try 12841 : sleep 1 12842 : catch 12843 : endtry 12844 :endwhile 12845 12846 12847EXCEPTIONS AND AUTOCOMMANDS *except-autocmd* 12848 12849Exceptions may be used during execution of autocommands. Example: > 12850 12851 :autocmd User x try 12852 :autocmd User x throw "Oops!" 12853 :autocmd User x catch 12854 :autocmd User x echo v:exception 12855 :autocmd User x endtry 12856 :autocmd User x throw "Arrgh!" 12857 :autocmd User x echo "Should not be displayed" 12858 : 12859 :try 12860 : doautocmd User x 12861 :catch 12862 : echo v:exception 12863 :endtry 12864 12865This displays "Oops!" and "Arrgh!". 12866 12867 *except-autocmd-Pre* 12868For some commands, autocommands get executed before the main action of the 12869command takes place. If an exception is thrown and not caught in the sequence 12870of autocommands, the sequence and the command that caused its execution are 12871abandoned and the exception is propagated to the caller of the command. 12872 Example: > 12873 12874 :autocmd BufWritePre * throw "FAIL" 12875 :autocmd BufWritePre * echo "Should not be displayed" 12876 : 12877 :try 12878 : write 12879 :catch 12880 : echo "Caught:" v:exception "from" v:throwpoint 12881 :endtry 12882 12883Here, the ":write" command does not write the file currently being edited (as 12884you can see by checking 'modified'), since the exception from the BufWritePre 12885autocommand abandons the ":write". The exception is then caught and the 12886script displays: > 12887 12888 Caught: FAIL from BufWrite Auto commands for "*" 12889< 12890 *except-autocmd-Post* 12891For some commands, autocommands get executed after the main action of the 12892command has taken place. If this main action fails and the command is inside 12893an active try conditional, the autocommands are skipped and an error exception 12894is thrown that can be caught by the caller of the command. 12895 Example: > 12896 12897 :autocmd BufWritePost * echo "File successfully written!" 12898 : 12899 :try 12900 : write /i/m/p/o/s/s/i/b/l/e 12901 :catch 12902 : echo v:exception 12903 :endtry 12904 12905This just displays: > 12906 12907 Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e) 12908 12909If you really need to execute the autocommands even when the main action 12910fails, trigger the event from the catch clause. 12911 Example: > 12912 12913 :autocmd BufWritePre * set noreadonly 12914 :autocmd BufWritePost * set readonly 12915 : 12916 :try 12917 : write /i/m/p/o/s/s/i/b/l/e 12918 :catch 12919 : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e 12920 :endtry 12921< 12922You can also use ":silent!": > 12923 12924 :let x = "ok" 12925 :let v:errmsg = "" 12926 :autocmd BufWritePost * if v:errmsg != "" 12927 :autocmd BufWritePost * let x = "after fail" 12928 :autocmd BufWritePost * endif 12929 :try 12930 : silent! write /i/m/p/o/s/s/i/b/l/e 12931 :catch 12932 :endtry 12933 :echo x 12934 12935This displays "after fail". 12936 12937If the main action of the command does not fail, exceptions from the 12938autocommands will be catchable by the caller of the command: > 12939 12940 :autocmd BufWritePost * throw ":-(" 12941 :autocmd BufWritePost * echo "Should not be displayed" 12942 : 12943 :try 12944 : write 12945 :catch 12946 : echo v:exception 12947 :endtry 12948< 12949 *except-autocmd-Cmd* 12950For some commands, the normal action can be replaced by a sequence of 12951autocommands. Exceptions from that sequence will be catchable by the caller 12952of the command. 12953 Example: For the ":write" command, the caller cannot know whether the file 12954had actually been written when the exception occurred. You need to tell it in 12955some way. > 12956 12957 :if !exists("cnt") 12958 : let cnt = 0 12959 : 12960 : autocmd BufWriteCmd * if &modified 12961 : autocmd BufWriteCmd * let cnt = cnt + 1 12962 : autocmd BufWriteCmd * if cnt % 3 == 2 12963 : autocmd BufWriteCmd * throw "BufWriteCmdError" 12964 : autocmd BufWriteCmd * endif 12965 : autocmd BufWriteCmd * write | set nomodified 12966 : autocmd BufWriteCmd * if cnt % 3 == 0 12967 : autocmd BufWriteCmd * throw "BufWriteCmdError" 12968 : autocmd BufWriteCmd * endif 12969 : autocmd BufWriteCmd * echo "File successfully written!" 12970 : autocmd BufWriteCmd * endif 12971 :endif 12972 : 12973 :try 12974 : write 12975 :catch /^BufWriteCmdError$/ 12976 : if &modified 12977 : echo "Error on writing (file contents not changed)" 12978 : else 12979 : echo "Error after writing" 12980 : endif 12981 :catch /^Vim(write):/ 12982 : echo "Error on writing" 12983 :endtry 12984 12985When this script is sourced several times after making changes, it displays 12986first > 12987 File successfully written! 12988then > 12989 Error on writing (file contents not changed) 12990then > 12991 Error after writing 12992etc. 12993 12994 *except-autocmd-ill* 12995You cannot spread a try conditional over autocommands for different events. 12996The following code is ill-formed: > 12997 12998 :autocmd BufWritePre * try 12999 : 13000 :autocmd BufWritePost * catch 13001 :autocmd BufWritePost * echo v:exception 13002 :autocmd BufWritePost * endtry 13003 : 13004 :write 13005 13006 13007EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS *except-hier-param* 13008 13009Some programming languages allow to use hierarchies of exception classes or to 13010pass additional information with the object of an exception class. You can do 13011similar things in Vim. 13012 In order to throw an exception from a hierarchy, just throw the complete 13013class name with the components separated by a colon, for instance throw the 13014string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library. 13015 When you want to pass additional information with your exception class, add 13016it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)" 13017for an error when writing "myfile". 13018 With the appropriate patterns in the ":catch" command, you can catch for 13019base classes or derived classes of your hierarchy. Additional information in 13020parentheses can be cut out from |v:exception| with the ":substitute" command. 13021 Example: > 13022 13023 :function! CheckRange(a, func) 13024 : if a:a < 0 13025 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")" 13026 : endif 13027 :endfunction 13028 : 13029 :function! Add(a, b) 13030 : call CheckRange(a:a, "Add") 13031 : call CheckRange(a:b, "Add") 13032 : let c = a:a + a:b 13033 : if c < 0 13034 : throw "EXCEPT:MATHERR:OVERFLOW" 13035 : endif 13036 : return c 13037 :endfunction 13038 : 13039 :function! Div(a, b) 13040 : call CheckRange(a:a, "Div") 13041 : call CheckRange(a:b, "Div") 13042 : if (a:b == 0) 13043 : throw "EXCEPT:MATHERR:ZERODIV" 13044 : endif 13045 : return a:a / a:b 13046 :endfunction 13047 : 13048 :function! Write(file) 13049 : try 13050 : execute "write" fnameescape(a:file) 13051 : catch /^Vim(write):/ 13052 : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR" 13053 : endtry 13054 :endfunction 13055 : 13056 :try 13057 : 13058 : " something with arithmetics and I/O 13059 : 13060 :catch /^EXCEPT:MATHERR:RANGE/ 13061 : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "") 13062 : echo "Range error in" function 13063 : 13064 :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV 13065 : echo "Math error" 13066 : 13067 :catch /^EXCEPT:IO/ 13068 : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "") 13069 : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "") 13070 : if file !~ '^/' 13071 : let file = dir . "/" . file 13072 : endif 13073 : echo 'I/O error for "' . file . '"' 13074 : 13075 :catch /^EXCEPT/ 13076 : echo "Unspecified error" 13077 : 13078 :endtry 13079 13080The exceptions raised by Vim itself (on error or when pressing CTRL-C) use 13081a flat hierarchy: they are all in the "Vim" class. You cannot throw yourself 13082exceptions with the "Vim" prefix; they are reserved for Vim. 13083 Vim error exceptions are parameterized with the name of the command that 13084failed, if known. See |catch-errors|. 13085 13086 13087PECULIARITIES 13088 *except-compat* 13089The exception handling concept requires that the command sequence causing the 13090exception is aborted immediately and control is transferred to finally clauses 13091and/or a catch clause. 13092 13093In the Vim script language there are cases where scripts and functions 13094continue after an error: in functions without the "abort" flag or in a command 13095after ":silent!", control flow goes to the following line, and outside 13096functions, control flow goes to the line following the outermost ":endwhile" 13097or ":endif". On the other hand, errors should be catchable as exceptions 13098(thus, requiring the immediate abortion). 13099 13100This problem has been solved by converting errors to exceptions and using 13101immediate abortion (if not suppressed by ":silent!") only when a try 13102conditional is active. This is no restriction since an (error) exception can 13103be caught only from an active try conditional. If you want an immediate 13104termination without catching the error, just use a try conditional without 13105catch clause. (You can cause cleanup code being executed before termination 13106by specifying a finally clause.) 13107 13108When no try conditional is active, the usual abortion and continuation 13109behavior is used instead of immediate abortion. This ensures compatibility of 13110scripts written for Vim 6.1 and earlier. 13111 13112However, when sourcing an existing script that does not use exception handling 13113commands (or when calling one of its functions) from inside an active try 13114conditional of a new script, you might change the control flow of the existing 13115script on error. You get the immediate abortion on error and can catch the 13116error in the new script. If however the sourced script suppresses error 13117messages by using the ":silent!" command (checking for errors by testing 13118|v:errmsg| if appropriate), its execution path is not changed. The error is 13119not converted to an exception. (See |:silent|.) So the only remaining cause 13120where this happens is for scripts that don't care about errors and produce 13121error messages. You probably won't want to use such code from your new 13122scripts. 13123 13124 *except-syntax-err* 13125Syntax errors in the exception handling commands are never caught by any of 13126the ":catch" commands of the try conditional they belong to. Its finally 13127clauses, however, is executed. 13128 Example: > 13129 13130 :try 13131 : try 13132 : throw 4711 13133 : catch /\(/ 13134 : echo "in catch with syntax error" 13135 : catch 13136 : echo "inner catch-all" 13137 : finally 13138 : echo "inner finally" 13139 : endtry 13140 :catch 13141 : echo 'outer catch-all caught "' . v:exception . '"' 13142 : finally 13143 : echo "outer finally" 13144 :endtry 13145 13146This displays: > 13147 inner finally 13148 outer catch-all caught "Vim(catch):E54: Unmatched \(" 13149 outer finally 13150The original exception is discarded and an error exception is raised, instead. 13151 13152 *except-single-line* 13153The ":try", ":catch", ":finally", and ":endtry" commands can be put on 13154a single line, but then syntax errors may make it difficult to recognize the 13155"catch" line, thus you better avoid this. 13156 Example: > 13157 :try | unlet! foo # | catch | endtry 13158raises an error exception for the trailing characters after the ":unlet!" 13159argument, but does not see the ":catch" and ":endtry" commands, so that the 13160error exception is discarded and the "E488: Trailing characters" message gets 13161displayed. 13162 13163 *except-several-errors* 13164When several errors appear in a single command, the first error message is 13165usually the most specific one and therefor converted to the error exception. 13166 Example: > 13167 echo novar 13168causes > 13169 E121: Undefined variable: novar 13170 E15: Invalid expression: novar 13171The value of the error exception inside try conditionals is: > 13172 Vim(echo):E121: Undefined variable: novar 13173< *except-syntax-error* 13174But when a syntax error is detected after a normal error in the same command, 13175the syntax error is used for the exception being thrown. 13176 Example: > 13177 unlet novar # 13178causes > 13179 E108: No such variable: "novar" 13180 E488: Trailing characters 13181The value of the error exception inside try conditionals is: > 13182 Vim(unlet):E488: Trailing characters 13183This is done because the syntax error might change the execution path in a way 13184not intended by the user. Example: > 13185 try 13186 try | unlet novar # | catch | echo v:exception | endtry 13187 catch /.*/ 13188 echo "outer catch:" v:exception 13189 endtry 13190This displays "outer catch: Vim(unlet):E488: Trailing characters", and then 13191a "E600: Missing :endtry" error message is given, see |except-single-line|. 13192 13193============================================================================== 131949. Examples *eval-examples* 13195 13196Printing in Binary ~ 13197> 13198 :" The function Nr2Bin() returns the binary string representation of a number. 13199 :func Nr2Bin(nr) 13200 : let n = a:nr 13201 : let r = "" 13202 : while n 13203 : let r = '01'[n % 2] . r 13204 : let n = n / 2 13205 : endwhile 13206 : return r 13207 :endfunc 13208 13209 :" The function String2Bin() converts each character in a string to a 13210 :" binary string, separated with dashes. 13211 :func String2Bin(str) 13212 : let out = '' 13213 : for ix in range(strlen(a:str)) 13214 : let out = out . '-' . Nr2Bin(char2nr(a:str[ix])) 13215 : endfor 13216 : return out[1:] 13217 :endfunc 13218 13219Example of its use: > 13220 :echo Nr2Bin(32) 13221result: "100000" > 13222 :echo String2Bin("32") 13223result: "110011-110010" 13224 13225 13226Sorting lines ~ 13227 13228This example sorts lines with a specific compare function. > 13229 13230 :func SortBuffer() 13231 : let lines = getline(1, '$') 13232 : call sort(lines, function("Strcmp")) 13233 : call setline(1, lines) 13234 :endfunction 13235 13236As a one-liner: > 13237 :call setline(1, sort(getline(1, '$'), function("Strcmp"))) 13238 13239 13240scanf() replacement ~ 13241 *sscanf* 13242There is no sscanf() function in Vim. If you need to extract parts from a 13243line, you can use matchstr() and substitute() to do it. This example shows 13244how to get the file name, line number and column number out of a line like 13245"foobar.txt, 123, 45". > 13246 :" Set up the match bit 13247 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)' 13248 :"get the part matching the whole expression 13249 :let l = matchstr(line, mx) 13250 :"get each item out of the match 13251 :let file = substitute(l, mx, '\1', '') 13252 :let lnum = substitute(l, mx, '\2', '') 13253 :let col = substitute(l, mx, '\3', '') 13254 13255The input is in the variable "line", the results in the variables "file", 13256"lnum" and "col". (idea from Michael Geddes) 13257 13258 13259getting the scriptnames in a Dictionary ~ 13260 *scriptnames-dictionary* 13261The |:scriptnames| command can be used to get a list of all script files that 13262have been sourced. There is no equivalent function or variable for this 13263(because it's rarely needed). In case you need to manipulate the list this 13264code can be used: > 13265 " Get the output of ":scriptnames" in the scriptnames_output variable. 13266 let scriptnames_output = '' 13267 redir => scriptnames_output 13268 silent scriptnames 13269 redir END 13270 13271 " Split the output into lines and parse each line. Add an entry to the 13272 " "scripts" dictionary. 13273 let scripts = {} 13274 for line in split(scriptnames_output, "\n") 13275 " Only do non-blank lines. 13276 if line =~ '\S' 13277 " Get the first number in the line. 13278 let nr = matchstr(line, '\d\+') 13279 " Get the file name, remove the script number " 123: ". 13280 let name = substitute(line, '.\+:\s*', '', '') 13281 " Add an item to the Dictionary 13282 let scripts[nr] = name 13283 endif 13284 endfor 13285 unlet scriptnames_output 13286 13287============================================================================== 1328810. Vim script versions *vimscript-version* *vimscript-versions* 13289 *scriptversion* 13290Over time many features have been added to Vim script. This includes Ex 13291commands, functions, variable types, etc. Each individual feature can be 13292checked with the |has()| and |exists()| functions. 13293 13294Sometimes old syntax of functionality gets in the way of making Vim better. 13295When support is taken away this will break older Vim scripts. To make this 13296explicit the |:scriptversion| command can be used. When a Vim script is not 13297compatible with older versions of Vim this will give an explicit error, 13298instead of failing in mysterious ways. 13299 13300 *scriptversion-1* > 13301 :scriptversion 1 13302< This is the original Vim script, same as not using a |:scriptversion| 13303 command. Can be used to go back to old syntax for a range of lines. 13304 Test for support with: > 13305 has('vimscript-1') 13306 13307< *scriptversion-2* > 13308 :scriptversion 2 13309< String concatenation with "." is not supported, use ".." instead. 13310 This avoids the ambiguity using "." for Dict member access and 13311 floating point numbers. Now ".5" means the number 0.5. 13312 13313 *scriptversion-3* > 13314 :scriptversion 3 13315< All |vim-variable|s must be prefixed by "v:". E.g. "version" doesn't 13316 work as |v:version| anymore, it can be used as a normal variable. 13317 Same for some obvious names as "count" and others. 13318 13319 Test for support with: > 13320 has('vimscript-3') 13321< 13322 *scriptversion-4* > 13323 :scriptversion 4 13324< Numbers with a leading zero are not recognized as octal. With the 13325 previous version you get: > 13326 echo 017 " displays 15 13327 echo 018 " displays 18 13328< with script version 4: > 13329 echo 017 " displays 17 13330 echo 018 " displays 18 13331< Also, it is possible to use single quotes inside numbers to make them 13332 easier to read: > 13333 echo 1'000'000 13334< The quotes must be surrounded by digits. 13335 13336 Test for support with: > 13337 has('vimscript-4') 13338 13339============================================================================== 1334011. No +eval feature *no-eval-feature* 13341 13342When the |+eval| feature was disabled at compile time, none of the expression 13343evaluation commands are available. To prevent this from causing Vim scripts 13344to generate all kinds of errors, the ":if" and ":endif" commands are still 13345recognized, though the argument of the ":if" and everything between the ":if" 13346and the matching ":endif" is ignored. Nesting of ":if" blocks is allowed, but 13347only if the commands are at the start of the line. The ":else" command is not 13348recognized. 13349 13350Example of how to avoid executing commands when the |+eval| feature is 13351missing: > 13352 13353 :if 1 13354 : echo "Expression evaluation is compiled in" 13355 :else 13356 : echo "You will _never_ see this message" 13357 :endif 13358 13359To execute a command only when the |+eval| feature is disabled can be done in 13360two ways. The simplest is to exit the script (or Vim) prematurely: > 13361 if 1 13362 echo "commands executed with +eval" 13363 finish 13364 endif 13365 args " command executed without +eval 13366 13367If you do not want to abort loading the script you can use a trick, as this 13368example shows: > 13369 13370 silent! while 0 13371 set history=111 13372 silent! endwhile 13373 13374When the |+eval| feature is available the command is skipped because of the 13375"while 0". Without the |+eval| feature the "while 0" is an error, which is 13376silently ignored, and the command is executed. 13377 13378============================================================================== 1337912. The sandbox *eval-sandbox* *sandbox* *E48* 13380 13381The 'foldexpr', 'formatexpr', 'includeexpr', 'indentexpr', 'statusline' and 13382'foldtext' options may be evaluated in a sandbox. This means that you are 13383protected from these expressions having nasty side effects. This gives some 13384safety for when these options are set from a modeline. It is also used when 13385the command from a tags file is executed and for CTRL-R = in the command line. 13386The sandbox is also used for the |:sandbox| command. 13387 13388These items are not allowed in the sandbox: 13389 - changing the buffer text 13390 - defining or changing mapping, autocommands, user commands 13391 - setting certain options (see |option-summary|) 13392 - setting certain v: variables (see |v:var|) *E794* 13393 - executing a shell command 13394 - reading or writing a file 13395 - jumping to another buffer or editing a file 13396 - executing Python, Perl, etc. commands 13397This is not guaranteed 100% secure, but it should block most attacks. 13398 13399 *:san* *:sandbox* 13400:san[dbox] {cmd} Execute {cmd} in the sandbox. Useful to evaluate an 13401 option that may have been set from a modeline, e.g. 13402 'foldexpr'. 13403 13404 *sandbox-option* 13405A few options contain an expression. When this expression is evaluated it may 13406have to be done in the sandbox to avoid a security risk. But the sandbox is 13407restrictive, thus this only happens when the option was set from an insecure 13408location. Insecure in this context are: 13409- sourcing a .vimrc or .exrc in the current directory 13410- while executing in the sandbox 13411- value coming from a modeline 13412- executing a function that was defined in the sandbox 13413 13414Note that when in the sandbox and saving an option value and restoring it, the 13415option will still be marked as it was set in the sandbox. 13416 13417============================================================================== 1341813. Textlock *textlock* 13419 13420In a few situations it is not allowed to change the text in the buffer, jump 13421to another window and some other things that might confuse or break what Vim 13422is currently doing. This mostly applies to things that happen when Vim is 13423actually doing something else. For example, evaluating the 'balloonexpr' may 13424happen any moment the mouse cursor is resting at some position. 13425 13426This is not allowed when the textlock is active: 13427 - changing the buffer text 13428 - jumping to another buffer or window 13429 - editing another file 13430 - closing a window or quitting Vim 13431 - etc. 13432 13433 13434 vim:tw=78:ts=8:noet:ft=help:norl: 13435