blob: 1d282d286b84f963ce94a81833c74fd5b1905ed2 [file] [log] [blame]
Bram Moolenaar560979e2020-02-04 22:53:05 +01001*eval.txt* For Vim version 8.2. Last change: 2020 Feb 03
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
Bram Moolenaar446cb832008-06-24 21:56:24 +00004 VIM REFERENCE MANUAL by Bram Moolenaar
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
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
Bram Moolenaar58b85342016-08-14 19:54:54 +020012done, the features in this document are not available. See |+eval| and
Bram Moolenaard8b02732005-01-14 21:48:43 +000013|no-eval-feature|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000014
Bram Moolenaar8a7d6542020-01-26 15:56:19 +010015This 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
Bram Moolenaar13065c42005-01-08 16:08:21 +0000191. Variables |variables|
20 1.1 Variable types
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000021 1.2 Function references |Funcref|
Bram Moolenaar7c626922005-02-07 22:01:03 +000022 1.3 Lists |Lists|
Bram Moolenaard8b02732005-01-14 21:48:43 +000023 1.4 Dictionaries |Dictionaries|
Bram Moolenaard8968242019-01-15 22:51:57 +010024 1.5 Blobs |Blobs|
25 1.6 More about variables |more-variables|
Bram Moolenaar13065c42005-01-08 16:08:21 +0000262. 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|
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02003410. Vim script version |vimscript-version|
3511. No +eval feature |no-eval-feature|
3612. The sandbox |eval-sandbox|
3713. Textlock |textlock|
Bram Moolenaared997ad2019-07-21 16:42:00 +020038
39Testing support is documented in |testing.txt|.
40Profiling is documented at |profiling|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
Bram Moolenaar071d4272004-06-13 20:20:40 +000042==============================================================================
431. Variables *variables*
44
Bram Moolenaar13065c42005-01-08 16:08:21 +0000451.1 Variable types ~
Bram Moolenaarbf821bc2019-01-23 21:15:02 +010046 *E712* *E896* *E897* *E899*
Bram Moolenaar06fe74a2019-08-31 16:20:32 +020047There are ten types of variables:
Bram Moolenaar071d4272004-06-13 20:20:40 +000048
Bram Moolenaar664f3cf2019-12-07 16:03:51 +010049 *Number* *Integer*
50Number A 32 or 64 bit signed number. |expr-number|
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +020051 64-bit Numbers are available only when compiled with the
Bram Moolenaar22fcfad2016-07-01 18:17:26 +020052 |+num64| feature.
Bram Moolenaar7571d552016-08-18 22:54:46 +020053 Examples: -123 0x10 0177 0b1011
Bram Moolenaard8b02732005-01-14 21:48:43 +000054
Bram Moolenaar446cb832008-06-24 21:56:24 +000055Float A floating point number. |floating-point-format| *Float*
56 {only when compiled with the |+float| feature}
57 Examples: 123.456 1.15e-6 -1.1e3
58
Bram Moolenaar06481422016-04-30 15:13:38 +020059 *E928*
Bram Moolenaard8b02732005-01-14 21:48:43 +000060String A NUL terminated string of 8-bit unsigned characters (bytes).
Bram Moolenaar446cb832008-06-24 21:56:24 +000061 |expr-string| Examples: "ab\txx\"--" 'x-z''a,c'
Bram Moolenaard8b02732005-01-14 21:48:43 +000062
Bram Moolenaard8968242019-01-15 22:51:57 +010063List An ordered sequence of items, see |List| for details.
Bram Moolenaard8b02732005-01-14 21:48:43 +000064 Example: [1, 2, ['a', 'b']]
Bram Moolenaar071d4272004-06-13 20:20:40 +000065
Bram Moolenaar39a58ca2005-06-27 22:42:44 +000066Dictionary An associative, unordered array: Each entry has a key and a
67 value. |Dictionary|
Bram Moolenaard5abb4c2019-07-13 22:46:10 +020068 Examples:
69 {'blue': "#0000ff", 'red': "#ff0000"}
Bram Moolenaar4c6d9042019-07-16 22:04:02 +020070 #{blue: "#0000ff", red: "#ff0000"}
Bram Moolenaar39a58ca2005-06-27 22:42:44 +000071
Bram Moolenaar835dc632016-02-07 14:27:38 +010072Funcref A reference to a function |Funcref|.
73 Example: function("strlen")
Bram Moolenaar1d429612016-05-24 15:44:17 +020074 It can be bound to a dictionary and arguments, it then works
75 like a Partial.
76 Example: function("Callback", [arg], myDict)
Bram Moolenaar835dc632016-02-07 14:27:38 +010077
Bram Moolenaar02e83b42016-02-21 20:10:26 +010078Special |v:false|, |v:true|, |v:none| and |v:null|. *Special*
Bram Moolenaar835dc632016-02-07 14:27:38 +010079
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +020080Job Used for a job, see |job_start()|. *Job* *Jobs*
Bram Moolenaar38a55632016-02-15 22:07:32 +010081
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +020082Channel Used for a channel, see |ch_open()|. *Channel* *Channels*
Bram Moolenaar835dc632016-02-07 14:27:38 +010083
Bram Moolenaard8968242019-01-15 22:51:57 +010084Blob Binary Large Object. Stores any sequence of bytes. See |Blob|
85 for details
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010086 Example: 0zFF00ED015DAF
87 0z is an empty Blob.
88
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +000089The Number and String types are converted automatically, depending on how they
90are used.
Bram Moolenaar071d4272004-06-13 20:20:40 +000091
92Conversion from a Number to a String is by making the ASCII representation of
Bram Moolenaar24ea3ba2010-09-19 19:01:21 +020093the Number. Examples:
94 Number 123 --> String "123" ~
95 Number 0 --> String "0" ~
96 Number -1 --> String "-1" ~
Bram Moolenaar00a927d2010-05-14 23:24:24 +020097 *octal*
Bram Moolenaarfa735342016-01-03 22:14:44 +010098Conversion from a String to a Number is done by converting the first digits to
99a number. Hexadecimal "0xf9", Octal "017", and Binary "0b10" numbers are
Bram Moolenaar60a8de22019-09-15 14:33:22 +0200100recognized (NOTE: when using |scriptversion-4| octal is not recognized). If
101the String doesn't start with digits, the result is zero.
Bram Moolenaarfa735342016-01-03 22:14:44 +0100102Examples:
Bram Moolenaar24ea3ba2010-09-19 19:01:21 +0200103 String "456" --> Number 456 ~
104 String "6bar" --> Number 6 ~
105 String "foo" --> Number 0 ~
106 String "0xf1" --> Number 241 ~
107 String "0100" --> Number 64 ~
Bram Moolenaarfa735342016-01-03 22:14:44 +0100108 String "0b101" --> Number 5 ~
Bram Moolenaar24ea3ba2010-09-19 19:01:21 +0200109 String "-8" --> Number -8 ~
110 String "+8" --> Number 0 ~
Bram Moolenaar071d4272004-06-13 20:20:40 +0000111
112To force conversion from String to Number, add zero to it: >
113 :echo "0100" + 0
Bram Moolenaar97b2ad32006-03-18 21:40:56 +0000114< 64 ~
115
116To avoid a leading zero to cause octal conversion, or for using a different
117base, use |str2nr()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000118
Bram Moolenaard09091d2019-01-17 16:07:22 +0100119 *TRUE* *FALSE* *Boolean*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000120For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE.
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200121You can also use |v:false| and |v:true|. When TRUE is returned from a
122function it is the Number one, FALSE is the number zero.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000123
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200124Note that in the command: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125 :if "foo"
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200126 :" NOT executed
127"foo" is converted to 0, which means FALSE. If the string starts with a
128non-zero number it means TRUE: >
129 :if "8foo"
130 :" executed
131To test for a non-empty string, use empty(): >
Bram Moolenaar3a0d8092012-10-21 03:02:54 +0200132 :if !empty("foo")
Bram Moolenaar835dc632016-02-07 14:27:38 +0100133<
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200134 *non-zero-arg*
135Function arguments often behave slightly different from |TRUE|: If the
136argument is present and it evaluates to a non-zero Number, |v:true| or a
Bram Moolenaar64d8e252016-09-06 22:12:34 +0200137non-empty String, then the value is considered to be TRUE.
Bram Moolenaar01164a62017-11-02 22:58:42 +0100138Note that " " and "0" are also non-empty strings, thus considered to be TRUE.
139A List, Dictionary or Float is not a Number or String, thus evaluate to FALSE.
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200140
Bram Moolenaar38a55632016-02-15 22:07:32 +0100141 *E745* *E728* *E703* *E729* *E730* *E731* *E908* *E910* *E913*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +0100142 *E974* *E975* *E976*
Bram Moolenaard09091d2019-01-17 16:07:22 +0100143|List|, |Dictionary|, |Funcref|, |Job|, |Channel| and |Blob| types are not
144automatically converted.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000145
Bram Moolenaar446cb832008-06-24 21:56:24 +0000146 *E805* *E806* *E808*
Bram Moolenaar58b85342016-08-14 19:54:54 +0200147When mixing Number and Float the Number is converted to Float. Otherwise
Bram Moolenaar446cb832008-06-24 21:56:24 +0000148there is no automatic conversion of Float. You can use str2float() for String
149to Float, printf() for Float to String and float2nr() for Float to Number.
150
Bram Moolenaar38a55632016-02-15 22:07:32 +0100151 *E891* *E892* *E893* *E894* *E907* *E911* *E914*
Bram Moolenaar13d5aee2016-01-21 23:36:05 +0100152When expecting a Float a Number can also be used, but nothing else.
153
Bram Moolenaarf6f32c32016-03-12 19:03:59 +0100154 *no-type-checking*
155You will not get an error if you try to change the type of a variable.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000156
Bram Moolenaar13065c42005-01-08 16:08:21 +0000157
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00001581.2 Function references ~
Bram Moolenaar748bf032005-02-02 23:04:36 +0000159 *Funcref* *E695* *E718*
Bram Moolenaar58b85342016-08-14 19:54:54 +0200160A Funcref variable is obtained with the |function()| function, the |funcref()|
161function or created with the lambda expression |expr-lambda|. It can be used
162in an expression in the place of a function name, before the parenthesis
163around the arguments, to invoke the function it refers to. Example: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000164
165 :let Fn = function("MyFunc")
166 :echo Fn()
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000167< *E704* *E705* *E707*
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000168A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:". You
Bram Moolenaar7cba6c02013-09-05 22:13:31 +0200169can use "g:" but the following name must still start with a capital. You
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000170cannot have both a Funcref variable and a function with the same name.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000171
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000172A special case is defining a function and directly assigning its Funcref to a
173Dictionary entry. Example: >
174 :function dict.init() dict
175 : let self.val = 0
176 :endfunction
177
178The key of the Dictionary can start with a lower case letter. The actual
179function name is not used here. Also see |numbered-function|.
180
181A Funcref can also be used with the |:call| command: >
182 :call Fn()
183 :call dict.init()
Bram Moolenaar13065c42005-01-08 16:08:21 +0000184
185The name of the referenced function can be obtained with |string()|. >
Bram Moolenaar383f9bc2005-01-19 22:18:32 +0000186 :let func = string(Fn)
Bram Moolenaar13065c42005-01-08 16:08:21 +0000187
188You can use |call()| to invoke a Funcref and use a list variable for the
189arguments: >
Bram Moolenaar383f9bc2005-01-19 22:18:32 +0000190 :let r = call(Fn, mylist)
Bram Moolenaar1d429612016-05-24 15:44:17 +0200191<
192 *Partial*
193A Funcref optionally binds a Dictionary and/or arguments. This is also called
194a Partial. This is created by passing the Dictionary and/or arguments to
Bram Moolenaar58b85342016-08-14 19:54:54 +0200195function() or funcref(). When calling the function the Dictionary and/or
196arguments will be passed to the function. Example: >
Bram Moolenaar1d429612016-05-24 15:44:17 +0200197
198 let Cb = function('Callback', ['foo'], myDict)
Bram Moolenaarba3ff532018-11-04 14:45:49 +0100199 call Cb('bar')
Bram Moolenaar1d429612016-05-24 15:44:17 +0200200
201This will invoke the function as if using: >
Bram Moolenaarba3ff532018-11-04 14:45:49 +0100202 call myDict.Callback('foo', 'bar')
Bram Moolenaar1d429612016-05-24 15:44:17 +0200203
204This is very useful when passing a function around, e.g. in the arguments of
205|ch_open()|.
206
207Note that binding a function to a Dictionary also happens when the function is
208a member of the Dictionary: >
209
210 let myDict.myFunction = MyFunction
211 call myDict.myFunction()
212
213Here MyFunction() will get myDict passed as "self". This happens when the
214"myFunction" member is accessed. When making assigning "myFunction" to
215otherDict and calling it, it will be bound to otherDict: >
216
217 let otherDict.myFunction = myDict.myFunction
218 call otherDict.myFunction()
219
220Now "self" will be "otherDict". But when the dictionary was bound explicitly
221this won't happen: >
222
223 let myDict.myFunction = function(MyFunction, myDict)
224 let otherDict.myFunction = myDict.myFunction
225 call otherDict.myFunction()
226
Bram Moolenaard823fa92016-08-12 16:29:27 +0200227Here "self" will be "myDict", because it was bound explicitly.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000228
229
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00002301.3 Lists ~
Bram Moolenaar7e38ea22014-04-05 22:55:53 +0200231 *list* *List* *Lists* *E686*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000232A List is an ordered sequence of items. An item can be of any type. Items
Bram Moolenaar58b85342016-08-14 19:54:54 +0200233can be accessed by their index number. Items can be added and removed at any
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000234position in the sequence.
235
Bram Moolenaar13065c42005-01-08 16:08:21 +0000236
237List creation ~
238 *E696* *E697*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000239A List is created with a comma separated list of items in square brackets.
Bram Moolenaar13065c42005-01-08 16:08:21 +0000240Examples: >
241 :let mylist = [1, two, 3, "four"]
242 :let emptylist = []
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000243
Bram Moolenaar58b85342016-08-14 19:54:54 +0200244An item can be any expression. Using a List for an item creates a
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000245List of Lists: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000246 :let nestlist = [[11, 12], [21, 22], [31, 32]]
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000247
248An extra comma after the last item is ignored.
249
Bram Moolenaar13065c42005-01-08 16:08:21 +0000250
251List index ~
252 *list-index* *E684*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000253An item in the List can be accessed by putting the index in square brackets
Bram Moolenaar13065c42005-01-08 16:08:21 +0000254after the List. Indexes are zero-based, thus the first item has index zero. >
255 :let item = mylist[0] " get the first item: 1
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000256 :let item = mylist[2] " get the third item: 3
Bram Moolenaar13065c42005-01-08 16:08:21 +0000257
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000258When the resulting item is a list this can be repeated: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000259 :let item = nestlist[0][1] " get the first list, second item: 12
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000260<
Bram Moolenaar13065c42005-01-08 16:08:21 +0000261A negative index is counted from the end. Index -1 refers to the last item in
262the List, -2 to the last but one item, etc. >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000263 :let last = mylist[-1] " get the last item: "four"
264
Bram Moolenaar13065c42005-01-08 16:08:21 +0000265To avoid an error for an invalid index use the |get()| function. When an item
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000266is not available it returns zero or the default value you specify: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000267 :echo get(mylist, idx)
268 :echo get(mylist, idx, "NONE")
269
270
271List concatenation ~
272
273Two lists can be concatenated with the "+" operator: >
274 :let longlist = mylist + [5, 6]
Bram Moolenaar383f9bc2005-01-19 22:18:32 +0000275 :let mylist += [7, 8]
Bram Moolenaar13065c42005-01-08 16:08:21 +0000276
277To prepend or append an item turn the item into a list by putting [] around
278it. To change a list in-place see |list-modification| below.
279
280
281Sublist ~
Bram Moolenaarbc8801c2016-08-02 21:04:33 +0200282 *sublist*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000283A part of the List can be obtained by specifying the first and last index,
284separated by a colon in square brackets: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000285 :let shortlist = mylist[2:-1] " get List [3, "four"]
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000286
287Omitting the first index is similar to zero. Omitting the last index is
Bram Moolenaaref2f6562007-05-06 13:32:59 +0000288similar to -1. >
Bram Moolenaar540d6e32005-01-09 21:20:18 +0000289 :let endlist = mylist[2:] " from item 2 to the end: [3, "four"]
290 :let shortlist = mylist[2:2] " List with one item: [3]
291 :let otherlist = mylist[:] " make a copy of the List
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000292
Bram Moolenaarf9393ef2006-04-24 19:47:27 +0000293If the first index is beyond the last item of the List or the second item is
294before the first item, the result is an empty list. There is no error
295message.
296
297If the second index is equal to or greater than the length of the list the
298length minus one is used: >
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000299 :let mylist = [0, 1, 2, 3]
300 :echo mylist[2:8] " result: [2, 3]
301
Bram Moolenaara7fc0102005-05-18 22:17:12 +0000302NOTE: mylist[s:e] means using the variable "s:e" as index. Watch out for
Bram Moolenaar58b85342016-08-14 19:54:54 +0200303using a single letter variable before the ":". Insert a space when needed:
Bram Moolenaara7fc0102005-05-18 22:17:12 +0000304mylist[s : e].
305
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +0000306
Bram Moolenaar13065c42005-01-08 16:08:21 +0000307List identity ~
Bram Moolenaard8b02732005-01-14 21:48:43 +0000308 *list-identity*
Bram Moolenaar13065c42005-01-08 16:08:21 +0000309When variable "aa" is a list and you assign it to another variable "bb", both
310variables refer to the same list. Thus changing the list "aa" will also
311change "bb": >
312 :let aa = [1, 2, 3]
313 :let bb = aa
314 :call add(aa, 4)
315 :echo bb
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000316< [1, 2, 3, 4]
Bram Moolenaar13065c42005-01-08 16:08:21 +0000317
318Making a copy of a list is done with the |copy()| function. Using [:] also
319works, as explained above. This creates a shallow copy of the list: Changing
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000320a list item in the list will also change the item in the copied list: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000321 :let aa = [[1, 'a'], 2, 3]
322 :let bb = copy(aa)
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000323 :call add(aa, 4)
Bram Moolenaar13065c42005-01-08 16:08:21 +0000324 :let aa[0][1] = 'aaa'
325 :echo aa
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000326< [[1, aaa], 2, 3, 4] >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000327 :echo bb
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000328< [[1, aaa], 2, 3]
Bram Moolenaar13065c42005-01-08 16:08:21 +0000329
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000330To make a completely independent list use |deepcopy()|. This also makes a
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000331copy of the values in the list, recursively. Up to a hundred levels deep.
Bram Moolenaar13065c42005-01-08 16:08:21 +0000332
333The operator "is" can be used to check if two variables refer to the same
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000334List. "isnot" does the opposite. In contrast "==" compares if two lists have
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000335the same value. >
336 :let alist = [1, 2, 3]
337 :let blist = [1, 2, 3]
338 :echo alist is blist
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000339< 0 >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000340 :echo alist == blist
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000341< 1
Bram Moolenaar13065c42005-01-08 16:08:21 +0000342
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +0000343Note about comparing lists: Two lists are considered equal if they have the
344same length and all items compare equal, as with using "==". There is one
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000345exception: When comparing a number with a string they are considered
346different. There is no automatic type conversion, as with using "==" on
347variables. Example: >
348 echo 4 == "4"
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +0000349< 1 >
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000350 echo [4] == ["4"]
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +0000351< 0
352
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000353Thus comparing Lists is more strict than comparing numbers and strings. You
Bram Moolenaar446cb832008-06-24 21:56:24 +0000354can compare simple values this way too by putting them in a list: >
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000355
356 :let a = 5
357 :let b = "5"
Bram Moolenaar446cb832008-06-24 21:56:24 +0000358 :echo a == b
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000359< 1 >
Bram Moolenaar446cb832008-06-24 21:56:24 +0000360 :echo [a] == [b]
Bram Moolenaar7d1f5db2005-07-03 21:39:27 +0000361< 0
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +0000362
Bram Moolenaar13065c42005-01-08 16:08:21 +0000363
364List unpack ~
365
366To unpack the items in a list to individual variables, put the variables in
367square brackets, like list items: >
368 :let [var1, var2] = mylist
369
370When the number of variables does not match the number of items in the list
371this produces an error. To handle any extra items from the list append ";"
372and a variable name: >
373 :let [var1, var2; rest] = mylist
374
375This works like: >
376 :let var1 = mylist[0]
377 :let var2 = mylist[1]
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +0000378 :let rest = mylist[2:]
Bram Moolenaar13065c42005-01-08 16:08:21 +0000379
380Except that there is no error if there are only two items. "rest" will be an
381empty list then.
382
383
384List modification ~
385 *list-modification*
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000386To change a specific item of a list use |:let| this way: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000387 :let list[4] = "four"
388 :let listlist[0][3] = item
389
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000390To change part of a list you can specify the first and last item to be
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000391modified. The value must at least have the number of items in the range: >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000392 :let list[3:5] = [3, 4, 5]
393
Bram Moolenaar13065c42005-01-08 16:08:21 +0000394Adding and removing items from a list is done with functions. Here are a few
395examples: >
396 :call insert(list, 'a') " prepend item 'a'
397 :call insert(list, 'a', 3) " insert item 'a' before list[3]
398 :call add(list, "new") " append String item
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000399 :call add(list, [1, 2]) " append a List as one new item
Bram Moolenaar13065c42005-01-08 16:08:21 +0000400 :call extend(list, [1, 2]) " extend the list with two more items
401 :let i = remove(list, 3) " remove item 3
Bram Moolenaar9cd15162005-01-16 22:02:49 +0000402 :unlet list[3] " idem
Bram Moolenaar13065c42005-01-08 16:08:21 +0000403 :let l = remove(list, 3, -1) " remove items 3 to last item
Bram Moolenaar9cd15162005-01-16 22:02:49 +0000404 :unlet list[3 : ] " idem
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000405 :call filter(list, 'v:val !~ "x"') " remove items with an 'x'
Bram Moolenaar13065c42005-01-08 16:08:21 +0000406
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000407Changing the order of items in a list: >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000408 :call sort(list) " sort a list alphabetically
409 :call reverse(list) " reverse the order of items
Bram Moolenaar327aa022014-03-25 18:24:23 +0100410 :call uniq(sort(list)) " sort and remove duplicates
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000411
Bram Moolenaar13065c42005-01-08 16:08:21 +0000412
413For loop ~
414
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000415The |:for| loop executes commands for each item in a list. A variable is set
416to each item in the list in sequence. Example: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000417 :for item in mylist
418 : call Doit(item)
Bram Moolenaar13065c42005-01-08 16:08:21 +0000419 :endfor
420
421This works like: >
422 :let index = 0
423 :while index < len(mylist)
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000424 : let item = mylist[index]
425 : :call Doit(item)
Bram Moolenaar13065c42005-01-08 16:08:21 +0000426 : let index = index + 1
427 :endwhile
428
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +0000429If all you want to do is modify each item in the list then the |map()|
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000430function will be a simpler method than a for loop.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +0000431
Bram Moolenaar58b85342016-08-14 19:54:54 +0200432Just like the |:let| command, |:for| also accepts a list of variables. This
Bram Moolenaar13065c42005-01-08 16:08:21 +0000433requires the argument to be a list of lists. >
434 :for [lnum, col] in [[1, 3], [2, 8], [3, 0]]
435 : call Doit(lnum, col)
436 :endfor
437
438This works like a |:let| command is done for each list item. Again, the types
439must remain the same to avoid an error.
440
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000441It is also possible to put remaining items in a List variable: >
Bram Moolenaar13065c42005-01-08 16:08:21 +0000442 :for [i, j; rest] in listlist
443 : call Doit(i, j)
444 : if !empty(rest)
445 : echo "remainder: " . string(rest)
446 : endif
447 :endfor
448
449
450List functions ~
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000451 *E714*
Bram Moolenaar13065c42005-01-08 16:08:21 +0000452Functions that are useful with a List: >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000453 :let r = call(funcname, list) " call a function with an argument list
Bram Moolenaar13065c42005-01-08 16:08:21 +0000454 :if empty(list) " check if list is empty
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000455 :let l = len(list) " number of items in list
456 :let big = max(list) " maximum value in list
457 :let small = min(list) " minimum value in list
Bram Moolenaar9588a0f2005-01-08 21:45:39 +0000458 :let xs = count(list, 'x') " count nr of times 'x' appears in list
459 :let i = index(list, 'x') " index of first 'x' in list
Bram Moolenaar13065c42005-01-08 16:08:21 +0000460 :let lines = getline(1, 10) " get ten text lines from buffer
461 :call append('$', lines) " append text lines in buffer
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +0000462 :let list = split("a b c") " create list from items in a string
463 :let string = join(list, ', ') " create string from list items
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000464 :let s = string(list) " String representation of list
465 :call map(list, '">> " . v:val') " prepend ">> " to each item
Bram Moolenaar13065c42005-01-08 16:08:21 +0000466
Bram Moolenaar0cb032e2005-04-23 20:52:00 +0000467Don't forget that a combination of features can make things simple. For
468example, to add up all the numbers in a list: >
469 :exe 'let sum = ' . join(nrlist, '+')
470
Bram Moolenaar13065c42005-01-08 16:08:21 +0000471
Bram Moolenaard8b02732005-01-14 21:48:43 +00004721.4 Dictionaries ~
Bram Moolenaard8968242019-01-15 22:51:57 +0100473 *dict* *Dict* *Dictionaries* *Dictionary*
Bram Moolenaard8b02732005-01-14 21:48:43 +0000474A Dictionary is an associative array: Each entry has a key and a value. The
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000475entry can be located with the key. The entries are stored without a specific
476ordering.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000477
478
479Dictionary creation ~
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000480 *E720* *E721* *E722* *E723*
Bram Moolenaard8b02732005-01-14 21:48:43 +0000481A Dictionary is created with a comma separated list of entries in curly
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000482braces. Each entry has a key and a value, separated by a colon. Each key can
483only appear once. Examples: >
Bram Moolenaard8b02732005-01-14 21:48:43 +0000484 :let mydict = {1: 'one', 2: 'two', 3: 'three'}
485 :let emptydict = {}
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000486< *E713* *E716* *E717*
Bram Moolenaard8b02732005-01-14 21:48:43 +0000487A key is always a String. You can use a Number, it will be converted to a
488String automatically. Thus the String '4' and the number 4 will find the same
Bram Moolenaar58b85342016-08-14 19:54:54 +0200489entry. Note that the String '04' and the Number 04 are different, since the
Bram Moolenaard5abb4c2019-07-13 22:46:10 +0200490Number will be converted to the String '4'. The empty string can also be used
491as a key.
Bram Moolenaar56c860c2019-08-17 20:09:31 +0200492 *literal-Dict* *#{}*
Bram Moolenaar4c6d9042019-07-16 22:04:02 +0200493To avoid having to put quotes around every key the #{} form can be used. This
Bram Moolenaard5abb4c2019-07-13 22:46:10 +0200494does require the key to consist only of ASCII letters, digits, '-' and '_'.
495Example: >
Bram Moolenaar10455d42019-11-21 15:36:18 +0100496 :let mydict = #{zero: 0, one_key: 1, two-key: 2, 333: 3}
Bram Moolenaar4c6d9042019-07-16 22:04:02 +0200497Note that 333 here is the string "333". Empty keys are not possible with #{}.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000498
Bram Moolenaar58b85342016-08-14 19:54:54 +0200499A value can be any expression. Using a Dictionary for a value creates a
Bram Moolenaard8b02732005-01-14 21:48:43 +0000500nested Dictionary: >
501 :let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}}
502
503An extra comma after the last entry is ignored.
504
505
506Accessing entries ~
507
508The normal way to access an entry is by putting the key in square brackets: >
509 :let val = mydict["one"]
510 :let mydict["four"] = 4
511
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000512You can add new entries to an existing Dictionary this way, unlike Lists.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000513
514For keys that consist entirely of letters, digits and underscore the following
515form can be used |expr-entry|: >
516 :let val = mydict.one
517 :let mydict.four = 4
518
519Since an entry can be any type, also a List and a Dictionary, the indexing and
520key lookup can be repeated: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000521 :echo dict.key[idx].key
Bram Moolenaard8b02732005-01-14 21:48:43 +0000522
523
524Dictionary to List conversion ~
525
Bram Moolenaar58b85342016-08-14 19:54:54 +0200526You may want to loop over the entries in a dictionary. For this you need to
Bram Moolenaard8b02732005-01-14 21:48:43 +0000527turn the Dictionary into a List and pass it to |:for|.
528
529Most often you want to loop over the keys, using the |keys()| function: >
530 :for key in keys(mydict)
531 : echo key . ': ' . mydict[key]
532 :endfor
533
534The List of keys is unsorted. You may want to sort them first: >
535 :for key in sort(keys(mydict))
536
537To loop over the values use the |values()| function: >
538 :for v in values(mydict)
539 : echo "value: " . v
540 :endfor
541
542If you want both the key and the value use the |items()| function. It returns
Bram Moolenaard47d5222018-12-09 20:43:55 +0100543a List in which each item is a List with two items, the key and the value: >
Bram Moolenaaref2f6562007-05-06 13:32:59 +0000544 :for [key, value] in items(mydict)
545 : echo key . ': ' . value
Bram Moolenaard8b02732005-01-14 21:48:43 +0000546 :endfor
547
548
549Dictionary identity ~
Bram Moolenaar7c626922005-02-07 22:01:03 +0000550 *dict-identity*
Bram Moolenaard8b02732005-01-14 21:48:43 +0000551Just like Lists you need to use |copy()| and |deepcopy()| to make a copy of a
552Dictionary. Otherwise, assignment results in referring to the same
553Dictionary: >
554 :let onedict = {'a': 1, 'b': 2}
555 :let adict = onedict
556 :let adict['a'] = 11
557 :echo onedict['a']
558 11
559
Bram Moolenaarf3bd51a2005-06-14 22:11:18 +0000560Two Dictionaries compare equal if all the key-value pairs compare equal. For
561more info see |list-identity|.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000562
563
564Dictionary modification ~
565 *dict-modification*
566To change an already existing entry of a Dictionary, or to add a new entry,
567use |:let| this way: >
568 :let dict[4] = "four"
569 :let dict['one'] = item
570
Bram Moolenaar9cd15162005-01-16 22:02:49 +0000571Removing an entry from a Dictionary is done with |remove()| or |:unlet|.
572Three ways to remove the entry with key "aaa" from dict: >
573 :let i = remove(dict, 'aaa')
574 :unlet dict.aaa
575 :unlet dict['aaa']
Bram Moolenaard8b02732005-01-14 21:48:43 +0000576
577Merging a Dictionary with another is done with |extend()|: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000578 :call extend(adict, bdict)
579This extends adict with all entries from bdict. Duplicate keys cause entries
580in adict to be overwritten. An optional third argument can change this.
Bram Moolenaar383f9bc2005-01-19 22:18:32 +0000581Note that the order of entries in a Dictionary is irrelevant, thus don't
582expect ":echo adict" to show the items from bdict after the older entries in
583adict.
Bram Moolenaard8b02732005-01-14 21:48:43 +0000584
585Weeding out entries from a Dictionary can be done with |filter()|: >
Bram Moolenaaref2f6562007-05-06 13:32:59 +0000586 :call filter(dict, 'v:val =~ "x"')
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000587This removes all entries from "dict" with a value not matching 'x'.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000588
589
590Dictionary function ~
Bram Moolenaar26402cb2013-02-20 21:26:00 +0100591 *Dictionary-function* *self* *E725* *E862*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000592When a function is defined with the "dict" attribute it can be used in a
Bram Moolenaar58b85342016-08-14 19:54:54 +0200593special way with a dictionary. Example: >
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000594 :function Mylen() dict
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000595 : return len(self.data)
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000596 :endfunction
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000597 :let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")}
598 :echo mydict.len()
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000599
600This is like a method in object oriented programming. The entry in the
601Dictionary is a |Funcref|. The local variable "self" refers to the dictionary
602the function was invoked from.
603
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000604It is also possible to add a function without the "dict" attribute as a
605Funcref to a Dictionary, but the "self" variable is not available then.
606
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000607 *numbered-function* *anonymous-function*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000608To avoid the extra name for the function it can be defined and directly
609assigned to a Dictionary in this way: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000610 :let mydict = {'data': [0, 1, 2, 3]}
Bram Moolenaar5a5f4592015-04-13 12:43:06 +0200611 :function mydict.len()
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000612 : return len(self.data)
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000613 :endfunction
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000614 :echo mydict.len()
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000615
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000616The function will then get a number and the value of dict.len is a |Funcref|
Bram Moolenaar58b85342016-08-14 19:54:54 +0200617that references this function. The function can only be used through a
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000618|Funcref|. It will automatically be deleted when there is no |Funcref|
619remaining that refers to it.
620
621It is not necessary to use the "dict" attribute for a numbered function.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000622
Bram Moolenaar1affd722010-08-04 17:49:30 +0200623If you get an error for a numbered function, you can find out what it is with
624a trick. Assuming the function is 42, the command is: >
625 :function {42}
626
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000627
628Functions for Dictionaries ~
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000629 *E715*
630Functions that can be used with a Dictionary: >
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000631 :if has_key(dict, 'foo') " TRUE if dict has entry with key "foo"
632 :if empty(dict) " TRUE if dict is empty
633 :let l = len(dict) " number of items in dict
634 :let big = max(dict) " maximum value in dict
635 :let small = min(dict) " minimum value in dict
636 :let xs = count(dict, 'x') " count nr of times 'x' appears in dict
637 :let s = string(dict) " String representation of dict
638 :call map(dict, '">> " . v:val') " prepend ">> " to each item
Bram Moolenaard8b02732005-01-14 21:48:43 +0000639
640
Bram Moolenaard8968242019-01-15 22:51:57 +01006411.5 Blobs ~
642 *blob* *Blob* *Blobs* *E978*
Bram Moolenaaraff74912019-03-30 18:11:49 +0100643A Blob is a binary object. It can be used to read an image from a file and
644send it over a channel, for example.
645
646A Blob mostly behaves like a |List| of numbers, where each number has the
647value of an 8-bit byte, from 0 to 255.
Bram Moolenaard8968242019-01-15 22:51:57 +0100648
649
650Blob creation ~
651
652A Blob can be created with a |blob-literal|: >
653 :let b = 0zFF00ED015DAF
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +0100654Dots can be inserted between bytes (pair of hex characters) for readability,
655they don't change the value: >
656 :let b = 0zFF00.ED01.5DAF
Bram Moolenaard8968242019-01-15 22:51:57 +0100657
658A blob can be read from a file with |readfile()| passing the {type} argument
659set to "B", for example: >
660 :let b = readfile('image.png', 'B')
661
662A blob can be read from a channel with the |ch_readblob()| function.
663
664
665Blob index ~
666 *blob-index* *E979*
667A byte in the Blob can be accessed by putting the index in square brackets
668after the Blob. Indexes are zero-based, thus the first byte has index zero. >
669 :let myblob = 0z00112233
670 :let byte = myblob[0] " get the first byte: 0x00
671 :let byte = myblob[2] " get the third byte: 0x22
672
673A negative index is counted from the end. Index -1 refers to the last byte in
674the Blob, -2 to the last but one byte, etc. >
675 :let last = myblob[-1] " get the last byte: 0x33
676
677To avoid an error for an invalid index use the |get()| function. When an item
678is not available it returns -1 or the default value you specify: >
679 :echo get(myblob, idx)
680 :echo get(myblob, idx, 999)
681
682
Bram Moolenaar5e66b422019-01-24 21:58:10 +0100683Blob iteration ~
684
685The |:for| loop executes commands for each byte of a Blob. The loop variable is
686set to each byte in the Blob. Example: >
687 :for byte in 0z112233
688 : call Doit(byte)
689 :endfor
690This calls Doit() with 0x11, 0x22 and 0x33.
691
692
Bram Moolenaard8968242019-01-15 22:51:57 +0100693Blob concatenation ~
694
695Two blobs can be concatenated with the "+" operator: >
696 :let longblob = myblob + 0z4455
697 :let myblob += 0z6677
698
699To change a blob in-place see |blob-modification| below.
700
701
702Part of a blob ~
703
704A part of the Blob can be obtained by specifying the first and last index,
705separated by a colon in square brackets: >
706 :let myblob = 0z00112233
Bram Moolenaard09091d2019-01-17 16:07:22 +0100707 :let shortblob = myblob[1:2] " get 0z1122
Bram Moolenaard8968242019-01-15 22:51:57 +0100708 :let shortblob = myblob[2:-1] " get 0z2233
709
710Omitting the first index is similar to zero. Omitting the last index is
711similar to -1. >
712 :let endblob = myblob[2:] " from item 2 to the end: 0z2233
713 :let shortblob = myblob[2:2] " Blob with one byte: 0z22
714 :let otherblob = myblob[:] " make a copy of the Blob
715
Bram Moolenaard09091d2019-01-17 16:07:22 +0100716If the first index is beyond the last byte of the Blob or the second index is
Bram Moolenaaraa5df7e2019-02-03 14:53:10 +0100717before the first index, the result is an empty Blob. There is no error
Bram Moolenaard8968242019-01-15 22:51:57 +0100718message.
719
720If the second index is equal to or greater than the length of the list the
721length minus one is used: >
722 :echo myblob[2:8] " result: 0z2233
723
724
725Blob modification ~
726 *blob-modification*
727To change a specific byte of a blob use |:let| this way: >
728 :let blob[4] = 0x44
729
730When the index is just one beyond the end of the Blob, it is appended. Any
731higher index is an error.
732
733To change a sequence of bytes the [:] notation can be used: >
734 let blob[1:3] = 0z445566
Bram Moolenaard09091d2019-01-17 16:07:22 +0100735The length of the replaced bytes must be exactly the same as the value
Bram Moolenaard8968242019-01-15 22:51:57 +0100736provided. *E972*
737
738To change part of a blob you can specify the first and last byte to be
Bram Moolenaard09091d2019-01-17 16:07:22 +0100739modified. The value must have the same number of bytes in the range: >
740 :let blob[3:5] = 0z334455
Bram Moolenaard8968242019-01-15 22:51:57 +0100741
742You can also use the functions |add()|, |remove()| and |insert()|.
743
744
745Blob identity ~
746
747Blobs can be compared for equality: >
748 if blob == 0z001122
749And for equal identity: >
750 if blob is otherblob
751< *blob-identity* *E977*
752When variable "aa" is a Blob and you assign it to another variable "bb", both
753variables refer to the same Blob. Then the "is" operator returns true.
754
755When making a copy using [:] or |copy()| the values are the same, but the
756identity is different: >
757 :let blob = 0z112233
758 :let blob2 = blob
759 :echo blob == blob2
760< 1 >
761 :echo blob is blob2
762< 1 >
763 :let blob3 = blob[:]
764 :echo blob == blob3
765< 1 >
766 :echo blob is blob3
767< 0
768
Bram Moolenaard09091d2019-01-17 16:07:22 +0100769Making a copy of a Blob is done with the |copy()| function. Using [:] also
Bram Moolenaard8968242019-01-15 22:51:57 +0100770works, as explained above.
771
772
7731.6 More about variables ~
Bram Moolenaar13065c42005-01-08 16:08:21 +0000774 *more-variables*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000775If you need to know the type of a variable or expression, use the |type()|
776function.
777
778When the '!' flag is included in the 'viminfo' option, global variables that
779start with an uppercase letter, and don't contain a lowercase letter, are
780stored in the viminfo file |viminfo-file|.
781
782When the 'sessionoptions' option contains "global", global variables that
783start with an uppercase letter and contain at least one lowercase letter are
784stored in the session file |session-file|.
785
786variable name can be stored where ~
787my_var_6 not
788My_Var_6 session file
789MY_VAR_6 viminfo file
790
791
792It's possible to form a variable name with curly braces, see
793|curly-braces-names|.
794
795==============================================================================
7962. Expression syntax *expression-syntax*
797
798Expression syntax summary, from least to most significant:
799
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200800|expr1| expr2
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200801 expr2 ? expr1 : expr1 if-then-else
Bram Moolenaar071d4272004-06-13 20:20:40 +0000802
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200803|expr2| expr3
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200804 expr3 || expr3 ... logical OR
Bram Moolenaar071d4272004-06-13 20:20:40 +0000805
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200806|expr3| expr4
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200807 expr4 && expr4 ... logical AND
Bram Moolenaar071d4272004-06-13 20:20:40 +0000808
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200809|expr4| expr5
810 expr5 == expr5 equal
Bram Moolenaar071d4272004-06-13 20:20:40 +0000811 expr5 != expr5 not equal
812 expr5 > expr5 greater than
813 expr5 >= expr5 greater than or equal
814 expr5 < expr5 smaller than
815 expr5 <= expr5 smaller than or equal
816 expr5 =~ expr5 regexp matches
817 expr5 !~ expr5 regexp doesn't match
818
819 expr5 ==? expr5 equal, ignoring case
820 expr5 ==# expr5 equal, match case
821 etc. As above, append ? for ignoring case, # for
822 matching case
823
Bram Moolenaar5e66b422019-01-24 21:58:10 +0100824 expr5 is expr5 same |List|, |Dictionary| or |Blob| instance
825 expr5 isnot expr5 different |List|, |Dictionary| or |Blob|
826 instance
Bram Moolenaarde8866b2005-01-06 23:24:37 +0000827
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200828|expr5| expr6
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200829 expr6 + expr6 ... number addition, list or blob concatenation
830 expr6 - expr6 ... number subtraction
831 expr6 . expr6 ... string concatenation
832 expr6 .. expr6 ... string concatenation
Bram Moolenaar071d4272004-06-13 20:20:40 +0000833
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200834|expr6| expr7
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200835 expr7 * expr7 ... number multiplication
836 expr7 / expr7 ... number division
837 expr7 % expr7 ... number modulo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000838
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200839|expr7| expr8
840 ! expr7 logical NOT
Bram Moolenaar071d4272004-06-13 20:20:40 +0000841 - expr7 unary minus
842 + expr7 unary plus
Bram Moolenaar071d4272004-06-13 20:20:40 +0000843
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200844|expr8| expr9
845 expr8[expr1] byte of a String or item of a |List|
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000846 expr8[expr1 : expr1] substring of a String or sublist of a |List|
847 expr8.name entry in a |Dictionary|
848 expr8(expr1, ...) function call with |Funcref| variable
Bram Moolenaar25e42232019-08-04 15:04:10 +0200849 expr8->name(expr1, ...) |method| call
Bram Moolenaar2fda12f2005-01-15 22:14:15 +0000850
Bram Moolenaar50ba5262016-09-22 22:33:02 +0200851|expr9| number number constant
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +0000852 "string" string constant, backslash is special
Bram Moolenaard8b02732005-01-14 21:48:43 +0000853 'string' string constant, ' is doubled
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000854 [expr1, ...] |List|
855 {expr1: expr1, ...} |Dictionary|
Bram Moolenaar25e42232019-08-04 15:04:10 +0200856 #{key: expr1, ...} |Dictionary|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000857 &option option value
858 (expr1) nested expression
859 variable internal variable
860 va{ria}ble internal variable with curly braces
861 $VAR environment variable
862 @r contents of register 'r'
863 function(expr1, ...) function call
864 func{ti}on(expr1, ...) function call with curly braces
Bram Moolenaar069c1e72016-07-15 21:25:08 +0200865 {args -> expr1} lambda expression
Bram Moolenaar071d4272004-06-13 20:20:40 +0000866
867
Bram Moolenaar0f248b02019-04-04 15:36:05 +0200868"..." indicates that the operations in this level can be concatenated.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000869Example: >
870 &nu || &list && &shell == "csh"
871
872All expressions within one level are parsed from left to right.
873
874
875expr1 *expr1* *E109*
876-----
877
878expr2 ? expr1 : expr1
879
880The expression before the '?' is evaluated to a number. If it evaluates to
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200881|TRUE|, the result is the value of the expression between the '?' and ':',
Bram Moolenaar071d4272004-06-13 20:20:40 +0000882otherwise the result is the value of the expression after the ':'.
883Example: >
884 :echo lnum == 1 ? "top" : lnum
885
886Since the first expression is an "expr2", it cannot contain another ?:. The
887other two expressions can, thus allow for recursive use of ?:.
888Example: >
889 :echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
890
891To keep this readable, using |line-continuation| is suggested: >
892 :echo lnum == 1
893 :\ ? "top"
894 :\ : lnum == 1000
895 :\ ? "last"
896 :\ : lnum
897
Bram Moolenaaref2f6562007-05-06 13:32:59 +0000898You should always put a space before the ':', otherwise it can be mistaken for
899use in a variable such as "a:1".
900
Bram Moolenaar071d4272004-06-13 20:20:40 +0000901
902expr2 and expr3 *expr2* *expr3*
903---------------
904
Bram Moolenaar04186092016-08-29 21:55:35 +0200905expr3 || expr3 .. logical OR *expr-barbar*
906expr4 && expr4 .. logical AND *expr-&&*
907
Bram Moolenaar071d4272004-06-13 20:20:40 +0000908The "||" and "&&" operators take one argument on each side. The arguments
909are (converted to) Numbers. The result is:
910
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200911 input output ~
912n1 n2 n1 || n2 n1 && n2 ~
913|FALSE| |FALSE| |FALSE| |FALSE|
914|FALSE| |TRUE| |TRUE| |FALSE|
915|TRUE| |FALSE| |TRUE| |FALSE|
916|TRUE| |TRUE| |TRUE| |TRUE|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000917
918The operators can be concatenated, for example: >
919
920 &nu || &list && &shell == "csh"
921
922Note that "&&" takes precedence over "||", so this has the meaning of: >
923
924 &nu || (&list && &shell == "csh")
925
926Once the result is known, the expression "short-circuits", that is, further
927arguments are not evaluated. This is like what happens in C. For example: >
928
929 let a = 1
930 echo a || b
931
Bram Moolenaare381d3d2016-07-07 14:50:41 +0200932This is valid even if there is no variable called "b" because "a" is |TRUE|,
933so the result must be |TRUE|. Similarly below: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000934
935 echo exists("b") && b == "yes"
936
937This is valid whether "b" has been defined or not. The second clause will
938only be evaluated if "b" has been defined.
939
940
941expr4 *expr4*
942-----
943
944expr5 {cmp} expr5
945
946Compare two expr5 expressions, resulting in a 0 if it evaluates to false, or 1
947if it evaluates to true.
948
Bram Moolenaar446cb832008-06-24 21:56:24 +0000949 *expr-==* *expr-!=* *expr->* *expr->=*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000950 *expr-<* *expr-<=* *expr-=~* *expr-!~*
951 *expr-==#* *expr-!=#* *expr->#* *expr->=#*
952 *expr-<#* *expr-<=#* *expr-=~#* *expr-!~#*
953 *expr-==?* *expr-!=?* *expr->?* *expr->=?*
954 *expr-<?* *expr-<=?* *expr-=~?* *expr-!~?*
Bram Moolenaar251e1912011-06-19 05:09:16 +0200955 *expr-is* *expr-isnot* *expr-is#* *expr-isnot#*
956 *expr-is?* *expr-isnot?*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000957 use 'ignorecase' match case ignore case ~
958equal == ==# ==?
959not equal != !=# !=?
960greater than > ># >?
961greater than or equal >= >=# >=?
962smaller than < <# <?
963smaller than or equal <= <=# <=?
964regexp matches =~ =~# =~?
965regexp doesn't match !~ !~# !~?
Bram Moolenaar251e1912011-06-19 05:09:16 +0200966same instance is is# is?
967different instance isnot isnot# isnot?
Bram Moolenaar071d4272004-06-13 20:20:40 +0000968
969Examples:
970"abc" ==# "Abc" evaluates to 0
971"abc" ==? "Abc" evaluates to 1
972"abc" == "Abc" evaluates to 1 if 'ignorecase' is set, 0 otherwise
973
Bram Moolenaar13065c42005-01-08 16:08:21 +0000974 *E691* *E692*
Bram Moolenaar01164a62017-11-02 22:58:42 +0100975A |List| can only be compared with a |List| and only "equal", "not equal",
976"is" and "isnot" can be used. This compares the values of the list,
977recursively. Ignoring case means case is ignored when comparing item values.
Bram Moolenaarde8866b2005-01-06 23:24:37 +0000978
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000979 *E735* *E736*
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000980A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not
Bram Moolenaar01164a62017-11-02 22:58:42 +0100981equal", "is" and "isnot" can be used. This compares the key/values of the
982|Dictionary| recursively. Ignoring case means case is ignored when comparing
983item values.
Bram Moolenaar3a3a7232005-01-17 22:16:15 +0000984
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +0200985 *E694*
Bram Moolenaare18dbe82016-07-02 21:42:23 +0200986A |Funcref| can only be compared with a |Funcref| and only "equal", "not
987equal", "is" and "isnot" can be used. Case is never ignored. Whether
988arguments or a Dictionary are bound (with a partial) matters. The
989Dictionaries must also be equal (or the same, in case of "is") and the
990arguments must be equal (or the same).
991
992To compare Funcrefs to see if they refer to the same function, ignoring bound
993Dictionary and arguments, use |get()| to get the function name: >
994 if get(Part1, 'name') == get(Part2, 'name')
995 " Part1 and Part2 refer to the same function
Bram Moolenaarde8866b2005-01-06 23:24:37 +0000996
Bram Moolenaar5e66b422019-01-24 21:58:10 +0100997Using "is" or "isnot" with a |List|, |Dictionary| or |Blob| checks whether
998the expressions are referring to the same |List|, |Dictionary| or |Blob|
999instance. A copy of a |List| is different from the original |List|. When
1000using "is" without a |List|, |Dictionary| or |Blob|, it is equivalent to
1001using "equal", using "isnot" equivalent to using "not equal". Except that
1002a different type means the values are different: >
Bram Moolenaar86edef62016-03-13 18:07:30 +01001003 echo 4 == '4'
1004 1
1005 echo 4 is '4'
1006 0
1007 echo 0 is []
1008 0
1009"is#"/"isnot#" and "is?"/"isnot?" can be used to match and ignore case.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00001010
Bram Moolenaar071d4272004-06-13 20:20:40 +00001011When comparing a String with a Number, the String is converted to a Number,
Bram Moolenaar58b85342016-08-14 19:54:54 +02001012and the comparison is done on Numbers. This means that: >
Bram Moolenaar86edef62016-03-13 18:07:30 +01001013 echo 0 == 'x'
1014 1
1015because 'x' converted to a Number is zero. However: >
1016 echo [0] == ['x']
1017 0
1018Inside a List or Dictionary this conversion is not used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001019
1020When comparing two Strings, this is done with strcmp() or stricmp(). This
1021results in the mathematical difference (comparing byte values), not
1022necessarily the alphabetical difference in the local language.
1023
Bram Moolenaar446cb832008-06-24 21:56:24 +00001024When using the operators with a trailing '#', or the short version and
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001025'ignorecase' is off, the comparing is done with strcmp(): case matters.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001026
1027When using the operators with a trailing '?', or the short version and
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001028'ignorecase' is set, the comparing is done with stricmp(): case is ignored.
1029
1030'smartcase' is not used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001031
1032The "=~" and "!~" operators match the lefthand argument with the righthand
1033argument, which is used as a pattern. See |pattern| for what a pattern is.
1034This matching is always done like 'magic' was set and 'cpoptions' is empty, no
1035matter what the actual value of 'magic' or 'cpoptions' is. This makes scripts
1036portable. To avoid backslashes in the regexp pattern to be doubled, use a
1037single-quote string, see |literal-string|.
1038Since a string is considered to be a single line, a multi-line pattern
1039(containing \n, backslash-n) will not match. However, a literal NL character
1040can be matched like an ordinary character. Examples:
1041 "foo\nbar" =~ "\n" evaluates to 1
1042 "foo\nbar" =~ "\\n" evaluates to 0
1043
1044
1045expr5 and expr6 *expr5* *expr6*
1046---------------
Bram Moolenaar0f248b02019-04-04 15:36:05 +02001047expr6 + expr6 Number addition, |List| or |Blob| concatenation *expr-+*
1048expr6 - expr6 Number subtraction *expr--*
1049expr6 . expr6 String concatenation *expr-.*
1050expr6 .. expr6 String concatenation *expr-..*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001051
Bram Moolenaara23ccb82006-02-27 00:08:02 +00001052For |Lists| only "+" is possible and then both expr6 must be a list. The
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001053result is a new list with the two lists Concatenated.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00001054
Bram Moolenaar0f248b02019-04-04 15:36:05 +02001055For String concatenation ".." is preferred, since "." is ambiguous, it is also
1056used for |Dict| member access and floating point numbers.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02001057When |vimscript-version| is 2 or higher, using "." is not allowed.
Bram Moolenaar0f248b02019-04-04 15:36:05 +02001058
Bram Moolenaar5e66b422019-01-24 21:58:10 +01001059expr7 * expr7 Number multiplication *expr-star*
1060expr7 / expr7 Number division *expr-/*
1061expr7 % expr7 Number modulo *expr-%*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001062
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02001063For all, except "." and "..", Strings are converted to Numbers.
Bram Moolenaard6e256c2011-12-14 15:32:50 +01001064For bitwise operators see |and()|, |or()| and |xor()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001065
1066Note the difference between "+" and ".":
1067 "123" + "456" = 579
1068 "123" . "456" = "123456"
1069
Bram Moolenaar446cb832008-06-24 21:56:24 +00001070Since '.' has the same precedence as '+' and '-', you need to read: >
1071 1 . 90 + 90.0
1072As: >
1073 (1 . 90) + 90.0
1074That works, since the String "190" is automatically converted to the Number
1075190, which can be added to the Float 90.0. However: >
1076 1 . 90 * 90.0
1077Should be read as: >
1078 1 . (90 * 90.0)
1079Since '.' has lower precedence than '*'. This does NOT work, since this
1080attempts to concatenate a Float and a String.
1081
1082When dividing a Number by zero the result depends on the value:
1083 0 / 0 = -0x80000000 (like NaN for Float)
1084 >0 / 0 = 0x7fffffff (like positive infinity)
1085 <0 / 0 = -0x7fffffff (like negative infinity)
1086 (before Vim 7.2 it was always 0x7fffffff)
1087
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02001088When 64-bit Number support is enabled:
1089 0 / 0 = -0x8000000000000000 (like NaN for Float)
1090 >0 / 0 = 0x7fffffffffffffff (like positive infinity)
1091 <0 / 0 = -0x7fffffffffffffff (like negative infinity)
1092
Bram Moolenaar071d4272004-06-13 20:20:40 +00001093When the righthand side of '%' is zero, the result is 0.
1094
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001095None of these work for |Funcref|s.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00001096
Bram Moolenaar446cb832008-06-24 21:56:24 +00001097. and % do not work for Float. *E804*
1098
Bram Moolenaar071d4272004-06-13 20:20:40 +00001099
1100expr7 *expr7*
1101-----
1102! expr7 logical NOT *expr-!*
1103- expr7 unary minus *expr-unary--*
1104+ expr7 unary plus *expr-unary-+*
1105
Bram Moolenaare381d3d2016-07-07 14:50:41 +02001106For '!' |TRUE| becomes |FALSE|, |FALSE| becomes |TRUE| (one).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001107For '-' the sign of the number is changed.
1108For '+' the number is unchanged.
1109
1110A String will be converted to a Number first.
1111
Bram Moolenaar58b85342016-08-14 19:54:54 +02001112These three can be repeated and mixed. Examples:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001113 !-1 == 0
1114 !!8 == 1
1115 --9 == 9
1116
1117
1118expr8 *expr8*
1119-----
Bram Moolenaarfc65cab2018-08-28 22:58:02 +02001120This expression is either |expr9| or a sequence of the alternatives below,
1121in any order. E.g., these are all possible:
Bram Moolenaar25e42232019-08-04 15:04:10 +02001122 expr8[expr1].name
1123 expr8.name[expr1]
1124 expr8(expr1, ...)[expr1].name
1125 expr8->(expr1, ...)[expr1]
Bram Moolenaarac92e252019-08-03 21:58:38 +02001126Evaluation is always from left to right.
Bram Moolenaarfc65cab2018-08-28 22:58:02 +02001127
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001128expr8[expr1] item of String or |List| *expr-[]* *E111*
Bram Moolenaar03413f42016-04-12 21:07:15 +02001129 *E909* *subscript*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001130If expr8 is a Number or String this results in a String that contains the
1131expr1'th single byte from expr8. expr8 is used as a String, expr1 as a
Bram Moolenaar50ba5262016-09-22 22:33:02 +02001132Number. This doesn't recognize multi-byte encodings, see `byteidx()` for
Bram Moolenaar03413f42016-04-12 21:07:15 +02001133an alternative, or use `split()` to turn the string into a list of characters.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001134
Bram Moolenaar256972a2015-12-29 19:10:25 +01001135Index zero gives the first byte. This is like it works in C. Careful:
1136text column numbers start with one! Example, to get the byte under the
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001137cursor: >
Bram Moolenaar61660ea2006-04-07 21:40:07 +00001138 :let c = getline(".")[col(".") - 1]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139
1140If the length of the String is less than the index, the result is an empty
Bram Moolenaar85084ef2016-01-17 22:26:33 +01001141String. A negative index always results in an empty string (reason: backward
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001142compatibility). Use [-1:] to get the last byte.
1143
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001144If expr8 is a |List| then it results the item at index expr1. See |list-index|
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001145for possible index values. If the index is out of range this results in an
Bram Moolenaar58b85342016-08-14 19:54:54 +02001146error. Example: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001147 :let item = mylist[-1] " get last item
1148
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001149Generally, if a |List| index is equal to or higher than the length of the
1150|List|, or more negative than the length of the |List|, this results in an
1151error.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001152
Bram Moolenaard8b02732005-01-14 21:48:43 +00001153
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001154expr8[expr1a : expr1b] substring or sublist *expr-[:]*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001155
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001156If expr8 is a Number or String this results in the substring with the bytes
1157from expr1a to and including expr1b. expr8 is used as a String, expr1a and
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001158expr1b are used as a Number. This doesn't recognize multi-byte encodings, see
1159|byteidx()| for computing the indexes.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001160
1161If expr1a is omitted zero is used. If expr1b is omitted the length of the
1162string minus one is used.
1163
1164A negative number can be used to measure from the end of the string. -1 is
1165the last character, -2 the last but one, etc.
1166
1167If an index goes out of range for the string characters are omitted. If
1168expr1b is smaller than expr1a the result is an empty string.
1169
1170Examples: >
1171 :let c = name[-1:] " last byte of a string
1172 :let c = name[-2:-2] " last but one byte of a string
1173 :let s = line(".")[4:] " from the fifth byte to the end
1174 :let s = s[:-3] " remove last two bytes
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001175<
Bram Moolenaarbc8801c2016-08-02 21:04:33 +02001176 *slice*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001177If expr8 is a |List| this results in a new |List| with the items indicated by
Bram Moolenaar58b85342016-08-14 19:54:54 +02001178the indexes expr1a and expr1b. This works like with a String, as explained
Bram Moolenaarbc8801c2016-08-02 21:04:33 +02001179just above. Also see |sublist| below. Examples: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00001180 :let l = mylist[:3] " first four items
1181 :let l = mylist[4:4] " List with one item
1182 :let l = mylist[:] " shallow copy of a List
1183
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01001184If expr8 is a |Blob| this results in a new |Blob| with the bytes in the
1185indexes expr1a and expr1b, inclusive. Examples: >
1186 :let b = 0zDEADBEEF
1187 :let bs = b[1:2] " 0zADBE
Bram Moolenaard09091d2019-01-17 16:07:22 +01001188 :let bs = b[:] " copy of 0zDEADBEEF
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01001189
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001190Using expr8[expr1] or expr8[expr1a : expr1b] on a |Funcref| results in an
1191error.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001192
Bram Moolenaarda440d22016-01-16 21:27:23 +01001193Watch out for confusion between a namespace and a variable followed by a colon
1194for a sublist: >
1195 mylist[n:] " uses variable n
1196 mylist[s:] " uses namespace s:, error!
1197
Bram Moolenaard8b02732005-01-14 21:48:43 +00001198
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001199expr8.name entry in a |Dictionary| *expr-entry*
Bram Moolenaard8b02732005-01-14 21:48:43 +00001200
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001201If expr8 is a |Dictionary| and it is followed by a dot, then the following
1202name will be used as a key in the |Dictionary|. This is just like:
1203expr8[name].
Bram Moolenaard8b02732005-01-14 21:48:43 +00001204
1205The name must consist of alphanumeric characters, just like a variable name,
1206but it may start with a number. Curly braces cannot be used.
1207
1208There must not be white space before or after the dot.
1209
1210Examples: >
1211 :let dict = {"one": 1, 2: "two"}
Bram Moolenaar68e65602019-05-26 21:33:31 +02001212 :echo dict.one " shows "1"
1213 :echo dict.2 " shows "two"
1214 :echo dict .2 " error because of space before the dot
Bram Moolenaard8b02732005-01-14 21:48:43 +00001215
1216Note that the dot is also used for String concatenation. To avoid confusion
1217always put spaces around the dot for String concatenation.
1218
1219
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001220expr8(expr1, ...) |Funcref| function call
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001221
1222When expr8 is a |Funcref| type variable, invoke the function it refers to.
1223
1224
Bram Moolenaar22a0c0c2019-08-09 23:25:08 +02001225expr8->name([args]) method call *method* *->*
1226expr8->{lambda}([args])
Bram Moolenaar56c860c2019-08-17 20:09:31 +02001227 *E276*
Bram Moolenaar25e42232019-08-04 15:04:10 +02001228For methods that are also available as global functions this is the same as: >
Bram Moolenaarac92e252019-08-03 21:58:38 +02001229 name(expr8 [, args])
1230There can also be methods specifically for the type of "expr8".
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001231
Bram Moolenaar51841322019-08-08 21:10:01 +02001232This allows for chaining, passing the value that one method returns to the
1233next method: >
Bram Moolenaar25e42232019-08-04 15:04:10 +02001234 mylist->filter(filterexpr)->map(mapexpr)->sort()->join()
1235<
Bram Moolenaar22a0c0c2019-08-09 23:25:08 +02001236Example of using a lambda: >
Bram Moolenaar02b31112019-08-31 22:16:38 +02001237 GetPercentage()->{x -> x * 100}()->printf('%d%%')
Bram Moolenaar56c860c2019-08-17 20:09:31 +02001238<
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02001239When using -> the |expr7| operators will be applied first, thus: >
1240 -1.234->string()
1241Is equivalent to: >
1242 (-1.234)->string()
1243And NOT: >
1244 -(1.234->string())
1245<
Bram Moolenaar51841322019-08-08 21:10:01 +02001246 *E274*
1247"->name(" must not contain white space. There can be white space before the
1248"->" and after the "(", thus you can split the lines like this: >
1249 mylist
1250 \ ->filter(filterexpr)
1251 \ ->map(mapexpr)
1252 \ ->sort()
1253 \ ->join()
Bram Moolenaar56c860c2019-08-17 20:09:31 +02001254
1255When using the lambda form there must be no white space between the } and the
1256(.
1257
Bram Moolenaar25e42232019-08-04 15:04:10 +02001258
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001259 *expr9*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001260number
1261------
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001262number number constant *expr-number*
Bram Moolenaar7571d552016-08-18 22:54:46 +02001263 *hex-number* *octal-number* *binary-number*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001264
Bram Moolenaar7571d552016-08-18 22:54:46 +02001265Decimal, Hexadecimal (starting with 0x or 0X), Binary (starting with 0b or 0B)
1266and Octal (starting with 0).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001267
Bram Moolenaar446cb832008-06-24 21:56:24 +00001268 *floating-point-format*
1269Floating point numbers can be written in two forms:
1270
1271 [-+]{N}.{M}
Bram Moolenaar8a94d872015-01-25 13:02:57 +01001272 [-+]{N}.{M}[eE][-+]{exp}
Bram Moolenaar446cb832008-06-24 21:56:24 +00001273
1274{N} and {M} are numbers. Both {N} and {M} must be present and can only
1275contain digits.
1276[-+] means there is an optional plus or minus sign.
1277{exp} is the exponent, power of 10.
Bram Moolenaar58b85342016-08-14 19:54:54 +02001278Only a decimal point is accepted, not a comma. No matter what the current
Bram Moolenaar446cb832008-06-24 21:56:24 +00001279locale is.
1280{only when compiled with the |+float| feature}
1281
1282Examples:
1283 123.456
1284 +0.0001
1285 55.0
1286 -0.123
1287 1.234e03
1288 1.0E-6
1289 -3.1416e+88
1290
1291These are INVALID:
1292 3. empty {M}
1293 1e40 missing .{M}
1294
1295Rationale:
1296Before floating point was introduced, the text "123.456" was interpreted as
1297the two numbers "123" and "456", both converted to a string and concatenated,
1298resulting in the string "123456". Since this was considered pointless, and we
Bram Moolenaare37d50a2008-08-06 17:06:04 +00001299could not find it intentionally being used in Vim scripts, this backwards
Bram Moolenaar446cb832008-06-24 21:56:24 +00001300incompatibility was accepted in favor of being able to use the normal notation
1301for floating point numbers.
1302
Bram Moolenaard47d5222018-12-09 20:43:55 +01001303 *float-pi* *float-e*
1304A few useful values to copy&paste: >
1305 :let pi = 3.14159265359
1306 :let e = 2.71828182846
1307Or, if you don't want to write them in as floating-point literals, you can
1308also use functions, like the following: >
1309 :let pi = acos(-1.0)
1310 :let e = exp(1.0)
Bram Moolenaar98aefe72018-12-13 22:20:09 +01001311<
Bram Moolenaar446cb832008-06-24 21:56:24 +00001312 *floating-point-precision*
1313The precision and range of floating points numbers depends on what "double"
1314means in the library Vim was compiled with. There is no way to change this at
1315runtime.
1316
1317The default for displaying a |Float| is to use 6 decimal places, like using
1318printf("%g", f). You can select something else when using the |printf()|
1319function. Example: >
1320 :echo printf('%.15e', atan(1))
1321< 7.853981633974483e-01
1322
1323
Bram Moolenaar071d4272004-06-13 20:20:40 +00001324
Bram Moolenaar979243b2015-06-26 19:35:49 +02001325string *string* *String* *expr-string* *E114*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001326------
1327"string" string constant *expr-quote*
1328
1329Note that double quotes are used.
1330
1331A string constant accepts these special characters:
1332\... three-digit octal number (e.g., "\316")
1333\.. two-digit octal number (must be followed by non-digit)
1334\. one-digit octal number (must be followed by non-digit)
1335\x.. byte specified with two hex numbers (e.g., "\x1f")
1336\x. byte specified with one hex number (must be followed by non-hex char)
1337\X.. same as \x..
1338\X. same as \x.
Bram Moolenaar446cb832008-06-24 21:56:24 +00001339\u.... character specified with up to 4 hex numbers, stored according to the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001340 current value of 'encoding' (e.g., "\u02a4")
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001341\U.... same as \u but allows up to 8 hex numbers.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001342\b backspace <BS>
1343\e escape <Esc>
1344\f formfeed <FF>
1345\n newline <NL>
1346\r return <CR>
1347\t tab <Tab>
1348\\ backslash
1349\" double quote
Bram Moolenaar00a927d2010-05-14 23:24:24 +02001350\<xxx> Special key named "xxx". e.g. "\<C-W>" for CTRL-W. This is for use
Bram Moolenaar58b85342016-08-14 19:54:54 +02001351 in mappings, the 0x80 byte is escaped.
1352 To use the double quote character it must be escaped: "<M-\">".
1353 Don't use <Char-xxxx> to get a utf-8 character, use \uxxxx as
1354 mentioned above.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001355
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001356Note that "\xff" is stored as the byte 255, which may be invalid in some
1357encodings. Use "\u00ff" to store character 255 according to the current value
1358of 'encoding'.
1359
Bram Moolenaar071d4272004-06-13 20:20:40 +00001360Note that "\000" and "\x00" force the end of the string.
1361
1362
Bram Moolenaard8968242019-01-15 22:51:57 +01001363blob-literal *blob-literal* *E973*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01001364------------
1365
1366Hexadecimal starting with 0z or 0Z, with an arbitrary number of bytes.
1367The sequence must be an even number of hex characters. Example: >
1368 :let b = 0zFF00ED015DAF
1369
1370
Bram Moolenaar071d4272004-06-13 20:20:40 +00001371literal-string *literal-string* *E115*
1372---------------
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001373'string' string constant *expr-'*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001374
1375Note that single quotes are used.
1376
Bram Moolenaar58b85342016-08-14 19:54:54 +02001377This string is taken as it is. No backslashes are removed or have a special
Bram Moolenaard8b02732005-01-14 21:48:43 +00001378meaning. The only exception is that two quotes stand for one quote.
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001379
1380Single quoted strings are useful for patterns, so that backslashes do not need
Bram Moolenaar58b85342016-08-14 19:54:54 +02001381to be doubled. These two commands are equivalent: >
Bram Moolenaar3fdfa4a2004-10-07 21:02:47 +00001382 if a =~ "\\s*"
1383 if a =~ '\s*'
Bram Moolenaar071d4272004-06-13 20:20:40 +00001384
1385
1386option *expr-option* *E112* *E113*
1387------
1388&option option value, local value if possible
1389&g:option global option value
1390&l:option local option value
1391
1392Examples: >
1393 echo "tabstop is " . &tabstop
1394 if &insertmode
1395
1396Any option name can be used here. See |options|. When using the local value
1397and there is no buffer-local or window-local value, the global value is used
1398anyway.
1399
1400
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001401register *expr-register* *@r*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001402--------
1403@r contents of register 'r'
1404
1405The result is the contents of the named register, as a single string.
1406Newlines are inserted where required. To get the contents of the unnamed
Bram Moolenaar58b85342016-08-14 19:54:54 +02001407register use @" or @@. See |registers| for an explanation of the available
Bram Moolenaare7566042005-06-17 22:00:15 +00001408registers.
1409
1410When using the '=' register you get the expression itself, not what it
1411evaluates to. Use |eval()| to evaluate it.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001412
1413
1414nesting *expr-nesting* *E110*
1415-------
1416(expr1) nested expression
1417
1418
1419environment variable *expr-env*
1420--------------------
1421$VAR environment variable
1422
1423The String value of any environment variable. When it is not defined, the
1424result is an empty string.
Bram Moolenaar691ddee2019-05-09 14:52:41 +02001425
1426The functions `getenv()` and `setenv()` can also be used and work for
1427environment variables with non-alphanumeric names.
1428The function `environ()` can be used to get a Dict with all environment
1429variables.
1430
1431
Bram Moolenaar071d4272004-06-13 20:20:40 +00001432 *expr-env-expand*
1433Note that there is a difference between using $VAR directly and using
1434expand("$VAR"). Using it directly will only expand environment variables that
1435are known inside the current Vim session. Using expand() will first try using
1436the environment variables known inside the current Vim session. If that
1437fails, a shell will be used to expand the variable. This can be slow, but it
1438does expand all variables that the shell knows about. Example: >
Bram Moolenaar34401cc2014-08-29 15:12:19 +02001439 :echo $shell
1440 :echo expand("$shell")
1441The first one probably doesn't echo anything, the second echoes the $shell
Bram Moolenaar071d4272004-06-13 20:20:40 +00001442variable (if your shell supports it).
1443
1444
1445internal variable *expr-variable*
1446-----------------
1447variable internal variable
1448See below |internal-variables|.
1449
1450
Bram Moolenaar05159a02005-02-26 23:04:13 +00001451function call *expr-function* *E116* *E118* *E119* *E120*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001452-------------
1453function(expr1, ...) function call
1454See below |functions|.
1455
1456
Bram Moolenaar069c1e72016-07-15 21:25:08 +02001457lambda expression *expr-lambda* *lambda*
1458-----------------
1459{args -> expr1} lambda expression
1460
1461A lambda expression creates a new unnamed function which returns the result of
Bram Moolenaar42ebd062016-07-17 13:35:14 +02001462evaluating |expr1|. Lambda expressions differ from |user-functions| in
Bram Moolenaar069c1e72016-07-15 21:25:08 +02001463the following ways:
1464
14651. The body of the lambda expression is an |expr1| and not a sequence of |Ex|
1466 commands.
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +020014672. The prefix "a:" should not be used for arguments. E.g.: >
Bram Moolenaar069c1e72016-07-15 21:25:08 +02001468 :let F = {arg1, arg2 -> arg1 - arg2}
1469 :echo F(5, 2)
1470< 3
1471
1472The arguments are optional. Example: >
1473 :let F = {-> 'error function'}
1474 :echo F()
1475< error function
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +02001476 *closure*
1477Lambda expressions can access outer scope variables and arguments. This is
Bram Moolenaar50ba5262016-09-22 22:33:02 +02001478often called a closure. Example where "i" and "a:arg" are used in a lambda
Bram Moolenaar6bb2cdf2018-02-24 19:53:53 +01001479while they already exist in the function scope. They remain valid even after
1480the function returns: >
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +02001481 :function Foo(arg)
1482 : let i = 3
1483 : return {x -> x + i - a:arg}
1484 :endfunction
1485 :let Bar = Foo(4)
1486 :echo Bar(6)
1487< 5
Bram Moolenaar437bafe2016-08-01 15:40:54 +02001488
Bram Moolenaar6bb2cdf2018-02-24 19:53:53 +01001489Note that the variables must exist in the outer scope before the lamba is
1490defined for this to work. See also |:func-closure|.
1491
1492Lambda and closure support can be checked with: >
Bram Moolenaar437bafe2016-08-01 15:40:54 +02001493 if has('lambda')
Bram Moolenaar069c1e72016-07-15 21:25:08 +02001494
1495Examples for using a lambda expression with |sort()|, |map()| and |filter()|: >
1496 :echo map([1, 2, 3], {idx, val -> val + 1})
1497< [2, 3, 4] >
1498 :echo sort([3,7,2,1,4], {a, b -> a - b})
1499< [1, 2, 3, 4, 7]
1500
1501The lambda expression is also useful for Channel, Job and timer: >
1502 :let timer = timer_start(500,
1503 \ {-> execute("echo 'Handler called'", "")},
1504 \ {'repeat': 3})
1505< Handler called
1506 Handler called
1507 Handler called
1508
1509Note how execute() is used to execute an Ex command. That's ugly though.
1510
Bram Moolenaar1e96d9b2016-07-29 22:15:09 +02001511
1512Lambda expressions have internal names like '<lambda>42'. If you get an error
1513for a lambda expression, you can find what it is with the following command: >
1514 :function {'<lambda>42'}
1515See also: |numbered-function|
1516
Bram Moolenaar071d4272004-06-13 20:20:40 +00001517==============================================================================
Bram Moolenaar4a748032010-09-30 21:47:56 +020015183. Internal variable *internal-variables* *E461*
1519
Bram Moolenaar071d4272004-06-13 20:20:40 +00001520An internal variable name can be made up of letters, digits and '_'. But it
1521cannot start with a digit. It's also possible to use curly braces, see
1522|curly-braces-names|.
1523
1524An internal variable is created with the ":let" command |:let|.
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00001525An internal variable is explicitly destroyed with the ":unlet" command
1526|:unlet|.
1527Using a name that is not an internal variable or refers to a variable that has
1528been destroyed results in an error.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001529
1530There are several name spaces for variables. Which one is to be used is
1531specified by what is prepended:
1532
1533 (nothing) In a function: local to a function; otherwise: global
1534|buffer-variable| b: Local to the current buffer.
1535|window-variable| w: Local to the current window.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001536|tabpage-variable| t: Local to the current tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001537|global-variable| g: Global.
1538|local-variable| l: Local to a function.
1539|script-variable| s: Local to a |:source|'ed Vim script.
1540|function-argument| a: Function argument (only inside a function).
Bram Moolenaar75b81562014-04-06 14:09:13 +02001541|vim-variable| v: Global, predefined by Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001542
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001543The scope name by itself can be used as a |Dictionary|. For example, to
1544delete all script-local variables: >
Bram Moolenaar8f999f12005-01-25 22:12:55 +00001545 :for k in keys(s:)
1546 : unlet s:[k]
1547 :endfor
1548<
Bram Moolenaar531da592013-05-06 05:58:55 +02001549 *buffer-variable* *b:var* *b:*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001550A variable name that is preceded with "b:" is local to the current buffer.
1551Thus you can have several "b:foo" variables, one for each buffer.
1552This kind of variable is deleted when the buffer is wiped out or deleted with
1553|:bdelete|.
1554
1555One local buffer variable is predefined:
Bram Moolenaarbf884932013-04-05 22:26:15 +02001556 *b:changedtick* *changetick*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001557b:changedtick The total number of changes to the current buffer. It is
1558 incremented for each change. An undo command is also a change
Bram Moolenaarc024b462019-06-08 18:07:21 +02001559 in this case. Resetting 'modified' when writing the buffer is
1560 also counted.
1561 This can be used to perform an action only when the buffer has
1562 changed. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001563 :if my_changedtick != b:changedtick
Bram Moolenaar446cb832008-06-24 21:56:24 +00001564 : let my_changedtick = b:changedtick
1565 : call My_Update()
Bram Moolenaar071d4272004-06-13 20:20:40 +00001566 :endif
Bram Moolenaar3df01732017-02-17 22:47:16 +01001567< You cannot change or delete the b:changedtick variable.
1568
Bram Moolenaar531da592013-05-06 05:58:55 +02001569 *window-variable* *w:var* *w:*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001570A variable name that is preceded with "w:" is local to the current window. It
1571is deleted when the window is closed.
1572
Bram Moolenaarad3b3662013-05-17 18:14:19 +02001573 *tabpage-variable* *t:var* *t:*
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001574A variable name that is preceded with "t:" is local to the current tab page,
1575It is deleted when the tab page is closed. {not available when compiled
Bram Moolenaardb84e452010-08-15 13:50:43 +02001576without the |+windows| feature}
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001577
Bram Moolenaar531da592013-05-06 05:58:55 +02001578 *global-variable* *g:var* *g:*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001579Inside functions global variables are accessed with "g:". Omitting this will
Bram Moolenaar58b85342016-08-14 19:54:54 +02001580access a variable local to a function. But "g:" can also be used in any other
Bram Moolenaar071d4272004-06-13 20:20:40 +00001581place if you like.
1582
Bram Moolenaar531da592013-05-06 05:58:55 +02001583 *local-variable* *l:var* *l:*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001584Inside functions local variables are accessed without prepending anything.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001585But you can also prepend "l:" if you like. However, without prepending "l:"
1586you may run into reserved variable names. For example "count". By itself it
1587refers to "v:count". Using "l:count" you can have a local variable with the
1588same name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001589
1590 *script-variable* *s:var*
1591In a Vim script variables starting with "s:" can be used. They cannot be
1592accessed from outside of the scripts, thus are local to the script.
1593
1594They can be used in:
1595- commands executed while the script is sourced
1596- functions defined in the script
1597- autocommands defined in the script
1598- functions and autocommands defined in functions and autocommands which were
1599 defined in the script (recursively)
1600- user defined commands defined in the script
1601Thus not in:
1602- other scripts sourced from this one
1603- mappings
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001604- menus
Bram Moolenaar071d4272004-06-13 20:20:40 +00001605- etc.
1606
Bram Moolenaaref2f6562007-05-06 13:32:59 +00001607Script variables can be used to avoid conflicts with global variable names.
1608Take this example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001609
1610 let s:counter = 0
1611 function MyCounter()
1612 let s:counter = s:counter + 1
1613 echo s:counter
1614 endfunction
1615 command Tick call MyCounter()
1616
1617You can now invoke "Tick" from any script, and the "s:counter" variable in
1618that script will not be changed, only the "s:counter" in the script where
1619"Tick" was defined is used.
1620
1621Another example that does the same: >
1622
1623 let s:counter = 0
1624 command Tick let s:counter = s:counter + 1 | echo s:counter
1625
1626When calling a function and invoking a user-defined command, the context for
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001627script variables is set to the script where the function or command was
Bram Moolenaar071d4272004-06-13 20:20:40 +00001628defined.
1629
1630The script variables are also available when a function is defined inside a
1631function that is defined in a script. Example: >
1632
1633 let s:counter = 0
1634 function StartCounting(incr)
1635 if a:incr
1636 function MyCounter()
1637 let s:counter = s:counter + 1
1638 endfunction
1639 else
1640 function MyCounter()
1641 let s:counter = s:counter - 1
1642 endfunction
1643 endif
1644 endfunction
1645
1646This defines the MyCounter() function either for counting up or counting down
1647when calling StartCounting(). It doesn't matter from where StartCounting() is
1648called, the s:counter variable will be accessible in MyCounter().
1649
1650When the same script is sourced again it will use the same script variables.
1651They will remain valid as long as Vim is running. This can be used to
1652maintain a counter: >
1653
1654 if !exists("s:counter")
1655 let s:counter = 1
1656 echo "script executed for the first time"
1657 else
1658 let s:counter = s:counter + 1
1659 echo "script executed " . s:counter . " times now"
1660 endif
1661
1662Note that this means that filetype plugins don't get a different set of script
1663variables for each buffer. Use local buffer variables instead |b:var|.
1664
1665
Bram Moolenaard47d5222018-12-09 20:43:55 +01001666PREDEFINED VIM VARIABLES *vim-variable* *v:var* *v:*
1667 *E963*
1668Some variables can be set by the user, but the type cannot be changed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001669
Bram Moolenaar69bf6342019-10-29 04:16:57 +01001670 *v:argv* *argv-variable*
1671v:argv The command line arguments Vim was invoked with. This is a
1672 list of strings. The first item is the Vim command.
1673
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001674 *v:beval_col* *beval_col-variable*
1675v:beval_col The number of the column, over which the mouse pointer is.
1676 This is the byte index in the |v:beval_lnum| line.
1677 Only valid while evaluating the 'balloonexpr' option.
1678
1679 *v:beval_bufnr* *beval_bufnr-variable*
1680v:beval_bufnr The number of the buffer, over which the mouse pointer is. Only
1681 valid while evaluating the 'balloonexpr' option.
1682
1683 *v:beval_lnum* *beval_lnum-variable*
1684v:beval_lnum The number of the line, over which the mouse pointer is. Only
1685 valid while evaluating the 'balloonexpr' option.
1686
1687 *v:beval_text* *beval_text-variable*
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +00001688v:beval_text The text under or after the mouse pointer. Usually a word as
1689 it is useful for debugging a C program. 'iskeyword' applies,
1690 but a dot and "->" before the position is included. When on a
1691 ']' the text before it is used, including the matching '[' and
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001692 word before it. When on a Visual area within one line the
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02001693 highlighted text is used. Also see |<cexpr>|.
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001694 Only valid while evaluating the 'balloonexpr' option.
1695
1696 *v:beval_winnr* *beval_winnr-variable*
1697v:beval_winnr The number of the window, over which the mouse pointer is. Only
Bram Moolenaar00654022011-02-25 14:42:19 +01001698 valid while evaluating the 'balloonexpr' option. The first
1699 window has number zero (unlike most other places where a
1700 window gets a number).
Bram Moolenaare4efc3b2005-03-07 23:16:51 +00001701
Bram Moolenaar511972d2016-06-04 18:09:59 +02001702 *v:beval_winid* *beval_winid-variable*
Bram Moolenaar7571d552016-08-18 22:54:46 +02001703v:beval_winid The |window-ID| of the window, over which the mouse pointer
1704 is. Otherwise like v:beval_winnr.
Bram Moolenaar511972d2016-06-04 18:09:59 +02001705
Bram Moolenaarf193fff2006-04-27 00:02:13 +00001706 *v:char* *char-variable*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001707v:char Argument for evaluating 'formatexpr' and used for the typed
Bram Moolenaar945e2db2010-06-05 17:43:32 +02001708 character when using <expr> in an abbreviation |:map-<expr>|.
Bram Moolenaare6ae6222013-05-21 21:01:10 +02001709 It is also used by the |InsertCharPre| and |InsertEnter| events.
Bram Moolenaarf193fff2006-04-27 00:02:13 +00001710
Bram Moolenaar071d4272004-06-13 20:20:40 +00001711 *v:charconvert_from* *charconvert_from-variable*
1712v:charconvert_from
1713 The name of the character encoding of a file to be converted.
1714 Only valid while evaluating the 'charconvert' option.
1715
1716 *v:charconvert_to* *charconvert_to-variable*
1717v:charconvert_to
1718 The name of the character encoding of a file after conversion.
1719 Only valid while evaluating the 'charconvert' option.
1720
1721 *v:cmdarg* *cmdarg-variable*
1722v:cmdarg This variable is used for two purposes:
1723 1. The extra arguments given to a file read/write command.
1724 Currently these are "++enc=" and "++ff=". This variable is
1725 set before an autocommand event for a file read/write
1726 command is triggered. There is a leading space to make it
1727 possible to append this variable directly after the
Bram Moolenaar58b85342016-08-14 19:54:54 +02001728 read/write command. Note: The "+cmd" argument isn't
Bram Moolenaar071d4272004-06-13 20:20:40 +00001729 included here, because it will be executed anyway.
1730 2. When printing a PostScript file with ":hardcopy" this is
1731 the argument for the ":hardcopy" command. This can be used
1732 in 'printexpr'.
1733
1734 *v:cmdbang* *cmdbang-variable*
1735v:cmdbang Set like v:cmdarg for a file read/write command. When a "!"
1736 was used the value is 1, otherwise it is 0. Note that this
1737 can only be used in autocommands. For user commands |<bang>|
1738 can be used.
1739
Bram Moolenaar42a45122015-07-10 17:56:23 +02001740 *v:completed_item* *completed_item-variable*
1741v:completed_item
1742 |Dictionary| containing the |complete-items| for the most
1743 recently completed word after |CompleteDone|. The
1744 |Dictionary| is empty if the completion failed.
1745
Bram Moolenaar071d4272004-06-13 20:20:40 +00001746 *v:count* *count-variable*
1747v:count The count given for the last Normal mode command. Can be used
Bram Moolenaar58b85342016-08-14 19:54:54 +02001748 to get the count before a mapping. Read-only. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001749 :map _x :<C-U>echo "the count is " . v:count<CR>
1750< Note: The <C-U> is required to remove the line range that you
1751 get when typing ':' after a count.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001752 When there are two counts, as in "3d2w", they are multiplied,
1753 just like what happens in the command, "d6w" for the example.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001754 Also used for evaluating the 'formatexpr' option.
Bram Moolenaard2e716e2019-04-20 14:39:52 +02001755 "count" also works, for backwards compatibility, unless
1756 |scriptversion| is 3 or higher.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001757
1758 *v:count1* *count1-variable*
1759v:count1 Just like "v:count", but defaults to one when no count is
1760 used.
1761
1762 *v:ctype* *ctype-variable*
1763v:ctype The current locale setting for characters of the runtime
1764 environment. This allows Vim scripts to be aware of the
1765 current locale encoding. Technical: it's the value of
1766 LC_CTYPE. When not using a locale the value is "C".
1767 This variable can not be set directly, use the |:language|
1768 command.
1769 See |multi-lang|.
1770
1771 *v:dying* *dying-variable*
Bram Moolenaar58b85342016-08-14 19:54:54 +02001772v:dying Normally zero. When a deadly signal is caught it's set to
Bram Moolenaar071d4272004-06-13 20:20:40 +00001773 one. When multiple signals are caught the number increases.
1774 Can be used in an autocommand to check if Vim didn't
1775 terminate normally. {only works on Unix}
1776 Example: >
1777 :au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif
Bram Moolenaar0e1e25f2010-05-28 21:07:08 +02001778< Note: if another deadly signal is caught when v:dying is one,
1779 VimLeave autocommands will not be executed.
1780
Bram Moolenaar37f4cbd2019-08-23 20:58:45 +02001781 *v:echospace* *echospace-variable*
1782v:echospace Number of screen cells that can be used for an `:echo` message
1783 in the last screen line before causing the |hit-enter-prompt|.
1784 Depends on 'showcmd', 'ruler' and 'columns'. You need to
1785 check 'cmdheight' for whether there are full-width lines
1786 available above the last line.
1787
Bram Moolenaar071d4272004-06-13 20:20:40 +00001788 *v:errmsg* *errmsg-variable*
1789v:errmsg Last given error message. It's allowed to set this variable.
1790 Example: >
1791 :let v:errmsg = ""
1792 :silent! next
1793 :if v:errmsg != ""
1794 : ... handle error
Bram Moolenaard2e716e2019-04-20 14:39:52 +02001795< "errmsg" also works, for backwards compatibility, unless
1796 |scriptversion| is 3 or higher.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001797
Bram Moolenaar65a54642018-04-28 16:56:53 +02001798 *v:errors* *errors-variable* *assert-return*
Bram Moolenaar683fa182015-11-30 21:38:24 +01001799v:errors Errors found by assert functions, such as |assert_true()|.
Bram Moolenaar43345542015-11-29 17:35:35 +01001800 This is a list of strings.
1801 The assert functions append an item when an assert fails.
Bram Moolenaar65a54642018-04-28 16:56:53 +02001802 The return value indicates this: a one is returned if an item
1803 was added to v:errors, otherwise zero is returned.
Bram Moolenaar43345542015-11-29 17:35:35 +01001804 To remove old results make it empty: >
1805 :let v:errors = []
1806< If v:errors is set to anything but a list it is made an empty
1807 list by the assert function.
1808
Bram Moolenaar7e1652c2017-12-16 18:27:02 +01001809 *v:event* *event-variable*
1810v:event Dictionary containing information about the current
Bram Moolenaar560979e2020-02-04 22:53:05 +01001811 |autocommand|. See the specific event for what it puts in
1812 this dictionary.
1813 The dictionary is emptied when the |autocommand|
Bram Moolenaar7e1652c2017-12-16 18:27:02 +01001814 finishes, please refer to |dict-identity| for how to get an
1815 independent copy of it.
1816
Bram Moolenaar071d4272004-06-13 20:20:40 +00001817 *v:exception* *exception-variable*
1818v:exception The value of the exception most recently caught and not
1819 finished. See also |v:throwpoint| and |throw-variables|.
1820 Example: >
1821 :try
1822 : throw "oops"
1823 :catch /.*/
Bram Moolenaar54775062019-07-31 21:07:14 +02001824 : echo "caught " .. v:exception
Bram Moolenaar071d4272004-06-13 20:20:40 +00001825 :endtry
1826< Output: "caught oops".
1827
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001828 *v:false* *false-variable*
1829v:false A Number with value zero. Used to put "false" in JSON. See
Bram Moolenaar6463ca22016-02-13 17:04:46 +01001830 |json_encode()|.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001831 When used as a string this evaluates to "v:false". >
Bram Moolenaar705ada12016-01-24 17:56:50 +01001832 echo v:false
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001833< v:false ~
1834 That is so that eval() can parse the string back to the same
Bram Moolenaardf48fb42016-07-22 21:50:18 +02001835 value. Read-only.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001836
Bram Moolenaar19a09a12005-03-04 23:39:37 +00001837 *v:fcs_reason* *fcs_reason-variable*
1838v:fcs_reason The reason why the |FileChangedShell| event was triggered.
1839 Can be used in an autocommand to decide what to do and/or what
1840 to set v:fcs_choice to. Possible values:
1841 deleted file no longer exists
1842 conflict file contents, mode or timestamp was
1843 changed and buffer is modified
1844 changed file contents has changed
1845 mode mode of file changed
1846 time only file timestamp changed
1847
1848 *v:fcs_choice* *fcs_choice-variable*
1849v:fcs_choice What should happen after a |FileChangedShell| event was
1850 triggered. Can be used in an autocommand to tell Vim what to
1851 do with the affected buffer:
1852 reload Reload the buffer (does not work if
1853 the file was deleted).
1854 ask Ask the user what to do, as if there
1855 was no autocommand. Except that when
1856 only the timestamp changed nothing
1857 will happen.
1858 <empty> Nothing, the autocommand should do
1859 everything that needs to be done.
1860 The default is empty. If another (invalid) value is used then
1861 Vim behaves like it is empty, there is no warning message.
1862
Bram Moolenaar071d4272004-06-13 20:20:40 +00001863 *v:fname_in* *fname_in-variable*
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00001864v:fname_in The name of the input file. Valid while evaluating:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001865 option used for ~
1866 'charconvert' file to be converted
1867 'diffexpr' original file
1868 'patchexpr' original file
1869 'printexpr' file to be printed
Bram Moolenaar2c7a29c2005-12-12 22:02:31 +00001870 And set to the swap file name for |SwapExists|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001871
1872 *v:fname_out* *fname_out-variable*
1873v:fname_out The name of the output file. Only valid while
1874 evaluating:
1875 option used for ~
1876 'charconvert' resulting converted file (*)
1877 'diffexpr' output of diff
1878 'patchexpr' resulting patched file
1879 (*) When doing conversion for a write command (e.g., ":w
Bram Moolenaar58b85342016-08-14 19:54:54 +02001880 file") it will be equal to v:fname_in. When doing conversion
Bram Moolenaar071d4272004-06-13 20:20:40 +00001881 for a read command (e.g., ":e file") it will be a temporary
1882 file and different from v:fname_in.
1883
1884 *v:fname_new* *fname_new-variable*
1885v:fname_new The name of the new version of the file. Only valid while
1886 evaluating 'diffexpr'.
1887
1888 *v:fname_diff* *fname_diff-variable*
1889v:fname_diff The name of the diff (patch) file. Only valid while
1890 evaluating 'patchexpr'.
1891
1892 *v:folddashes* *folddashes-variable*
1893v:folddashes Used for 'foldtext': dashes representing foldlevel of a closed
1894 fold.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00001895 Read-only in the |sandbox|. |fold-foldtext|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001896
1897 *v:foldlevel* *foldlevel-variable*
1898v:foldlevel Used for 'foldtext': foldlevel of closed fold.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00001899 Read-only in the |sandbox|. |fold-foldtext|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001900
1901 *v:foldend* *foldend-variable*
1902v:foldend Used for 'foldtext': last line of closed fold.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00001903 Read-only in the |sandbox|. |fold-foldtext|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001904
1905 *v:foldstart* *foldstart-variable*
1906v:foldstart Used for 'foldtext': first line of closed fold.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00001907 Read-only in the |sandbox|. |fold-foldtext|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001908
Bram Moolenaar817a8802013-11-09 01:44:43 +01001909 *v:hlsearch* *hlsearch-variable*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01001910v:hlsearch Variable that indicates whether search highlighting is on.
Bram Moolenaar76440e22014-11-27 19:14:49 +01001911 Setting it makes sense only if 'hlsearch' is enabled which
1912 requires |+extra_search|. Setting this variable to zero acts
Bram Moolenaar705ada12016-01-24 17:56:50 +01001913 like the |:nohlsearch| command, setting it to one acts like >
Bram Moolenaar817a8802013-11-09 01:44:43 +01001914 let &hlsearch = &hlsearch
Bram Moolenaar86ae7202015-07-10 19:31:35 +02001915< Note that the value is restored when returning from a
1916 function. |function-search-undo|.
1917
Bram Moolenaar843ee412004-06-30 16:16:41 +00001918 *v:insertmode* *insertmode-variable*
1919v:insertmode Used for the |InsertEnter| and |InsertChange| autocommand
1920 events. Values:
1921 i Insert mode
1922 r Replace mode
1923 v Virtual Replace mode
1924
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001925 *v:key* *key-variable*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00001926v:key Key of the current item of a |Dictionary|. Only valid while
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00001927 evaluating the expression used with |map()| and |filter()|.
1928 Read-only.
1929
Bram Moolenaar071d4272004-06-13 20:20:40 +00001930 *v:lang* *lang-variable*
1931v:lang The current locale setting for messages of the runtime
1932 environment. This allows Vim scripts to be aware of the
1933 current language. Technical: it's the value of LC_MESSAGES.
1934 The value is system dependent.
1935 This variable can not be set directly, use the |:language|
1936 command.
1937 It can be different from |v:ctype| when messages are desired
1938 in a different language than what is used for character
1939 encoding. See |multi-lang|.
1940
1941 *v:lc_time* *lc_time-variable*
1942v:lc_time The current locale setting for time messages of the runtime
1943 environment. This allows Vim scripts to be aware of the
1944 current language. Technical: it's the value of LC_TIME.
1945 This variable can not be set directly, use the |:language|
1946 command. See |multi-lang|.
1947
1948 *v:lnum* *lnum-variable*
Bram Moolenaar368373e2010-07-19 20:46:22 +02001949v:lnum Line number for the 'foldexpr' |fold-expr|, 'formatexpr' and
1950 'indentexpr' expressions, tab page number for 'guitablabel'
1951 and 'guitabtooltip'. Only valid while one of these
1952 expressions is being evaluated. Read-only when in the
1953 |sandbox|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001954
Bram Moolenaar219b8702006-11-01 14:32:36 +00001955 *v:mouse_win* *mouse_win-variable*
1956v:mouse_win Window number for a mouse click obtained with |getchar()|.
1957 First window has number 1, like with |winnr()|. The value is
1958 zero when there was no mouse button click.
1959
Bram Moolenaar511972d2016-06-04 18:09:59 +02001960 *v:mouse_winid* *mouse_winid-variable*
1961v:mouse_winid Window ID for a mouse click obtained with |getchar()|.
1962 The value is zero when there was no mouse button click.
1963
Bram Moolenaar219b8702006-11-01 14:32:36 +00001964 *v:mouse_lnum* *mouse_lnum-variable*
1965v:mouse_lnum Line number for a mouse click obtained with |getchar()|.
1966 This is the text line number, not the screen line number. The
1967 value is zero when there was no mouse button click.
1968
1969 *v:mouse_col* *mouse_col-variable*
1970v:mouse_col Column number for a mouse click obtained with |getchar()|.
1971 This is the screen column number, like with |virtcol()|. The
1972 value is zero when there was no mouse button click.
1973
Bram Moolenaard09091d2019-01-17 16:07:22 +01001974 *v:none* *none-variable* *None*
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001975v:none An empty String. Used to put an empty item in JSON. See
Bram Moolenaar6463ca22016-02-13 17:04:46 +01001976 |json_encode()|.
Bram Moolenaar705ada12016-01-24 17:56:50 +01001977 When used as a number this evaluates to zero.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001978 When used as a string this evaluates to "v:none". >
Bram Moolenaar705ada12016-01-24 17:56:50 +01001979 echo v:none
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001980< v:none ~
1981 That is so that eval() can parse the string back to the same
Bram Moolenaardf48fb42016-07-22 21:50:18 +02001982 value. Read-only.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001983
1984 *v:null* *null-variable*
1985v:null An empty String. Used to put "null" in JSON. See
Bram Moolenaar6463ca22016-02-13 17:04:46 +01001986 |json_encode()|.
Bram Moolenaar705ada12016-01-24 17:56:50 +01001987 When used as a number this evaluates to zero.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001988 When used as a string this evaluates to "v:null". >
Bram Moolenaar705ada12016-01-24 17:56:50 +01001989 echo v:null
Bram Moolenaarc95a3022016-06-12 23:01:46 +02001990< v:null ~
1991 That is so that eval() can parse the string back to the same
Bram Moolenaardf48fb42016-07-22 21:50:18 +02001992 value. Read-only.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01001993
Bram Moolenaard812df62008-11-09 12:46:09 +00001994 *v:oldfiles* *oldfiles-variable*
1995v:oldfiles List of file names that is loaded from the |viminfo| file on
1996 startup. These are the files that Vim remembers marks for.
1997 The length of the List is limited by the ' argument of the
1998 'viminfo' option (default is 100).
Bram Moolenaar8d043172014-01-23 14:24:41 +01001999 When the |viminfo| file is not used the List is empty.
Bram Moolenaard812df62008-11-09 12:46:09 +00002000 Also see |:oldfiles| and |c_#<|.
2001 The List can be modified, but this has no effect on what is
2002 stored in the |viminfo| file later. If you use values other
2003 than String this will cause trouble.
Bram Moolenaardb84e452010-08-15 13:50:43 +02002004 {only when compiled with the |+viminfo| feature}
Bram Moolenaard812df62008-11-09 12:46:09 +00002005
Bram Moolenaar53744302015-07-17 17:38:22 +02002006 *v:option_new*
2007v:option_new New value of the option. Valid while executing an |OptionSet|
2008 autocommand.
2009 *v:option_old*
2010v:option_old Old value of the option. Valid while executing an |OptionSet|
Bram Moolenaard7c96872019-06-15 17:12:48 +02002011 autocommand. Depending on the command used for setting and the
2012 kind of option this is either the local old value or the
2013 global old value.
2014 *v:option_oldlocal*
2015v:option_oldlocal
2016 Old local value of the option. Valid while executing an
2017 |OptionSet| autocommand.
2018 *v:option_oldglobal*
2019v:option_oldglobal
2020 Old global value of the option. Valid while executing an
2021 |OptionSet| autocommand.
Bram Moolenaar53744302015-07-17 17:38:22 +02002022 *v:option_type*
2023v:option_type Scope of the set command. Valid while executing an
2024 |OptionSet| autocommand. Can be either "global" or "local"
Bram Moolenaard7c96872019-06-15 17:12:48 +02002025 *v:option_command*
2026v:option_command
2027 Command used to set the option. Valid while executing an
2028 |OptionSet| autocommand.
2029 value option was set via ~
2030 "setlocal" |:setlocal| or ":let l:xxx"
2031 "setglobal" |:setglobal| or ":let g:xxx"
2032 "set" |:set| or |:let|
2033 "modeline" |modeline|
Bram Moolenaar8af1fbf2008-01-05 12:35:21 +00002034 *v:operator* *operator-variable*
2035v:operator The last operator given in Normal mode. This is a single
2036 character except for commands starting with <g> or <z>,
2037 in which case it is two characters. Best used alongside
2038 |v:prevcount| and |v:register|. Useful if you want to cancel
2039 Operator-pending mode and then use the operator, e.g.: >
2040 :omap O <Esc>:call MyMotion(v:operator)<CR>
2041< The value remains set until another operator is entered, thus
2042 don't expect it to be empty.
2043 v:operator is not set for |:delete|, |:yank| or other Ex
2044 commands.
2045 Read-only.
2046
Bram Moolenaar071d4272004-06-13 20:20:40 +00002047 *v:prevcount* *prevcount-variable*
2048v:prevcount The count given for the last but one Normal mode command.
2049 This is the v:count value of the previous command. Useful if
Bram Moolenaar8af1fbf2008-01-05 12:35:21 +00002050 you want to cancel Visual or Operator-pending mode and then
2051 use the count, e.g.: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00002052 :vmap % <Esc>:call MyFilter(v:prevcount)<CR>
2053< Read-only.
2054
Bram Moolenaar05159a02005-02-26 23:04:13 +00002055 *v:profiling* *profiling-variable*
Bram Moolenaar58b85342016-08-14 19:54:54 +02002056v:profiling Normally zero. Set to one after using ":profile start".
Bram Moolenaar05159a02005-02-26 23:04:13 +00002057 See |profiling|.
2058
Bram Moolenaar071d4272004-06-13 20:20:40 +00002059 *v:progname* *progname-variable*
2060v:progname Contains the name (with path removed) with which Vim was
Bram Moolenaard38b0552012-04-25 19:07:41 +02002061 invoked. Allows you to do special initialisations for |view|,
2062 |evim| etc., or any other name you might symlink to Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002063 Read-only.
2064
Bram Moolenaara1706c92014-04-01 19:55:49 +02002065 *v:progpath* *progpath-variable*
Bram Moolenaar56c860c2019-08-17 20:09:31 +02002066v:progpath Contains the command with which Vim was invoked, in a form
2067 that when passed to the shell will run the same Vim executable
2068 as the current one (if $PATH remains unchanged).
2069 Useful if you want to message a Vim server using a
Bram Moolenaara1706c92014-04-01 19:55:49 +02002070 |--remote-expr|.
Bram Moolenaarc7f02552014-04-01 21:00:59 +02002071 To get the full path use: >
2072 echo exepath(v:progpath)
Bram Moolenaar56c860c2019-08-17 20:09:31 +02002073< If the command has a relative path it will be expanded to the
2074 full path, so that it still works after `:cd`. Thus starting
2075 "./vim" results in "/home/user/path/to/vim/src/vim".
2076 On Linux and other systems it will always be the full path.
2077 On Mac it may just be "vim" and using exepath() as mentioned
2078 above should be used to get the full path.
Bram Moolenaar08cab962017-03-04 14:37:18 +01002079 On MS-Windows the executable may be called "vim.exe", but the
2080 ".exe" is not added to v:progpath.
Bram Moolenaara1706c92014-04-01 19:55:49 +02002081 Read-only.
2082
Bram Moolenaar071d4272004-06-13 20:20:40 +00002083 *v:register* *register-variable*
Bram Moolenaard58e9292011-02-09 17:07:58 +01002084v:register The name of the register in effect for the current normal mode
Bram Moolenaard38b0552012-04-25 19:07:41 +02002085 command (regardless of whether that command actually used a
2086 register). Or for the currently executing normal mode mapping
2087 (use this in custom commands that take a register).
2088 If none is supplied it is the default register '"', unless
2089 'clipboard' contains "unnamed" or "unnamedplus", then it is
2090 '*' or '+'.
Bram Moolenaard58e9292011-02-09 17:07:58 +01002091 Also see |getreg()| and |setreg()|
Bram Moolenaar071d4272004-06-13 20:20:40 +00002092
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00002093 *v:scrollstart* *scrollstart-variable*
2094v:scrollstart String describing the script or function that caused the
2095 screen to scroll up. It's only set when it is empty, thus the
2096 first reason is remembered. It is set to "Unknown" for a
2097 typed command.
2098 This can be used to find out why your script causes the
2099 hit-enter prompt.
2100
Bram Moolenaar071d4272004-06-13 20:20:40 +00002101 *v:servername* *servername-variable*
Bram Moolenaarc2ce52c2017-08-01 18:35:38 +02002102v:servername The resulting registered |client-server-name| if any.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002103 Read-only.
2104
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002105
Bram Moolenaar446cb832008-06-24 21:56:24 +00002106v:searchforward *v:searchforward* *searchforward-variable*
2107 Search direction: 1 after a forward search, 0 after a
2108 backward search. It is reset to forward when directly setting
2109 the last search pattern, see |quote/|.
2110 Note that the value is restored when returning from a
2111 function. |function-search-undo|.
2112 Read-write.
2113
Bram Moolenaar071d4272004-06-13 20:20:40 +00002114 *v:shell_error* *shell_error-variable*
2115v:shell_error Result of the last shell command. When non-zero, the last
2116 shell command had an error. When zero, there was no problem.
2117 This only works when the shell returns the error code to Vim.
2118 The value -1 is often used when the command could not be
2119 executed. Read-only.
2120 Example: >
2121 :!mv foo bar
2122 :if v:shell_error
2123 : echo 'could not rename "foo" to "bar"!'
2124 :endif
Bram Moolenaard2e716e2019-04-20 14:39:52 +02002125< "shell_error" also works, for backwards compatibility, unless
2126 |scriptversion| is 3 or higher.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002127
2128 *v:statusmsg* *statusmsg-variable*
2129v:statusmsg Last given status message. It's allowed to set this variable.
2130
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00002131 *v:swapname* *swapname-variable*
2132v:swapname Only valid when executing |SwapExists| autocommands: Name of
2133 the swap file found. Read-only.
2134
2135 *v:swapchoice* *swapchoice-variable*
2136v:swapchoice |SwapExists| autocommands can set this to the selected choice
2137 for handling an existing swap file:
2138 'o' Open read-only
2139 'e' Edit anyway
2140 'r' Recover
2141 'd' Delete swapfile
2142 'q' Quit
2143 'a' Abort
Bram Moolenaar58b85342016-08-14 19:54:54 +02002144 The value should be a single-character string. An empty value
Bram Moolenaar4e330bb2005-12-07 21:04:31 +00002145 results in the user being asked, as would happen when there is
2146 no SwapExists autocommand. The default is empty.
2147
Bram Moolenaarb3480382005-12-11 21:33:32 +00002148 *v:swapcommand* *swapcommand-variable*
Bram Moolenaar4770d092006-01-12 23:22:24 +00002149v:swapcommand Normal mode command to be executed after a file has been
Bram Moolenaarb3480382005-12-11 21:33:32 +00002150 opened. Can be used for a |SwapExists| autocommand to have
Bram Moolenaar58b85342016-08-14 19:54:54 +02002151 another Vim open the file and jump to the right place. For
Bram Moolenaarb3480382005-12-11 21:33:32 +00002152 example, when jumping to a tag the value is ":tag tagname\r".
Bram Moolenaar1f35bf92006-03-07 22:38:47 +00002153 For ":edit +cmd file" the value is ":cmd\r".
Bram Moolenaarb3480382005-12-11 21:33:32 +00002154
Bram Moolenaard823fa92016-08-12 16:29:27 +02002155 *v:t_TYPE* *v:t_bool* *t_bool-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002156v:t_bool Value of |Boolean| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002157 *v:t_channel* *t_channel-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002158v:t_channel Value of |Channel| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002159 *v:t_dict* *t_dict-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002160v:t_dict Value of |Dictionary| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002161 *v:t_float* *t_float-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002162v:t_float Value of |Float| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002163 *v:t_func* *t_func-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002164v:t_func Value of |Funcref| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002165 *v:t_job* *t_job-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002166v:t_job Value of |Job| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002167 *v:t_list* *t_list-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002168v:t_list Value of |List| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002169 *v:t_none* *t_none-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002170v:t_none Value of |None| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002171 *v:t_number* *t_number-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002172v:t_number Value of |Number| type. Read-only. See: |type()|
Bram Moolenaard823fa92016-08-12 16:29:27 +02002173 *v:t_string* *t_string-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002174v:t_string Value of |String| type. Read-only. See: |type()|
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002175 *v:t_blob* *t_blob-variable*
Bram Moolenaard09091d2019-01-17 16:07:22 +01002176v:t_blob Value of |Blob| type. Read-only. See: |type()|
Bram Moolenaarf562e722016-07-19 17:25:25 +02002177
Bram Moolenaar071d4272004-06-13 20:20:40 +00002178 *v:termresponse* *termresponse-variable*
2179v:termresponse The escape sequence returned by the terminal for the |t_RV|
Bram Moolenaar58b85342016-08-14 19:54:54 +02002180 termcap entry. It is set when Vim receives an escape sequence
Bram Moolenaarb4230122019-05-30 18:40:53 +02002181 that starts with ESC [ or CSI, then '>' or '?' and ends in a
2182 'c', with only digits and ';' in between.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002183 When this option is set, the TermResponse autocommand event is
2184 fired, so that you can react to the response from the
2185 terminal.
Bram Moolenaarb4230122019-05-30 18:40:53 +02002186 The response from a new xterm is: "<Esc>[> Pp ; Pv ; Pc c". Pp
Bram Moolenaar071d4272004-06-13 20:20:40 +00002187 is the terminal type: 0 for vt100 and 1 for vt220. Pv is the
2188 patch level (since this was introduced in patch 95, it's
2189 always 95 or bigger). Pc is always zero.
2190 {only when compiled with |+termresponse| feature}
2191
Bram Moolenaarf3af54e2017-08-30 14:53:06 +02002192 *v:termblinkresp*
2193v:termblinkresp The escape sequence returned by the terminal for the |t_RC|
2194 termcap entry. This is used to find out whether the terminal
2195 cursor is blinking. This is used by |term_getcursor()|.
2196
2197 *v:termstyleresp*
2198v:termstyleresp The escape sequence returned by the terminal for the |t_RS|
2199 termcap entry. This is used to find out what the shape of the
2200 cursor is. This is used by |term_getcursor()|.
2201
Bram Moolenaar65e4c4f2017-10-14 23:24:25 +02002202 *v:termrbgresp*
2203v:termrbgresp The escape sequence returned by the terminal for the |t_RB|
Bram Moolenaarf3af54e2017-08-30 14:53:06 +02002204 termcap entry. This is used to find out what the terminal
2205 background color is, see 'background'.
2206
Bram Moolenaar65e4c4f2017-10-14 23:24:25 +02002207 *v:termrfgresp*
2208v:termrfgresp The escape sequence returned by the terminal for the |t_RF|
2209 termcap entry. This is used to find out what the terminal
2210 foreground color is.
2211
Bram Moolenaarf3af54e2017-08-30 14:53:06 +02002212 *v:termu7resp*
2213v:termu7resp The escape sequence returned by the terminal for the |t_u7|
2214 termcap entry. This is used to find out what the terminal
2215 does with ambiguous width characters, see 'ambiwidth'.
2216
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02002217 *v:testing* *testing-variable*
Bram Moolenaar8e8df252016-05-25 21:23:21 +02002218v:testing Must be set before using `test_garbagecollect_now()`.
Bram Moolenaar036986f2017-03-16 17:41:02 +01002219 Also, when set certain error messages won't be shown for 2
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002220 seconds. (e.g. "'dictionary' option is empty")
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02002221
Bram Moolenaar071d4272004-06-13 20:20:40 +00002222 *v:this_session* *this_session-variable*
2223v:this_session Full filename of the last loaded or saved session file. See
2224 |:mksession|. It is allowed to set this variable. When no
2225 session file has been saved, this variable is empty.
Bram Moolenaard2e716e2019-04-20 14:39:52 +02002226 "this_session" also works, for backwards compatibility, unless
2227 |scriptversion| is 3 or higher
Bram Moolenaar071d4272004-06-13 20:20:40 +00002228
2229 *v:throwpoint* *throwpoint-variable*
2230v:throwpoint The point where the exception most recently caught and not
Bram Moolenaar58b85342016-08-14 19:54:54 +02002231 finished was thrown. Not set when commands are typed. See
Bram Moolenaar071d4272004-06-13 20:20:40 +00002232 also |v:exception| and |throw-variables|.
2233 Example: >
2234 :try
2235 : throw "oops"
2236 :catch /.*/
2237 : echo "Exception from" v:throwpoint
2238 :endtry
2239< Output: "Exception from test.vim, line 2"
2240
Bram Moolenaar520e1e42016-01-23 19:46:28 +01002241 *v:true* *true-variable*
2242v:true A Number with value one. Used to put "true" in JSON. See
Bram Moolenaar6463ca22016-02-13 17:04:46 +01002243 |json_encode()|.
Bram Moolenaarc95a3022016-06-12 23:01:46 +02002244 When used as a string this evaluates to "v:true". >
Bram Moolenaar705ada12016-01-24 17:56:50 +01002245 echo v:true
Bram Moolenaarc95a3022016-06-12 23:01:46 +02002246< v:true ~
2247 That is so that eval() can parse the string back to the same
Bram Moolenaardf48fb42016-07-22 21:50:18 +02002248 value. Read-only.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00002249 *v:val* *val-variable*
Bram Moolenaar58b85342016-08-14 19:54:54 +02002250v:val Value of the current item of a |List| or |Dictionary|. Only
Bram Moolenaar32466aa2006-02-24 23:53:04 +00002251 valid while evaluating the expression used with |map()| and
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00002252 |filter()|. Read-only.
2253
Bram Moolenaar071d4272004-06-13 20:20:40 +00002254 *v:version* *version-variable*
2255v:version Version number of Vim: Major version number times 100 plus
Bram Moolenaar9b283522019-06-17 22:19:33 +02002256 minor version number. Version 5.0 is 500. Version 5.1
Bram Moolenaar071d4272004-06-13 20:20:40 +00002257 is 501. Read-only. "version" also works, for backwards
Bram Moolenaard2e716e2019-04-20 14:39:52 +02002258 compatibility, unless |scriptversion| is 3 or higher.
Bram Moolenaar071d4272004-06-13 20:20:40 +00002259 Use |has()| to check if a certain patch was included, e.g.: >
Bram Moolenaar6716d9a2014-04-02 12:12:08 +02002260 if has("patch-7.4.123")
Bram Moolenaar071d4272004-06-13 20:20:40 +00002261< Note that patch numbers are specific to the version, thus both
2262 version 5.0 and 5.1 may have a patch 123, but these are
2263 completely different.
2264
Bram Moolenaar37df9a42019-06-14 14:39:51 +02002265 *v:versionlong* *versionlong-variable*
Bram Moolenaar9b283522019-06-17 22:19:33 +02002266v:versionlong Like v:version, but also including the patchlevel in the last
2267 four digits. Version 8.1 with patch 123 has value 8010123.
2268 This can be used like this: >
2269 if v:versionlong >= 8010123
Bram Moolenaar37df9a42019-06-14 14:39:51 +02002270< However, if there are gaps in the list of patches included
2271 this will not work well. This can happen if a recent patch
2272 was included into an older version, e.g. for a security fix.
2273 Use the has() function to make sure the patch is actually
2274 included.
2275
Bram Moolenaar14735512016-03-26 21:00:08 +01002276 *v:vim_did_enter* *vim_did_enter-variable*
2277v:vim_did_enter Zero until most of startup is done. It is set to one just
2278 before |VimEnter| autocommands are triggered.
2279
Bram Moolenaar071d4272004-06-13 20:20:40 +00002280 *v:warningmsg* *warningmsg-variable*
2281v:warningmsg Last given warning message. It's allowed to set this variable.
2282
Bram Moolenaar727c8762010-10-20 19:17:48 +02002283 *v:windowid* *windowid-variable*
2284v:windowid When any X11 based GUI is running or when running in a
2285 terminal and Vim connects to the X server (|-X|) this will be
Bram Moolenaar264e9fd2010-10-27 12:33:17 +02002286 set to the window ID.
2287 When an MS-Windows GUI is running this will be set to the
2288 window handle.
2289 Otherwise the value is zero.
Bram Moolenaar7571d552016-08-18 22:54:46 +02002290 Note: for windows inside Vim use |winnr()| or |win_getid()|,
2291 see |window-ID|.
Bram Moolenaar727c8762010-10-20 19:17:48 +02002292
Bram Moolenaar071d4272004-06-13 20:20:40 +00002293==============================================================================
22944. Builtin Functions *functions*
2295
2296See |function-list| for a list grouped by what the function is used for.
2297
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00002298(Use CTRL-] on the function name to jump to the full explanation.)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002299
2300USAGE RESULT DESCRIPTION ~
2301
Bram Moolenaar81edd172016-04-14 13:51:37 +02002302abs({expr}) Float or Number absolute value of {expr}
2303acos({expr}) Float arc cosine of {expr}
Bram Moolenaard8968242019-01-15 22:51:57 +01002304add({object}, {item}) List/Blob append {item} to {object}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002305and({expr}, {expr}) Number bitwise AND
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002306append({lnum}, {text}) Number append {text} below line {lnum}
2307appendbufline({expr}, {lnum}, {text})
2308 Number append {text} below line {lnum}
2309 in buffer {expr}
Bram Moolenaarf0d58ef2018-11-16 16:13:44 +01002310argc([{winid}]) Number number of files in the argument list
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002311argidx() Number current index in the argument list
Bram Moolenaar81edd172016-04-14 13:51:37 +02002312arglistid([{winnr} [, {tabnr}]]) Number argument list id
Bram Moolenaare6e39892018-10-25 12:32:11 +02002313argv({nr} [, {winid}]) String {nr} entry of the argument list
2314argv([-1, {winid}]) List the argument list
Bram Moolenaar65a54642018-04-28 16:56:53 +02002315assert_beeps({cmd}) Number assert {cmd} causes a beep
Bram Moolenaar42205552017-03-18 19:42:22 +01002316assert_equal({exp}, {act} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002317 Number assert {exp} is equal to {act}
Bram Moolenaard96ff162018-02-18 22:13:29 +01002318assert_equalfile({fname-one}, {fname-two})
Bram Moolenaar65a54642018-04-28 16:56:53 +02002319 Number assert file contents is equal
Bram Moolenaar42205552017-03-18 19:42:22 +01002320assert_exception({error} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002321 Number assert {error} is in v:exception
Bram Moolenaar2c64ca12018-10-19 16:22:31 +02002322assert_fails({cmd} [, {error} [, {msg}]])
2323 Number assert {cmd} fails
Bram Moolenaar42205552017-03-18 19:42:22 +01002324assert_false({actual} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002325 Number assert {actual} is false
Bram Moolenaar61c04492016-07-23 15:35:35 +02002326assert_inrange({lower}, {upper}, {actual} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002327 Number assert {actual} is inside the range
Bram Moolenaar42205552017-03-18 19:42:22 +01002328assert_match({pat}, {text} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002329 Number assert {pat} matches {text}
Bram Moolenaar42205552017-03-18 19:42:22 +01002330assert_notequal({exp}, {act} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002331 Number assert {exp} is not equal {act}
Bram Moolenaar42205552017-03-18 19:42:22 +01002332assert_notmatch({pat}, {text} [, {msg}])
Bram Moolenaar65a54642018-04-28 16:56:53 +02002333 Number assert {pat} not matches {text}
2334assert_report({msg}) Number report a test failure
2335assert_true({actual} [, {msg}]) Number assert {actual} is true
Bram Moolenaar81edd172016-04-14 13:51:37 +02002336asin({expr}) Float arc sine of {expr}
2337atan({expr}) Float arc tangent of {expr}
Bram Moolenaar04186092016-08-29 21:55:35 +02002338atan2({expr1}, {expr2}) Float arc tangent of {expr1} / {expr2}
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02002339balloon_gettext() String current text in the balloon
Bram Moolenaar74240d32017-12-10 15:26:15 +01002340balloon_show({expr}) none show {expr} inside the balloon
Bram Moolenaar246fe032017-11-19 19:56:27 +01002341balloon_split({msg}) List split {msg} as used for a balloon
Bram Moolenaar81edd172016-04-14 13:51:37 +02002342browse({save}, {title}, {initdir}, {default})
Bram Moolenaar071d4272004-06-13 20:20:40 +00002343 String put up a file requester
Bram Moolenaar81edd172016-04-14 13:51:37 +02002344browsedir({title}, {initdir}) String put up a directory requester
Bram Moolenaar15e248e2019-06-30 20:21:37 +02002345bufadd({name}) Number add a buffer to the buffer list
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002346bufexists({expr}) Number |TRUE| if buffer {expr} exists
2347buflisted({expr}) Number |TRUE| if buffer {expr} is listed
Bram Moolenaar15e248e2019-06-30 20:21:37 +02002348bufload({expr}) Number load buffer {expr} if not loaded yet
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002349bufloaded({expr}) Number |TRUE| if buffer {expr} is loaded
Bram Moolenaara8eee212019-08-24 22:14:58 +02002350bufname([{expr}]) String Name of the buffer {expr}
2351bufnr([{expr} [, {create}]]) Number Number of the buffer {expr}
Bram Moolenaarb3619a92016-06-04 17:58:52 +02002352bufwinid({expr}) Number window ID of buffer {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002353bufwinnr({expr}) Number window number of buffer {expr}
2354byte2line({byte}) Number line number at byte count {byte}
2355byteidx({expr}, {nr}) Number byte index of {nr}'th char in {expr}
2356byteidxcomp({expr}, {nr}) Number byte index of {nr}'th char in {expr}
2357call({func}, {arglist} [, {dict}])
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00002358 any call {func} with arguments {arglist}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002359ceil({expr}) Float round {expr} up
Bram Moolenaar4b785f62016-11-29 21:54:44 +01002360ch_canread({handle}) Number check if there is something to read
Bram Moolenaar81edd172016-04-14 13:51:37 +02002361ch_close({handle}) none close {handle}
Bram Moolenaar0874a832016-09-01 15:11:51 +02002362ch_close_in({handle}) none close in part of {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002363ch_evalexpr({handle}, {expr} [, {options}])
Bram Moolenaar5f148ec2016-03-07 22:59:26 +01002364 any evaluate {expr} on JSON {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002365ch_evalraw({handle}, {string} [, {options}])
Bram Moolenaar5f148ec2016-03-07 22:59:26 +01002366 any evaluate {string} on raw {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002367ch_getbufnr({handle}, {what}) Number get buffer number for {handle}/{what}
2368ch_getjob({channel}) Job get the Job of {channel}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002369ch_info({handle}) String info about channel {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002370ch_log({msg} [, {handle}]) none write {msg} in the channel log file
2371ch_logfile({fname} [, {mode}]) none start logging channel activity
2372ch_open({address} [, {options}])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002373 Channel open a channel to {address}
2374ch_read({handle} [, {options}]) String read from {handle}
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002375ch_readblob({handle} [, {options}])
2376 Blob read Blob from {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002377ch_readraw({handle} [, {options}])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002378 String read raw from {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002379ch_sendexpr({handle}, {expr} [, {options}])
Bram Moolenaar5f148ec2016-03-07 22:59:26 +01002380 any send {expr} over JSON {handle}
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002381ch_sendraw({handle}, {expr} [, {options}])
2382 any send {expr} over raw {handle}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002383ch_setoptions({handle}, {options})
2384 none set options for {handle}
Bram Moolenaar7ef38102016-09-26 22:36:58 +02002385ch_status({handle} [, {options}])
2386 String status of channel {handle}
Bram Moolenaar446cb832008-06-24 21:56:24 +00002387changenr() Number current change number
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002388char2nr({expr} [, {utf8}]) Number ASCII/UTF8 value of first char in {expr}
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02002389chdir({dir}) String change current working directory
Bram Moolenaar81edd172016-04-14 13:51:37 +02002390cindent({lnum}) Number C indent for line {lnum}
Bram Moolenaaraff74912019-03-30 18:11:49 +01002391clearmatches([{win}]) none clear all matches
Bram Moolenaar81edd172016-04-14 13:51:37 +02002392col({expr}) Number column nr of cursor or mark
2393complete({startcol}, {matches}) none set Insert mode completion
2394complete_add({expr}) Number add completion match
Bram Moolenaar446cb832008-06-24 21:56:24 +00002395complete_check() Number check for key typed during completion
Bram Moolenaarfd133322019-03-29 12:20:27 +01002396complete_info([{what}]) Dict get current completion information
Bram Moolenaar81edd172016-04-14 13:51:37 +02002397confirm({msg} [, {choices} [, {default} [, {type}]]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002398 Number number of choice picked by user
Bram Moolenaar81edd172016-04-14 13:51:37 +02002399copy({expr}) any make a shallow copy of {expr}
2400cos({expr}) Float cosine of {expr}
2401cosh({expr}) Float hyperbolic cosine of {expr}
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002402count({comp}, {expr} [, {ic} [, {start}]])
2403 Number count how many {expr} are in {comp}
Bram Moolenaardc1f1642016-08-16 18:33:43 +02002404cscope_connection([{num}, {dbpath} [, {prepend}]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002405 Number checks existence of cscope connection
Bram Moolenaar81edd172016-04-14 13:51:37 +02002406cursor({lnum}, {col} [, {off}])
Bram Moolenaar2f3b5102014-11-19 18:54:17 +01002407 Number move cursor to {lnum}, {col}, {off}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002408cursor({list}) Number move cursor to position in {list}
Bram Moolenaar4551c0a2018-06-20 22:38:21 +02002409debugbreak({pid}) Number interrupt process being debugged
Bram Moolenaar81edd172016-04-14 13:51:37 +02002410deepcopy({expr} [, {noref}]) any make a full copy of {expr}
2411delete({fname} [, {flags}]) Number delete the file or directory {fname}
Bram Moolenaard473c8c2018-08-11 18:00:22 +02002412deletebufline({expr}, {first} [, {last}])
Bram Moolenaard79a2622018-06-07 18:17:46 +02002413 Number delete lines from buffer {expr}
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002414did_filetype() Number |TRUE| if FileType autocmd event used
Bram Moolenaar81edd172016-04-14 13:51:37 +02002415diff_filler({lnum}) Number diff filler lines about {lnum}
2416diff_hlID({lnum}, {col}) Number diff highlighting at {lnum}/{col}
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002417empty({expr}) Number |TRUE| if {expr} is empty
Bram Moolenaar691ddee2019-05-09 14:52:41 +02002418environ() Dict return environment variables
Bram Moolenaar81edd172016-04-14 13:51:37 +02002419escape({string}, {chars}) String escape {chars} in {string} with '\'
2420eval({string}) any evaluate {string} into its value
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002421eventhandler() Number |TRUE| if inside an event handler
Bram Moolenaar81edd172016-04-14 13:51:37 +02002422executable({expr}) Number 1 if executable {expr} exists
Bram Moolenaar79815f12016-07-09 17:07:29 +02002423execute({command}) String execute {command} and get the output
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002424exepath({expr}) String full path of the command {expr}
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002425exists({expr}) Number |TRUE| if {expr} exists
Bram Moolenaar81edd172016-04-14 13:51:37 +02002426extend({expr1}, {expr2} [, {expr3}])
Bram Moolenaarc6fe9192006-04-09 21:54:49 +00002427 List/Dict insert items of {expr2} into {expr1}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002428exp({expr}) Float exponential of {expr}
2429expand({expr} [, {nosuf} [, {list}]])
Bram Moolenaar146e9c32012-03-07 19:18:23 +01002430 any expand special keywords in {expr}
Bram Moolenaar80dad482019-06-09 17:22:31 +02002431expandcmd({expr}) String expand {expr} like with `:edit`
Bram Moolenaar81edd172016-04-14 13:51:37 +02002432feedkeys({string} [, {mode}]) Number add key sequence to typeahead buffer
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002433filereadable({file}) Number |TRUE| if {file} is a readable file
2434filewritable({file}) Number |TRUE| if {file} is a writable file
Bram Moolenaar50ba5262016-09-22 22:33:02 +02002435filter({expr1}, {expr2}) List/Dict remove items from {expr1} where
2436 {expr2} is 0
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002437finddir({name} [, {path} [, {count}]])
Bram Moolenaarc6fe9192006-04-09 21:54:49 +00002438 String find directory {name} in {path}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002439findfile({name} [, {path} [, {count}]])
Bram Moolenaarc6fe9192006-04-09 21:54:49 +00002440 String find file {name} in {path}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002441float2nr({expr}) Number convert Float {expr} to a Number
2442floor({expr}) Float round {expr} down
2443fmod({expr1}, {expr2}) Float remainder of {expr1} / {expr2}
2444fnameescape({fname}) String escape special characters in {fname}
2445fnamemodify({fname}, {mods}) String modify file name
2446foldclosed({lnum}) Number first line of fold at {lnum} if closed
2447foldclosedend({lnum}) Number last line of fold at {lnum} if closed
2448foldlevel({lnum}) Number fold level at {lnum}
Bram Moolenaare0fa3742016-02-20 15:47:01 +01002449foldtext() String line displayed for closed fold
Bram Moolenaar81edd172016-04-14 13:51:37 +02002450foldtextresult({lnum}) String text for closed fold at {lnum}
Bram Moolenaare0fa3742016-02-20 15:47:01 +01002451foreground() Number bring the Vim window to the foreground
Bram Moolenaar437bafe2016-08-01 15:40:54 +02002452funcref({name} [, {arglist}] [, {dict}])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002453 Funcref reference to function {name}
Bram Moolenaar437bafe2016-08-01 15:40:54 +02002454function({name} [, {arglist}] [, {dict}])
2455 Funcref named reference to function {name}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002456garbagecollect([{atexit}]) none free memory, breaking cyclic references
Bram Moolenaar81edd172016-04-14 13:51:37 +02002457get({list}, {idx} [, {def}]) any get item {idx} from {list} or {def}
2458get({dict}, {key} [, {def}]) any get item {key} from {dict} or {def}
Bram Moolenaar03e19a02016-05-24 22:29:49 +02002459get({func}, {what}) any get property of funcref/partial {func}
Bram Moolenaar50ba5262016-09-22 22:33:02 +02002460getbufinfo([{expr}]) List information about buffers
Bram Moolenaar81edd172016-04-14 13:51:37 +02002461getbufline({expr}, {lnum} [, {end}])
Bram Moolenaar45360022005-07-21 21:08:21 +00002462 List lines {lnum} to {end} of buffer {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002463getbufvar({expr}, {varname} [, {def}])
Bram Moolenaar63dbda12013-02-20 21:12:10 +01002464 any variable {varname} in buffer {expr}
Bram Moolenaar4c313b12019-08-24 22:58:31 +02002465getchangelist([{expr}]) List list of change list items
Bram Moolenaar81edd172016-04-14 13:51:37 +02002466getchar([expr]) Number get one character from the user
Bram Moolenaare0fa3742016-02-20 15:47:01 +01002467getcharmod() Number modifiers for the last typed character
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +02002468getcharsearch() Dict last character search
Bram Moolenaar071d4272004-06-13 20:20:40 +00002469getcmdline() String return the current command-line
2470getcmdpos() Number return cursor position in command-line
Bram Moolenaarfb539272014-08-22 19:21:47 +02002471getcmdtype() String return current command-line type
2472getcmdwintype() String return current command-line window type
Bram Moolenaare9d58a62016-08-13 15:07:41 +02002473getcompletion({pat}, {type} [, {filtered}])
2474 List list of cmdline completion matches
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02002475getcurpos() List position of the cursor
Bram Moolenaar81edd172016-04-14 13:51:37 +02002476getcwd([{winnr} [, {tabnr}]]) String get the current working directory
Bram Moolenaar691ddee2019-05-09 14:52:41 +02002477getenv({name}) String return environment variable
Bram Moolenaar81edd172016-04-14 13:51:37 +02002478getfontname([{name}]) String name of font being used
2479getfperm({fname}) String file permissions of file {fname}
2480getfsize({fname}) Number size in bytes of file {fname}
2481getftime({fname}) Number last modification time of file
2482getftype({fname}) String description of type of file {fname}
Bram Moolenaara3a12462019-09-07 15:08:38 +02002483getimstatus() Number |TRUE| if the IME status is active
Bram Moolenaar4f505882018-02-10 21:06:32 +01002484getjumplist([{winnr} [, {tabnr}]])
2485 List list of jump list items
Bram Moolenaar81edd172016-04-14 13:51:37 +02002486getline({lnum}) String line {lnum} of current buffer
2487getline({lnum}, {end}) List lines {lnum} to {end} of current buffer
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002488getloclist({nr} [, {what}]) List list of location list items
Bram Moolenaaraff74912019-03-30 18:11:49 +01002489getmatches([{win}]) List list of current matches
Bram Moolenaardb3a2052019-11-16 18:22:41 +01002490getmousepos() Dict last known mouse position
Bram Moolenaar18081e32008-02-20 19:11:07 +00002491getpid() Number process ID of Vim
Bram Moolenaar81edd172016-04-14 13:51:37 +02002492getpos({expr}) List position of cursor, mark, etc.
Bram Moolenaard823fa92016-08-12 16:29:27 +02002493getqflist([{what}]) List list of quickfix items
Bram Moolenaar81edd172016-04-14 13:51:37 +02002494getreg([{regname} [, 1 [, {list}]]])
Bram Moolenaarb7cb42b2014-04-02 19:55:10 +02002495 String or List contents of register
Bram Moolenaar81edd172016-04-14 13:51:37 +02002496getregtype([{regname}]) String type of register
Bram Moolenaar50ba5262016-09-22 22:33:02 +02002497gettabinfo([{expr}]) List list of tab pages
Bram Moolenaar81edd172016-04-14 13:51:37 +02002498gettabvar({nr}, {varname} [, {def}])
Bram Moolenaar63dbda12013-02-20 21:12:10 +01002499 any variable {varname} in tab {nr} or {def}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002500gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00002501 any {name} in {winnr} in tab page {tabnr}
Bram Moolenaarf49cc602018-11-11 15:21:05 +01002502gettagstack([{nr}]) Dict get the tag stack of window {nr}
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02002503getwininfo([{winid}]) List list of info about each window
Bram Moolenaar98ef2332018-03-18 14:44:37 +01002504getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01002505getwinposx() Number X coord in pixels of the Vim window
2506getwinposy() Number Y coord in pixels of the Vim window
Bram Moolenaar81edd172016-04-14 13:51:37 +02002507getwinvar({nr}, {varname} [, {def}])
Bram Moolenaar63dbda12013-02-20 21:12:10 +01002508 any variable {varname} in window {nr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002509glob({expr} [, {nosuf} [, {list} [, {alllinks}]]])
Bram Moolenaar146e9c32012-03-07 19:18:23 +01002510 any expand file wildcards in {expr}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002511glob2regpat({expr}) String convert a glob pat into a search pat
Bram Moolenaar81edd172016-04-14 13:51:37 +02002512globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00002513 String do glob({expr}) for all dirs in {path}
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002514has({feature}) Number |TRUE| if feature {feature} supported
2515has_key({dict}, {key}) Number |TRUE| if {dict} has entry {key}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002516haslocaldir([{winnr} [, {tabnr}]])
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002517 Number |TRUE| if the window executed |:lcd|
Bram Moolenaar00aa0692019-04-27 20:37:57 +02002518 or |:tcd|
Bram Moolenaar81edd172016-04-14 13:51:37 +02002519hasmapto({what} [, {mode} [, {abbr}]])
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002520 Number |TRUE| if mapping to {what} exists
Bram Moolenaar8a7d6542020-01-26 15:56:19 +01002521histadd({history}, {item}) Number add an item to a history
2522histdel({history} [, {item}]) Number remove an item from a history
Bram Moolenaar81edd172016-04-14 13:51:37 +02002523histget({history} [, {index}]) String get the item {index} from a history
2524histnr({history}) Number highest index of a history
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002525hlexists({name}) Number |TRUE| if highlight group {name} exists
Bram Moolenaar81edd172016-04-14 13:51:37 +02002526hlID({name}) Number syntax ID of highlight group {name}
Bram Moolenaar071d4272004-06-13 20:20:40 +00002527hostname() String name of the machine Vim is running on
Bram Moolenaar81edd172016-04-14 13:51:37 +02002528iconv({expr}, {from}, {to}) String convert encoding of {expr}
2529indent({lnum}) Number indent of line {lnum}
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002530index({object}, {expr} [, {start} [, {ic}]])
2531 Number index in {object} where {expr} appears
Bram Moolenaar81edd172016-04-14 13:51:37 +02002532input({prompt} [, {text} [, {completion}]])
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00002533 String get input from the user
Bram Moolenaarb6e0ec62017-07-23 22:12:20 +02002534inputdialog({prompt} [, {text} [, {completion}]])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002535 String like input() but in a GUI dialog
Bram Moolenaar81edd172016-04-14 13:51:37 +02002536inputlist({textlist}) Number let the user pick from a choice list
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002537inputrestore() Number restore typeahead
2538inputsave() Number save and clear typeahead
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002539inputsecret({prompt} [, {text}]) String like input() but hiding the text
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002540insert({object}, {item} [, {idx}]) List insert {item} in {object} [before {idx}]
Bram Moolenaar67a2deb2019-11-25 00:05:32 +01002541interrupt() none interrupt script execution
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002542invert({expr}) Number bitwise invert
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002543isdirectory({directory}) Number |TRUE| if {directory} is a directory
Bram Moolenaarfda1bff2019-04-04 13:44:37 +02002544isinf({expr}) Number determine if {expr} is infinity value
2545 (positive or negative)
Bram Moolenaare381d3d2016-07-07 14:50:41 +02002546islocked({expr}) Number |TRUE| if {expr} is locked
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002547isnan({expr}) Number |TRUE| if {expr} is NaN
Bram Moolenaar81edd172016-04-14 13:51:37 +02002548items({dict}) List key-value pairs in {dict}
2549job_getchannel({job}) Channel get the channel handle for {job}
Bram Moolenaare1fc5152018-04-21 19:49:08 +02002550job_info([{job}]) Dict get information about {job}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002551job_setoptions({job}, {options}) none set options for {job}
2552job_start({command} [, {options}])
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002553 Job start a job
Bram Moolenaar81edd172016-04-14 13:51:37 +02002554job_status({job}) String get the status of {job}
2555job_stop({job} [, {how}]) Number stop {job}
2556join({list} [, {sep}]) String join {list} items into one String
2557js_decode({string}) any decode JS style JSON
2558js_encode({expr}) String encode JS style JSON
2559json_decode({string}) any decode JSON
2560json_encode({expr}) String encode JSON
2561keys({dict}) List keys in {dict}
2562len({expr}) Number the length of {expr}
2563libcall({lib}, {func}, {arg}) String call {func} in library {lib} with {arg}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002564libcallnr({lib}, {func}, {arg}) Number idem, but return a Number
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02002565line({expr} [, {winid}]) Number line nr of cursor, last line or mark
Bram Moolenaar81edd172016-04-14 13:51:37 +02002566line2byte({lnum}) Number byte count of line {lnum}
2567lispindent({lnum}) Number Lisp indent for line {lnum}
Bram Moolenaar9d401282019-04-06 13:18:12 +02002568list2str({list} [, {utf8}]) String turn numbers in {list} into a String
Bram Moolenaara3347722019-05-11 21:14:24 +02002569listener_add({callback} [, {buf}])
2570 Number add a callback to listen to changes
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02002571listener_flush([{buf}]) none invoke listener callbacks
Bram Moolenaara3347722019-05-11 21:14:24 +02002572listener_remove({id}) none remove a listener callback
Bram Moolenaar071d4272004-06-13 20:20:40 +00002573localtime() Number current time
Bram Moolenaar81edd172016-04-14 13:51:37 +02002574log({expr}) Float natural logarithm (base e) of {expr}
2575log10({expr}) Float logarithm of Float {expr} to base 10
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002576luaeval({expr} [, {expr}]) any evaluate |Lua| expression
Bram Moolenaar50ba5262016-09-22 22:33:02 +02002577map({expr1}, {expr2}) List/Dict change each item in {expr1} to {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002578maparg({name} [, {mode} [, {abbr} [, {dict}]]])
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01002579 String or Dict
2580 rhs of mapping {name} in mode {mode}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002581mapcheck({name} [, {mode} [, {abbr}]])
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00002582 String check for mappings matching {name}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002583match({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002584 Number position where {pat} matches in {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002585matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
Bram Moolenaar6ee10162007-07-26 20:58:42 +00002586 Number highlight {pattern} with {group}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002587matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
Bram Moolenaarb3414592014-06-17 17:48:32 +02002588 Number highlight positions with {group}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002589matcharg({nr}) List arguments of |:match|
Bram Moolenaaraff74912019-03-30 18:11:49 +01002590matchdelete({id} [, {win}]) Number delete match identified by {id}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002591matchend({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002592 Number position where {pat} ends in {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002593matchlist({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00002594 List match and submatches of {pat} in {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002595matchstr({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00002596 String {count}'th match of {pat} in {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002597matchstrpos({expr}, {pat} [, {start} [, {count}]])
Bram Moolenaar7fed5c12016-03-29 23:10:31 +02002598 List {count}'th match of {pat} in {expr}
Bram Moolenaar690afe12017-01-28 18:34:47 +01002599max({expr}) Number maximum value of items in {expr}
2600min({expr}) Number minimum value of items in {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002601mkdir({name} [, {path} [, {prot}]])
Bram Moolenaar26a60b42005-02-22 08:49:11 +00002602 Number create directory {name}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002603mode([expr]) String current editing mode
2604mzeval({expr}) any evaluate |MzScheme| expression
2605nextnonblank({lnum}) Number line nr of non-blank line >= {lnum}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002606nr2char({expr} [, {utf8}]) String single char with ASCII/UTF8 value {expr}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002607or({expr}, {expr}) Number bitwise OR
Bram Moolenaar81edd172016-04-14 13:51:37 +02002608pathshorten({expr}) String shorten directory names in a path
2609perleval({expr}) any evaluate |Perl| expression
Bram Moolenaar931a2772019-07-04 16:54:54 +02002610popup_atcursor({what}, {options}) Number create popup window near the cursor
Bram Moolenaar589edb32019-09-20 14:38:13 +02002611popup_beval({what}, {options}) Number create popup window for 'ballooneval'
Bram Moolenaar931a2772019-07-04 16:54:54 +02002612popup_clear() none close all popup windows
2613popup_close({id} [, {result}]) none close popup window {id}
2614popup_create({what}, {options}) Number create a popup window
2615popup_dialog({what}, {options}) Number create a popup window used as a dialog
2616popup_filter_menu({id}, {key}) Number filter for a menu popup window
2617popup_filter_yesno({id}, {key}) Number filter for a dialog popup window
Bram Moolenaare49fbff2019-08-21 22:50:07 +02002618popup_findinfo() Number get window ID of info popup window
2619popup_findpreview() Number get window ID of preview popup window
Bram Moolenaar931a2772019-07-04 16:54:54 +02002620popup_getoptions({id}) Dict get options of popup window {id}
2621popup_getpos({id}) Dict get position of popup window {id}
2622popup_hide({id}) none hide popup menu {id}
2623popup_menu({what}, {options}) Number create a popup window used as a menu
2624popup_move({id}, {options}) none set position of popup window {id}
2625popup_notification({what}, {options})
2626 Number create a notification popup window
2627popup_show({id}) none unhide popup window {id}
2628popup_setoptions({id}, {options})
2629 none set options for popup window {id}
2630popup_settext({id}, {text}) none set the text of popup window {id}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002631pow({x}, {y}) Float {x} to the power of {y}
2632prevnonblank({lnum}) Number line nr of non-blank line <= {lnum}
2633printf({fmt}, {expr1}...) String format text
Bram Moolenaarf2732452018-06-03 14:47:35 +02002634prompt_setcallback({buf}, {expr}) none set prompt callback function
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02002635prompt_setinterrupt({buf}, {text}) none set prompt interrupt function
2636prompt_setprompt({buf}, {text}) none set prompt text
Bram Moolenaar98aefe72018-12-13 22:20:09 +01002637prop_add({lnum}, {col}, {props}) none add a text property
Bram Moolenaare3d31b02018-12-24 23:07:04 +01002638prop_clear({lnum} [, {lnum-end} [, {props}]])
Bram Moolenaar98aefe72018-12-13 22:20:09 +01002639 none remove all text properties
2640prop_find({props} [, {direction}])
2641 Dict search for a text property
Bram Moolenaar5b69c222019-01-11 14:50:06 +01002642prop_list({lnum} [, {props}) List text properties in {lnum}
Bram Moolenaarc8c88492018-12-27 23:59:26 +01002643prop_remove({props} [, {lnum} [, {lnum-end}]])
Bram Moolenaar98aefe72018-12-13 22:20:09 +01002644 Number remove a text property
2645prop_type_add({name}, {props}) none define a new property type
2646prop_type_change({name}, {props})
2647 none change an existing property type
2648prop_type_delete({name} [, {props}])
2649 none delete a property type
2650prop_type_get([{name} [, {props}])
2651 Dict get property type values
2652prop_type_list([{props}]) List get list of property types
Bram Moolenaare9bd5722019-08-17 19:36:06 +02002653pum_getpos() Dict position and size of pum if visible
Bram Moolenaar446cb832008-06-24 21:56:24 +00002654pumvisible() Number whether popup menu is visible
Bram Moolenaar81edd172016-04-14 13:51:37 +02002655pyeval({expr}) any evaluate |Python| expression
2656py3eval({expr}) any evaluate |python3| expression
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +01002657pyxeval({expr}) any evaluate |python_x| expression
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01002658rand([{expr}]) Number get pseudo-random number
Bram Moolenaar81edd172016-04-14 13:51:37 +02002659range({expr} [, {max} [, {stride}]])
Bram Moolenaard8b02732005-01-14 21:48:43 +00002660 List items from {expr} to {max}
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02002661readdir({dir} [, {expr}]) List file names in {dir} selected by {expr}
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002662readfile({fname} [, {type} [, {max}]])
Bram Moolenaar26a60b42005-02-22 08:49:11 +00002663 List get list of lines from file {fname}
Bram Moolenaarf2732452018-06-03 14:47:35 +02002664reg_executing() String get the executing register name
Bram Moolenaar0b6d9112018-05-22 20:35:17 +02002665reg_recording() String get the recording register name
Bram Moolenaar81edd172016-04-14 13:51:37 +02002666reltime([{start} [, {end}]]) List get time value
2667reltimefloat({time}) Float turn the time value into a Float
2668reltimestr({time}) String turn time value into a String
Bram Moolenaar3c2881d2017-03-21 19:18:29 +01002669remote_expr({server}, {string} [, {idvar} [, {timeout}]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002670 String send expression
Bram Moolenaar81edd172016-04-14 13:51:37 +02002671remote_foreground({server}) Number bring Vim server to the foreground
2672remote_peek({serverid} [, {retvar}])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002673 Number check for reply string
Bram Moolenaar3c2881d2017-03-21 19:18:29 +01002674remote_read({serverid} [, {timeout}])
2675 String read reply string
Bram Moolenaar81edd172016-04-14 13:51:37 +02002676remote_send({server}, {string} [, {idvar}])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002677 String send key sequence
Bram Moolenaar7416f3e2017-03-18 18:10:13 +01002678remote_startserver({name}) none become server {name}
Bram Moolenaar10455d42019-11-21 15:36:18 +01002679remove({list}, {idx} [, {end}]) any/List
Bram Moolenaar39536dd2019-01-29 22:58:21 +01002680 remove items {idx}-{end} from {list}
2681remove({blob}, {idx} [, {end}]) Number/Blob
2682 remove bytes {idx}-{end} from {blob}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002683remove({dict}, {key}) any remove entry {key} from {dict}
2684rename({from}, {to}) Number rename (move) file from {from} to {to}
2685repeat({expr}, {count}) String repeat {expr} {count} times
2686resolve({filename}) String get filename a shortcut points to
2687reverse({list}) List reverse {list} in-place
2688round({expr}) Float round off {expr}
Bram Moolenaare99be0e2019-03-26 22:51:09 +01002689rubyeval({expr}) any evaluate |Ruby| expression
Bram Moolenaar81edd172016-04-14 13:51:37 +02002690screenattr({row}, {col}) Number attribute at screen position
2691screenchar({row}, {col}) Number character at screen position
Bram Moolenaar2912abb2019-03-29 14:16:42 +01002692screenchars({row}, {col}) List List of characters at screen position
Bram Moolenaar9750bb12012-12-05 16:10:42 +01002693screencol() Number current cursor column
Bram Moolenaarb3d17a22019-07-07 18:28:14 +02002694screenpos({winid}, {lnum}, {col}) Dict screen row and col of a text character
Bram Moolenaar9750bb12012-12-05 16:10:42 +01002695screenrow() Number current cursor row
Bram Moolenaar2912abb2019-03-29 14:16:42 +01002696screenstring({row}, {col}) String characters at screen position
Bram Moolenaar81edd172016-04-14 13:51:37 +02002697search({pattern} [, {flags} [, {stopline} [, {timeout}]]])
Bram Moolenaar76929292008-01-06 19:07:36 +00002698 Number search for {pattern}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002699searchdecl({name} [, {global} [, {thisblock}]])
Bram Moolenaar446cb832008-06-24 21:56:24 +00002700 Number search for variable declaration
Bram Moolenaar81edd172016-04-14 13:51:37 +02002701searchpair({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002702 Number search for other end of start/end pair
Bram Moolenaar81edd172016-04-14 13:51:37 +02002703searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [...]]])
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00002704 List search for other end of start/end pair
Bram Moolenaar81edd172016-04-14 13:51:37 +02002705searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]])
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00002706 List search for {pattern}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002707server2client({clientid}, {string})
Bram Moolenaar071d4272004-06-13 20:20:40 +00002708 Number send reply string
2709serverlist() String get a list of available servers
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002710setbufline({expr}, {lnum}, {text})
2711 Number set line {lnum} to {text} in buffer
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02002712 {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002713setbufvar({expr}, {varname}, {val})
2714 none set {varname} in buffer {expr} to {val}
2715setcharsearch({dict}) Dict set character search from {dict}
2716setcmdpos({pos}) Number set cursor position in command-line
Bram Moolenaar691ddee2019-05-09 14:52:41 +02002717setenv({name}, {val}) none set environment variable
Bram Moolenaar81edd172016-04-14 13:51:37 +02002718setfperm({fname}, {mode}) Number set {fname} file permissions to {mode}
2719setline({lnum}, {line}) Number set line {lnum} to {line}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002720setloclist({nr}, {list} [, {action} [, {what}]])
Bram Moolenaar17c7c012006-01-26 22:25:15 +00002721 Number modify location list using {list}
Bram Moolenaaraff74912019-03-30 18:11:49 +01002722setmatches({list} [, {win}]) Number restore a list of matches
Bram Moolenaar81edd172016-04-14 13:51:37 +02002723setpos({expr}, {list}) Number set the {expr} position to {list}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002724setqflist({list} [, {action} [, {what}]])
Bram Moolenaard823fa92016-08-12 16:29:27 +02002725 Number modify quickfix list using {list}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002726setreg({n}, {v} [, {opt}]) Number set register to value and type
Bram Moolenaar81edd172016-04-14 13:51:37 +02002727settabvar({nr}, {varname}, {val}) none set {varname} in tab page {nr} to {val}
2728settabwinvar({tabnr}, {winnr}, {varname}, {val})
2729 none set {varname} in window {winnr} in tab
2730 page {tabnr} to {val}
Bram Moolenaarf49cc602018-11-11 15:21:05 +01002731settagstack({nr}, {dict} [, {action}])
2732 Number modify tag stack using {dict}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002733setwinvar({nr}, {varname}, {val}) none set {varname} in window {nr} to {val}
2734sha256({string}) String SHA256 checksum of {string}
2735shellescape({string} [, {special}])
Bram Moolenaar05bb9532008-07-04 09:44:11 +00002736 String escape {string} for use as shell
Bram Moolenaar60a495f2006-10-03 12:44:42 +00002737 command argument
Bram Moolenaarf9514162018-11-22 03:08:29 +01002738shiftwidth([{col}]) Number effective value of 'shiftwidth'
Bram Moolenaar162b7142018-12-21 15:17:36 +01002739sign_define({name} [, {dict}]) Number define or update a sign
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02002740sign_define({list}) List define or update a list of signs
Bram Moolenaar162b7142018-12-21 15:17:36 +01002741sign_getdefined([{name}]) List get a list of defined signs
2742sign_getplaced([{expr} [, {dict}]])
2743 List get a list of placed signs
Bram Moolenaar6b7b7192019-01-11 13:42:41 +01002744sign_jump({id}, {group}, {expr})
2745 Number jump to a sign
Bram Moolenaar162b7142018-12-21 15:17:36 +01002746sign_place({id}, {group}, {name}, {expr} [, {dict}])
2747 Number place a sign
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02002748sign_placelist({list}) List place a list of signs
Bram Moolenaar162b7142018-12-21 15:17:36 +01002749sign_undefine([{name}]) Number undefine a sign
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02002750sign_undefine({list}) List undefine a list of signs
Bram Moolenaar162b7142018-12-21 15:17:36 +01002751sign_unplace({group} [, {dict}])
2752 Number unplace a sign
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02002753sign_unplacelist({list}) List unplace a list of signs
Bram Moolenaar81edd172016-04-14 13:51:37 +02002754simplify({filename}) String simplify filename as much as possible
2755sin({expr}) Float sine of {expr}
2756sinh({expr}) Float hyperbolic sine of {expr}
2757sort({list} [, {func} [, {dict}]])
Bram Moolenaar5f894962011-06-19 02:55:37 +02002758 List sort {list}, using {func} to compare
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02002759sound_clear() none stop playing all sounds
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002760sound_playevent({name} [, {callback}])
2761 Number play an event sound
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02002762sound_playfile({path} [, {callback}])
2763 Number play sound file {path}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02002764sound_stop({id}) none stop playing sound {id}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002765soundfold({word}) String sound-fold {word}
Bram Moolenaard857f0e2005-06-21 22:37:39 +00002766spellbadword() String badly spelled word at cursor
Bram Moolenaar81edd172016-04-14 13:51:37 +02002767spellsuggest({word} [, {max} [, {capital}]])
Bram Moolenaarc54b8a72005-09-30 21:20:29 +00002768 List spelling suggestions
Bram Moolenaar81edd172016-04-14 13:51:37 +02002769split({expr} [, {pat} [, {keepempty}]])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00002770 List make |List| from {pat} separated {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002771sqrt({expr}) Float square root of {expr}
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01002772srand([{expr}]) List get seed for |rand()|
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02002773state([{what}]) String current state of Vim
Bram Moolenaar81edd172016-04-14 13:51:37 +02002774str2float({expr}) Float convert String to Float
Bram Moolenaar9d401282019-04-06 13:18:12 +02002775str2list({expr} [, {utf8}]) List convert each character of {expr} to
2776 ASCII/UTF8 value
Bram Moolenaar60a8de22019-09-15 14:33:22 +02002777str2nr({expr} [, {base} [, {quoted}]])
2778 Number convert String to Number
Bram Moolenaar81edd172016-04-14 13:51:37 +02002779strchars({expr} [, {skipcc}]) Number character length of the String {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002780strcharpart({str}, {start} [, {len}])
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02002781 String {len} characters of {str} at {start}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002782strdisplaywidth({expr} [, {col}]) Number display length of the String {expr}
Bram Moolenaar10455d42019-11-21 15:36:18 +01002783strftime({format} [, {time}]) String format time with a specified format
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02002784strgetchar({str}, {index}) Number get char {index} from {str}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002785stridx({haystack}, {needle} [, {start}])
Bram Moolenaar8f999f12005-01-25 22:12:55 +00002786 Number index of {needle} in {haystack}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002787string({expr}) String String representation of {expr} value
2788strlen({expr}) Number length of the String {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002789strpart({str}, {start} [, {len}])
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02002790 String {len} characters of {str} at {start}
Bram Moolenaar10455d42019-11-21 15:36:18 +01002791strptime({format}, {timestring})
2792 Number Convert {timestring} to unix timestamp
Bram Moolenaar81edd172016-04-14 13:51:37 +02002793strridx({haystack}, {needle} [, {start}])
Bram Moolenaar677ee682005-01-27 14:41:15 +00002794 Number last index of {needle} in {haystack}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002795strtrans({expr}) String translate string to make it printable
2796strwidth({expr}) Number display cell length of the String {expr}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002797submatch({nr} [, {list}]) String or List
Bram Moolenaar41571762014-04-02 19:00:58 +02002798 specific match in ":s" or substitute()
Bram Moolenaar81edd172016-04-14 13:51:37 +02002799substitute({expr}, {pat}, {sub}, {flags})
Bram Moolenaar071d4272004-06-13 20:20:40 +00002800 String all {pat} in {expr} replaced with {sub}
Bram Moolenaar00f123a2018-08-21 20:28:54 +02002801swapinfo({fname}) Dict information about swap file {fname}
Bram Moolenaar110bd602018-09-16 18:46:59 +02002802swapname({expr}) String swap file of buffer {expr}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002803synID({lnum}, {col}, {trans}) Number syntax ID at {lnum} and {col}
2804synIDattr({synID}, {what} [, {mode}])
Bram Moolenaar071d4272004-06-13 20:20:40 +00002805 String attribute {what} of syntax ID {synID}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002806synIDtrans({synID}) Number translated syntax ID of {synID}
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002807synconcealed({lnum}, {col}) List info about concealing
Bram Moolenaar81edd172016-04-14 13:51:37 +02002808synstack({lnum}, {col}) List stack of syntax IDs at {lnum} and {col}
2809system({expr} [, {input}]) String output of shell command/filter {expr}
2810systemlist({expr} [, {input}]) List output of shell command/filter {expr}
Bram Moolenaar802a0d92016-06-26 16:17:58 +02002811tabpagebuflist([{arg}]) List list of buffer numbers in tab page
Bram Moolenaar81edd172016-04-14 13:51:37 +02002812tabpagenr([{arg}]) Number number of current or last tab page
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002813tabpagewinnr({tabarg} [, {arg}]) Number number of current window in tab page
2814taglist({expr} [, {filename}]) List list of tags matching {expr}
Bram Moolenaar446cb832008-06-24 21:56:24 +00002815tagfiles() List tags files used
Bram Moolenaar81edd172016-04-14 13:51:37 +02002816tan({expr}) Float tangent of {expr}
2817tanh({expr}) Float hyperbolic tangent of {expr}
Bram Moolenaar975b5272016-03-15 23:10:59 +01002818tempname() String name for a temporary file
Bram Moolenaard96ff162018-02-18 22:13:29 +01002819term_dumpdiff({filename}, {filename} [, {options}])
2820 Number display difference between two dumps
2821term_dumpload({filename} [, {options}])
2822 Number displaying a screen dump
Bram Moolenaar6bb2cdf2018-02-24 19:53:53 +01002823term_dumpwrite({buf}, {filename} [, {options}])
Bram Moolenaard96ff162018-02-18 22:13:29 +01002824 none dump terminal window contents
Bram Moolenaare41e3b42017-08-11 16:24:50 +02002825term_getaltscreen({buf}) Number get the alternate screen flag
Bram Moolenaarf59c6e82018-04-10 15:59:11 +02002826term_getansicolors({buf}) List get ANSI palette in GUI color mode
Bram Moolenaar45356542017-08-06 17:53:31 +02002827term_getattr({attr}, {what}) Number get the value of attribute {what}
Bram Moolenaar97870002017-07-30 18:28:38 +02002828term_getcursor({buf}) List get the cursor position of a terminal
Bram Moolenaarc6df10e2017-07-29 20:15:08 +02002829term_getjob({buf}) Job get the job associated with a terminal
Bram Moolenaarc2ce52c2017-08-01 18:35:38 +02002830term_getline({buf}, {row}) String get a line of text from a terminal
Bram Moolenaar82b9ca02017-08-08 23:06:46 +02002831term_getscrolled({buf}) Number get the scroll count of a terminal
Bram Moolenaarc6df10e2017-07-29 20:15:08 +02002832term_getsize({buf}) List get the size of a terminal
Bram Moolenaarb000e322017-07-30 19:38:21 +02002833term_getstatus({buf}) String get the status of a terminal
2834term_gettitle({buf}) String get the title of a terminal
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01002835term_gettty({buf}, [{input}]) String get the tty name of a terminal
Bram Moolenaarc6df10e2017-07-29 20:15:08 +02002836term_list() List get the list of terminal buffers
Bram Moolenaarc2ce52c2017-08-01 18:35:38 +02002837term_scrape({buf}, {row}) List get row of a terminal screen
Bram Moolenaarc6df10e2017-07-29 20:15:08 +02002838term_sendkeys({buf}, {keys}) none send keystrokes to a terminal
Bram Moolenaard2842ea2019-09-26 23:08:54 +02002839term_setapi({buf}, {expr}) none set |terminal-api| function name prefix
Bram Moolenaarf59c6e82018-04-10 15:59:11 +02002840term_setansicolors({buf}, {colors})
2841 none set ANSI palette in GUI color mode
Bram Moolenaar7dda86f2018-04-20 22:36:41 +02002842term_setkill({buf}, {how}) none set signal to stop job in terminal
Bram Moolenaarb5b75622018-03-09 22:22:21 +01002843term_setrestore({buf}, {command}) none set command to restore terminal
Bram Moolenaar7dda86f2018-04-20 22:36:41 +02002844term_setsize({buf}, {rows}, {cols})
2845 none set the size of a terminal
Bram Moolenaar911ead12019-04-21 00:03:35 +02002846term_start({cmd} [, {options}]) Number open a terminal window and run a job
Bram Moolenaarf3402b12017-08-06 19:07:08 +02002847term_wait({buf} [, {time}]) Number wait for screen to be updated
Bram Moolenaar8e8df252016-05-25 21:23:21 +02002848test_alloc_fail({id}, {countdown}, {repeat})
2849 none make memory allocation fail
Bram Moolenaar6f1d9a02016-07-24 14:12:38 +02002850test_autochdir() none enable 'autochdir' during startup
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002851test_feedinput({string}) none add key sequence to input buffer
Bram Moolenaar574860b2016-05-24 17:33:34 +02002852test_garbagecollect_now() none free memory right now for testing
Bram Moolenaaradc67142019-06-22 01:40:42 +02002853test_garbagecollect_soon() none free memory soon for testing
Bram Moolenaareda65222019-05-16 20:29:44 +02002854test_getvalue({string}) any get value of an internal variable
Bram Moolenaare0c31f62017-03-01 15:07:05 +01002855test_ignore_error({expr}) none ignore a specific error
Bram Moolenaarc0f5a782019-01-13 15:16:13 +01002856test_null_blob() Blob null value for testing
Bram Moolenaar574860b2016-05-24 17:33:34 +02002857test_null_channel() Channel null value for testing
2858test_null_dict() Dict null value for testing
2859test_null_job() Job null value for testing
2860test_null_list() List null value for testing
2861test_null_partial() Funcref null value for testing
2862test_null_string() String null value for testing
Bram Moolenaar2c64ca12018-10-19 16:22:31 +02002863test_option_not_set({name}) none reset flag indicating option was set
2864test_override({expr}, {val}) none test with Vim internal overrides
Bram Moolenaarc3e92c12019-03-23 14:23:07 +01002865test_refcount({expr}) Number get the reference count of {expr}
Bram Moolenaarab186732018-09-14 21:27:06 +02002866test_scrollbar({which}, {value}, {dragging})
2867 none scroll in the GUI for testing
Bram Moolenaarbb8476b2019-05-04 15:47:48 +02002868test_setmouse({row}, {col}) none set the mouse position for testing
Bram Moolenaarc95a3022016-06-12 23:01:46 +02002869test_settime({expr}) none set current time for testing
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02002870timer_info([{id}]) List information about timers
Bram Moolenaarb73598e2016-08-07 18:22:53 +02002871timer_pause({id}, {pause}) none pause or unpause a timer
Bram Moolenaar81edd172016-04-14 13:51:37 +02002872timer_start({time}, {callback} [, {options}])
Bram Moolenaar975b5272016-03-15 23:10:59 +01002873 Number create a timer
Bram Moolenaar81edd172016-04-14 13:51:37 +02002874timer_stop({timer}) none stop a timer
Bram Moolenaarb73598e2016-08-07 18:22:53 +02002875timer_stopall() none stop all timers
Bram Moolenaar81edd172016-04-14 13:51:37 +02002876tolower({expr}) String the String {expr} switched to lowercase
2877toupper({expr}) String the String {expr} switched to uppercase
2878tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr}
Bram Moolenaar8299df92004-07-10 09:47:34 +00002879 to chars in {tostr}
Bram Moolenaard473c8c2018-08-11 18:00:22 +02002880trim({text} [, {mask}]) String trim characters in {mask} from {text}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002881trunc({expr}) Float truncate Float {expr}
2882type({name}) Number type of variable {name}
2883undofile({name}) String undo file name for {name}
Bram Moolenaara800b422010-06-27 01:15:55 +02002884undotree() List undo file tree
Bram Moolenaar81edd172016-04-14 13:51:37 +02002885uniq({list} [, {func} [, {dict}]])
Bram Moolenaar327aa022014-03-25 18:24:23 +01002886 List remove adjacent duplicates from a list
Bram Moolenaar81edd172016-04-14 13:51:37 +02002887values({dict}) List values in {dict}
2888virtcol({expr}) Number screen column of cursor or mark
2889visualmode([expr]) String last visual mode used
Bram Moolenaar8738fc12013-02-20 17:59:11 +01002890wildmenumode() Number whether 'wildmenu' mode is active
Bram Moolenaar868b7b62019-05-29 21:44:40 +02002891win_execute({id}, {command} [, {silent}])
2892 String execute {command} in window {id}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002893win_findbuf({bufnr}) List find windows containing {bufnr}
2894win_getid([{win} [, {tab}]]) Number get window ID for {win} in {tab}
2895win_gotoid({expr}) Number go to window with ID {expr}
2896win_id2tabwin({expr}) List get tab and window nr from window ID
2897win_id2win({expr}) Number get window nr from window ID
Bram Moolenaar22044dc2017-12-02 15:43:37 +01002898win_screenpos({nr}) List get screen position of window {nr}
Bram Moolenaard20dcb32019-09-10 21:22:58 +02002899win_splitmove({nr}, {target} [, {options}])
Bram Moolenaar2e693a82019-10-16 22:35:02 +02002900 Number move window {nr} to split of {target}
Bram Moolenaar81edd172016-04-14 13:51:37 +02002901winbufnr({nr}) Number buffer number of window {nr}
Bram Moolenaar071d4272004-06-13 20:20:40 +00002902wincol() Number window column of the cursor
Bram Moolenaar81edd172016-04-14 13:51:37 +02002903winheight({nr}) Number height of window {nr}
Bram Moolenaar0f6b4f02018-08-21 16:56:34 +02002904winlayout([{tabnr}]) List layout of windows in tab {tabnr}
Bram Moolenaar071d4272004-06-13 20:20:40 +00002905winline() Number window line of the cursor
Bram Moolenaar81edd172016-04-14 13:51:37 +02002906winnr([{expr}]) Number number of current window
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002907winrestcmd() String returns command to restore window sizes
Bram Moolenaar81edd172016-04-14 13:51:37 +02002908winrestview({dict}) none restore view of current window
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00002909winsaveview() Dict save view of current window
Bram Moolenaar81edd172016-04-14 13:51:37 +02002910winwidth({nr}) Number width of window {nr}
Bram Moolenaared767a22016-01-03 22:49:16 +01002911wordcount() Dict get byte/char/word statistics
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01002912writefile({object}, {fname} [, {flags}])
2913 Number write |Blob| or |List| of lines to file
Bram Moolenaara06ecab2016-07-16 14:47:36 +02002914xor({expr}, {expr}) Number bitwise XOR
Bram Moolenaar071d4272004-06-13 20:20:40 +00002915
Bram Moolenaar03413f42016-04-12 21:07:15 +02002916
Bram Moolenaar446cb832008-06-24 21:56:24 +00002917abs({expr}) *abs()*
2918 Return the absolute value of {expr}. When {expr} evaluates to
2919 a |Float| abs() returns a |Float|. When {expr} can be
2920 converted to a |Number| abs() returns a |Number|. Otherwise
2921 abs() gives an error message and returns -1.
2922 Examples: >
2923 echo abs(1.456)
2924< 1.456 >
2925 echo abs(-5.456)
2926< 5.456 >
2927 echo abs(-4)
2928< 4
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02002929
2930 Can also be used as a |method|: >
2931 Compute()->abs()
2932
2933< {only available when compiled with the |+float| feature}
Bram Moolenaar446cb832008-06-24 21:56:24 +00002934
Bram Moolenaardb7c6862010-05-21 16:33:48 +02002935
2936acos({expr}) *acos()*
2937 Return the arc cosine of {expr} measured in radians, as a
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02002938 |Float| in the range of [0, pi].
2939 {expr} must evaluate to a |Float| or a |Number| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02002940 [-1, 1].
2941 Examples: >
2942 :echo acos(0)
2943< 1.570796 >
2944 :echo acos(-0.5)
2945< 2.094395
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02002946
2947 Can also be used as a |method|: >
2948 Compute()->acos()
2949
2950< {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02002951
2952
Bram Moolenaard8968242019-01-15 22:51:57 +01002953add({object}, {expr}) *add()*
2954 Append the item {expr} to |List| or |Blob| {object}. Returns
2955 the resulting |List| or |Blob|. Examples: >
Bram Moolenaara14de3d2005-01-07 21:48:26 +00002956 :let alist = add([1, 2, 3], item)
2957 :call add(mylist, "woodstock")
Bram Moolenaar32466aa2006-02-24 23:53:04 +00002958< Note that when {expr} is a |List| it is appended as a single
Bram Moolenaara23ccb82006-02-27 00:08:02 +00002959 item. Use |extend()| to concatenate |Lists|.
Bram Moolenaard8968242019-01-15 22:51:57 +01002960 When {object} is a |Blob| then {expr} must be a number.
Bram Moolenaar13065c42005-01-08 16:08:21 +00002961 Use |insert()| to add an item at another position.
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02002962
Bram Moolenaarac92e252019-08-03 21:58:38 +02002963 Can also be used as a |method|: >
2964 mylist->add(val1)->add(val2)
Bram Moolenaar071d4272004-06-13 20:20:40 +00002965
Bram Moolenaara14de3d2005-01-07 21:48:26 +00002966
Bram Moolenaard6e256c2011-12-14 15:32:50 +01002967and({expr}, {expr}) *and()*
2968 Bitwise AND on the two arguments. The arguments are converted
2969 to a number. A List, Dict or Float argument causes an error.
2970 Example: >
2971 :let flag = and(bits, 0x80)
Bram Moolenaar073e4b92019-08-18 23:01:56 +02002972< Can also be used as a |method|: >
2973 :let flag = bits->and(0x80)
Bram Moolenaard6e256c2011-12-14 15:32:50 +01002974
2975
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002976append({lnum}, {text}) *append()*
2977 When {text} is a |List|: Append each item of the |List| as a
Bram Moolenaar32466aa2006-02-24 23:53:04 +00002978 text line below line {lnum} in the current buffer.
Bram Moolenaar95bafa22018-10-02 13:26:25 +02002979 Otherwise append {text} as one text line below line {lnum} in
Bram Moolenaar748bf032005-02-02 23:04:36 +00002980 the current buffer.
2981 {lnum} can be zero to insert a line before the first one.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00002982 Returns 1 for failure ({lnum} out of range or out of memory),
Bram Moolenaar58b85342016-08-14 19:54:54 +02002983 0 for success. Example: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00002984 :let failed = append(line('$'), "# THE END")
Bram Moolenaara14de3d2005-01-07 21:48:26 +00002985 :let failed = append(0, ["Chapter 1", "the beginning"])
Bram Moolenaarca851592018-06-06 21:04:07 +02002986
Bram Moolenaar25e42232019-08-04 15:04:10 +02002987< Can also be used as a |method| after a List: >
2988 mylist->append(lnum)
2989
2990
Bram Moolenaarca851592018-06-06 21:04:07 +02002991appendbufline({expr}, {lnum}, {text}) *appendbufline()*
2992 Like |append()| but append the text in buffer {expr}.
2993
Bram Moolenaar2e693a82019-10-16 22:35:02 +02002994 This function works only for loaded buffers. First call
2995 |bufload()| if needed.
2996
Bram Moolenaarca851592018-06-06 21:04:07 +02002997 For the use of {expr}, see |bufname()|.
2998
2999 {lnum} is used like with |append()|. Note that using |line()|
3000 would use the current buffer, not the one appending to.
3001 Use "$" to append at the end of the buffer.
3002
3003 On success 0 is returned, on failure 1 is returned.
3004
3005 If {expr} is not a valid buffer or {lnum} is not valid, an
3006 error message is given. Example: >
3007 :let failed = appendbufline(13, 0, "# THE START")
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003008<
Bram Moolenaar25e42232019-08-04 15:04:10 +02003009 Can also be used as a |method| after a List: >
3010 mylist->appendbufline(buf, lnum)
3011
3012
3013argc([{winid}]) *argc()*
Bram Moolenaare6e39892018-10-25 12:32:11 +02003014 The result is the number of files in the argument list. See
3015 |arglist|.
3016 If {winid} is not supplied, the argument list of the current
3017 window is used.
3018 If {winid} is -1, the global argument list is used.
3019 Otherwise {winid} specifies the window of which the argument
3020 list is used: either the window number or the window ID.
3021 Returns -1 if the {winid} argument is invalid.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003022
3023 *argidx()*
3024argidx() The result is the current index in the argument list. 0 is
3025 the first file. argc() - 1 is the last one. See |arglist|.
3026
Bram Moolenaar2d1fe052014-05-28 18:22:57 +02003027 *arglistid()*
Bram Moolenaare0fa3742016-02-20 15:47:01 +01003028arglistid([{winnr} [, {tabnr}]])
Bram Moolenaar2d1fe052014-05-28 18:22:57 +02003029 Return the argument list ID. This is a number which
3030 identifies the argument list being used. Zero is used for the
Bram Moolenaarfb539272014-08-22 19:21:47 +02003031 global argument list. See |arglist|.
Bram Moolenaare6e39892018-10-25 12:32:11 +02003032 Returns -1 if the arguments are invalid.
Bram Moolenaar2d1fe052014-05-28 18:22:57 +02003033
3034 Without arguments use the current window.
3035 With {winnr} only use this window in the current tab page.
3036 With {winnr} and {tabnr} use the window in the specified tab
3037 page.
Bram Moolenaar7571d552016-08-18 22:54:46 +02003038 {winnr} can be the window number or the |window-ID|.
Bram Moolenaar2d1fe052014-05-28 18:22:57 +02003039
Bram Moolenaar071d4272004-06-13 20:20:40 +00003040 *argv()*
Bram Moolenaare6e39892018-10-25 12:32:11 +02003041argv([{nr} [, {winid}])
3042 The result is the {nr}th file in the argument list. See
3043 |arglist|. "argv(0)" is the first one. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00003044 :let i = 0
3045 :while i < argc()
Bram Moolenaar446cb832008-06-24 21:56:24 +00003046 : let f = escape(fnameescape(argv(i)), '.')
Bram Moolenaar071d4272004-06-13 20:20:40 +00003047 : exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
3048 : let i = i + 1
3049 :endwhile
Bram Moolenaare6e39892018-10-25 12:32:11 +02003050< Without the {nr} argument, or when {nr} is -1, a |List| with
3051 the whole |arglist| is returned.
3052
3053 The {winid} argument specifies the window ID, see |argc()|.
Bram Moolenaar69bf6342019-10-29 04:16:57 +01003054 For the Vim command line arguments see |v:argv|.
Bram Moolenaare2f98b92006-03-29 21:18:24 +00003055
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003056asin({expr}) *asin()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003057 Return the arc sine of {expr} measured in radians, as a |Float|
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003058 in the range of [-pi/2, pi/2].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003059 {expr} must evaluate to a |Float| or a |Number| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003060 [-1, 1].
3061 Examples: >
3062 :echo asin(0.8)
3063< 0.927295 >
3064 :echo asin(-0.5)
3065< -0.523599
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003066
3067 Can also be used as a |method|: >
3068 Compute()->asin()
3069<
Bram Moolenaardb84e452010-08-15 13:50:43 +02003070 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003071
3072
Bram Moolenaar29634562020-01-09 21:46:04 +01003073assert_ functions are documented here: |assert-functions-details|
3074
3075
3076
Bram Moolenaar446cb832008-06-24 21:56:24 +00003077atan({expr}) *atan()*
3078 Return the principal value of the arc tangent of {expr}, in
3079 the range [-pi/2, +pi/2] radians, as a |Float|.
3080 {expr} must evaluate to a |Float| or a |Number|.
3081 Examples: >
3082 :echo atan(100)
3083< 1.560797 >
3084 :echo atan(-4.01)
3085< -1.326405
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003086
3087 Can also be used as a |method|: >
3088 Compute()->atan()
3089<
Bram Moolenaar446cb832008-06-24 21:56:24 +00003090 {only available when compiled with the |+float| feature}
3091
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003092
3093atan2({expr1}, {expr2}) *atan2()*
3094 Return the arc tangent of {expr1} / {expr2}, measured in
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003095 radians, as a |Float| in the range [-pi, pi].
3096 {expr1} and {expr2} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003097 Examples: >
3098 :echo atan2(-1, 1)
3099< -0.785398 >
3100 :echo atan2(1, -1)
3101< 2.356194
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003102
3103 Can also be used as a |method|: >
3104 Compute()->atan(1)
3105<
Bram Moolenaardb84e452010-08-15 13:50:43 +02003106 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003107
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02003108balloon_gettext() *balloon_gettext()*
3109 Return the current text in the balloon. Only for the string,
3110 not used for the List.
3111
Bram Moolenaar246fe032017-11-19 19:56:27 +01003112balloon_show({expr}) *balloon_show()*
3113 Show {expr} inside the balloon. For the GUI {expr} is used as
3114 a string. For a terminal {expr} can be a list, which contains
3115 the lines of the balloon. If {expr} is not a list it will be
3116 split with |balloon_split()|.
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02003117 If {expr} is an empty string any existing balloon is removed.
Bram Moolenaar246fe032017-11-19 19:56:27 +01003118
Bram Moolenaar214641f2017-03-05 17:04:09 +01003119 Example: >
Bram Moolenaar59716a22017-03-01 20:32:44 +01003120 func GetBalloonContent()
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02003121 " ... initiate getting the content
Bram Moolenaar59716a22017-03-01 20:32:44 +01003122 return ''
3123 endfunc
3124 set balloonexpr=GetBalloonContent()
3125
3126 func BalloonCallback(result)
Bram Moolenaar214641f2017-03-05 17:04:09 +01003127 call balloon_show(a:result)
Bram Moolenaar59716a22017-03-01 20:32:44 +01003128 endfunc
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003129< Can also be used as a |method|: >
3130 GetText()->balloon_show()
Bram Moolenaar59716a22017-03-01 20:32:44 +01003131<
3132 The intended use is that fetching the content of the balloon
3133 is initiated from 'balloonexpr'. It will invoke an
3134 asynchronous method, in which a callback invokes
3135 balloon_show(). The 'balloonexpr' itself can return an
3136 empty string or a placeholder.
Bram Moolenaar214641f2017-03-05 17:04:09 +01003137
3138 When showing a balloon is not possible nothing happens, no
3139 error message.
Bram Moolenaar95bafa22018-10-02 13:26:25 +02003140 {only available when compiled with the |+balloon_eval| or
3141 |+balloon_eval_term| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003142
Bram Moolenaar246fe032017-11-19 19:56:27 +01003143balloon_split({msg}) *balloon_split()*
3144 Split {msg} into lines to be displayed in a balloon. The
3145 splits are made for the current window size and optimize to
3146 show debugger output.
3147 Returns a |List| with the split lines.
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003148 Can also be used as a |method|: >
3149 GetText()->balloon_split()->balloon_show()
3150
3151< {only available when compiled with the |+balloon_eval_term|
Bram Moolenaar669a8282017-11-19 20:13:05 +01003152 feature}
Bram Moolenaar246fe032017-11-19 19:56:27 +01003153
Bram Moolenaar071d4272004-06-13 20:20:40 +00003154 *browse()*
3155browse({save}, {title}, {initdir}, {default})
3156 Put up a file requester. This only works when "has("browse")"
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003157 returns |TRUE| (only in some GUI versions).
Bram Moolenaar071d4272004-06-13 20:20:40 +00003158 The input fields are:
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003159 {save} when |TRUE|, select file to write
Bram Moolenaar071d4272004-06-13 20:20:40 +00003160 {title} title for the requester
3161 {initdir} directory to start browsing in
3162 {default} default file name
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003163 An empty string is returned when the "Cancel" button is hit,
3164 something went wrong, or browsing is not possible.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003165
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00003166 *browsedir()*
3167browsedir({title}, {initdir})
3168 Put up a directory requester. This only works when
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003169 "has("browse")" returns |TRUE| (only in some GUI versions).
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00003170 On systems where a directory browser is not supported a file
3171 browser is used. In that case: select a file in the directory
3172 to be used.
3173 The input fields are:
3174 {title} title for the requester
3175 {initdir} directory to start browsing in
3176 When the "Cancel" button is hit, something went wrong, or
3177 browsing is not possible, an empty string is returned.
3178
Bram Moolenaar15e248e2019-06-30 20:21:37 +02003179bufadd({name}) *bufadd()*
3180 Add a buffer to the buffer list with {name}.
3181 If a buffer for file {name} already exists, return that buffer
3182 number. Otherwise return the buffer number of the newly
3183 created buffer. When {name} is an empty string then a new
3184 buffer is always created.
Bram Moolenaaraad222c2019-09-06 22:46:09 +02003185 The buffer will not have 'buflisted' set and not be loaded
Bram Moolenaar5ca1ac32019-07-04 15:39:28 +02003186 yet. To add some text to the buffer use this: >
3187 let bufnr = bufadd('someName')
3188 call bufload(bufnr)
3189 call setbufline(bufnr, 1, ['some', 'text'])
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003190< Can also be used as a |method|: >
3191 let bufnr = 'somename'->bufadd()
Bram Moolenaar15e248e2019-06-30 20:21:37 +02003192
Bram Moolenaar071d4272004-06-13 20:20:40 +00003193bufexists({expr}) *bufexists()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003194 The result is a Number, which is |TRUE| if a buffer called
Bram Moolenaar071d4272004-06-13 20:20:40 +00003195 {expr} exists.
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003196 If the {expr} argument is a number, buffer numbers are used.
Bram Moolenaara2a80162017-11-21 23:09:50 +01003197 Number zero is the alternate buffer for the current window.
3198
Bram Moolenaar071d4272004-06-13 20:20:40 +00003199 If the {expr} argument is a string it must match a buffer name
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003200 exactly. The name can be:
3201 - Relative to the current directory.
3202 - A full path.
Bram Moolenaar446cb832008-06-24 21:56:24 +00003203 - The name of a buffer with 'buftype' set to "nofile".
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003204 - A URL name.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003205 Unlisted buffers will be found.
3206 Note that help files are listed by their short name in the
3207 output of |:buffers|, but bufexists() requires using their
3208 long name to be able to find them.
Bram Moolenaar446cb832008-06-24 21:56:24 +00003209 bufexists() may report a buffer exists, but to use the name
3210 with a |:buffer| command you may need to use |expand()|. Esp
3211 for MS-Windows 8.3 names in the form "c:\DOCUME~1"
Bram Moolenaar071d4272004-06-13 20:20:40 +00003212 Use "bufexists(0)" to test for the existence of an alternate
3213 file name.
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003214
3215 Can also be used as a |method|: >
3216 let exists = 'somename'->bufexists()
3217<
3218 Obsolete name: buffer_exists(). *buffer_exists()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00003219
3220buflisted({expr}) *buflisted()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003221 The result is a Number, which is |TRUE| if a buffer called
Bram Moolenaar071d4272004-06-13 20:20:40 +00003222 {expr} exists and is listed (has the 'buflisted' option set).
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003223 The {expr} argument is used like with |bufexists()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003224
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003225 Can also be used as a |method|: >
3226 let listed = 'somename'->buflisted()
3227
Bram Moolenaar15e248e2019-06-30 20:21:37 +02003228bufload({expr}) *bufload()*
3229 Ensure the buffer {expr} is loaded. When the buffer name
3230 refers to an existing file then the file is read. Otherwise
3231 the buffer will be empty. If the buffer was already loaded
3232 then there is no change.
3233 If there is an existing swap file for the file of the buffer,
3234 there will be no dialog, the buffer will be loaded anyway.
3235 The {expr} argument is used like with |bufexists()|.
3236
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003237 Can also be used as a |method|: >
3238 eval 'somename'->bufload()
3239
Bram Moolenaar071d4272004-06-13 20:20:40 +00003240bufloaded({expr}) *bufloaded()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003241 The result is a Number, which is |TRUE| if a buffer called
Bram Moolenaar071d4272004-06-13 20:20:40 +00003242 {expr} exists and is loaded (shown in a window or hidden).
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00003243 The {expr} argument is used like with |bufexists()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003244
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003245 Can also be used as a |method|: >
3246 let loaded = 'somename'->bufloaded()
3247
Bram Moolenaara8eee212019-08-24 22:14:58 +02003248bufname([{expr}]) *bufname()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00003249 The result is the name of a buffer, as it is displayed by the
3250 ":ls" command.
Bram Moolenaara8eee212019-08-24 22:14:58 +02003251 If {expr} is omitted the current buffer is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003252 If {expr} is a Number, that buffer number's name is given.
3253 Number zero is the alternate buffer for the current window.
3254 If {expr} is a String, it is used as a |file-pattern| to match
Bram Moolenaar58b85342016-08-14 19:54:54 +02003255 with the buffer names. This is always done like 'magic' is
Bram Moolenaar071d4272004-06-13 20:20:40 +00003256 set and 'cpoptions' is empty. When there is more than one
3257 match an empty string is returned.
3258 "" or "%" can be used for the current buffer, "#" for the
3259 alternate buffer.
3260 A full match is preferred, otherwise a match at the start, end
Bram Moolenaaref2f6562007-05-06 13:32:59 +00003261 or middle of the buffer name is accepted. If you only want a
3262 full match then put "^" at the start and "$" at the end of the
3263 pattern.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003264 Listed buffers are found first. If there is a single match
3265 with a listed buffer, that one is returned. Next unlisted
3266 buffers are searched for.
3267 If the {expr} is a String, but you want to use it as a buffer
3268 number, force it to be a Number by adding zero to it: >
3269 :echo bufname("3" + 0)
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003270< Can also be used as a |method|: >
3271 echo bufnr->bufname()
3272
Bram Moolenaar071d4272004-06-13 20:20:40 +00003273< If the buffer doesn't exist, or doesn't have a name, an empty
3274 string is returned. >
3275 bufname("#") alternate buffer name
3276 bufname(3) name of buffer 3
3277 bufname("%") name of current buffer
3278 bufname("file2") name of buffer where "file2" matches.
3279< *buffer_name()*
3280 Obsolete name: buffer_name().
3281
3282 *bufnr()*
Bram Moolenaara8eee212019-08-24 22:14:58 +02003283bufnr([{expr} [, {create}]])
Bram Moolenaar65c923a2006-03-03 22:56:30 +00003284 The result is the number of a buffer, as it is displayed by
Bram Moolenaar071d4272004-06-13 20:20:40 +00003285 the ":ls" command. For the use of {expr}, see |bufname()|
Bram Moolenaar65c923a2006-03-03 22:56:30 +00003286 above.
Bram Moolenaard2842ea2019-09-26 23:08:54 +02003287
Bram Moolenaar65c923a2006-03-03 22:56:30 +00003288 If the buffer doesn't exist, -1 is returned. Or, if the
3289 {create} argument is present and not zero, a new, unlisted,
Bram Moolenaard2842ea2019-09-26 23:08:54 +02003290 buffer is created and its number is returned. Example: >
3291 let newbuf = bufnr('Scratch001', 1)
3292< Using an empty name uses the current buffer. To create a new
3293 buffer with an empty name use |bufadd()|.
3294
Bram Moolenaar071d4272004-06-13 20:20:40 +00003295 bufnr("$") is the last buffer: >
Bram Moolenaara8eee212019-08-24 22:14:58 +02003296 :let last_buffer = bufnr("$")
Bram Moolenaar071d4272004-06-13 20:20:40 +00003297< The result is a Number, which is the highest buffer number
3298 of existing buffers. Note that not all buffers with a smaller
3299 number necessarily exist, because ":bwipeout" may have removed
3300 them. Use bufexists() to test for the existence of a buffer.
Bram Moolenaar073e4b92019-08-18 23:01:56 +02003301
3302 Can also be used as a |method|: >
3303 echo bufref->bufnr()
3304<
3305 Obsolete name: buffer_number(). *buffer_number()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00003306 *last_buffer_nr()*
3307 Obsolete name for bufnr("$"): last_buffer_nr().
3308
Bram Moolenaarb3619a92016-06-04 17:58:52 +02003309bufwinid({expr}) *bufwinid()*
Bram Moolenaar7571d552016-08-18 22:54:46 +02003310 The result is a Number, which is the |window-ID| of the first
Bram Moolenaarb3619a92016-06-04 17:58:52 +02003311 window associated with buffer {expr}. For the use of {expr},
Bram Moolenaar58b85342016-08-14 19:54:54 +02003312 see |bufname()| above. If buffer {expr} doesn't exist or
Bram Moolenaarb3619a92016-06-04 17:58:52 +02003313 there is no such window, -1 is returned. Example: >
3314
3315 echo "A window containing buffer 1 is " . (bufwinid(1))
3316<
3317 Only deals with the current tab page.
3318
Bram Moolenaare49fbff2019-08-21 22:50:07 +02003319 Can also be used as a |method|: >
3320 FindBuffer()->bufwinid()
3321
Bram Moolenaar071d4272004-06-13 20:20:40 +00003322bufwinnr({expr}) *bufwinnr()*
Bram Moolenaare49fbff2019-08-21 22:50:07 +02003323 Like |bufwinid()| but return the window number instead of the
3324 |window-ID|.
3325 If buffer {expr} doesn't exist or there is no such window, -1
3326 is returned. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00003327
3328 echo "A window containing buffer 1 is " . (bufwinnr(1))
3329
3330< The number can be used with |CTRL-W_w| and ":wincmd w"
3331 |:wincmd|.
Bram Moolenaare49fbff2019-08-21 22:50:07 +02003332
3333 Can also be used as a |method|: >
3334 FindBuffer()->bufwinnr()
Bram Moolenaar071d4272004-06-13 20:20:40 +00003335
Bram Moolenaar071d4272004-06-13 20:20:40 +00003336byte2line({byte}) *byte2line()*
3337 Return the line number that contains the character at byte
3338 count {byte} in the current buffer. This includes the
3339 end-of-line character, depending on the 'fileformat' option
3340 for the current buffer. The first character has byte count
3341 one.
3342 Also see |line2byte()|, |go| and |:goto|.
Bram Moolenaar64b4d732019-08-22 22:18:17 +02003343
3344 Can also be used as a |method|: >
3345 GetOffset()->byte2line()
3346
3347< {not available when compiled without the |+byte_offset|
Bram Moolenaar071d4272004-06-13 20:20:40 +00003348 feature}
3349
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00003350byteidx({expr}, {nr}) *byteidx()*
3351 Return byte index of the {nr}'th character in the string
3352 {expr}. Use zero for the first character, it returns zero.
3353 This function is only useful when there are multibyte
3354 characters, otherwise the returned value is equal to {nr}.
Bram Moolenaar0ffbbf92013-11-02 23:29:26 +01003355 Composing characters are not counted separately, their byte
3356 length is added to the preceding base character. See
3357 |byteidxcomp()| below for counting composing characters
3358 separately.
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00003359 Example : >
3360 echo matchstr(str, ".", byteidx(str, 3))
3361< will display the fourth character. Another way to do the
3362 same: >
3363 let s = strpart(str, byteidx(str, 3))
3364 echo strpart(s, 0, byteidx(s, 1))
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02003365< Also see |strgetchar()| and |strcharpart()|.
3366
3367 If there are less than {nr} characters -1 is returned.
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00003368 If there are exactly {nr} characters the length of the string
Bram Moolenaar0ffbbf92013-11-02 23:29:26 +01003369 in bytes is returned.
3370
Bram Moolenaar64b4d732019-08-22 22:18:17 +02003371 Can also be used as a |method|: >
3372 GetName()->byteidx(idx)
3373
Bram Moolenaar0ffbbf92013-11-02 23:29:26 +01003374byteidxcomp({expr}, {nr}) *byteidxcomp()*
3375 Like byteidx(), except that a composing character is counted
3376 as a separate character. Example: >
3377 let s = 'e' . nr2char(0x301)
3378 echo byteidx(s, 1)
3379 echo byteidxcomp(s, 1)
3380 echo byteidxcomp(s, 2)
3381< The first and third echo result in 3 ('e' plus composing
3382 character is 3 bytes), the second echo results in 1 ('e' is
3383 one byte).
3384 Only works different from byteidx() when 'encoding' is set to
3385 a Unicode encoding.
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00003386
Bram Moolenaar64b4d732019-08-22 22:18:17 +02003387 Can also be used as a |method|: >
3388 GetName()->byteidxcomp(idx)
3389
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00003390call({func}, {arglist} [, {dict}]) *call()* *E699*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003391 Call function {func} with the items in |List| {arglist} as
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003392 arguments.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003393 {func} can either be a |Funcref| or the name of a function.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003394 a:firstline and a:lastline are set to the cursor line.
3395 Returns the return value of the called function.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00003396 {dict} is for functions with the "dict" attribute. It will be
3397 used to set the local variable "self". |Dictionary-function|
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003398
Bram Moolenaar64b4d732019-08-22 22:18:17 +02003399 Can also be used as a |method|: >
3400 GetFunc()->call([arg, arg], dict)
3401
Bram Moolenaar446cb832008-06-24 21:56:24 +00003402ceil({expr}) *ceil()*
3403 Return the smallest integral value greater than or equal to
3404 {expr} as a |Float| (round up).
3405 {expr} must evaluate to a |Float| or a |Number|.
3406 Examples: >
3407 echo ceil(1.456)
3408< 2.0 >
3409 echo ceil(-5.456)
3410< -5.0 >
3411 echo ceil(4.0)
3412< 4.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003413
3414 Can also be used as a |method|: >
3415 Compute()->ceil()
3416<
Bram Moolenaar446cb832008-06-24 21:56:24 +00003417 {only available when compiled with the |+float| feature}
3418
Bram Moolenaar4b785f62016-11-29 21:54:44 +01003419
Bram Moolenaared997ad2019-07-21 16:42:00 +02003420ch_ functions are documented here: |channel-functions-details|
Bram Moolenaar82b9ca02017-08-08 23:06:46 +02003421
Bram Moolenaar328da0d2016-03-04 22:22:32 +01003422
Bram Moolenaar214641f2017-03-05 17:04:09 +01003423changenr() *changenr()*
3424 Return the number of the most recent change. This is the same
3425 number as what is displayed with |:undolist| and can be used
3426 with the |:undo| command.
3427 When a change was made it is the number of that change. After
3428 redo it is the number of the redone change. After undo it is
3429 one less than the number of the undone change.
3430
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003431char2nr({expr} [, {utf8}]) *char2nr()*
Bram Moolenaar214641f2017-03-05 17:04:09 +01003432 Return number value of the first char in {expr}. Examples: >
3433 char2nr(" ") returns 32
3434 char2nr("ABC") returns 65
3435< When {utf8} is omitted or zero, the current 'encoding' is used.
3436 Example for "utf-8": >
Bram Moolenaar98ef2332018-03-18 14:44:37 +01003437 char2nr("á") returns 225
3438 char2nr("á"[0]) returns 195
Bram Moolenaar214641f2017-03-05 17:04:09 +01003439< With {utf8} set to 1, always treat as utf-8 characters.
3440 A combining character is a separate character.
3441 |nr2char()| does the opposite.
Bram Moolenaaraff74912019-03-30 18:11:49 +01003442 To turn a string into a list of character numbers: >
3443 let str = "ABC"
3444 let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
3445< Result: [65, 66, 67]
Bram Moolenaar214641f2017-03-05 17:04:09 +01003446
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003447 Can also be used as a |method|: >
3448 GetChar()->char2nr()
3449
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02003450chdir({dir}) *chdir()*
3451 Change the current working directory to {dir}. The scope of
3452 the directory change depends on the directory of the current
3453 window:
3454 - If the current window has a window-local directory
3455 (|:lcd|), then changes the window local directory.
3456 - Otherwise, if the current tabpage has a local
3457 directory (|:tcd|) then changes the tabpage local
3458 directory.
3459 - Otherwise, changes the global directory.
Bram Moolenaar560979e2020-02-04 22:53:05 +01003460 {dir} must be a String.
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02003461 If successful, returns the previous working directory. Pass
3462 this to another chdir() to restore the directory.
3463 On failure, returns an empty string.
3464
3465 Example: >
3466 let save_dir = chdir(newdir)
Bram Moolenaar68e65602019-05-26 21:33:31 +02003467 if save_dir != ""
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02003468 " ... do some work
3469 call chdir(save_dir)
3470 endif
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003471
3472< Can also be used as a |method|: >
3473 GetDir()->chdir()
Bram Moolenaar1063f3d2019-05-07 22:06:52 +02003474<
Bram Moolenaar214641f2017-03-05 17:04:09 +01003475cindent({lnum}) *cindent()*
3476 Get the amount of indent for line {lnum} according the C
3477 indenting rules, as with 'cindent'.
3478 The indent is counted in spaces, the value of 'tabstop' is
3479 relevant. {lnum} is used just like in |getline()|.
3480 When {lnum} is invalid or Vim was not compiled the |+cindent|
3481 feature, -1 is returned.
3482 See |C-indenting|.
3483
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003484 Can also be used as a |method|: >
3485 GetLnum()->cindent()
3486
Bram Moolenaaraff74912019-03-30 18:11:49 +01003487clearmatches([{win}]) *clearmatches()*
Bram Moolenaarfd133322019-03-29 12:20:27 +01003488 Clears all matches previously defined for the current window
3489 by |matchadd()| and the |:match| commands.
Bram Moolenaaraff74912019-03-30 18:11:49 +01003490 If {win} is specified, use the window with this number or
3491 window ID instead of the current window.
Bram Moolenaar214641f2017-03-05 17:04:09 +01003492
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003493 Can also be used as a |method|: >
3494 GetWin()->clearmatches()
3495<
Bram Moolenaar214641f2017-03-05 17:04:09 +01003496 *col()*
3497col({expr}) The result is a Number, which is the byte index of the column
3498 position given with {expr}. The accepted positions are:
3499 . the cursor position
3500 $ the end of the cursor line (the result is the
3501 number of bytes in the cursor line plus one)
3502 'x position of mark x (if the mark is not set, 0 is
3503 returned)
3504 v In Visual mode: the start of the Visual area (the
3505 cursor is the end). When not in Visual mode
3506 returns the cursor position. Differs from |'<| in
3507 that it's updated right away.
3508 Additionally {expr} can be [lnum, col]: a |List| with the line
3509 and column number. Most useful when the column is "$", to get
3510 the last column of a specific line. When "lnum" or "col" is
3511 out of range then col() returns zero.
3512 To get the line number use |line()|. To get both use
3513 |getpos()|.
3514 For the screen column position use |virtcol()|.
3515 Note that only marks in the current file can be used.
3516 Examples: >
3517 col(".") column of cursor
3518 col("$") length of cursor line plus one
3519 col("'t") column of mark t
3520 col("'" . markname) column of mark markname
3521< The first column is 1. 0 is returned for an error.
3522 For an uppercase mark the column may actually be in another
3523 buffer.
3524 For the cursor position, when 'virtualedit' is active, the
3525 column is one higher if the cursor is after the end of the
3526 line. This can be used to obtain the column in Insert mode: >
3527 :imap <F2> <C-O>:let save_ve = &ve<CR>
3528 \<C-O>:set ve=all<CR>
3529 \<C-O>:echo col(".") . "\n" <Bar>
3530 \let &ve = save_ve<CR>
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003531
3532< Can also be used as a |method|: >
3533 GetPos()->col()
Bram Moolenaar214641f2017-03-05 17:04:09 +01003534<
3535
3536complete({startcol}, {matches}) *complete()* *E785*
3537 Set the matches for Insert mode completion.
3538 Can only be used in Insert mode. You need to use a mapping
3539 with CTRL-R = (see |i_CTRL-R|). It does not work after CTRL-O
3540 or with an expression mapping.
3541 {startcol} is the byte offset in the line where the completed
3542 text start. The text up to the cursor is the original text
3543 that will be replaced by the matches. Use col('.') for an
3544 empty string. "col('.') - 1" will replace one character by a
3545 match.
3546 {matches} must be a |List|. Each |List| item is one match.
3547 See |complete-items| for the kind of items that are possible.
3548 Note that the after calling this function you need to avoid
3549 inserting anything that would cause completion to stop.
3550 The match can be selected with CTRL-N and CTRL-P as usual with
3551 Insert mode completion. The popup menu will appear if
3552 specified, see |ins-completion-menu|.
3553 Example: >
3554 inoremap <F5> <C-R>=ListMonths()<CR>
3555
3556 func! ListMonths()
3557 call complete(col('.'), ['January', 'February', 'March',
3558 \ 'April', 'May', 'June', 'July', 'August', 'September',
3559 \ 'October', 'November', 'December'])
3560 return ''
3561 endfunc
3562< This isn't very useful, but it shows how it works. Note that
3563 an empty string is returned to avoid a zero being inserted.
3564
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003565 Can also be used as a |method|, the base is passed as the
3566 second argument: >
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003567 GetMatches()->complete(col('.'))
3568
Bram Moolenaar214641f2017-03-05 17:04:09 +01003569complete_add({expr}) *complete_add()*
3570 Add {expr} to the list of matches. Only to be used by the
3571 function specified with the 'completefunc' option.
3572 Returns 0 for failure (empty string or out of memory),
3573 1 when the match was added, 2 when the match was already in
3574 the list.
3575 See |complete-functions| for an explanation of {expr}. It is
3576 the same as one item in the list that 'omnifunc' would return.
3577
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003578 Can also be used as a |method|: >
3579 GetMoreMatches()->complete_add()
3580
Bram Moolenaar214641f2017-03-05 17:04:09 +01003581complete_check() *complete_check()*
3582 Check for a key typed while looking for completion matches.
3583 This is to be used when looking for matches takes some time.
3584 Returns |TRUE| when searching for matches is to be aborted,
3585 zero otherwise.
3586 Only to be used by the function specified with the
3587 'completefunc' option.
3588
Bram Moolenaarfd133322019-03-29 12:20:27 +01003589 *complete_info()*
3590complete_info([{what}])
3591 Returns a Dictionary with information about Insert mode
3592 completion. See |ins-completion|.
3593 The items are:
3594 mode Current completion mode name string.
Bram Moolenaar723dd942019-04-04 13:11:03 +02003595 See |complete_info_mode| for the values.
Bram Moolenaarfd133322019-03-29 12:20:27 +01003596 pum_visible |TRUE| if popup menu is visible.
3597 See |pumvisible()|.
3598 items List of completion matches. Each item is a
3599 dictionary containing the entries "word",
3600 "abbr", "menu", "kind", "info" and "user_data".
3601 See |complete-items|.
3602 selected Selected item index. First index is zero.
3603 Index is -1 if no item is selected (showing
3604 typed text only)
3605 inserted Inserted string. [NOT IMPLEMENT YET]
3606
3607 *complete_info_mode*
3608 mode values are:
3609 "" Not in completion mode
3610 "keyword" Keyword completion |i_CTRL-X_CTRL-N|
3611 "ctrl_x" Just pressed CTRL-X |i_CTRL-X|
3612 "whole_line" Whole lines |i_CTRL-X_CTRL-L|
3613 "files" File names |i_CTRL-X_CTRL-F|
3614 "tags" Tags |i_CTRL-X_CTRL-]|
3615 "path_defines" Definition completion |i_CTRL-X_CTRL-D|
3616 "path_patterns" Include completion |i_CTRL-X_CTRL-I|
3617 "dictionary" Dictionary |i_CTRL-X_CTRL-K|
3618 "thesaurus" Thesaurus |i_CTRL-X_CTRL-T|
3619 "cmdline" Vim Command line |i_CTRL-X_CTRL-V|
3620 "function" User defined completion |i_CTRL-X_CTRL-U|
3621 "omni" Omni completion |i_CTRL-X_CTRL-O|
3622 "spell" Spelling suggestions |i_CTRL-X_s|
3623 "eval" |complete()| completion
3624 "unknown" Other internal modes
3625
3626 If the optional {what} list argument is supplied, then only
3627 the items listed in {what} are returned. Unsupported items in
3628 {what} are silently ignored.
3629
Bram Moolenaare9bd5722019-08-17 19:36:06 +02003630 To get the position and size of the popup menu, see
3631 |pum_getpos()|. It's also available in |v:event| during the
3632 |CompleteChanged| event.
3633
Bram Moolenaarfd133322019-03-29 12:20:27 +01003634 Examples: >
3635 " Get all items
3636 call complete_info()
3637 " Get only 'mode'
3638 call complete_info(['mode'])
3639 " Get only 'mode' and 'pum_visible'
3640 call complete_info(['mode', 'pum_visible'])
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003641
3642< Can also be used as a |method|: >
3643 GetItems()->complete_info()
Bram Moolenaarfd133322019-03-29 12:20:27 +01003644<
Bram Moolenaar214641f2017-03-05 17:04:09 +01003645 *confirm()*
3646confirm({msg} [, {choices} [, {default} [, {type}]]])
Bram Moolenaar647e24b2019-03-17 16:39:46 +01003647 confirm() offers the user a dialog, from which a choice can be
Bram Moolenaar214641f2017-03-05 17:04:09 +01003648 made. It returns the number of the choice. For the first
3649 choice this is 1.
3650 Note: confirm() is only supported when compiled with dialog
3651 support, see |+dialog_con| and |+dialog_gui|.
3652
3653 {msg} is displayed in a |dialog| with {choices} as the
3654 alternatives. When {choices} is missing or empty, "&OK" is
3655 used (and translated).
3656 {msg} is a String, use '\n' to include a newline. Only on
3657 some systems the string is wrapped when it doesn't fit.
3658
3659 {choices} is a String, with the individual choices separated
3660 by '\n', e.g. >
3661 confirm("Save changes?", "&Yes\n&No\n&Cancel")
3662< The letter after the '&' is the shortcut key for that choice.
3663 Thus you can type 'c' to select "Cancel". The shortcut does
3664 not need to be the first letter: >
3665 confirm("file has been modified", "&Save\nSave &All")
3666< For the console, the first letter of each choice is used as
3667 the default shortcut key.
3668
3669 The optional {default} argument is the number of the choice
3670 that is made if the user hits <CR>. Use 1 to make the first
3671 choice the default one. Use 0 to not set a default. If
3672 {default} is omitted, 1 is used.
3673
3674 The optional {type} argument gives the type of dialog. This
3675 is only used for the icon of the GTK, Mac, Motif and Win32
3676 GUI. It can be one of these values: "Error", "Question",
3677 "Info", "Warning" or "Generic". Only the first character is
3678 relevant. When {type} is omitted, "Generic" is used.
3679
3680 If the user aborts the dialog by pressing <Esc>, CTRL-C,
3681 or another valid interrupt key, confirm() returns 0.
3682
3683 An example: >
3684 :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2)
3685 :if choice == 0
3686 : echo "make up your mind!"
3687 :elseif choice == 3
3688 : echo "tasteful"
3689 :else
3690 : echo "I prefer bananas myself."
3691 :endif
3692< In a GUI dialog, buttons are used. The layout of the buttons
3693 depends on the 'v' flag in 'guioptions'. If it is included,
3694 the buttons are always put vertically. Otherwise, confirm()
3695 tries to put the buttons in one horizontal line. If they
3696 don't fit, a vertical layout is used anyway. For some systems
3697 the horizontal layout is always used.
3698
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003699 Can also be used as a |method|in: >
3700 BuildMessage()->confirm("&Yes\n&No")
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003701<
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003702 *copy()*
Bram Moolenaar58b85342016-08-14 19:54:54 +02003703copy({expr}) Make a copy of {expr}. For Numbers and Strings this isn't
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003704 different from using {expr} directly.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003705 When {expr} is a |List| a shallow copy is created. This means
3706 that the original |List| can be changed without changing the
Bram Moolenaar446cb832008-06-24 21:56:24 +00003707 copy, and vice versa. But the items are identical, thus
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01003708 changing an item changes the contents of both |Lists|.
3709 A |Dictionary| is copied in a similar way as a |List|.
3710 Also see |deepcopy()|.
Bram Moolenaarac92e252019-08-03 21:58:38 +02003711 Can also be used as a |method|: >
3712 mylist->copy()
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003713
Bram Moolenaar446cb832008-06-24 21:56:24 +00003714cos({expr}) *cos()*
3715 Return the cosine of {expr}, measured in radians, as a |Float|.
3716 {expr} must evaluate to a |Float| or a |Number|.
3717 Examples: >
3718 :echo cos(100)
3719< 0.862319 >
3720 :echo cos(-4.01)
3721< -0.646043
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003722
3723 Can also be used as a |method|: >
3724 Compute()->cos()
3725<
Bram Moolenaar446cb832008-06-24 21:56:24 +00003726 {only available when compiled with the |+float| feature}
3727
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003728
3729cosh({expr}) *cosh()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003730 Return the hyperbolic cosine of {expr} as a |Float| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003731 [1, inf].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02003732 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003733 Examples: >
3734 :echo cosh(0.5)
3735< 1.127626 >
3736 :echo cosh(-0.5)
3737< -1.127626
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02003738
3739 Can also be used as a |method|: >
3740 Compute()->cosh()
3741<
Bram Moolenaardb84e452010-08-15 13:50:43 +02003742 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02003743
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003744
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00003745count({comp}, {expr} [, {ic} [, {start}]]) *count()*
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003746 Return the number of times an item with value {expr} appears
Bram Moolenaar9966b212017-07-28 16:46:57 +02003747 in |String|, |List| or |Dictionary| {comp}.
3748
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00003749 If {start} is given then start with the item with this index.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003750 {start} can only be used with a |List|.
Bram Moolenaar9966b212017-07-28 16:46:57 +02003751
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003752 When {ic} is given and it's |TRUE| then case is ignored.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00003753
Bram Moolenaar9966b212017-07-28 16:46:57 +02003754 When {comp} is a string then the number of not overlapping
Bram Moolenaar338e47f2017-12-19 11:55:26 +01003755 occurrences of {expr} is returned. Zero is returned when
3756 {expr} is an empty string.
Bram Moolenaara74e4942019-08-04 17:35:53 +02003757
Bram Moolenaarac92e252019-08-03 21:58:38 +02003758 Can also be used as a |method|: >
3759 mylist->count(val)
Bram Moolenaara74e4942019-08-04 17:35:53 +02003760<
Bram Moolenaar071d4272004-06-13 20:20:40 +00003761 *cscope_connection()*
3762cscope_connection([{num} , {dbpath} [, {prepend}]])
3763 Checks for the existence of a |cscope| connection. If no
3764 parameters are specified, then the function returns:
3765 0, if cscope was not available (not compiled in), or
3766 if there are no cscope connections;
3767 1, if there is at least one cscope connection.
3768
3769 If parameters are specified, then the value of {num}
3770 determines how existence of a cscope connection is checked:
3771
3772 {num} Description of existence check
3773 ----- ------------------------------
3774 0 Same as no parameters (e.g., "cscope_connection()").
3775 1 Ignore {prepend}, and use partial string matches for
3776 {dbpath}.
3777 2 Ignore {prepend}, and use exact string matches for
3778 {dbpath}.
3779 3 Use {prepend}, use partial string matches for both
3780 {dbpath} and {prepend}.
3781 4 Use {prepend}, use exact string matches for both
3782 {dbpath} and {prepend}.
3783
3784 Note: All string comparisons are case sensitive!
3785
3786 Examples. Suppose we had the following (from ":cs show"): >
3787
3788 # pid database name prepend path
3789 0 27664 cscope.out /usr/local
3790<
3791 Invocation Return Val ~
3792 ---------- ---------- >
3793 cscope_connection() 1
3794 cscope_connection(1, "out") 1
3795 cscope_connection(2, "out") 0
3796 cscope_connection(3, "out") 0
3797 cscope_connection(3, "out", "local") 1
3798 cscope_connection(4, "out") 0
3799 cscope_connection(4, "out", "local") 0
3800 cscope_connection(4, "cscope.out", "/usr/local") 1
3801<
Bram Moolenaar0b238792006-03-02 22:49:12 +00003802cursor({lnum}, {col} [, {off}]) *cursor()*
3803cursor({list})
Bram Moolenaaref2f6562007-05-06 13:32:59 +00003804 Positions the cursor at the column (byte count) {col} in the
3805 line {lnum}. The first column is one.
Bram Moolenaar493c1782014-05-28 14:34:46 +02003806
Bram Moolenaar0b238792006-03-02 22:49:12 +00003807 When there is one argument {list} this is used as a |List|
Bram Moolenaar493c1782014-05-28 14:34:46 +02003808 with two, three or four item:
Bram Moolenaar03413f42016-04-12 21:07:15 +02003809 [{lnum}, {col}]
Bram Moolenaar493c1782014-05-28 14:34:46 +02003810 [{lnum}, {col}, {off}]
3811 [{lnum}, {col}, {off}, {curswant}]
Bram Moolenaar946e27a2014-06-25 18:50:27 +02003812 This is like the return value of |getpos()| or |getcurpos()|,
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02003813 but without the first item.
Bram Moolenaar493c1782014-05-28 14:34:46 +02003814
Bram Moolenaar071d4272004-06-13 20:20:40 +00003815 Does not change the jumplist.
3816 If {lnum} is greater than the number of lines in the buffer,
3817 the cursor will be positioned at the last line in the buffer.
3818 If {lnum} is zero, the cursor will stay in the current line.
Bram Moolenaar6f16eb82005-08-23 21:02:42 +00003819 If {col} is greater than the number of bytes in the line,
Bram Moolenaar071d4272004-06-13 20:20:40 +00003820 the cursor will be positioned at the last character in the
3821 line.
3822 If {col} is zero, the cursor will stay in the current column.
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02003823 If {curswant} is given it is used to set the preferred column
Bram Moolenaar34401cc2014-08-29 15:12:19 +02003824 for vertical movement. Otherwise {col} is used.
Bram Moolenaar2f3b5102014-11-19 18:54:17 +01003825
Bram Moolenaar0b238792006-03-02 22:49:12 +00003826 When 'virtualedit' is used {off} specifies the offset in
3827 screen columns from the start of the character. E.g., a
Bram Moolenaard46bbc72007-05-12 14:38:41 +00003828 position within a <Tab> or after the last character.
Bram Moolenaar798b30b2009-04-22 10:56:16 +00003829 Returns 0 when the position could be set, -1 otherwise.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003830
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003831 Can also be used as a |method|: >
3832 GetCursorPos()->cursor()
3833
Bram Moolenaar4551c0a2018-06-20 22:38:21 +02003834debugbreak({pid}) *debugbreak()*
3835 Specifically used to interrupt a program being debugged. It
3836 will cause process {pid} to get a SIGTRAP. Behavior for other
3837 processes is undefined. See |terminal-debugger|.
3838 {only available on MS-Windows}
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003839
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003840 Can also be used as a |method|: >
3841 GetPid()->debugbreak()
3842
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003843deepcopy({expr} [, {noref}]) *deepcopy()* *E698*
Bram Moolenaar58b85342016-08-14 19:54:54 +02003844 Make a copy of {expr}. For Numbers and Strings this isn't
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003845 different from using {expr} directly.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003846 When {expr} is a |List| a full copy is created. This means
3847 that the original |List| can be changed without changing the
Bram Moolenaar6463ca22016-02-13 17:04:46 +01003848 copy, and vice versa. When an item is a |List| or
3849 |Dictionary|, a copy for it is made, recursively. Thus
3850 changing an item in the copy does not change the contents of
3851 the original |List|.
3852 A |Dictionary| is copied in a similar way as a |List|.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003853 When {noref} is omitted or zero a contained |List| or
3854 |Dictionary| is only copied once. All references point to
3855 this single copy. With {noref} set to 1 every occurrence of a
3856 |List| or |Dictionary| results in a new copy. This also means
3857 that a cyclic reference causes deepcopy() to fail.
Bram Moolenaar3a3a7232005-01-17 22:16:15 +00003858 *E724*
3859 Nesting is possible up to 100 levels. When there is an item
Bram Moolenaar4399ef42005-02-12 14:29:27 +00003860 that refers back to a higher level making a deep copy with
3861 {noref} set to 1 will fail.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00003862 Also see |copy()|.
3863
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003864 Can also be used as a |method|: >
3865 GetObject()->deepcopy()
3866
Bram Moolenaarda440d22016-01-16 21:27:23 +01003867delete({fname} [, {flags}]) *delete()*
3868 Without {flags} or with {flags} empty: Deletes the file by the
Bram Moolenaar43a34f92016-01-17 15:56:34 +01003869 name {fname}. This also works when {fname} is a symbolic link.
Bram Moolenaarda440d22016-01-16 21:27:23 +01003870
3871 When {flags} is "d": Deletes the directory by the name
Bram Moolenaar43a34f92016-01-17 15:56:34 +01003872 {fname}. This fails when directory {fname} is not empty.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003873
Bram Moolenaarda440d22016-01-16 21:27:23 +01003874 When {flags} is "rf": Deletes the directory by the name
Bram Moolenaar43a34f92016-01-17 15:56:34 +01003875 {fname} and everything in it, recursively. BE CAREFUL!
Bram Moolenaar36f44c22016-08-28 18:17:20 +02003876 Note: on MS-Windows it is not possible to delete a directory
3877 that is being used.
Bram Moolenaar818078d2016-08-27 21:58:42 +02003878
Bram Moolenaar43a34f92016-01-17 15:56:34 +01003879 A symbolic link itself is deleted, not what it points to.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01003880
Bram Moolenaarda440d22016-01-16 21:27:23 +01003881 The result is a Number, which is 0 if the delete operation was
3882 successful and -1 when the deletion failed or partly failed.
3883
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003884 Use |remove()| to delete an item from a |List|.
Bram Moolenaard79a2622018-06-07 18:17:46 +02003885 To delete a line from the buffer use |:delete| or
3886 |deletebufline()|.
3887
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003888 Can also be used as a |method|: >
3889 GetName()->delete()
3890
Bram Moolenaard473c8c2018-08-11 18:00:22 +02003891deletebufline({expr}, {first} [, {last}]) *deletebufline()*
Bram Moolenaard79a2622018-06-07 18:17:46 +02003892 Delete lines {first} to {last} (inclusive) from buffer {expr}.
3893 If {last} is omitted then delete line {first} only.
3894 On success 0 is returned, on failure 1 is returned.
3895
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003896 This function works only for loaded buffers. First call
3897 |bufload()| if needed.
3898
Bram Moolenaard79a2622018-06-07 18:17:46 +02003899 For the use of {expr}, see |bufname()| above.
3900
Bram Moolenaar95bafa22018-10-02 13:26:25 +02003901 {first} and {last} are used like with |getline()|. Note that
Bram Moolenaard79a2622018-06-07 18:17:46 +02003902 when using |line()| this refers to the current buffer. Use "$"
3903 to refer to the last line in buffer {expr}.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003904
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003905 Can also be used as a |method|: >
3906 GetBuffer()->deletebufline(1)
Bram Moolenaar2e693a82019-10-16 22:35:02 +02003907<
Bram Moolenaar071d4272004-06-13 20:20:40 +00003908 *did_filetype()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02003909did_filetype() Returns |TRUE| when autocommands are being executed and the
Bram Moolenaar071d4272004-06-13 20:20:40 +00003910 FileType event has been triggered at least once. Can be used
3911 to avoid triggering the FileType event again in the scripts
3912 that detect the file type. |FileType|
Bram Moolenaar6aa8cea2017-06-05 14:44:35 +02003913 Returns |FALSE| when `:setf FALLBACK` was used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00003914 When editing another file, the counter is reset, thus this
3915 really checks if the FileType event has been triggered for the
3916 current buffer. This allows an autocommand that starts
3917 editing another buffer to set 'filetype' and load a syntax
3918 file.
3919
Bram Moolenaar47136d72004-10-12 20:02:24 +00003920diff_filler({lnum}) *diff_filler()*
3921 Returns the number of filler lines above line {lnum}.
3922 These are the lines that were inserted at this point in
3923 another diff'ed window. These filler lines are shown in the
3924 display but don't exist in the buffer.
3925 {lnum} is used like with |getline()|. Thus "." is the current
3926 line, "'m" mark m, etc.
3927 Returns 0 if the current window is not in diff mode.
3928
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003929 Can also be used as a |method|: >
3930 GetLnum()->diff_filler()
3931
Bram Moolenaar47136d72004-10-12 20:02:24 +00003932diff_hlID({lnum}, {col}) *diff_hlID()*
3933 Returns the highlight ID for diff mode at line {lnum} column
3934 {col} (byte index). When the current line does not have a
3935 diff change zero is returned.
3936 {lnum} is used like with |getline()|. Thus "." is the current
3937 line, "'m" mark m, etc.
3938 {col} is 1 for the leftmost column, {lnum} is 1 for the first
3939 line.
3940 The highlight ID can be used with |synIDattr()| to obtain
3941 syntax information about the highlighting.
3942
Bram Moolenaar1a3a8912019-08-23 22:31:37 +02003943 Can also be used as a |method|: >
3944 GetLnum()->diff_hlID(col)
Bram Moolenaar691ddee2019-05-09 14:52:41 +02003945
Bram Moolenaar13065c42005-01-08 16:08:21 +00003946empty({expr}) *empty()*
3947 Return the Number 1 if {expr} is empty, zero otherwise.
Bram Moolenaar835dc632016-02-07 14:27:38 +01003948 - A |List| or |Dictionary| is empty when it does not have any
3949 items.
Bram Moolenaard8968242019-01-15 22:51:57 +01003950 - A |String| is empty when its length is zero.
3951 - A |Number| and |Float| are empty when their value is zero.
Bram Moolenaar835dc632016-02-07 14:27:38 +01003952 - |v:false|, |v:none| and |v:null| are empty, |v:true| is not.
Bram Moolenaard8968242019-01-15 22:51:57 +01003953 - A |Job| is empty when it failed to start.
3954 - A |Channel| is empty when it is closed.
Bram Moolenaard09091d2019-01-17 16:07:22 +01003955 - A |Blob| is empty when its length is zero.
Bram Moolenaar835dc632016-02-07 14:27:38 +01003956
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01003957 For a long |List| this is much faster than comparing the
Bram Moolenaar32466aa2006-02-24 23:53:04 +00003958 length with zero.
Bram Moolenaara4208962019-08-24 20:50:19 +02003959
Bram Moolenaarac92e252019-08-03 21:58:38 +02003960 Can also be used as a |method|: >
3961 mylist->empty()
Bram Moolenaar13065c42005-01-08 16:08:21 +00003962
Bram Moolenaar29634562020-01-09 21:46:04 +01003963environ() *environ()*
3964 Return all of environment variables as dictionary. You can
3965 check if an environment variable exists like this: >
3966 :echo has_key(environ(), 'HOME')
3967< Note that the variable name may be CamelCase; to ignore case
3968 use this: >
3969 :echo index(keys(environ()), 'HOME', 0, 1) != -1
3970
Bram Moolenaar071d4272004-06-13 20:20:40 +00003971escape({string}, {chars}) *escape()*
3972 Escape the characters in {chars} that occur in {string} with a
3973 backslash. Example: >
3974 :echo escape('c:\program files\vim', ' \')
3975< results in: >
3976 c:\\program\ files\\vim
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02003977< Also see |shellescape()| and |fnameescape()|.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00003978
Bram Moolenaara4208962019-08-24 20:50:19 +02003979 Can also be used as a |method|: >
3980 GetText()->escape(' \')
3981<
Bram Moolenaar446cb832008-06-24 21:56:24 +00003982 *eval()*
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00003983eval({string}) Evaluate {string} and return the result. Especially useful to
3984 turn the result of |string()| back into the original value.
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01003985 This works for Numbers, Floats, Strings, Blobs and composites
3986 of them. Also works for |Funcref|s that refer to existing
Bram Moolenaar446cb832008-06-24 21:56:24 +00003987 functions.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00003988
Bram Moolenaar25e42232019-08-04 15:04:10 +02003989 Can also be used as a |method|: >
3990 argv->join()->eval()
3991
Bram Moolenaar071d4272004-06-13 20:20:40 +00003992eventhandler() *eventhandler()*
3993 Returns 1 when inside an event handler. That is that Vim got
3994 interrupted while waiting for the user to type a character,
3995 e.g., when dropping a file on Vim. This means interactive
3996 commands cannot be used. Otherwise zero is returned.
3997
3998executable({expr}) *executable()*
3999 This function checks if an executable with the name {expr}
4000 exists. {expr} must be the name of the program without any
Bram Moolenaarf4b8e572004-06-24 15:53:16 +00004001 arguments.
4002 executable() uses the value of $PATH and/or the normal
4003 searchpath for programs. *PATHEXT*
Bram Moolenaar5666fcd2019-12-26 14:35:26 +01004004 On MS-Windows the ".exe", ".bat", etc. can optionally be
4005 included. Then the extensions in $PATHEXT are tried. Thus if
4006 "foo.exe" does not exist, "foo.exe.bat" can be found. If
4007 $PATHEXT is not set then ".exe;.com;.bat;.cmd" is used. A dot
4008 by itself can be used in $PATHEXT to try using the name
4009 without an extension. When 'shell' looks like a Unix shell,
4010 then the name is also tried without adding an extension.
4011 On MS-Windows it only checks if the file exists and is not a
4012 directory, not if it's really executable.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00004013 On MS-Windows an executable in the same directory as Vim is
4014 always found. Since this directory is added to $PATH it
4015 should also work to execute it |win32-PATH|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004016 The result is a Number:
4017 1 exists
4018 0 does not exist
4019 -1 not implemented on this system
Bram Moolenaar6dc819b2018-07-03 16:42:19 +02004020 |exepath()| can be used to get the full path of an executable.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004021
Bram Moolenaara4208962019-08-24 20:50:19 +02004022 Can also be used as a |method|: >
4023 GetCommand()->executable()
4024
Bram Moolenaar79815f12016-07-09 17:07:29 +02004025execute({command} [, {silent}]) *execute()*
4026 Execute an Ex command or commands and return the output as a
4027 string.
4028 {command} can be a string or a List. In case of a List the
4029 lines are executed one by one.
4030 This is equivalent to: >
4031 redir => var
4032 {command}
4033 redir END
4034<
4035 The optional {silent} argument can have these values:
4036 "" no `:silent` used
4037 "silent" `:silent` used
4038 "silent!" `:silent!` used
Bram Moolenaar214641f2017-03-05 17:04:09 +01004039 The default is "silent". Note that with "silent!", unlike
Bram Moolenaar069c1e72016-07-15 21:25:08 +02004040 `:redir`, error messages are dropped. When using an external
4041 command the screen may be messed up, use `system()` instead.
Bram Moolenaar79815f12016-07-09 17:07:29 +02004042 *E930*
4043 It is not possible to use `:redir` anywhere in {command}.
4044
4045 To get a list of lines use |split()| on the result: >
Bram Moolenaar063b9d12016-07-09 20:21:48 +02004046 split(execute('args'), "\n")
Bram Moolenaar79815f12016-07-09 17:07:29 +02004047
Bram Moolenaar868b7b62019-05-29 21:44:40 +02004048< To execute a command in another window than the current one
4049 use `win_execute()`.
4050
4051 When used recursively the output of the recursive call is not
Bram Moolenaar79815f12016-07-09 17:07:29 +02004052 included in the output of the higher level call.
4053
Bram Moolenaara4208962019-08-24 20:50:19 +02004054 Can also be used as a |method|: >
4055 GetCommand()->execute()
4056
Bram Moolenaarc7f02552014-04-01 21:00:59 +02004057exepath({expr}) *exepath()*
4058 If {expr} is an executable and is either an absolute path, a
4059 relative path or found in $PATH, return the full path.
4060 Note that the current directory is used when {expr} starts
4061 with "./", which may be a problem for Vim: >
4062 echo exepath(v:progpath)
Bram Moolenaar7e38ea22014-04-05 22:55:53 +02004063< If {expr} cannot be found in $PATH or is not executable then
Bram Moolenaarc7f02552014-04-01 21:00:59 +02004064 an empty string is returned.
4065
Bram Moolenaara4208962019-08-24 20:50:19 +02004066 Can also be used as a |method|: >
4067 GetCommand()->exepath()
Bram Moolenaar2e693a82019-10-16 22:35:02 +02004068<
Bram Moolenaar071d4272004-06-13 20:20:40 +00004069 *exists()*
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02004070exists({expr}) The result is a Number, which is |TRUE| if {expr} is defined,
4071 zero otherwise.
4072
4073 For checking for a supported feature use |has()|.
4074 For checking if a file exists use |filereadable()|.
4075
4076 The {expr} argument is a string, which contains one of these:
Bram Moolenaar071d4272004-06-13 20:20:40 +00004077 &option-name Vim option (only checks if it exists,
4078 not if it really works)
4079 +option-name Vim option that works.
4080 $ENVNAME environment variable (could also be
4081 done by comparing with an empty
4082 string)
4083 *funcname built-in function (see |functions|)
4084 or user defined function (see
Bram Moolenaarbcb98982014-05-01 14:08:19 +02004085 |user-functions|). Also works for a
4086 variable that is a Funcref.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004087 varname internal variable (see
Bram Moolenaar58b85342016-08-14 19:54:54 +02004088 |internal-variables|). Also works
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004089 for |curly-braces-names|, |Dictionary|
4090 entries, |List| items, etc. Beware
Bram Moolenaarc236c162008-07-13 17:41:49 +00004091 that evaluating an index may cause an
4092 error message for an invalid
4093 expression. E.g.: >
4094 :let l = [1, 2, 3]
4095 :echo exists("l[5]")
4096< 0 >
4097 :echo exists("l[xx]")
4098< E121: Undefined variable: xx
4099 0
Bram Moolenaar071d4272004-06-13 20:20:40 +00004100 :cmdname Ex command: built-in command, user
4101 command or command modifier |:command|.
4102 Returns:
4103 1 for match with start of a command
4104 2 full match with a command
4105 3 matches several user commands
4106 To check for a supported command
4107 always check the return value to be 2.
Bram Moolenaar14716812006-05-04 21:54:08 +00004108 :2match The |:2match| command.
4109 :3match The |:3match| command.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004110 #event autocommand defined for this event
4111 #event#pattern autocommand defined for this event and
4112 pattern (the pattern is taken
4113 literally and compared to the
4114 autocommand patterns character by
4115 character)
Bram Moolenaara9b1e742005-12-19 22:14:58 +00004116 #group autocommand group exists
4117 #group#event autocommand defined for this group and
4118 event.
4119 #group#event#pattern
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00004120 autocommand defined for this group,
Bram Moolenaara9b1e742005-12-19 22:14:58 +00004121 event and pattern.
Bram Moolenaarf4cd3e82005-12-22 22:47:02 +00004122 ##event autocommand for this event is
4123 supported.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004124
4125 Examples: >
4126 exists("&shortname")
4127 exists("$HOSTNAME")
4128 exists("*strftime")
4129 exists("*s:MyFunc")
4130 exists("bufcount")
4131 exists(":Make")
Bram Moolenaara9b1e742005-12-19 22:14:58 +00004132 exists("#CursorHold")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004133 exists("#BufReadPre#*.gz")
Bram Moolenaara9b1e742005-12-19 22:14:58 +00004134 exists("#filetypeindent")
4135 exists("#filetypeindent#FileType")
4136 exists("#filetypeindent#FileType#*")
Bram Moolenaarf4cd3e82005-12-22 22:47:02 +00004137 exists("##ColorScheme")
Bram Moolenaar071d4272004-06-13 20:20:40 +00004138< There must be no space between the symbol (&/$/*/#) and the
4139 name.
Bram Moolenaar91170f82006-05-05 21:15:17 +00004140 There must be no extra characters after the name, although in
4141 a few cases this is ignored. That may become more strict in
4142 the future, thus don't count on it!
4143 Working example: >
4144 exists(":make")
4145< NOT working example: >
4146 exists(":make install")
Bram Moolenaar9c102382006-05-03 21:26:49 +00004147
4148< Note that the argument must be a string, not the name of the
4149 variable itself. For example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00004150 exists(bufcount)
4151< This doesn't check for existence of the "bufcount" variable,
Bram Moolenaar06a89a52006-04-29 22:01:03 +00004152 but gets the value of "bufcount", and checks if that exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004153
Bram Moolenaara4208962019-08-24 20:50:19 +02004154 Can also be used as a |method|: >
4155 Varname()->exists()
4156
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004157exp({expr}) *exp()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02004158 Return the exponential of {expr} as a |Float| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004159 [0, inf].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02004160 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004161 Examples: >
4162 :echo exp(2)
4163< 7.389056 >
4164 :echo exp(-1)
4165< 0.367879
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02004166
4167 Can also be used as a |method|: >
4168 Compute()->exp()
4169<
Bram Moolenaardb84e452010-08-15 13:50:43 +02004170 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004171
4172
Bram Moolenaar84f72352012-03-11 15:57:40 +01004173expand({expr} [, {nosuf} [, {list}]]) *expand()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00004174 Expand wildcards and the following special keywords in {expr}.
Bram Moolenaar84f72352012-03-11 15:57:40 +01004175 'wildignorecase' applies.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004176
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004177 If {list} is given and it is |TRUE|, a List will be returned.
Bram Moolenaar84f72352012-03-11 15:57:40 +01004178 Otherwise the result is a String and when there are several
4179 matches, they are separated by <NL> characters. [Note: in
4180 version 5.0 a space was used, which caused problems when a
4181 file name contains a space]
Bram Moolenaar071d4272004-06-13 20:20:40 +00004182
Bram Moolenaar58b85342016-08-14 19:54:54 +02004183 If the expansion fails, the result is an empty string. A name
Bram Moolenaarec7944a2013-06-12 21:29:15 +02004184 for a non-existing file is not included, unless {expr} does
4185 not start with '%', '#' or '<', see below.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004186
4187 When {expr} starts with '%', '#' or '<', the expansion is done
4188 like for the |cmdline-special| variables with their associated
4189 modifiers. Here is a short overview:
4190
4191 % current file name
4192 # alternate file name
4193 #n alternate file name n
4194 <cfile> file name under the cursor
4195 <afile> autocmd file name
4196 <abuf> autocmd buffer number (as a String!)
4197 <amatch> autocmd matched name
Bram Moolenaara6878372014-03-22 21:02:50 +01004198 <sfile> sourced script file or function name
Bram Moolenaarf29c1c62018-09-10 21:05:02 +02004199 <slnum> sourced script line number or function
4200 line number
4201 <sflnum> script file line number, also when in
4202 a function
Bram Moolenaar071d4272004-06-13 20:20:40 +00004203 <cword> word under the cursor
4204 <cWORD> WORD under the cursor
4205 <client> the {clientid} of the last received
4206 message |server2client()|
4207 Modifiers:
4208 :p expand to full path
4209 :h head (last path component removed)
4210 :t tail (last path component only)
4211 :r root (one extension removed)
4212 :e extension only
4213
4214 Example: >
4215 :let &tags = expand("%:p:h") . "/tags"
4216< Note that when expanding a string that starts with '%', '#' or
4217 '<', any following text is ignored. This does NOT work: >
4218 :let doesntwork = expand("%:h.bak")
4219< Use this: >
4220 :let doeswork = expand("%:h") . ".bak"
4221< Also note that expanding "<cfile>" and others only returns the
4222 referenced file name without further expansion. If "<cfile>"
4223 is "~/.cshrc", you need to do another expand() to have the
4224 "~/" expanded into the path of the home directory: >
4225 :echo expand(expand("<cfile>"))
4226<
4227 There cannot be white space between the variables and the
4228 following modifier. The |fnamemodify()| function can be used
4229 to modify normal file names.
4230
4231 When using '%' or '#', and the current or alternate file name
4232 is not defined, an empty string is used. Using "%:p" in a
4233 buffer with no name, results in the current directory, with a
4234 '/' added.
4235
4236 When {expr} does not start with '%', '#' or '<', it is
4237 expanded like a file name is expanded on the command line.
4238 'suffixes' and 'wildignore' are used, unless the optional
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004239 {nosuf} argument is given and it is |TRUE|.
Bram Moolenaar146e9c32012-03-07 19:18:23 +01004240 Names for non-existing files are included. The "**" item can
4241 be used to search in a directory tree. For example, to find
4242 all "README" files in the current directory and below: >
Bram Moolenaar02743632005-07-25 20:42:36 +00004243 :echo expand("**/README")
4244<
Bram Moolenaar647e24b2019-03-17 16:39:46 +01004245 expand() can also be used to expand variables and environment
Bram Moolenaar071d4272004-06-13 20:20:40 +00004246 variables that are only known in a shell. But this can be
Bram Moolenaar34401cc2014-08-29 15:12:19 +02004247 slow, because a shell may be used to do the expansion. See
4248 |expr-env-expand|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004249 The expanded variable is still handled like a list of file
Bram Moolenaar58b85342016-08-14 19:54:54 +02004250 names. When an environment variable cannot be expanded, it is
Bram Moolenaar071d4272004-06-13 20:20:40 +00004251 left unchanged. Thus ":echo expand('$FOOBAR')" results in
4252 "$FOOBAR".
4253
4254 See |glob()| for finding existing files. See |system()| for
4255 getting the raw output of an external command.
4256
Bram Moolenaara4208962019-08-24 20:50:19 +02004257 Can also be used as a |method|: >
4258 Getpattern()->expand()
4259
Bram Moolenaar80dad482019-06-09 17:22:31 +02004260expandcmd({expr}) *expandcmd()*
4261 Expand special items in {expr} like what is done for an Ex
4262 command such as `:edit`. This expands special keywords, like
4263 with |expand()|, and environment variables, anywhere in
Bram Moolenaar96f45c02019-10-26 19:53:45 +02004264 {expr}. "~user" and "~/path" are only expanded at the start.
4265 Returns the expanded string. Example: >
Bram Moolenaar80dad482019-06-09 17:22:31 +02004266 :echo expandcmd('make %<.o')
Bram Moolenaara4208962019-08-24 20:50:19 +02004267
4268< Can also be used as a |method|: >
4269 GetCommand()->expandcmd()
Bram Moolenaar80dad482019-06-09 17:22:31 +02004270<
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004271extend({expr1}, {expr2} [, {expr3}]) *extend()*
Bram Moolenaara23ccb82006-02-27 00:08:02 +00004272 {expr1} and {expr2} must be both |Lists| or both
4273 |Dictionaries|.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004274
Bram Moolenaara23ccb82006-02-27 00:08:02 +00004275 If they are |Lists|: Append {expr2} to {expr1}.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004276 If {expr3} is given insert the items of {expr2} before item
4277 {expr3} in {expr1}. When {expr3} is zero insert before the
4278 first item. When {expr3} is equal to len({expr1}) then
4279 {expr2} is appended.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00004280 Examples: >
4281 :echo sort(extend(mylist, [7, 5]))
4282 :call extend(mylist, [2, 3], 1)
Bram Moolenaardc9cf9c2008-08-08 10:36:31 +00004283< When {expr1} is the same List as {expr2} then the number of
4284 items copied is equal to the original length of the List.
4285 E.g., when {expr3} is 1 you get N new copies of the first item
4286 (where N is the original length of the List).
Bram Moolenaar58b85342016-08-14 19:54:54 +02004287 Use |add()| to concatenate one item to a list. To concatenate
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004288 two lists into a new list use the + operator: >
Bram Moolenaarde8866b2005-01-06 23:24:37 +00004289 :let newlist = [1, 2, 3] + [4, 5]
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004290<
Bram Moolenaara23ccb82006-02-27 00:08:02 +00004291 If they are |Dictionaries|:
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004292 Add all entries from {expr2} to {expr1}.
4293 If a key exists in both {expr1} and {expr2} then {expr3} is
4294 used to decide what to do:
4295 {expr3} = "keep": keep the value of {expr1}
4296 {expr3} = "force": use the value of {expr2}
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00004297 {expr3} = "error": give an error message *E737*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004298 When {expr3} is omitted then "force" is assumed.
4299
4300 {expr1} is changed when {expr2} is not empty. If necessary
4301 make a copy of {expr1} first.
4302 {expr2} remains unchanged.
Bram Moolenaarf2571c62015-06-09 19:44:55 +02004303 When {expr1} is locked and {expr2} is not empty the operation
4304 fails.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004305 Returns {expr1}.
4306
Bram Moolenaarac92e252019-08-03 21:58:38 +02004307 Can also be used as a |method|: >
4308 mylist->extend(otherlist)
4309
Bram Moolenaarde8866b2005-01-06 23:24:37 +00004310
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004311feedkeys({string} [, {mode}]) *feedkeys()*
4312 Characters in {string} are queued for processing as if they
Bram Moolenaar0a988df2015-01-27 15:19:24 +01004313 come from a mapping or were typed by the user.
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004314
Bram Moolenaar0a988df2015-01-27 15:19:24 +01004315 By default the string is added to the end of the typeahead
4316 buffer, thus if a mapping is still being executed the
4317 characters come after them. Use the 'i' flag to insert before
4318 other characters, they will be executed next, before any
4319 characters from a mapping.
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004320
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004321 The function does not wait for processing of keys contained in
4322 {string}.
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004323
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004324 To include special keys into {string}, use double-quotes
4325 and "\..." notation |expr-quote|. For example,
Bram Moolenaar79166c42007-05-10 18:29:51 +00004326 feedkeys("\<CR>") simulates pressing of the <Enter> key. But
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004327 feedkeys('\<CR>') pushes 5 characters.
Bram Moolenaarbe0a2592019-05-09 13:50:16 +02004328 A special code that might be useful is <Ignore>, it exits the
4329 wait for a character without doing anything. *<Ignore>*
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004330
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004331 {mode} is a String, which can contain these character flags:
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004332 'm' Remap keys. This is default. If {mode} is absent,
4333 keys are remapped.
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00004334 'n' Do not remap keys.
4335 't' Handle keys as if typed; otherwise they are handled as
4336 if coming from a mapping. This matters for undo,
4337 opening folds, etc.
Bram Moolenaar5e66b422019-01-24 21:58:10 +01004338 'L' Lowlevel input. Only works for Unix or when using the
4339 GUI. Keys are used as if they were coming from the
4340 terminal. Other flags are not used. *E980*
Bram Moolenaar0a988df2015-01-27 15:19:24 +01004341 'i' Insert the string instead of appending (see above).
Bram Moolenaar25281632016-01-21 23:32:32 +01004342 'x' Execute commands until typeahead is empty. This is
4343 similar to using ":normal!". You can call feedkeys()
4344 several times without 'x' and then one time with 'x'
4345 (possibly with an empty {string}) to execute all the
Bram Moolenaar03413f42016-04-12 21:07:15 +02004346 typeahead. Note that when Vim ends in Insert mode it
4347 will behave as if <Esc> is typed, to avoid getting
4348 stuck, waiting for a character to be typed before the
4349 script continues.
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004350 Note that if you manage to call feedkeys() while
Bram Moolenaar5b69c222019-01-11 14:50:06 +01004351 executing commands, thus calling it recursively, then
Bram Moolenaarb328cca2019-01-06 16:24:01 +01004352 all typehead will be consumed by the last call.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02004353 '!' When used with 'x' will not end Insert mode. Can be
4354 used in a test when a timer is set to exit Insert mode
4355 a little later. Useful for testing CursorHoldI.
4356
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00004357 Return value is always 0.
4358
Bram Moolenaara4208962019-08-24 20:50:19 +02004359 Can also be used as a |method|: >
4360 GetInput()->feedkeys()
4361
Bram Moolenaar071d4272004-06-13 20:20:40 +00004362filereadable({file}) *filereadable()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004363 The result is a Number, which is |TRUE| when a file with the
Bram Moolenaar071d4272004-06-13 20:20:40 +00004364 name {file} exists, and can be read. If {file} doesn't exist,
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004365 or is a directory, the result is |FALSE|. {file} is any
Bram Moolenaar071d4272004-06-13 20:20:40 +00004366 expression, which is used as a String.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004367 If you don't care about the file being readable you can use
4368 |glob()|.
Bram Moolenaar25e42232019-08-04 15:04:10 +02004369 {file} is used as-is, you may want to expand wildcards first: >
4370 echo filereadable('~/.vimrc')
4371 0
4372 echo filereadable(expand('~/.vimrc'))
4373 1
Bram Moolenaara4208962019-08-24 20:50:19 +02004374
4375< Can also be used as a |method|: >
4376 GetName()->filereadable()
Bram Moolenaar25e42232019-08-04 15:04:10 +02004377< *file_readable()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00004378 Obsolete name: file_readable().
4379
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004380
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004381filewritable({file}) *filewritable()*
4382 The result is a Number, which is 1 when a file with the
4383 name {file} exists, and can be written. If {file} doesn't
Bram Moolenaar446cb832008-06-24 21:56:24 +00004384 exist, or is not writable, the result is 0. If {file} is a
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004385 directory, and we can write to it, the result is 2.
4386
Bram Moolenaara4208962019-08-24 20:50:19 +02004387 Can also be used as a |method|: >
4388 GetName()->filewriteable()
4389
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004390
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004391filter({expr1}, {expr2}) *filter()*
4392 {expr1} must be a |List| or a |Dictionary|.
4393 For each item in {expr1} evaluate {expr2} and when the result
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004394 is zero remove the item from the |List| or |Dictionary|.
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004395 {expr2} must be a |string| or |Funcref|.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004396
Bram Moolenaar50ba5262016-09-22 22:33:02 +02004397 If {expr2} is a |string|, inside {expr2} |v:val| has the value
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004398 of the current item. For a |Dictionary| |v:key| has the key
Bram Moolenaar50ba5262016-09-22 22:33:02 +02004399 of the current item and for a |List| |v:key| has the index of
4400 the current item.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004401 Examples: >
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004402 call filter(mylist, 'v:val !~ "OLD"')
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004403< Removes the items where "OLD" appears. >
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004404 call filter(mydict, 'v:key >= 8')
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004405< Removes the items with a key below 8. >
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004406 call filter(var, 0)
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004407< Removes all the items, thus clears the |List| or |Dictionary|.
Bram Moolenaard8b02732005-01-14 21:48:43 +00004408
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004409 Note that {expr2} is the result of expression and is then
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004410 used as an expression again. Often it is good to use a
4411 |literal-string| to avoid having to double backslashes.
4412
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004413 If {expr2} is a |Funcref| it must take two arguments:
4414 1. the key or the index of the current item.
4415 2. the value of the current item.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02004416 The function must return |TRUE| if the item should be kept.
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004417 Example that keeps the odd items of a list: >
4418 func Odd(idx, val)
4419 return a:idx % 2 == 1
4420 endfunc
4421 call filter(mylist, function('Odd'))
Bram Moolenaar50ba5262016-09-22 22:33:02 +02004422< It is shorter when using a |lambda|: >
4423 call filter(myList, {idx, val -> idx * val <= 42})
4424< If you do not use "val" you can leave it out: >
4425 call filter(myList, {idx -> idx % 2 == 1})
Bram Moolenaar2ec618c2016-10-01 14:47:05 +02004426<
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004427 The operation is done in-place. If you want a |List| or
4428 |Dictionary| to remain unmodified make a copy first: >
Bram Moolenaarafeb4fa2006-02-01 21:51:12 +00004429 :let l = filter(copy(mylist), 'v:val =~ "KEEP"')
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004430
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02004431< Returns {expr1}, the |List| or |Dictionary| that was filtered.
4432 When an error is encountered while evaluating {expr2} no
4433 further items in {expr1} are processed. When {expr2} is a
4434 Funcref errors inside a function are ignored, unless it was
4435 defined with the "abort" flag.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004436
Bram Moolenaarac92e252019-08-03 21:58:38 +02004437 Can also be used as a |method|: >
4438 mylist->filter(expr2)
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00004439
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004440finddir({name} [, {path} [, {count}]]) *finddir()*
Bram Moolenaar5b6b1ca2007-03-27 08:19:43 +00004441 Find directory {name} in {path}. Supports both downwards and
4442 upwards recursive directory searches. See |file-searching|
4443 for the syntax of {path}.
4444 Returns the path of the first found match. When the found
4445 directory is below the current directory a relative path is
4446 returned. Otherwise a full path is returned.
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00004447 If {path} is omitted or empty then 'path' is used.
4448 If the optional {count} is given, find {count}'s occurrence of
Bram Moolenaar433f7c82006-03-21 21:29:36 +00004449 {name} in {path} instead of the first one.
Bram Moolenaar899dddf2006-03-26 21:06:50 +00004450 When {count} is negative return all the matches in a |List|.
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00004451 This is quite similar to the ex-command |:find|.
Bram Moolenaardb84e452010-08-15 13:50:43 +02004452 {only available when compiled with the |+file_in_path|
4453 feature}
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00004454
Bram Moolenaara4208962019-08-24 20:50:19 +02004455 Can also be used as a |method|: >
4456 GetName()->finddir()
4457
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004458findfile({name} [, {path} [, {count}]]) *findfile()*
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00004459 Just like |finddir()|, but find a file instead of a directory.
Bram Moolenaar433f7c82006-03-21 21:29:36 +00004460 Uses 'suffixesadd'.
4461 Example: >
4462 :echo findfile("tags.vim", ".;")
Bram Moolenaaref2f6562007-05-06 13:32:59 +00004463< Searches from the directory of the current file upwards until
4464 it finds the file "tags.vim".
Bram Moolenaar071d4272004-06-13 20:20:40 +00004465
Bram Moolenaara4208962019-08-24 20:50:19 +02004466 Can also be used as a |method|: >
4467 GetName()->findfile()
4468
Bram Moolenaar446cb832008-06-24 21:56:24 +00004469float2nr({expr}) *float2nr()*
4470 Convert {expr} to a Number by omitting the part after the
4471 decimal point.
4472 {expr} must evaluate to a |Float| or a Number.
4473 When the value of {expr} is out of range for a |Number| the
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02004474 result is truncated to 0x7fffffff or -0x7fffffff (or when
4475 64-bit Number support is enabled, 0x7fffffffffffffff or
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02004476 -0x7fffffffffffffff). NaN results in -0x80000000 (or when
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02004477 64-bit Number support is enabled, -0x8000000000000000).
Bram Moolenaar446cb832008-06-24 21:56:24 +00004478 Examples: >
4479 echo float2nr(3.95)
4480< 3 >
4481 echo float2nr(-23.45)
4482< -23 >
4483 echo float2nr(1.0e100)
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02004484< 2147483647 (or 9223372036854775807) >
Bram Moolenaar446cb832008-06-24 21:56:24 +00004485 echo float2nr(-1.0e150)
Bram Moolenaar22fcfad2016-07-01 18:17:26 +02004486< -2147483647 (or -9223372036854775807) >
Bram Moolenaar446cb832008-06-24 21:56:24 +00004487 echo float2nr(1.0e-100)
4488< 0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02004489
4490 Can also be used as a |method|: >
4491 Compute()->float2nr()
4492<
Bram Moolenaar446cb832008-06-24 21:56:24 +00004493 {only available when compiled with the |+float| feature}
4494
4495
4496floor({expr}) *floor()*
4497 Return the largest integral value less than or equal to
4498 {expr} as a |Float| (round down).
4499 {expr} must evaluate to a |Float| or a |Number|.
4500 Examples: >
4501 echo floor(1.856)
4502< 1.0 >
4503 echo floor(-5.456)
4504< -6.0 >
4505 echo floor(4.0)
4506< 4.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02004507
4508 Can also be used as a |method|: >
4509 Compute()->floor()
4510<
Bram Moolenaar446cb832008-06-24 21:56:24 +00004511 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004512
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004513
4514fmod({expr1}, {expr2}) *fmod()*
4515 Return the remainder of {expr1} / {expr2}, even if the
4516 division is not representable. Returns {expr1} - i * {expr2}
4517 for some integer i such that if {expr2} is non-zero, the
4518 result has the same sign as {expr1} and magnitude less than
4519 the magnitude of {expr2}. If {expr2} is zero, the value
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02004520 returned is zero. The value returned is a |Float|.
4521 {expr1} and {expr2} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004522 Examples: >
4523 :echo fmod(12.33, 1.22)
4524< 0.13 >
4525 :echo fmod(-12.33, 1.22)
4526< -0.13
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02004527
4528 Can also be used as a |method|: >
4529 Compute()->fmod(1.22)
4530<
Bram Moolenaardb84e452010-08-15 13:50:43 +02004531 {only available when compiled with |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02004532
4533
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004534fnameescape({string}) *fnameescape()*
Bram Moolenaar58b85342016-08-14 19:54:54 +02004535 Escape {string} for use as file name command argument. All
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004536 characters that have a special meaning, such as '%' and '|'
4537 are escaped with a backslash.
Bram Moolenaar446cb832008-06-24 21:56:24 +00004538 For most systems the characters escaped are
4539 " \t\n*?[{`$\\%#'\"|!<". For systems where a backslash
4540 appears in a filename, it depends on the value of 'isfname'.
Bram Moolenaar1b24e4b2008-08-08 10:59:17 +00004541 A leading '+' and '>' is also escaped (special after |:edit|
4542 and |:write|). And a "-" by itself (special after |:cd|).
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004543 Example: >
Bram Moolenaar1b24e4b2008-08-08 10:59:17 +00004544 :let fname = '+some str%nge|name'
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004545 :exe "edit " . fnameescape(fname)
4546< results in executing: >
Bram Moolenaar1b24e4b2008-08-08 10:59:17 +00004547 edit \+some\ str\%nge\|name
Bram Moolenaara4208962019-08-24 20:50:19 +02004548<
4549 Can also be used as a |method|: >
4550 GetName()->fnameescape()
Bram Moolenaaraebaf892008-05-28 14:49:58 +00004551
Bram Moolenaar071d4272004-06-13 20:20:40 +00004552fnamemodify({fname}, {mods}) *fnamemodify()*
4553 Modify file name {fname} according to {mods}. {mods} is a
4554 string of characters like it is used for file names on the
4555 command line. See |filename-modifiers|.
4556 Example: >
4557 :echo fnamemodify("main.c", ":p:h")
4558< results in: >
4559 /home/mool/vim/vim/src
Bram Moolenaar446cb832008-06-24 21:56:24 +00004560< Note: Environment variables don't work in {fname}, use
Bram Moolenaar071d4272004-06-13 20:20:40 +00004561 |expand()| first then.
4562
Bram Moolenaara4208962019-08-24 20:50:19 +02004563 Can also be used as a |method|: >
4564 GetName()->fnamemodify(':p:h')
4565
Bram Moolenaar071d4272004-06-13 20:20:40 +00004566foldclosed({lnum}) *foldclosed()*
4567 The result is a Number. If the line {lnum} is in a closed
4568 fold, the result is the number of the first line in that fold.
4569 If the line {lnum} is not in a closed fold, -1 is returned.
4570
Bram Moolenaara4208962019-08-24 20:50:19 +02004571 Can also be used as a |method|: >
4572 GetLnum()->foldclosed()
4573
Bram Moolenaar071d4272004-06-13 20:20:40 +00004574foldclosedend({lnum}) *foldclosedend()*
4575 The result is a Number. If the line {lnum} is in a closed
4576 fold, the result is the number of the last line in that fold.
4577 If the line {lnum} is not in a closed fold, -1 is returned.
4578
Bram Moolenaara4208962019-08-24 20:50:19 +02004579 Can also be used as a |method|: >
4580 GetLnum()->foldclosedend()
4581
Bram Moolenaar071d4272004-06-13 20:20:40 +00004582foldlevel({lnum}) *foldlevel()*
4583 The result is a Number, which is the foldlevel of line {lnum}
Bram Moolenaar58b85342016-08-14 19:54:54 +02004584 in the current buffer. For nested folds the deepest level is
Bram Moolenaar071d4272004-06-13 20:20:40 +00004585 returned. If there is no fold at line {lnum}, zero is
4586 returned. It doesn't matter if the folds are open or closed.
4587 When used while updating folds (from 'foldexpr') -1 is
4588 returned for lines where folds are still to be updated and the
4589 foldlevel is unknown. As a special case the level of the
4590 previous line is usually available.
4591
Bram Moolenaara4208962019-08-24 20:50:19 +02004592 Can also be used as a |method|: >
4593 GetLnum()->foldlevel()
Bram Moolenaar2e693a82019-10-16 22:35:02 +02004594<
Bram Moolenaar071d4272004-06-13 20:20:40 +00004595 *foldtext()*
4596foldtext() Returns a String, to be displayed for a closed fold. This is
4597 the default function used for the 'foldtext' option and should
4598 only be called from evaluating 'foldtext'. It uses the
4599 |v:foldstart|, |v:foldend| and |v:folddashes| variables.
4600 The returned string looks like this: >
4601 +-- 45 lines: abcdef
Bram Moolenaar42205552017-03-18 19:42:22 +01004602< The number of leading dashes depends on the foldlevel. The
4603 "45" is the number of lines in the fold. "abcdef" is the text
4604 in the first non-blank line of the fold. Leading white space,
4605 "//" or "/*" and the text from the 'foldmarker' and
4606 'commentstring' options is removed.
4607 When used to draw the actual foldtext, the rest of the line
4608 will be filled with the fold char from the 'fillchars'
4609 setting.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004610 {not available when compiled without the |+folding| feature}
4611
Bram Moolenaar7b0294c2004-10-11 10:16:09 +00004612foldtextresult({lnum}) *foldtextresult()*
4613 Returns the text that is displayed for the closed fold at line
4614 {lnum}. Evaluates 'foldtext' in the appropriate context.
4615 When there is no closed fold at {lnum} an empty string is
4616 returned.
4617 {lnum} is used like with |getline()|. Thus "." is the current
4618 line, "'m" mark m, etc.
4619 Useful when exporting folded text, e.g., to HTML.
4620 {not available when compiled without the |+folding| feature}
4621
Bram Moolenaara4208962019-08-24 20:50:19 +02004622
4623 Can also be used as a |method|: >
4624 GetLnum()->foldtextresult()
4625<
Bram Moolenaar071d4272004-06-13 20:20:40 +00004626 *foreground()*
Bram Moolenaar58b85342016-08-14 19:54:54 +02004627foreground() Move the Vim window to the foreground. Useful when sent from
Bram Moolenaar071d4272004-06-13 20:20:40 +00004628 a client to a Vim server. |remote_send()|
4629 On Win32 systems this might not work, the OS does not always
4630 allow a window to bring itself to the foreground. Use
4631 |remote_foreground()| instead.
4632 {only in the Win32, Athena, Motif and GTK GUI versions and the
4633 Win32 console version}
4634
Bram Moolenaar437bafe2016-08-01 15:40:54 +02004635 *funcref()*
4636funcref({name} [, {arglist}] [, {dict}])
4637 Just like |function()|, but the returned Funcref will lookup
4638 the function by reference, not by name. This matters when the
4639 function {name} is redefined later.
4640
4641 Unlike |function()|, {name} must be an existing user function.
4642 Also for autoloaded functions. {name} cannot be a builtin
4643 function.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004644
Bram Moolenaara4208962019-08-24 20:50:19 +02004645 Can also be used as a |method|: >
4646 GetFuncname()->funcref([arg])
4647<
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004648 *function()* *E700* *E922* *E923*
4649function({name} [, {arglist}] [, {dict}])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004650 Return a |Funcref| variable that refers to function {name}.
Bram Moolenaar975b5272016-03-15 23:10:59 +01004651 {name} can be the name of a user defined function or an
4652 internal function.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00004653
Bram Moolenaar437bafe2016-08-01 15:40:54 +02004654 {name} can also be a Funcref or a partial. When it is a
Bram Moolenaar975b5272016-03-15 23:10:59 +01004655 partial the dict stored in it will be used and the {dict}
4656 argument is not allowed. E.g.: >
4657 let FuncWithArg = function(dict.Func, [arg])
4658 let Broken = function(dict.Func, [arg], dict)
4659<
Bram Moolenaar437bafe2016-08-01 15:40:54 +02004660 When using the Funcref the function will be found by {name},
4661 also when it was redefined later. Use |funcref()| to keep the
4662 same function.
4663
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004664 When {arglist} or {dict} is present this creates a partial.
Bram Moolenaar06d2d382016-05-20 17:24:11 +02004665 That means the argument list and/or the dictionary is stored in
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004666 the Funcref and will be used when the Funcref is called.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004667
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004668 The arguments are passed to the function in front of other
Bram Moolenaar088e8e32019-08-08 22:15:18 +02004669 arguments, but after any argument from |method|. Example: >
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004670 func Callback(arg1, arg2, name)
4671 ...
Bram Moolenaar088e8e32019-08-08 22:15:18 +02004672 let Partial = function('Callback', ['one', 'two'])
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004673 ...
Bram Moolenaar088e8e32019-08-08 22:15:18 +02004674 call Partial('name')
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004675< Invokes the function as with: >
4676 call Callback('one', 'two', 'name')
4677
Bram Moolenaar088e8e32019-08-08 22:15:18 +02004678< With a |method|: >
4679 func Callback(one, two, three)
4680 ...
4681 let Partial = function('Callback', ['two'])
4682 ...
4683 eval 'one'->Partial('three')
4684< Invokes the function as with: >
4685 call Callback('one', 'two', 'three')
4686
Bram Moolenaar03602ec2016-03-20 20:57:45 +01004687< The function() call can be nested to add more arguments to the
4688 Funcref. The extra arguments are appended to the list of
4689 arguments. Example: >
4690 func Callback(arg1, arg2, name)
4691 ...
4692 let Func = function('Callback', ['one'])
4693 let Func2 = function(Func, ['two'])
4694 ...
4695 call Func2('name')
4696< Invokes the function as with: >
4697 call Callback('one', 'two', 'name')
4698
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004699< The Dictionary is only useful when calling a "dict" function.
4700 In that case the {dict} is passed in as "self". Example: >
4701 function Callback() dict
4702 echo "called for " . self.name
4703 endfunction
4704 ...
4705 let context = {"name": "example"}
4706 let Func = function('Callback', context)
4707 ...
4708 call Func() " will echo: called for example
Bram Moolenaar975b5272016-03-15 23:10:59 +01004709< The use of function() is not needed when there are no extra
4710 arguments, these two are equivalent: >
4711 let Func = function('Callback', context)
4712 let Func = context.Callback
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004713
4714< The argument list and the Dictionary can be combined: >
4715 function Callback(arg1, count) dict
4716 ...
4717 let context = {"name": "example"}
4718 let Func = function('Callback', ['one'], context)
4719 ...
4720 call Func(500)
4721< Invokes the function as with: >
4722 call context.Callback('one', 500)
Bram Moolenaara4208962019-08-24 20:50:19 +02004723<
4724 Can also be used as a |method|: >
4725 GetFuncname()->function([arg])
Bram Moolenaar1735bc92016-03-14 23:05:14 +01004726
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004727
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01004728garbagecollect([{atexit}]) *garbagecollect()*
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02004729 Cleanup unused |Lists|, |Dictionaries|, |Channels| and |Jobs|
4730 that have circular references.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01004731
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02004732 There is hardly ever a need to invoke this function, as it is
4733 automatically done when Vim runs out of memory or is waiting
4734 for the user to press a key after 'updatetime'. Items without
4735 circular references are always freed when they become unused.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004736 This is useful if you have deleted a very big |List| and/or
4737 |Dictionary| with circular references in a script that runs
4738 for a long time.
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02004739
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01004740 When the optional {atexit} argument is one, garbage
Bram Moolenaar9d2c8c12007-09-25 16:00:00 +00004741 collection will also be done when exiting Vim, if it wasn't
4742 done before. This is useful when checking for memory leaks.
Bram Moolenaar39a58ca2005-06-27 22:42:44 +00004743
Bram Moolenaar574860b2016-05-24 17:33:34 +02004744 The garbage collection is not done immediately but only when
4745 it's safe to perform. This is when waiting for the user to
4746 type a character. To force garbage collection immediately use
4747 |test_garbagecollect_now()|.
Bram Moolenaarebf7dfa2016-04-14 12:46:51 +02004748
Bram Moolenaar677ee682005-01-27 14:41:15 +00004749get({list}, {idx} [, {default}]) *get()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004750 Get item {idx} from |List| {list}. When this item is not
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004751 available return {default}. Return zero when {default} is
4752 omitted.
Bram Moolenaarac92e252019-08-03 21:58:38 +02004753 Can also be used as a |method|: >
4754 mylist->get(idx)
Bram Moolenaard8968242019-01-15 22:51:57 +01004755get({blob}, {idx} [, {default}])
4756 Get byte {idx} from |Blob| {blob}. When this byte is not
4757 available return {default}. Return -1 when {default} is
4758 omitted.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004759get({dict}, {key} [, {default}])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004760 Get item with key {key} from |Dictionary| {dict}. When this
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004761 item is not available return {default}. Return zero when
Bram Moolenaar54775062019-07-31 21:07:14 +02004762 {default} is omitted. Useful example: >
4763 let val = get(g:, 'var_name', 'default')
4764< This gets the value of g:var_name if it exists, and uses
4765 'default' when it does not exist.
Bram Moolenaar03e19a02016-05-24 22:29:49 +02004766get({func}, {what})
4767 Get an item with from Funcref {func}. Possible values for
Bram Moolenaar2bbf8ef2016-05-24 18:37:12 +02004768 {what} are:
Bram Moolenaar214641f2017-03-05 17:04:09 +01004769 "name" The function name
4770 "func" The function
4771 "dict" The dictionary
4772 "args" The list with arguments
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00004773
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004774 *getbufinfo()*
4775getbufinfo([{expr}])
4776getbufinfo([{dict}])
Bram Moolenaar58b85342016-08-14 19:54:54 +02004777 Get information about buffers as a List of Dictionaries.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004778
4779 Without an argument information about all the buffers is
4780 returned.
4781
4782 When the argument is a Dictionary only the buffers matching
4783 the specified criteria are returned. The following keys can
4784 be specified in {dict}:
4785 buflisted include only listed buffers.
4786 bufloaded include only loaded buffers.
Bram Moolenaar8e6a31d2017-12-10 21:06:22 +01004787 bufmodified include only modified buffers.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004788
4789 Otherwise, {expr} specifies a particular buffer to return
4790 information for. For the use of {expr}, see |bufname()|
4791 above. If the buffer is found the returned List has one item.
4792 Otherwise the result is an empty list.
4793
4794 Each returned List item is a dictionary with the following
4795 entries:
Bram Moolenaar33928832016-08-18 21:22:04 +02004796 bufnr buffer number.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004797 changed TRUE if the buffer is modified.
4798 changedtick number of changes made to the buffer.
4799 hidden TRUE if the buffer is hidden.
Bram Moolenaar52410572019-10-27 05:12:45 +01004800 lastused timestamp in seconds, like
4801 |localtime()|, when the buffer was
4802 last used.
4803 {only with the |+viminfo| feature}
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004804 listed TRUE if the buffer is listed.
4805 lnum current line number in buffer.
Bram Moolenaara9e96792019-12-17 22:40:15 +01004806 linecount number of lines in the buffer (only
4807 valid when loaded)
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004808 loaded TRUE if the buffer is loaded.
4809 name full path to the file in the buffer.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004810 signs list of signs placed in the buffer.
4811 Each list item is a dictionary with
4812 the following fields:
4813 id sign identifier
4814 lnum line number
4815 name sign name
Bram Moolenaar30567352016-08-27 21:25:44 +02004816 variables a reference to the dictionary with
4817 buffer-local variables.
4818 windows list of |window-ID|s that display this
4819 buffer
Bram Moolenaar5ca1ac32019-07-04 15:39:28 +02004820 popups list of popup |window-ID|s that
4821 display this buffer
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004822
4823 Examples: >
4824 for buf in getbufinfo()
4825 echo buf.name
4826 endfor
4827 for buf in getbufinfo({'buflisted':1})
Bram Moolenaar30567352016-08-27 21:25:44 +02004828 if buf.changed
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02004829 ....
4830 endif
4831 endfor
4832<
Bram Moolenaar30567352016-08-27 21:25:44 +02004833 To get buffer-local options use: >
Bram Moolenaard473c8c2018-08-11 18:00:22 +02004834 getbufvar({bufnr}, '&option_name')
Bram Moolenaar30567352016-08-27 21:25:44 +02004835
4836<
Bram Moolenaar45360022005-07-21 21:08:21 +00004837 *getbufline()*
4838getbufline({expr}, {lnum} [, {end}])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004839 Return a |List| with the lines starting from {lnum} to {end}
4840 (inclusive) in the buffer {expr}. If {end} is omitted, a
4841 |List| with only the line {lnum} is returned.
Bram Moolenaar45360022005-07-21 21:08:21 +00004842
4843 For the use of {expr}, see |bufname()| above.
4844
Bram Moolenaar661b1822005-07-28 22:36:45 +00004845 For {lnum} and {end} "$" can be used for the last line of the
4846 buffer. Otherwise a number must be used.
Bram Moolenaar45360022005-07-21 21:08:21 +00004847
4848 When {lnum} is smaller than 1 or bigger than the number of
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004849 lines in the buffer, an empty |List| is returned.
Bram Moolenaar45360022005-07-21 21:08:21 +00004850
4851 When {end} is greater than the number of lines in the buffer,
4852 it is treated as {end} is set to the number of lines in the
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004853 buffer. When {end} is before {lnum} an empty |List| is
Bram Moolenaar45360022005-07-21 21:08:21 +00004854 returned.
4855
Bram Moolenaar661b1822005-07-28 22:36:45 +00004856 This function works only for loaded buffers. For unloaded and
Bram Moolenaar32466aa2006-02-24 23:53:04 +00004857 non-existing buffers, an empty |List| is returned.
Bram Moolenaar45360022005-07-21 21:08:21 +00004858
4859 Example: >
4860 :let lines = getbufline(bufnr("myfile"), 1, "$")
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004861
Bram Moolenaar4c313b12019-08-24 22:58:31 +02004862< Can also be used as a |method|: >
4863 GetBufnr()->getbufline(lnum)
4864
Bram Moolenaar63dbda12013-02-20 21:12:10 +01004865getbufvar({expr}, {varname} [, {def}]) *getbufvar()*
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004866 The result is the value of option or local buffer variable
4867 {varname} in buffer {expr}. Note that the name without "b:"
4868 must be used.
Bram Moolenaarc236c162008-07-13 17:41:49 +00004869 When {varname} is empty returns a dictionary with all the
4870 buffer-local variables.
Bram Moolenaar30567352016-08-27 21:25:44 +02004871 When {varname} is equal to "&" returns a dictionary with all
4872 the buffer-local options.
4873 Otherwise, when {varname} starts with "&" returns the value of
4874 a buffer-local option.
Bram Moolenaar4317d9b2005-03-18 20:25:31 +00004875 This also works for a global or buffer-local option, but it
4876 doesn't work for a global variable, window-local variable or
4877 window-local option.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004878 For the use of {expr}, see |bufname()| above.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01004879 When the buffer or variable doesn't exist {def} or an empty
4880 string is returned, there is no error message.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004881 Examples: >
4882 :let bufmodified = getbufvar(1, "&mod")
4883 :echo "todo myvar = " . getbufvar("todo", "myvar")
Bram Moolenaar4c313b12019-08-24 22:58:31 +02004884
4885< Can also be used as a |method|: >
4886 GetBufnr()->getbufvar(varname)
Bram Moolenaara14de3d2005-01-07 21:48:26 +00004887<
Bram Moolenaar4c313b12019-08-24 22:58:31 +02004888getchangelist([{expr}]) *getchangelist()*
Bram Moolenaar07ad8162018-02-13 13:59:59 +01004889 Returns the |changelist| for the buffer {expr}. For the use
4890 of {expr}, see |bufname()| above. If buffer {expr} doesn't
4891 exist, an empty list is returned.
4892
4893 The returned list contains two entries: a list with the change
4894 locations and the current position in the list. Each
4895 entry in the change list is a dictionary with the following
4896 entries:
4897 col column number
4898 coladd column offset for 'virtualedit'
4899 lnum line number
4900 If buffer {expr} is the current buffer, then the current
4901 position refers to the position in the list. For other
4902 buffers, it is set to the length of the list.
4903
Bram Moolenaar4c313b12019-08-24 22:58:31 +02004904 Can also be used as a |method|: >
4905 GetBufnr()->getchangelist()
4906
Bram Moolenaar071d4272004-06-13 20:20:40 +00004907getchar([expr]) *getchar()*
Bram Moolenaar91170f82006-05-05 21:15:17 +00004908 Get a single character from the user or input stream.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004909 If [expr] is omitted, wait until a character is available.
4910 If [expr] is 0, only get a character when one is available.
Bram Moolenaar91170f82006-05-05 21:15:17 +00004911 Return zero otherwise.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004912 If [expr] is 1, only check if a character is available, it is
Bram Moolenaar91170f82006-05-05 21:15:17 +00004913 not consumed. Return zero if no character available.
4914
Bram Moolenaardfb18412013-12-11 18:53:29 +01004915 Without [expr] and when [expr] is 0 a whole character or
Bram Moolenaarc577d812017-07-08 22:37:34 +02004916 special key is returned. If it is a single character, the
Bram Moolenaar91170f82006-05-05 21:15:17 +00004917 result is a number. Use nr2char() to convert it to a String.
4918 Otherwise a String is returned with the encoded character.
Bram Moolenaarc577d812017-07-08 22:37:34 +02004919 For a special key it's a String with a sequence of bytes
4920 starting with 0x80 (decimal: 128). This is the same value as
4921 the String "\<Key>", e.g., "\<Left>". The returned value is
4922 also a String when a modifier (shift, control, alt) was used
4923 that is not included in the character.
Bram Moolenaar91170f82006-05-05 21:15:17 +00004924
Bram Moolenaar822ff862014-06-12 21:46:14 +02004925 When [expr] is 0 and Esc is typed, there will be a short delay
4926 while Vim waits to see if this is the start of an escape
4927 sequence.
4928
Bram Moolenaardfb18412013-12-11 18:53:29 +01004929 When [expr] is 1 only the first byte is returned. For a
Bram Moolenaar56a907a2006-05-06 21:44:30 +00004930 one-byte character it is the character itself as a number.
4931 Use nr2char() to convert it to a String.
Bram Moolenaar91170f82006-05-05 21:15:17 +00004932
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01004933 Use getcharmod() to obtain any additional modifiers.
4934
Bram Moolenaar219b8702006-11-01 14:32:36 +00004935 When the user clicks a mouse button, the mouse event will be
4936 returned. The position can then be found in |v:mouse_col|,
Bram Moolenaardb3a2052019-11-16 18:22:41 +01004937 |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|.
4938 |getmousepos()| can also be used. This example positions the
4939 mouse as it would normally happen: >
Bram Moolenaar219b8702006-11-01 14:32:36 +00004940 let c = getchar()
Bram Moolenaar446cb832008-06-24 21:56:24 +00004941 if c == "\<LeftMouse>" && v:mouse_win > 0
Bram Moolenaar219b8702006-11-01 14:32:36 +00004942 exe v:mouse_win . "wincmd w"
4943 exe v:mouse_lnum
4944 exe "normal " . v:mouse_col . "|"
4945 endif
4946<
Bram Moolenaar690afe12017-01-28 18:34:47 +01004947 When using bracketed paste only the first character is
4948 returned, the rest of the pasted text is dropped.
4949 |xterm-bracketed-paste|.
4950
Bram Moolenaar071d4272004-06-13 20:20:40 +00004951 There is no prompt, you will somehow have to make clear to the
4952 user that a character has to be typed.
4953 There is no mapping for the character.
4954 Key codes are replaced, thus when the user presses the <Del>
4955 key you get the code for the <Del> key, not the raw character
4956 sequence. Examples: >
4957 getchar() == "\<Del>"
4958 getchar() == "\<S-Left>"
4959< This example redefines "f" to ignore case: >
4960 :nmap f :call FindChar()<CR>
4961 :function FindChar()
4962 : let c = nr2char(getchar())
4963 : while col('.') < col('$') - 1
4964 : normal l
4965 : if getline('.')[col('.') - 1] ==? c
4966 : break
4967 : endif
4968 : endwhile
4969 :endfunction
Bram Moolenaared32d942014-12-06 23:33:00 +01004970<
Bram Moolenaar2b8388b2015-02-28 13:11:45 +01004971 You may also receive synthetic characters, such as
Bram Moolenaared32d942014-12-06 23:33:00 +01004972 |<CursorHold>|. Often you will want to ignore this and get
4973 another character: >
4974 :function GetKey()
4975 : let c = getchar()
4976 : while c == "\<CursorHold>"
4977 : let c = getchar()
4978 : endwhile
4979 : return c
4980 :endfunction
Bram Moolenaar071d4272004-06-13 20:20:40 +00004981
4982getcharmod() *getcharmod()*
4983 The result is a Number which is the state of the modifiers for
4984 the last obtained character with getchar() or in another way.
4985 These values are added together:
4986 2 shift
4987 4 control
4988 8 alt (meta)
Bram Moolenaarf1568ec2011-12-14 21:17:39 +01004989 16 meta (when it's different from ALT)
4990 32 mouse double click
4991 64 mouse triple click
4992 96 mouse quadruple click (== 32 + 64)
4993 128 command (Macintosh only)
Bram Moolenaar071d4272004-06-13 20:20:40 +00004994 Only the modifiers that have not been included in the
Bram Moolenaar58b85342016-08-14 19:54:54 +02004995 character itself are obtained. Thus Shift-a results in "A"
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01004996 without a modifier.
Bram Moolenaar071d4272004-06-13 20:20:40 +00004997
Bram Moolenaardbd24b52015-08-11 14:26:19 +02004998getcharsearch() *getcharsearch()*
4999 Return the current character search information as a {dict}
5000 with the following entries:
5001
5002 char character previously used for a character
5003 search (|t|, |f|, |T|, or |F|); empty string
5004 if no character search has been performed
5005 forward direction of character search; 1 for forward,
5006 0 for backward
5007 until type of character search; 1 for a |t| or |T|
5008 character search, 0 for an |f| or |F|
5009 character search
5010
5011 This can be useful to always have |;| and |,| search
5012 forward/backward regardless of the direction of the previous
5013 character search: >
5014 :nnoremap <expr> ; getcharsearch().forward ? ';' : ','
5015 :nnoremap <expr> , getcharsearch().forward ? ',' : ';'
5016< Also see |setcharsearch()|.
5017
Bram Moolenaar071d4272004-06-13 20:20:40 +00005018getcmdline() *getcmdline()*
5019 Return the current command-line. Only works when the command
5020 line is being edited, thus requires use of |c_CTRL-\_e| or
5021 |c_CTRL-R_=|.
5022 Example: >
5023 :cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00005024< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
Bram Moolenaar95bafa22018-10-02 13:26:25 +02005025 Returns an empty string when entering a password or using
5026 |inputsecret()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005027
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00005028getcmdpos() *getcmdpos()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00005029 Return the position of the cursor in the command line as a
5030 byte count. The first column is 1.
5031 Only works when editing the command line, thus requires use of
Bram Moolenaar5b435d62012-04-05 17:33:26 +02005032 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
5033 Returns 0 otherwise.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00005034 Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
5035
5036getcmdtype() *getcmdtype()*
5037 Return the current command-line type. Possible return values
5038 are:
Bram Moolenaar1e015462005-09-25 22:16:38 +00005039 : normal Ex command
5040 > debug mode command |debug-mode|
5041 / forward search command
5042 ? backward search command
5043 @ |input()| command
5044 - |:insert| or |:append| command
Bram Moolenaar6e932462014-09-09 18:48:09 +02005045 = |i_CTRL-R_=|
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00005046 Only works when editing the command line, thus requires use of
Bram Moolenaar5b435d62012-04-05 17:33:26 +02005047 |c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
5048 Returns an empty string otherwise.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00005049 Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005050
Bram Moolenaarfb539272014-08-22 19:21:47 +02005051getcmdwintype() *getcmdwintype()*
5052 Return the current |command-line-window| type. Possible return
5053 values are the same as |getcmdtype()|. Returns an empty string
5054 when not in the command-line window.
5055
Bram Moolenaare9d58a62016-08-13 15:07:41 +02005056getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005057 Return a list of command-line completion matches. {type}
5058 specifies what for. The following completion types are
5059 supported:
5060
Bram Moolenaarcd43eff2018-03-29 15:55:38 +02005061 arglist file names in argument list
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005062 augroup autocmd groups
5063 buffer buffer names
5064 behave :behave suboptions
5065 color color schemes
5066 command Ex command (and arguments)
5067 compiler compilers
5068 cscope |:cscope| suboptions
Bram Moolenaarae7dba82019-12-29 13:56:33 +01005069 diff_buffer |:diffget| and |:diffput| completion
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005070 dir directory names
5071 environment environment variable names
5072 event autocommand events
5073 expression Vim expression
5074 file file and directory names
5075 file_in_path file and directory names in |'path'|
5076 filetype filetype names |'filetype'|
5077 function function name
5078 help help subjects
5079 highlight highlight groups
5080 history :history suboptions
5081 locale locale names (as output of locale -a)
Bram Moolenaarcae92dc2017-08-06 15:22:15 +02005082 mapclear buffer argument
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005083 mapping mapping name
5084 menu menus
Bram Moolenaar9e507ca2016-10-15 15:39:39 +02005085 messages |:messages| suboptions
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005086 option options
Bram Moolenaar9e507ca2016-10-15 15:39:39 +02005087 packadd optional package |pack-add| names
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005088 shellcmd Shell command
5089 sign |:sign| suboptions
5090 syntax syntax file names |'syntax'|
5091 syntime |:syntime| suboptions
5092 tag tags
5093 tag_listfiles tags, file names
5094 user user names
5095 var user variables
5096
5097 If {pat} is an empty string, then all the matches are returned.
5098 Otherwise only items matching {pat} are returned. See
5099 |wildcards| for the use of special characters in {pat}.
5100
Bram Moolenaare9d58a62016-08-13 15:07:41 +02005101 If the optional {filtered} flag is set to 1, then 'wildignore'
5102 is applied to filter the results. Otherwise all the matches
5103 are returned. The 'wildignorecase' option always applies.
5104
Bram Moolenaaraa4d7322016-07-09 18:50:29 +02005105 If there are no matches, an empty list is returned. An
5106 invalid value for {type} produces an error.
5107
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005108 Can also be used as a |method|: >
5109 GetPattern()->getcompletion('color')
5110<
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02005111 *getcurpos()*
5112getcurpos() Get the position of the cursor. This is like getpos('.'), but
5113 includes an extra item in the list:
Bram Moolenaar345efa02016-01-15 20:57:49 +01005114 [bufnum, lnum, col, off, curswant] ~
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02005115 The "curswant" number is the preferred column when moving the
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005116 cursor vertically. Also see |getpos()|.
5117
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02005118 This can be used to save and restore the cursor position: >
5119 let save_cursor = getcurpos()
5120 MoveTheCursorAround
5121 call setpos('.', save_cursor)
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005122< Note that this only works within the window. See
5123 |winrestview()| for restoring more state.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005124 *getcwd()*
Bram Moolenaarc9703302016-01-17 21:49:33 +01005125getcwd([{winnr} [, {tabnr}]])
5126 The result is a String, which is the name of the current
Bram Moolenaar071d4272004-06-13 20:20:40 +00005127 working directory.
Bram Moolenaarc9703302016-01-17 21:49:33 +01005128
5129 With {winnr} return the local current directory of this window
Bram Moolenaar54591292018-02-09 20:53:59 +01005130 in the current tab page. {winnr} can be the window number or
5131 the |window-ID|.
5132 If {winnr} is -1 return the name of the global working
5133 directory. See also |haslocaldir()|.
5134
Bram Moolenaarc9703302016-01-17 21:49:33 +01005135 With {winnr} and {tabnr} return the local current directory of
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005136 the window in the specified tab page. If {winnr} is -1 return
5137 the working directory of the tabpage.
5138 If {winnr} is zero use the current window, if {tabnr} is zero
5139 use the current tabpage.
5140 Without any arguments, return the working directory of the
5141 current window.
Bram Moolenaarc9703302016-01-17 21:49:33 +01005142 Return an empty string if the arguments are invalid.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005143
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005144 Examples: >
5145 " Get the working directory of the current window
5146 :echo getcwd()
5147 :echo getcwd(0)
5148 :echo getcwd(0, 0)
5149 " Get the working directory of window 3 in tabpage 2
5150 :echo getcwd(3, 2)
5151 " Get the global working directory
5152 :echo getcwd(-1)
5153 " Get the working directory of tabpage 3
5154 :echo getcwd(-1, 3)
5155 " Get the working directory of current tabpage
5156 :echo getcwd(-1, 0)
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005157
5158< Can also be used as a |method|: >
5159 GetWinnr()->getcwd()
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005160<
Bram Moolenaar691ddee2019-05-09 14:52:41 +02005161getenv({name}) *getenv()*
5162 Return the value of environment variable {name}.
5163 When the variable does not exist |v:null| is returned. That
Bram Moolenaar54775062019-07-31 21:07:14 +02005164 is different from a variable set to an empty string, although
5165 some systems interpret the empty value as the variable being
5166 deleted. See also |expr-env|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005167
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005168 Can also be used as a |method|: >
5169 GetVarname()->getenv()
5170
Bram Moolenaard8b0cf12004-12-12 11:33:30 +00005171getfontname([{name}]) *getfontname()*
5172 Without an argument returns the name of the normal font being
5173 used. Like what is used for the Normal highlight group
5174 |hl-Normal|.
5175 With an argument a check is done whether {name} is a valid
5176 font name. If not then an empty string is returned.
5177 Otherwise the actual font name is returned, or {name} if the
5178 GUI does not support obtaining the real name.
Bram Moolenaarc6fe9192006-04-09 21:54:49 +00005179 Only works when the GUI is running, thus not in your vimrc or
Bram Moolenaard8b0cf12004-12-12 11:33:30 +00005180 gvimrc file. Use the |GUIEnter| autocommand to use this
5181 function just after the GUI has started.
Bram Moolenaar3df01732017-02-17 22:47:16 +01005182 Note that the GTK GUI accepts any font name, thus checking for
5183 a valid name does not work.
Bram Moolenaard8b0cf12004-12-12 11:33:30 +00005184
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005185getfperm({fname}) *getfperm()*
5186 The result is a String, which is the read, write, and execute
5187 permissions of the given file {fname}.
5188 If {fname} does not exist or its directory cannot be read, an
5189 empty string is returned.
5190 The result is of the form "rwxrwxrwx", where each group of
5191 "rwx" flags represent, in turn, the permissions of the owner
5192 of the file, the group the file belongs to, and other users.
5193 If a user does not have a given permission the flag for this
Bram Moolenaar9b451252012-08-15 17:43:31 +02005194 is replaced with the string "-". Examples: >
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005195 :echo getfperm("/etc/passwd")
Bram Moolenaar9b451252012-08-15 17:43:31 +02005196 :echo getfperm(expand("~/.vimrc"))
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005197< This will hopefully (from a security point of view) display
5198 the string "rw-r--r--" or even "rw-------".
Bram Moolenaare2cc9702005-03-15 22:43:58 +00005199
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005200 Can also be used as a |method|: >
5201 GetFilename()->getfperm()
5202<
Bram Moolenaar2ec618c2016-10-01 14:47:05 +02005203 For setting permissions use |setfperm()|.
Bram Moolenaar80492532016-03-08 17:08:53 +01005204
Bram Moolenaar691ddee2019-05-09 14:52:41 +02005205getfsize({fname}) *getfsize()*
5206 The result is a Number, which is the size in bytes of the
5207 given file {fname}.
5208 If {fname} is a directory, 0 is returned.
5209 If the file {fname} can't be found, -1 is returned.
5210 If the size of {fname} is too big to fit in a Number then -2
5211 is returned.
5212
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005213 Can also be used as a |method|: >
5214 GetFilename()->getfsize()
5215
Bram Moolenaar071d4272004-06-13 20:20:40 +00005216getftime({fname}) *getftime()*
5217 The result is a Number, which is the last modification time of
5218 the given file {fname}. The value is measured as seconds
5219 since 1st Jan 1970, and may be passed to strftime(). See also
5220 |localtime()| and |strftime()|.
5221 If the file {fname} can't be found -1 is returned.
5222
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005223 Can also be used as a |method|: >
5224 GetFilename()->getftime()
5225
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005226getftype({fname}) *getftype()*
5227 The result is a String, which is a description of the kind of
5228 file of the given file {fname}.
5229 If {fname} does not exist an empty string is returned.
5230 Here is a table over different kinds of files and their
5231 results:
5232 Normal file "file"
5233 Directory "dir"
5234 Symbolic link "link"
5235 Block device "bdev"
5236 Character device "cdev"
5237 Socket "socket"
5238 FIFO "fifo"
5239 All other "other"
5240 Example: >
5241 getftype("/home")
5242< Note that a type such as "link" will only be returned on
5243 systems that support it. On some systems only "dir" and
Bram Moolenaar13d5aee2016-01-21 23:36:05 +01005244 "file" are returned. On MS-Windows a symbolic link to a
5245 directory returns "dir" instead of "link".
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00005246
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005247 Can also be used as a |method|: >
5248 GetFilename()->getftype()
5249
Bram Moolenaara3a12462019-09-07 15:08:38 +02005250getimstatus() *getimstatus()*
5251 The result is a Number, which is |TRUE| when the IME status is
5252 active.
5253 See 'imstatusfunc'.
5254
Bram Moolenaard96ff162018-02-18 22:13:29 +01005255getjumplist([{winnr} [, {tabnr}]]) *getjumplist()*
Bram Moolenaar4f505882018-02-10 21:06:32 +01005256 Returns the |jumplist| for the specified window.
5257
5258 Without arguments use the current window.
5259 With {winnr} only use this window in the current tab page.
5260 {winnr} can also be a |window-ID|.
5261 With {winnr} and {tabnr} use the window in the specified tab
5262 page.
5263
5264 The returned list contains two entries: a list with the jump
5265 locations and the last used jump position number in the list.
5266 Each entry in the jump location list is a dictionary with
5267 the following entries:
5268 bufnr buffer number
5269 col column number
5270 coladd column offset for 'virtualedit'
5271 filename filename if available
5272 lnum line number
5273
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005274 Can also be used as a |method|: >
5275 GetWinnr()->getjumplist()
5276
5277< *getline()*
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005278getline({lnum} [, {end}])
5279 Without {end} the result is a String, which is line {lnum}
5280 from the current buffer. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00005281 getline(1)
5282< When {lnum} is a String that doesn't start with a
Bram Moolenaarf2732452018-06-03 14:47:35 +02005283 digit, |line()| is called to translate the String into a Number.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005284 To get the line under the cursor: >
5285 getline(".")
5286< When {lnum} is smaller than 1 or bigger than the number of
5287 lines in the buffer, an empty string is returned.
5288
Bram Moolenaar32466aa2006-02-24 23:53:04 +00005289 When {end} is given the result is a |List| where each item is
5290 a line from the current buffer in the range {lnum} to {end},
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005291 including line {end}.
5292 {end} is used in the same way as {lnum}.
5293 Non-existing lines are silently omitted.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00005294 When {end} is before {lnum} an empty |List| is returned.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005295 Example: >
5296 :let start = line('.')
5297 :let end = search("^$") - 1
5298 :let lines = getline(start, end)
5299
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005300< Can also be used as a |method|: >
5301 ComputeLnum()->getline()
5302
Bram Moolenaaref2f6562007-05-06 13:32:59 +00005303< To get lines from another buffer see |getbufline()|
5304
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01005305getloclist({nr} [, {what}]) *getloclist()*
Bram Moolenaar17c7c012006-01-26 22:25:15 +00005306 Returns a list with all the entries in the location list for
Bram Moolenaar7571d552016-08-18 22:54:46 +02005307 window {nr}. {nr} can be the window number or the |window-ID|.
Bram Moolenaar888ccac2016-06-04 18:49:36 +02005308 When {nr} is zero the current window is used.
5309
Bram Moolenaar17c7c012006-01-26 22:25:15 +00005310 For a location list window, the displayed location list is
Bram Moolenaar280f1262006-01-30 00:14:18 +00005311 returned. For an invalid window number {nr}, an empty list is
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01005312 returned. Otherwise, same as |getqflist()|.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005313
Bram Moolenaard823fa92016-08-12 16:29:27 +02005314 If the optional {what} dictionary argument is supplied, then
5315 returns the items listed in {what} as a dictionary. Refer to
5316 |getqflist()| for the supported items in {what}.
Bram Moolenaar647e24b2019-03-17 16:39:46 +01005317
5318 In addition to the items supported by |getqflist()| in {what},
5319 the following item is supported by |getloclist()|:
5320
Bram Moolenaar68e65602019-05-26 21:33:31 +02005321 filewinid id of the window used to display files
Bram Moolenaar647e24b2019-03-17 16:39:46 +01005322 from the location list. This field is
5323 applicable only when called from a
5324 location list window. See
5325 |location-list-file-window| for more
5326 details.
Bram Moolenaard823fa92016-08-12 16:29:27 +02005327
Bram Moolenaaraff74912019-03-30 18:11:49 +01005328getmatches([{win}]) *getmatches()*
Bram Moolenaarfd133322019-03-29 12:20:27 +01005329 Returns a |List| with all matches previously defined for the
5330 current window by |matchadd()| and the |:match| commands.
5331 |getmatches()| is useful in combination with |setmatches()|,
5332 as |setmatches()| can restore a list of matches saved by
5333 |getmatches()|.
Bram Moolenaar6ee10162007-07-26 20:58:42 +00005334 Example: >
5335 :echo getmatches()
5336< [{'group': 'MyGroup1', 'pattern': 'TODO',
5337 'priority': 10, 'id': 1}, {'group': 'MyGroup2',
5338 'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
5339 :let m = getmatches()
5340 :call clearmatches()
5341 :echo getmatches()
5342< [] >
5343 :call setmatches(m)
5344 :echo getmatches()
5345< [{'group': 'MyGroup1', 'pattern': 'TODO',
5346 'priority': 10, 'id': 1}, {'group': 'MyGroup2',
5347 'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
5348 :unlet m
5349<
Bram Moolenaardb3a2052019-11-16 18:22:41 +01005350getmousepos() *getmousepos()*
5351 Returns a Dictionary with the last known position of the
5352 mouse. This can be used in a mapping for a mouse click or in
5353 a filter of a popup window. The items are:
5354 screenrow screen row
5355 screencol screen column
5356 winid Window ID of the click
5357 winrow row inside "winid"
5358 wincol column inside "winid"
5359 line text line inside "winid"
5360 column text column inside "winid"
5361 All numbers are 1-based.
5362
5363 If not over a window, e.g. when in the command line, then only
5364 "screenrow" and "screencol" are valid, the others are zero.
5365
5366 When on the status line below a window or the vertical
5367 separater right of a window, the "line" and "column" values
5368 are zero.
5369
5370 When the position is after the text then "column" is the
5371 length of the text in bytes.
5372
5373 If the mouse is over a popup window then that window is used.
5374
5375
5376 When using |getchar()| the Vim variables |v:mouse_lnum|,
5377 |v:mouse_col| and |v:mouse_winid| also provide these values.
5378
Bram Moolenaar822ff862014-06-12 21:46:14 +02005379 *getpid()*
5380getpid() Return a Number which is the process ID of the Vim process.
5381 On Unix and MS-Windows this is a unique number, until Vim
Bram Moolenaar5666fcd2019-12-26 14:35:26 +01005382 exits.
Bram Moolenaar822ff862014-06-12 21:46:14 +02005383
5384 *getpos()*
5385getpos({expr}) Get the position for {expr}. For possible values of {expr}
5386 see |line()|. For getting the cursor position see
5387 |getcurpos()|.
5388 The result is a |List| with four numbers:
5389 [bufnum, lnum, col, off]
5390 "bufnum" is zero, unless a mark like '0 or 'A is used, then it
5391 is the buffer number of the mark.
5392 "lnum" and "col" are the position in the buffer. The first
5393 column is 1.
5394 The "off" number is zero, unless 'virtualedit' is used. Then
5395 it is the offset in screen columns from the start of the
5396 character. E.g., a position within a <Tab> or after the last
5397 character.
5398 Note that for '< and '> Visual mode matters: when it is "V"
5399 (visual line mode) the column of '< is zero and the column of
5400 '> is a large number.
5401 This can be used to save and restore the position of a mark: >
5402 let save_a_mark = getpos("'a")
5403 ...
Bram Moolenaared32d942014-12-06 23:33:00 +01005404 call setpos("'a", save_a_mark)
Bram Moolenaar822ff862014-06-12 21:46:14 +02005405< Also see |getcurpos()| and |setpos()|.
5406
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005407 Can also be used as a |method|: >
5408 GetMark()->getpos()
5409
Bram Moolenaar6ee10162007-07-26 20:58:42 +00005410
Bram Moolenaard823fa92016-08-12 16:29:27 +02005411getqflist([{what}]) *getqflist()*
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005412 Returns a list with all the current quickfix errors. Each
5413 list item is a dictionary with these entries:
5414 bufnr number of buffer that has the file name, use
5415 bufname() to get the name
Bram Moolenaard76ce852018-05-01 15:02:04 +02005416 module module name
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005417 lnum line number in the buffer (first line is 1)
5418 col column number (first column is 1)
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005419 vcol |TRUE|: "col" is visual column
5420 |FALSE|: "col" is byte index
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005421 nr error number
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00005422 pattern search pattern used to locate the error
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005423 text description of the error
5424 type type of the error, 'E', '1', etc.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005425 valid |TRUE|: recognized error message
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005426
Bram Moolenaar7571d552016-08-18 22:54:46 +02005427 When there is no error list or it's empty, an empty list is
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00005428 returned. Quickfix list entries with non-existing buffer
5429 number are returned with "bufnr" set to zero.
Bram Moolenaare7eb9df2005-09-09 19:49:30 +00005430
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005431 Useful application: Find pattern matches in multiple files and
5432 do something with them: >
5433 :vimgrep /theword/jg *.c
5434 :for d in getqflist()
5435 : echo bufname(d.bufnr) ':' d.lnum '=' d.text
5436 :endfor
Bram Moolenaard823fa92016-08-12 16:29:27 +02005437<
5438 If the optional {what} dictionary argument is supplied, then
5439 returns only the items listed in {what} as a dictionary. The
5440 following string items are supported in {what}:
Bram Moolenaarb254af32017-12-18 19:48:58 +01005441 changedtick get the total number of changes made
Bram Moolenaar15142e22018-04-30 22:19:58 +02005442 to the list |quickfix-changedtick|
5443 context get the |quickfix-context|
Bram Moolenaar36538222017-09-02 19:51:44 +02005444 efm errorformat to use when parsing "lines". If
Bram Moolenaar2f058492017-11-30 20:27:52 +01005445 not present, then the 'errorformat' option
Bram Moolenaar36538222017-09-02 19:51:44 +02005446 value is used.
Bram Moolenaara539f4f2017-08-30 20:33:55 +02005447 id get information for the quickfix list with
5448 |quickfix-ID|; zero means the id for the
Bram Moolenaar2f058492017-11-30 20:27:52 +01005449 current list or the list specified by "nr"
Bram Moolenaar5b69c222019-01-11 14:50:06 +01005450 idx index of the current entry in the quickfix
5451 list specified by 'id' or 'nr'.
5452 See |quickfix-index|
Bram Moolenaar6a8958d2017-06-22 21:33:20 +02005453 items quickfix list entries
Bram Moolenaar15142e22018-04-30 22:19:58 +02005454 lines parse a list of lines using 'efm' and return
5455 the resulting entries. Only a |List| type is
5456 accepted. The current quickfix list is not
5457 modified. See |quickfix-parse|.
Bram Moolenaar890680c2016-09-27 21:28:56 +02005458 nr get information for this quickfix list; zero
Bram Moolenaar36538222017-09-02 19:51:44 +02005459 means the current quickfix list and "$" means
Bram Moolenaar875feea2017-06-11 16:07:51 +02005460 the last quickfix list
Bram Moolenaar647e24b2019-03-17 16:39:46 +01005461 qfbufnr number of the buffer displayed in the quickfix
5462 window. Returns 0 if the quickfix buffer is
5463 not present. See |quickfix-buffer|.
Bram Moolenaarfc2b2702017-09-15 22:43:07 +02005464 size number of entries in the quickfix list
Bram Moolenaar15142e22018-04-30 22:19:58 +02005465 title get the list title |quickfix-title|
Bram Moolenaar74240d32017-12-10 15:26:15 +01005466 winid get the quickfix |window-ID|
Bram Moolenaard823fa92016-08-12 16:29:27 +02005467 all all of the above quickfix properties
Bram Moolenaar74240d32017-12-10 15:26:15 +01005468 Non-string items in {what} are ignored. To get the value of a
Bram Moolenaara6d48492017-12-12 22:45:31 +01005469 particular item, set it to zero.
Bram Moolenaard823fa92016-08-12 16:29:27 +02005470 If "nr" is not present then the current quickfix list is used.
Bram Moolenaara539f4f2017-08-30 20:33:55 +02005471 If both "nr" and a non-zero "id" are specified, then the list
5472 specified by "id" is used.
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02005473 To get the number of lists in the quickfix stack, set "nr" to
5474 "$" in {what}. The "nr" value in the returned dictionary
Bram Moolenaar875feea2017-06-11 16:07:51 +02005475 contains the quickfix stack size.
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02005476 When "lines" is specified, all the other items except "efm"
5477 are ignored. The returned dictionary contains the entry
5478 "items" with the list of entries.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00005479
Bram Moolenaard823fa92016-08-12 16:29:27 +02005480 The returned dictionary contains the following entries:
Bram Moolenaarb254af32017-12-18 19:48:58 +01005481 changedtick total number of changes made to the
5482 list |quickfix-changedtick|
Bram Moolenaar15142e22018-04-30 22:19:58 +02005483 context quickfix list context. See |quickfix-context|
Bram Moolenaara6d48492017-12-12 22:45:31 +01005484 If not present, set to "".
5485 id quickfix list ID |quickfix-ID|. If not
5486 present, set to 0.
5487 idx index of the current entry in the list. If not
5488 present, set to 0.
5489 items quickfix list entries. If not present, set to
5490 an empty list.
5491 nr quickfix list number. If not present, set to 0
Bram Moolenaar647e24b2019-03-17 16:39:46 +01005492 qfbufnr number of the buffer displayed in the quickfix
5493 window. If not present, set to 0.
Bram Moolenaara6d48492017-12-12 22:45:31 +01005494 size number of entries in the quickfix list. If not
5495 present, set to 0.
5496 title quickfix list title text. If not present, set
5497 to "".
Bram Moolenaar74240d32017-12-10 15:26:15 +01005498 winid quickfix |window-ID|. If not present, set to 0
Bram Moolenaard823fa92016-08-12 16:29:27 +02005499
Bram Moolenaar15142e22018-04-30 22:19:58 +02005500 Examples (See also |getqflist-examples|): >
Bram Moolenaard823fa92016-08-12 16:29:27 +02005501 :echo getqflist({'all': 1})
5502 :echo getqflist({'nr': 2, 'title': 1})
Bram Moolenaar2c809b72017-09-01 18:34:02 +02005503 :echo getqflist({'lines' : ["F1:10:L10"]})
Bram Moolenaard823fa92016-08-12 16:29:27 +02005504<
Bram Moolenaarb7cb42b2014-04-02 19:55:10 +02005505getreg([{regname} [, 1 [, {list}]]]) *getreg()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00005506 The result is a String, which is the contents of register
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00005507 {regname}. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00005508 :let cliptext = getreg('*')
Bram Moolenaardc1f1642016-08-16 18:33:43 +02005509< When {regname} was not set the result is an empty string.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02005510
5511 getreg('=') returns the last evaluated value of the expression
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00005512 register. (For use in maps.)
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00005513 getreg('=', 1) returns the expression itself, so that it can
5514 be restored with |setreg()|. For other registers the extra
5515 argument is ignored, thus you can always give it.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02005516
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005517 If {list} is present and |TRUE|, the result type is changed
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02005518 to |List|. Each list item is one text line. Use it if you care
Bram Moolenaarb7cb42b2014-04-02 19:55:10 +02005519 about zero bytes possibly present inside register: without
5520 third argument both NLs and zero bytes are represented as NLs
5521 (see |NL-used-for-Nul|).
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02005522 When the register was not set an empty list is returned.
5523
Bram Moolenaar071d4272004-06-13 20:20:40 +00005524 If {regname} is not specified, |v:register| is used.
5525
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005526 Can also be used as a |method|: >
5527 GetRegname()->getreg()
5528
Bram Moolenaara14de3d2005-01-07 21:48:26 +00005529
Bram Moolenaar071d4272004-06-13 20:20:40 +00005530getregtype([{regname}]) *getregtype()*
5531 The result is a String, which is type of register {regname}.
5532 The value will be one of:
5533 "v" for |characterwise| text
5534 "V" for |linewise| text
5535 "<CTRL-V>{width}" for |blockwise-visual| text
Bram Moolenaar32b92012014-01-14 12:33:36 +01005536 "" for an empty or unknown register
Bram Moolenaar071d4272004-06-13 20:20:40 +00005537 <CTRL-V> is one character with value 0x16.
5538 If {regname} is not specified, |v:register| is used.
5539
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005540 Can also be used as a |method|: >
5541 GetRegname()->getregtype()
5542
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02005543gettabinfo([{arg}]) *gettabinfo()*
5544 If {arg} is not specified, then information about all the tab
5545 pages is returned as a List. Each List item is a Dictionary.
5546 Otherwise, {arg} specifies the tab page number and information
5547 about that one is returned. If the tab page does not exist an
5548 empty List is returned.
5549
5550 Each List item is a Dictionary with the following entries:
Bram Moolenaar7571d552016-08-18 22:54:46 +02005551 tabnr tab page number.
Bram Moolenaar30567352016-08-27 21:25:44 +02005552 variables a reference to the dictionary with
5553 tabpage-local variables
Bram Moolenaarf6b40102019-02-22 15:24:03 +01005554 windows List of |window-ID|s in the tab page.
Bram Moolenaarb5ae48e2016-08-12 22:23:25 +02005555
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005556 Can also be used as a |method|: >
5557 GetTabnr()->gettabinfo()
5558
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005559gettabvar({tabnr}, {varname} [, {def}]) *gettabvar()*
Bram Moolenaar06b5d512010-05-22 15:37:44 +02005560 Get the value of a tab-local variable {varname} in tab page
5561 {tabnr}. |t:var|
5562 Tabs are numbered starting with one.
Bram Moolenaar0e2ea1b2014-09-09 16:13:08 +02005563 When {varname} is empty a dictionary with all tab-local
5564 variables is returned.
Bram Moolenaar06b5d512010-05-22 15:37:44 +02005565 Note that the name without "t:" must be used.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005566 When the tab or variable doesn't exist {def} or an empty
5567 string is returned, there is no error message.
Bram Moolenaar06b5d512010-05-22 15:37:44 +02005568
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005569 Can also be used as a |method|: >
5570 GetTabnr()->gettabvar(varname)
5571
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005572gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
Bram Moolenaaref2f6562007-05-06 13:32:59 +00005573 Get the value of window-local variable {varname} in window
5574 {winnr} in tab page {tabnr}.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005575 When {varname} is empty a dictionary with all window-local
5576 variables is returned.
Bram Moolenaar30567352016-08-27 21:25:44 +02005577 When {varname} is equal to "&" get the values of all
5578 window-local options in a Dictionary.
5579 Otherwise, when {varname} starts with "&" get the value of a
5580 window-local option.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005581 Note that {varname} must be the name without "w:".
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005582 Tabs are numbered starting with one. For the current tabpage
5583 use |getwinvar()|.
Bram Moolenaar7571d552016-08-18 22:54:46 +02005584 {winnr} can be the window number or the |window-ID|.
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005585 When {winnr} is zero the current window is used.
5586 This also works for a global option, buffer-local option and
5587 window-local option, but it doesn't work for a global variable
5588 or buffer-local variable.
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005589 When the tab, window or variable doesn't exist {def} or an
5590 empty string is returned, there is no error message.
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005591 Examples: >
5592 :let list_is_on = gettabwinvar(1, 2, '&list')
5593 :echo "myvar = " . gettabwinvar(3, 1, 'myvar')
Bram Moolenaard46bbc72007-05-12 14:38:41 +00005594<
Bram Moolenaarb477af22018-07-15 20:20:18 +02005595 To obtain all window-local variables use: >
5596 gettabwinvar({tabnr}, {winnr}, '&')
5597
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005598< Can also be used as a |method|: >
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005599 GetTabnr()->gettabwinvar(winnr, varname)
Bram Moolenaar4c313b12019-08-24 22:58:31 +02005600
Bram Moolenaarf49cc602018-11-11 15:21:05 +01005601gettagstack([{nr}]) *gettagstack()*
5602 The result is a Dict, which is the tag stack of window {nr}.
5603 {nr} can be the window number or the |window-ID|.
5604 When {nr} is not specified, the current window is used.
5605 When window {nr} doesn't exist, an empty Dict is returned.
5606
5607 The returned dictionary contains the following entries:
5608 curidx Current index in the stack. When at
5609 top of the stack, set to (length + 1).
5610 Index of bottom of the stack is 1.
5611 items List of items in the stack. Each item
5612 is a dictionary containing the
5613 entries described below.
5614 length Number of entries in the stack.
5615
5616 Each item in the stack is a dictionary with the following
5617 entries:
5618 bufnr buffer number of the current jump
5619 from cursor position before the tag jump.
5620 See |getpos()| for the format of the
5621 returned list.
5622 matchnr current matching tag number. Used when
5623 multiple matching tags are found for a
5624 name.
5625 tagname name of the tag
5626
5627 See |tagstack| for more information about the tag stack.
5628
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005629 Can also be used as a |method|: >
5630 GetWinnr()->gettagstack()
5631
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005632getwininfo([{winid}]) *getwininfo()*
5633 Returns information about windows as a List with Dictionaries.
5634
5635 If {winid} is given Information about the window with that ID
5636 is returned. If the window does not exist the result is an
5637 empty list.
5638
5639 Without {winid} information about all the windows in all the
5640 tab pages is returned.
5641
5642 Each List item is a Dictionary with the following entries:
Bram Moolenaar8fcb60f2019-03-04 13:18:30 +01005643 botline last displayed buffer line
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005644 bufnr number of buffer in the window
5645 height window height (excluding winbar)
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005646 loclist 1 if showing a location list
5647 {only with the +quickfix feature}
5648 quickfix 1 if quickfix or location list window
5649 {only with the +quickfix feature}
5650 terminal 1 if a terminal window
5651 {only with the +terminal feature}
5652 tabnr tab page number
Bram Moolenaar10455d42019-11-21 15:36:18 +01005653 topline first displayed buffer line
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005654 variables a reference to the dictionary with
5655 window-local variables
5656 width window width
Bram Moolenaarb477af22018-07-15 20:20:18 +02005657 winbar 1 if the window has a toolbar, 0
5658 otherwise
Bram Moolenaar7132ddc2018-07-15 17:01:11 +02005659 wincol leftmost screen column of the window,
5660 col from |win_screenpos()|
5661 winid |window-ID|
5662 winnr window number
5663 winrow topmost screen column of the window,
5664 row from |win_screenpos()|
5665
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005666 Can also be used as a |method|: >
5667 GetWinnr()->getwininfo()
5668
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01005669getwinpos([{timeout}]) *getwinpos()*
Bram Moolenaar560979e2020-02-04 22:53:05 +01005670 The result is a List with two numbers, the result of
Bram Moolenaar10455d42019-11-21 15:36:18 +01005671 |getwinposx()| and |getwinposy()| combined:
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01005672 [x-pos, y-pos]
5673 {timeout} can be used to specify how long to wait in msec for
5674 a response from the terminal. When omitted 100 msec is used.
Bram Moolenaarb5b75622018-03-09 22:22:21 +01005675 Use a longer time for a remote terminal.
5676 When using a value less than 10 and no response is received
5677 within that time, a previously reported position is returned,
5678 if available. This can be used to poll for the position and
Bram Moolenaar5b69c222019-01-11 14:50:06 +01005679 do some work in the meantime: >
Bram Moolenaarb5b75622018-03-09 22:22:21 +01005680 while 1
5681 let res = getwinpos(1)
5682 if res[0] >= 0
5683 break
5684 endif
5685 " Do some work here
5686 endwhile
5687<
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005688
5689 Can also be used as a |method|: >
5690 GetTimeout()->getwinpos()
5691<
Bram Moolenaar071d4272004-06-13 20:20:40 +00005692 *getwinposx()*
5693getwinposx() The result is a Number, which is the X coordinate in pixels of
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005694 the left hand side of the GUI Vim window. Also works for an
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01005695 xterm (uses a timeout of 100 msec).
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005696 The result will be -1 if the information is not available.
5697 The value can be used with `:winpos`.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005698
5699 *getwinposy()*
5700getwinposy() The result is a Number, which is the Y coordinate in pixels of
Bram Moolenaar3f54fd32018-03-03 21:29:55 +01005701 the top of the GUI Vim window. Also works for an xterm (uses
5702 a timeout of 100 msec).
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02005703 The result will be -1 if the information is not available.
5704 The value can be used with `:winpos`.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005705
Bram Moolenaar63dbda12013-02-20 21:12:10 +01005706getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005707 Like |gettabwinvar()| for the current tabpage.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005708 Examples: >
5709 :let list_is_on = getwinvar(2, '&list')
5710 :echo "myvar = " . getwinvar(1, 'myvar')
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005711
5712< Can also be used as a |method|: >
5713 GetWinnr()->getwinvar(varname)
Bram Moolenaar071d4272004-06-13 20:20:40 +00005714<
Bram Moolenaard8b77f72015-03-05 21:21:19 +01005715glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()*
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00005716 Expand the file wildcards in {expr}. See |wildcards| for the
Bram Moolenaaref2f6562007-05-06 13:32:59 +00005717 use of special characters.
Bram Moolenaar84f72352012-03-11 15:57:40 +01005718
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005719 Unless the optional {nosuf} argument is given and is |TRUE|,
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00005720 the 'suffixes' and 'wildignore' options apply: Names matching
5721 one of the patterns in 'wildignore' will be skipped and
5722 'suffixes' affect the ordering of matches.
Bram Moolenaar81af9252010-12-10 20:35:50 +01005723 'wildignorecase' always applies.
Bram Moolenaar84f72352012-03-11 15:57:40 +01005724
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005725 When {list} is present and it is |TRUE| the result is a List
Bram Moolenaar84f72352012-03-11 15:57:40 +01005726 with all matching files. The advantage of using a List is,
5727 you also get filenames containing newlines correctly.
5728 Otherwise the result is a String and when there are several
5729 matches, they are separated by <NL> characters.
5730
5731 If the expansion fails, the result is an empty String or List.
Bram Moolenaard8b77f72015-03-05 21:21:19 +01005732
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02005733 You can also use |readdir()| if you need to do complicated
5734 things, such as limiting the number of matches.
5735
Bram Moolenaar61d35bd2012-03-28 20:51:51 +02005736 A name for a non-existing file is not included. A symbolic
5737 link is only included if it points to an existing file.
Bram Moolenaard8b77f72015-03-05 21:21:19 +01005738 However, when the {alllinks} argument is present and it is
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005739 |TRUE| then all symbolic links are included.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005740
5741 For most systems backticks can be used to get files names from
5742 any external command. Example: >
5743 :let tagfiles = glob("`find . -name tags -print`")
5744 :let &tags = substitute(tagfiles, "\n", ",", "g")
5745< The result of the program inside the backticks should be one
Bram Moolenaar58b85342016-08-14 19:54:54 +02005746 item per line. Spaces inside an item are allowed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005747
5748 See |expand()| for expanding special Vim variables. See
5749 |system()| for getting the raw output of an external command.
5750
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005751 Can also be used as a |method|: >
5752 GetExpr()->glob()
5753
Bram Moolenaar5837f1f2015-03-21 18:06:14 +01005754glob2regpat({expr}) *glob2regpat()*
5755 Convert a file pattern, as used by glob(), into a search
5756 pattern. The result can be used to match with a string that
5757 is a file name. E.g. >
5758 if filename =~ glob2regpat('Make*.mak')
5759< This is equivalent to: >
5760 if filename =~ '^Make.*\.mak$'
Bram Moolenaar3b5f9292016-01-28 22:37:01 +01005761< When {expr} is an empty string the result is "^$", match an
5762 empty string.
Bram Moolenaard823fa92016-08-12 16:29:27 +02005763 Note that the result depends on the system. On MS-Windows
Bram Moolenaar58b85342016-08-14 19:54:54 +02005764 a backslash usually means a path separator.
Bram Moolenaar3b5f9292016-01-28 22:37:01 +01005765
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005766 Can also be used as a |method|: >
5767 GetExpr()->glob2regpat()
5768< *globpath()*
Bram Moolenaar6463ca22016-02-13 17:04:46 +01005769globpath({path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]])
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02005770 Perform glob() for {expr} on all directories in {path} and
5771 concatenate the results. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00005772 :echo globpath(&rtp, "syntax/c.vim")
Bram Moolenaar1b1063a2014-05-07 18:35:30 +02005773<
5774 {path} is a comma-separated list of directory names. Each
Bram Moolenaar071d4272004-06-13 20:20:40 +00005775 directory name is prepended to {expr} and expanded like with
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00005776 |glob()|. A path separator is inserted when needed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005777 To add a comma inside a directory name escape it with a
5778 backslash. Note that on MS-Windows a directory may have a
5779 trailing backslash, remove it if you put a comma after it.
5780 If the expansion fails for one of the directories, there is no
5781 error message.
Bram Moolenaar1b1063a2014-05-07 18:35:30 +02005782
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005783 Unless the optional {nosuf} argument is given and is |TRUE|,
Bram Moolenaarbb5ddda2008-11-28 10:01:10 +00005784 the 'suffixes' and 'wildignore' options apply: Names matching
5785 one of the patterns in 'wildignore' will be skipped and
5786 'suffixes' affect the ordering of matches.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005787
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005788 When {list} is present and it is |TRUE| the result is a List
Bram Moolenaar1b1063a2014-05-07 18:35:30 +02005789 with all matching files. The advantage of using a List is, you
5790 also get filenames containing newlines correctly. Otherwise
5791 the result is a String and when there are several matches,
5792 they are separated by <NL> characters. Example: >
5793 :echo globpath(&rtp, "syntax/c.vim", 0, 1)
5794<
Bram Moolenaar6463ca22016-02-13 17:04:46 +01005795 {alllinks} is used as with |glob()|.
Bram Moolenaard8b77f72015-03-05 21:21:19 +01005796
Bram Moolenaar02743632005-07-25 20:42:36 +00005797 The "**" item can be used to search in a directory tree.
5798 For example, to find all "README.txt" files in the directories
5799 in 'runtimepath' and below: >
5800 :echo globpath(&rtp, "**/README.txt")
Bram Moolenaarc236c162008-07-13 17:41:49 +00005801< Upwards search and limiting the depth of "**" is not
5802 supported, thus using 'path' will not always work properly.
5803
Bram Moolenaar5d69fdb2019-08-31 19:13:58 +02005804 Can also be used as a |method|, the base is passed as the
5805 second argument: >
5806 GetExpr()->globpath(&rtp)
5807<
Bram Moolenaar071d4272004-06-13 20:20:40 +00005808 *has()*
5809has({feature}) The result is a Number, which is 1 if the feature {feature} is
5810 supported, zero otherwise. The {feature} argument is a
5811 string. See |feature-list| below.
5812 Also see |exists()|.
5813
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00005814
5815has_key({dict}, {key}) *has_key()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00005816 The result is a Number, which is 1 if |Dictionary| {dict} has
5817 an entry with key {key}. Zero otherwise.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00005818
Bram Moolenaara74e4942019-08-04 17:35:53 +02005819 Can also be used as a |method|: >
5820 mydict->has_key(key)
5821
Bram Moolenaarc9703302016-01-17 21:49:33 +01005822haslocaldir([{winnr} [, {tabnr}]]) *haslocaldir()*
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005823 The result is a Number:
5824 1 when the window has set a local directory via |:lcd|
5825 2 when the tab-page has set a local directory via |:tcd|
5826 0 otherwise.
Bram Moolenaarc9703302016-01-17 21:49:33 +01005827
5828 Without arguments use the current window.
5829 With {winnr} use this window in the current tab page.
5830 With {winnr} and {tabnr} use the window in the specified tab
5831 page.
Bram Moolenaar7571d552016-08-18 22:54:46 +02005832 {winnr} can be the window number or the |window-ID|.
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005833 If {winnr} is -1 it is ignored and only the tabpage is used.
Bram Moolenaarc9703302016-01-17 21:49:33 +01005834 Return 0 if the arguments are invalid.
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005835 Examples: >
5836 if haslocaldir() == 1
5837 " window local directory case
5838 elseif haslocaldir() == 2
5839 " tab-local directory case
5840 else
5841 " global directory case
5842 endif
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00005843
Bram Moolenaar00aa0692019-04-27 20:37:57 +02005844 " current window
5845 :echo haslocaldir()
5846 :echo haslocaldir(0)
5847 :echo haslocaldir(0, 0)
5848 " window n in current tab page
5849 :echo haslocaldir(n)
5850 :echo haslocaldir(n, 0)
5851 " window n in tab page m
5852 :echo haslocaldir(n, m)
5853 " tab page m
5854 :echo haslocaldir(-1, m)
5855<
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005856 Can also be used as a |method|: >
5857 GetWinnr()->haslocaldir()
5858
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00005859hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00005860 The result is a Number, which is 1 if there is a mapping that
5861 contains {what} in somewhere in the rhs (what it is mapped to)
5862 and this mapping exists in one of the modes indicated by
5863 {mode}.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02005864 When {abbr} is there and it is |TRUE| use abbreviations
Bram Moolenaar39f05632006-03-19 22:15:26 +00005865 instead of mappings. Don't forget to specify Insert and/or
5866 Command-line mode.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005867 Both the global mappings and the mappings local to the current
5868 buffer are checked for a match.
5869 If no matching mapping is found 0 is returned.
5870 The following characters are recognized in {mode}:
5871 n Normal mode
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02005872 v Visual and Select mode
5873 x Visual mode
5874 s Select mode
Bram Moolenaar071d4272004-06-13 20:20:40 +00005875 o Operator-pending mode
5876 i Insert mode
5877 l Language-Argument ("r", "f", "t", etc.)
5878 c Command-line mode
5879 When {mode} is omitted, "nvo" is used.
5880
5881 This function is useful to check if a mapping already exists
Bram Moolenaar58b85342016-08-14 19:54:54 +02005882 to a function in a Vim script. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00005883 :if !hasmapto('\ABCdoit')
5884 : map <Leader>d \ABCdoit
5885 :endif
5886< This installs the mapping to "\ABCdoit" only if there isn't
5887 already a mapping to "\ABCdoit".
5888
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005889 Can also be used as a |method|: >
5890 GetRHS()->hasmapto()
5891
Bram Moolenaar071d4272004-06-13 20:20:40 +00005892histadd({history}, {item}) *histadd()*
5893 Add the String {item} to the history {history} which can be
5894 one of: *hist-names*
5895 "cmd" or ":" command line history
5896 "search" or "/" search pattern history
Bram Moolenaar446cb832008-06-24 21:56:24 +00005897 "expr" or "=" typed expression history
Bram Moolenaar071d4272004-06-13 20:20:40 +00005898 "input" or "@" input line history
Bram Moolenaar30b65812012-07-12 22:01:11 +02005899 "debug" or ">" debug command history
Bram Moolenaar3e496b02016-09-25 22:11:48 +02005900 empty the current or last used history
Bram Moolenaar30b65812012-07-12 22:01:11 +02005901 The {history} string does not need to be the whole name, one
5902 character is sufficient.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005903 If {item} does already exist in the history, it will be
5904 shifted to become the newest entry.
5905 The result is a Number: 1 if the operation was successful,
5906 otherwise 0 is returned.
5907
5908 Example: >
5909 :call histadd("input", strftime("%Y %b %d"))
5910 :let date=input("Enter date: ")
5911< This function is not available in the |sandbox|.
5912
Bram Moolenaar2e693a82019-10-16 22:35:02 +02005913 Can also be used as a |method|, the base is passed as the
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005914 second argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02005915 GetHistory()->histadd('search')
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005916
Bram Moolenaar071d4272004-06-13 20:20:40 +00005917histdel({history} [, {item}]) *histdel()*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00005918 Clear {history}, i.e. delete all its entries. See |hist-names|
Bram Moolenaar071d4272004-06-13 20:20:40 +00005919 for the possible values of {history}.
5920
Bram Moolenaarc236c162008-07-13 17:41:49 +00005921 If the parameter {item} evaluates to a String, it is used as a
5922 regular expression. All entries matching that expression will
5923 be removed from the history (if there are any).
Bram Moolenaar071d4272004-06-13 20:20:40 +00005924 Upper/lowercase must match, unless "\c" is used |/\c|.
Bram Moolenaarc236c162008-07-13 17:41:49 +00005925 If {item} evaluates to a Number, it will be interpreted as
5926 an index, see |:history-indexing|. The respective entry will
5927 be removed if it exists.
Bram Moolenaar071d4272004-06-13 20:20:40 +00005928
5929 The result is a Number: 1 for a successful operation,
5930 otherwise 0 is returned.
5931
5932 Examples:
5933 Clear expression register history: >
5934 :call histdel("expr")
5935<
5936 Remove all entries starting with "*" from the search history: >
5937 :call histdel("/", '^\*')
5938<
5939 The following three are equivalent: >
5940 :call histdel("search", histnr("search"))
5941 :call histdel("search", -1)
5942 :call histdel("search", '^'.histget("search", -1).'$')
5943<
5944 To delete the last search pattern and use the last-but-one for
5945 the "n" command and 'hlsearch': >
5946 :call histdel("search", -1)
5947 :let @/ = histget("search", -1)
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005948<
5949 Can also be used as a |method|: >
5950 GetHistory()->histdel()
Bram Moolenaar071d4272004-06-13 20:20:40 +00005951
5952histget({history} [, {index}]) *histget()*
5953 The result is a String, the entry with Number {index} from
5954 {history}. See |hist-names| for the possible values of
5955 {history}, and |:history-indexing| for {index}. If there is
5956 no such entry, an empty String is returned. When {index} is
5957 omitted, the most recent item from the history is used.
5958
5959 Examples:
5960 Redo the second last search from history. >
5961 :execute '/' . histget("search", -2)
5962
5963< Define an Ex command ":H {num}" that supports re-execution of
5964 the {num}th entry from the output of |:history|. >
5965 :command -nargs=1 H execute histget("cmd", 0+<args>)
5966<
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005967 Can also be used as a |method|: >
5968 GetHistory()->histget()
5969
Bram Moolenaar071d4272004-06-13 20:20:40 +00005970histnr({history}) *histnr()*
5971 The result is the Number of the current entry in {history}.
5972 See |hist-names| for the possible values of {history}.
5973 If an error occurred, -1 is returned.
5974
5975 Example: >
5976 :let inp_index = histnr("expr")
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005977
5978< Can also be used as a |method|: >
5979 GetHistory()->histnr()
Bram Moolenaar071d4272004-06-13 20:20:40 +00005980<
5981hlexists({name}) *hlexists()*
5982 The result is a Number, which is non-zero if a highlight group
5983 called {name} exists. This is when the group has been
5984 defined in some way. Not necessarily when highlighting has
5985 been defined for it, it may also have been used for a syntax
5986 item.
5987 *highlight_exists()*
5988 Obsolete name: highlight_exists().
5989
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02005990 Can also be used as a |method|: >
5991 GetName()->hlexists()
5992<
Bram Moolenaar071d4272004-06-13 20:20:40 +00005993 *hlID()*
5994hlID({name}) The result is a Number, which is the ID of the highlight group
5995 with name {name}. When the highlight group doesn't exist,
5996 zero is returned.
5997 This can be used to retrieve information about the highlight
Bram Moolenaar58b85342016-08-14 19:54:54 +02005998 group. For example, to get the background color of the
Bram Moolenaar071d4272004-06-13 20:20:40 +00005999 "Comment" group: >
6000 :echo synIDattr(synIDtrans(hlID("Comment")), "bg")
6001< *highlightID()*
6002 Obsolete name: highlightID().
6003
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006004 Can also be used as a |method|: >
6005 GetName()->hlID()
6006
Bram Moolenaar071d4272004-06-13 20:20:40 +00006007hostname() *hostname()*
6008 The result is a String, which is the name of the machine on
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00006009 which Vim is currently running. Machine names greater than
Bram Moolenaar071d4272004-06-13 20:20:40 +00006010 256 characters long are truncated.
6011
6012iconv({expr}, {from}, {to}) *iconv()*
6013 The result is a String, which is the text {expr} converted
6014 from encoding {from} to encoding {to}.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006015 When the conversion completely fails an empty string is
6016 returned. When some characters could not be converted they
6017 are replaced with "?".
Bram Moolenaar071d4272004-06-13 20:20:40 +00006018 The encoding names are whatever the iconv() library function
6019 can accept, see ":!man 3 iconv".
6020 Most conversions require Vim to be compiled with the |+iconv|
6021 feature. Otherwise only UTF-8 to latin1 conversion and back
6022 can be done.
6023 This can be used to display messages with special characters,
6024 no matter what 'encoding' is set to. Write the message in
6025 UTF-8 and use: >
6026 echo iconv(utf8_str, "utf-8", &enc)
6027< Note that Vim uses UTF-8 for all Unicode encodings, conversion
6028 from/to UCS-2 is automatically changed to use UTF-8. You
6029 cannot use UCS-2 in a string anyway, because of the NUL bytes.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006030
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006031 Can also be used as a |method|: >
6032 GetText()->iconv('latin1', 'utf-8')
6033<
Bram Moolenaar071d4272004-06-13 20:20:40 +00006034 *indent()*
6035indent({lnum}) The result is a Number, which is indent of line {lnum} in the
6036 current buffer. The indent is counted in spaces, the value
6037 of 'tabstop' is relevant. {lnum} is used just like in
6038 |getline()|.
6039 When {lnum} is invalid -1 is returned.
6040
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006041 Can also be used as a |method|: >
6042 GetLnum()->indent()
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006043
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01006044index({object}, {expr} [, {start} [, {ic}]]) *index()*
6045 If {object} is a |List| return the lowest index where the item
6046 has a value equal to {expr}. There is no automatic
6047 conversion, so the String "4" is different from the Number 4.
6048 And the number 4 is different from the Float 4.0. The value
6049 of 'ignorecase' is not used here, case always matters.
6050
6051 If {object} is |Blob| return the lowest index where the byte
6052 value is equal to {expr}.
6053
Bram Moolenaar748bf032005-02-02 23:04:36 +00006054 If {start} is given then start looking at the item with index
6055 {start} (may be negative for an item relative to the end).
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006056 When {ic} is given and it is |TRUE|, ignore case. Otherwise
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006057 case must match.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01006058 -1 is returned when {expr} is not found in {object}.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006059 Example: >
6060 :let idx = index(words, "the")
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00006061 :if index(numbers, 123) >= 0
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006062
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006063< Can also be used as a |method|: >
6064 GetObject()->index(what)
Bram Moolenaarde8866b2005-01-06 23:24:37 +00006065
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006066input({prompt} [, {text} [, {completion}]]) *input()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00006067 The result is a String, which is whatever the user typed on
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006068 the command-line. The {prompt} argument is either a prompt
6069 string, or a blank string (for no prompt). A '\n' can be used
6070 in the prompt to start a new line.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006071 The highlighting set with |:echohl| is used for the prompt.
6072 The input is entered just like a command-line, with the same
Bram Moolenaar58b85342016-08-14 19:54:54 +02006073 editing commands and mappings. There is a separate history
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006074 for lines typed for input().
6075 Example: >
6076 :if input("Coffee or beer? ") == "beer"
6077 : echo "Cheers!"
6078 :endif
6079<
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006080 If the optional {text} argument is present and not empty, this
6081 is used for the default reply, as if the user typed this.
6082 Example: >
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006083 :let color = input("Color? ", "white")
6084
6085< The optional {completion} argument specifies the type of
6086 completion supported for the input. Without it completion is
Bram Moolenaar58b85342016-08-14 19:54:54 +02006087 not performed. The supported completion types are the same as
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006088 that can be supplied to a user-defined command using the
Bram Moolenaar58b85342016-08-14 19:54:54 +02006089 "-complete=" argument. Refer to |:command-completion| for
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006090 more information. Example: >
6091 let fname = input("File: ", "", "file")
6092<
6093 NOTE: This function must not be used in a startup file, for
6094 the versions that only run in GUI mode (e.g., the Win32 GUI).
Bram Moolenaar071d4272004-06-13 20:20:40 +00006095 Note: When input() is called from within a mapping it will
6096 consume remaining characters from that mapping, because a
6097 mapping is handled like the characters were typed.
6098 Use |inputsave()| before input() and |inputrestore()|
6099 after input() to avoid that. Another solution is to avoid
6100 that further characters follow in the mapping, e.g., by using
6101 |:execute| or |:normal|.
6102
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006103 Example with a mapping: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00006104 :nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
6105 :function GetFoo()
6106 : call inputsave()
6107 : let g:Foo = input("enter search pattern: ")
6108 : call inputrestore()
6109 :endfunction
6110
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006111< Can also be used as a |method|: >
6112 GetPrompt()->input()
6113
Bram Moolenaar071d4272004-06-13 20:20:40 +00006114inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006115 Like |input()|, but when the GUI is running and text dialogs
6116 are supported, a dialog window pops up to input the text.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006117 Example: >
Bram Moolenaar2d17fa32012-10-21 00:45:18 +02006118 :let n = inputdialog("value for shiftwidth", shiftwidth())
6119 :if n != ""
6120 : let &sw = n
6121 :endif
Bram Moolenaar071d4272004-06-13 20:20:40 +00006122< When the dialog is cancelled {cancelreturn} is returned. When
6123 omitted an empty string is returned.
6124 Hitting <Enter> works like pressing the OK button. Hitting
6125 <Esc> works like pressing the Cancel button.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006126 NOTE: Command-line completion is not supported.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006127
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006128 Can also be used as a |method|: >
6129 GetPrompt()->inputdialog()
6130
Bram Moolenaar578b49e2005-09-10 19:22:57 +00006131inputlist({textlist}) *inputlist()*
Bram Moolenaar910f66f2006-04-05 20:41:53 +00006132 {textlist} must be a |List| of strings. This |List| is
6133 displayed, one string per line. The user will be prompted to
6134 enter a number, which is returned.
Bram Moolenaar578b49e2005-09-10 19:22:57 +00006135 The user can also select an item by clicking on it with the
Bram Moolenaar58b85342016-08-14 19:54:54 +02006136 mouse. For the first string 0 is returned. When clicking
Bram Moolenaar578b49e2005-09-10 19:22:57 +00006137 above the first item a negative number is returned. When
6138 clicking on the prompt one more than the length of {textlist}
6139 is returned.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006140 Make sure {textlist} has less than 'lines' entries, otherwise
Bram Moolenaar58b85342016-08-14 19:54:54 +02006141 it won't work. It's a good idea to put the entry number at
Bram Moolenaaref2f6562007-05-06 13:32:59 +00006142 the start of the string. And put a prompt in the first item.
6143 Example: >
Bram Moolenaar578b49e2005-09-10 19:22:57 +00006144 let color = inputlist(['Select color:', '1. red',
6145 \ '2. green', '3. blue'])
6146
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006147< Can also be used as a |method|: >
6148 GetChoices()->inputlist()
6149
Bram Moolenaar071d4272004-06-13 20:20:40 +00006150inputrestore() *inputrestore()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006151 Restore typeahead that was saved with a previous |inputsave()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006152 Should be called the same number of times inputsave() is
6153 called. Calling it more often is harmless though.
6154 Returns 1 when there is nothing to restore, 0 otherwise.
6155
6156inputsave() *inputsave()*
6157 Preserve typeahead (also from mappings) and clear it, so that
6158 a following prompt gets input from the user. Should be
6159 followed by a matching inputrestore() after the prompt. Can
6160 be used several times, in which case there must be just as
6161 many inputrestore() calls.
6162 Returns 1 when out of memory, 0 otherwise.
6163
6164inputsecret({prompt} [, {text}]) *inputsecret()*
6165 This function acts much like the |input()| function with but
6166 two exceptions:
6167 a) the user's response will be displayed as a sequence of
6168 asterisks ("*") thereby keeping the entry secret, and
6169 b) the user's response will not be recorded on the input
6170 |history| stack.
6171 The result is a String, which is whatever the user actually
6172 typed on the command-line in response to the issued prompt.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00006173 NOTE: Command-line completion is not supported.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006174
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006175 Can also be used as a |method|: >
6176 GetPrompt()->inputsecret()
6177
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01006178insert({object}, {item} [, {idx}]) *insert()*
6179 When {object} is a |List| or a |Blob| insert {item} at the start
6180 of it.
6181
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006182 If {idx} is specified insert {item} before the item with index
Bram Moolenaar58b85342016-08-14 19:54:54 +02006183 {idx}. If {idx} is zero it goes before the first item, just
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006184 like omitting {idx}. A negative {idx} is also possible, see
6185 |list-index|. -1 inserts just before the last item.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01006186
6187 Returns the resulting |List| or |Blob|. Examples: >
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006188 :let mylist = insert([2, 3, 5], 1)
6189 :call insert(mylist, 4, -1)
6190 :call insert(mylist, 6, len(mylist))
Bram Moolenaara14de3d2005-01-07 21:48:26 +00006191< The last example can be done simpler with |add()|.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006192 Note that when {item} is a |List| it is inserted as a single
Bram Moolenaara23ccb82006-02-27 00:08:02 +00006193 item. Use |extend()| to concatenate |Lists|.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006194
Bram Moolenaarac92e252019-08-03 21:58:38 +02006195 Can also be used as a |method|: >
6196 mylist->insert(item)
6197
Bram Moolenaar67a2deb2019-11-25 00:05:32 +01006198interrupt() *interrupt()*
6199 Interrupt script execution. It works more or less like the
6200 user typing CTRL-C, most commands won't execute and control
6201 returns to the user. This is useful to abort execution
6202 from lower down, e.g. in an autocommand. Example: >
6203 :function s:check_typoname(file)
6204 : if fnamemodify(a:file, ':t') == '['
6205 : echomsg 'Maybe typo'
6206 : call interrupt()
6207 : endif
6208 :endfunction
6209 :au BufWritePre * call s:check_typoname(expand('<amatch>'))
6210
Bram Moolenaard6e256c2011-12-14 15:32:50 +01006211invert({expr}) *invert()*
6212 Bitwise invert. The argument is converted to a number. A
6213 List, Dict or Float argument causes an error. Example: >
6214 :let bits = invert(bits)
Bram Moolenaar073e4b92019-08-18 23:01:56 +02006215< Can also be used as a |method|: >
6216 :let bits = bits->invert()
Bram Moolenaard6e256c2011-12-14 15:32:50 +01006217
Bram Moolenaar071d4272004-06-13 20:20:40 +00006218isdirectory({directory}) *isdirectory()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006219 The result is a Number, which is |TRUE| when a directory
Bram Moolenaar071d4272004-06-13 20:20:40 +00006220 with the name {directory} exists. If {directory} doesn't
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006221 exist, or isn't a directory, the result is |FALSE|. {directory}
Bram Moolenaar071d4272004-06-13 20:20:40 +00006222 is any expression, which is used as a String.
6223
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006224 Can also be used as a |method|: >
6225 GetName()->isdirectory()
6226
Bram Moolenaarfda1bff2019-04-04 13:44:37 +02006227isinf({expr}) *isinf()*
6228 Return 1 if {expr} is a positive infinity, or -1 a negative
6229 infinity, otherwise 0. >
6230 :echo isinf(1.0 / 0.0)
6231< 1 >
6232 :echo isinf(-1.0 / 0.0)
6233< -1
6234
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02006235 Can also be used as a |method|: >
6236 Compute()->isinf()
6237<
Bram Moolenaarfda1bff2019-04-04 13:44:37 +02006238 {only available when compiled with the |+float| feature}
6239
Bram Moolenaar910f66f2006-04-05 20:41:53 +00006240islocked({expr}) *islocked()* *E786*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006241 The result is a Number, which is |TRUE| when {expr} is the
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00006242 name of a locked variable.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006243 {expr} must be the name of a variable, |List| item or
6244 |Dictionary| entry, not the variable itself! Example: >
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00006245 :let alist = [0, ['a', 'b'], 2, 3]
6246 :lockvar 1 alist
6247 :echo islocked('alist') " 1
6248 :echo islocked('alist[1]') " 0
6249
6250< When {expr} is a variable that does not exist you get an error
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00006251 message. Use |exists()| to check for existence.
Bram Moolenaar2ce06f62005-01-31 19:19:04 +00006252
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +02006253 Can also be used as a |method|: >
6254 GetName()->islocked()
6255
Bram Moolenaarf3913272016-02-25 00:00:01 +01006256isnan({expr}) *isnan()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006257 Return |TRUE| if {expr} is a float with value NaN. >
Bram Moolenaarf3913272016-02-25 00:00:01 +01006258 echo isnan(0.0 / 0.0)
Bram Moolenaar0f248b02019-04-04 15:36:05 +02006259< 1
Bram Moolenaarf3913272016-02-25 00:00:01 +01006260
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02006261 Can also be used as a |method|: >
6262 Compute()->isnan()
6263<
Bram Moolenaarf3913272016-02-25 00:00:01 +01006264 {only available when compiled with the |+float| feature}
6265
Bram Moolenaar677ee682005-01-27 14:41:15 +00006266items({dict}) *items()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006267 Return a |List| with all the key-value pairs of {dict}. Each
6268 |List| item is a list with two items: the key of a {dict}
6269 entry and the value of this entry. The |List| is in arbitrary
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01006270 order. Also see |keys()| and |values()|.
6271 Example: >
6272 for [key, value] in items(mydict)
6273 echo key . ': ' . value
6274 endfor
Bram Moolenaar677ee682005-01-27 14:41:15 +00006275
Bram Moolenaarac92e252019-08-03 21:58:38 +02006276< Can also be used as a |method|: >
6277 mydict->items()
Bram Moolenaar38a55632016-02-15 22:07:32 +01006278
Bram Moolenaared997ad2019-07-21 16:42:00 +02006279job_ functions are documented here: |job-functions-details|
Bram Moolenaarf6f32c32016-03-12 19:03:59 +01006280
Bram Moolenaar835dc632016-02-07 14:27:38 +01006281
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006282join({list} [, {sep}]) *join()*
6283 Join the items in {list} together into one String.
6284 When {sep} is specified it is put in between the items. If
6285 {sep} is omitted a single space is used.
6286 Note that {sep} is not added at the end. You might want to
6287 add it there too: >
6288 let lines = join(mylist, "\n") . "\n"
Bram Moolenaara23ccb82006-02-27 00:08:02 +00006289< String items are used as-is. |Lists| and |Dictionaries| are
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006290 converted into a string like with |string()|.
6291 The opposite function is |split()|.
6292
Bram Moolenaarac92e252019-08-03 21:58:38 +02006293 Can also be used as a |method|: >
6294 mylist->join()
6295
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006296js_decode({string}) *js_decode()*
6297 This is similar to |json_decode()| with these differences:
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006298 - Object key names do not have to be in quotes.
Bram Moolenaaree142ad2017-01-11 21:50:08 +01006299 - Strings can be in single quotes.
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006300 - Empty items in an array (between two commas) are allowed and
6301 result in v:none items.
6302
Bram Moolenaar02b31112019-08-31 22:16:38 +02006303 Can also be used as a |method|: >
6304 ReadObject()->js_decode()
6305
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006306js_encode({expr}) *js_encode()*
6307 This is similar to |json_encode()| with these differences:
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006308 - Object key names are not in quotes.
6309 - v:none items in an array result in an empty item between
6310 commas.
6311 For example, the Vim object:
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006312 [1,v:none,{"one":1},v:none] ~
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006313 Will be encoded as:
6314 [1,,{one:1},,] ~
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006315 While json_encode() would produce:
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006316 [1,null,{"one":1},null] ~
6317 This encoding is valid for JavaScript. It is more efficient
6318 than JSON, especially when using an array with optional items.
6319
Bram Moolenaar02b31112019-08-31 22:16:38 +02006320 Can also be used as a |method|: >
6321 GetObject()->js_encode()
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006322
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006323json_decode({string}) *json_decode()*
Bram Moolenaar705ada12016-01-24 17:56:50 +01006324 This parses a JSON formatted string and returns the equivalent
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006325 in Vim values. See |json_encode()| for the relation between
Bram Moolenaar705ada12016-01-24 17:56:50 +01006326 JSON and Vim values.
6327 The decoding is permissive:
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02006328 - A trailing comma in an array and object is ignored, e.g.
6329 "[1, 2, ]" is the same as "[1, 2]".
Bram Moolenaard09091d2019-01-17 16:07:22 +01006330 - Integer keys are accepted in objects, e.g. {1:2} is the
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01006331 same as {"1":2}.
Bram Moolenaar705ada12016-01-24 17:56:50 +01006332 - More floating point numbers are recognized, e.g. "1." for
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02006333 "1.0", or "001.2" for "1.2". Special floating point values
Bram Moolenaar5f6b3792019-01-12 14:24:27 +01006334 "Infinity", "-Infinity" and "NaN" (capitalization ignored)
6335 are accepted.
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02006336 - Leading zeroes in integer numbers are ignored, e.g. "012"
6337 for "12" or "-012" for "-12".
6338 - Capitalization is ignored in literal names null, true or
6339 false, e.g. "NULL" for "null", "True" for "true".
6340 - Control characters U+0000 through U+001F which are not
6341 escaped in strings are accepted, e.g. " " (tab
6342 character in string) for "\t".
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01006343 - An empty JSON expression or made of only spaces is accepted
6344 and results in v:none.
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +02006345 - Backslash in an invalid 2-character sequence escape is
6346 ignored, e.g. "\a" is decoded as "a".
6347 - A correct surrogate pair in JSON strings should normally be
6348 a 12 character sequence such as "\uD834\uDD1E", but
6349 json_decode() silently accepts truncated surrogate pairs
6350 such as "\uD834" or "\uD834\u"
6351 *E938*
6352 A duplicate key in an object, valid in rfc7159, is not
6353 accepted by json_decode() as the result must be a valid Vim
6354 type, e.g. this fails: {"a":"b", "a":"c"}
6355
Bram Moolenaar02b31112019-08-31 22:16:38 +02006356 Can also be used as a |method|: >
6357 ReadObject()->json_decode()
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006358
Bram Moolenaar7823a3b2016-02-11 21:08:32 +01006359json_encode({expr}) *json_encode()*
Bram Moolenaar705ada12016-01-24 17:56:50 +01006360 Encode {expr} as JSON and return this as a string.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006361 The encoding is specified in:
Bram Moolenaar009d84a2016-01-28 14:12:00 +01006362 https://tools.ietf.org/html/rfc7159.html
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006363 Vim values are converted as follows:
Bram Moolenaard09091d2019-01-17 16:07:22 +01006364 |Number| decimal number
6365 |Float| floating point number
Bram Moolenaar7ce686c2016-02-27 16:33:22 +01006366 Float nan "NaN"
6367 Float inf "Infinity"
Bram Moolenaar5f6b3792019-01-12 14:24:27 +01006368 Float -inf "-Infinity"
Bram Moolenaard09091d2019-01-17 16:07:22 +01006369 |String| in double quotes (possibly null)
6370 |Funcref| not possible, error
6371 |List| as an array (possibly null); when
Bram Moolenaar81edd172016-04-14 13:51:37 +02006372 used recursively: []
Bram Moolenaard09091d2019-01-17 16:07:22 +01006373 |Dict| as an object (possibly null); when
Bram Moolenaar81edd172016-04-14 13:51:37 +02006374 used recursively: {}
Bram Moolenaard09091d2019-01-17 16:07:22 +01006375 |Blob| as an array of the individual bytes
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006376 v:false "false"
6377 v:true "true"
Bram Moolenaar595e64e2016-02-07 19:19:53 +01006378 v:none "null"
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006379 v:null "null"
Bram Moolenaar7ce686c2016-02-27 16:33:22 +01006380 Note that NaN and Infinity are passed on as values. This is
6381 missing in the JSON standard, but several implementations do
6382 allow it. If not then you will get an error.
Bram Moolenaar520e1e42016-01-23 19:46:28 +01006383
Bram Moolenaar02b31112019-08-31 22:16:38 +02006384 Can also be used as a |method|: >
6385 GetObject()->json_encode()
6386
Bram Moolenaard8b02732005-01-14 21:48:43 +00006387keys({dict}) *keys()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006388 Return a |List| with all the keys of {dict}. The |List| is in
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01006389 arbitrary order. Also see |items()| and |values()|.
Bram Moolenaard8b02732005-01-14 21:48:43 +00006390
Bram Moolenaarac92e252019-08-03 21:58:38 +02006391 Can also be used as a |method|: >
6392 mydict->keys()
6393
6394< *len()* *E701*
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006395len({expr}) The result is a Number, which is the length of the argument.
6396 When {expr} is a String or a Number the length in bytes is
6397 used, as with |strlen()|.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006398 When {expr} is a |List| the number of items in the |List| is
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006399 returned.
Bram Moolenaard09091d2019-01-17 16:07:22 +01006400 When {expr} is a |Blob| the number of bytes is returned.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006401 When {expr} is a |Dictionary| the number of entries in the
6402 |Dictionary| is returned.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00006403 Otherwise an error is given.
6404
Bram Moolenaarac92e252019-08-03 21:58:38 +02006405 Can also be used as a |method|: >
6406 mylist->len()
6407
6408< *libcall()* *E364* *E368*
Bram Moolenaar071d4272004-06-13 20:20:40 +00006409libcall({libname}, {funcname}, {argument})
6410 Call function {funcname} in the run-time library {libname}
6411 with single argument {argument}.
6412 This is useful to call functions in a library that you
6413 especially made to be used with Vim. Since only one argument
6414 is possible, calling standard library functions is rather
6415 limited.
6416 The result is the String returned by the function. If the
6417 function returns NULL, this will appear as an empty string ""
6418 to Vim.
6419 If the function returns a number, use libcallnr()!
6420 If {argument} is a number, it is passed to the function as an
6421 int; if {argument} is a string, it is passed as a
6422 null-terminated string.
6423 This function will fail in |restricted-mode|.
6424
6425 libcall() allows you to write your own 'plug-in' extensions to
6426 Vim without having to recompile the program. It is NOT a
6427 means to call system functions! If you try to do so Vim will
6428 very probably crash.
6429
6430 For Win32, the functions you write must be placed in a DLL
6431 and use the normal C calling convention (NOT Pascal which is
6432 used in Windows System DLLs). The function must take exactly
6433 one parameter, either a character pointer or a long integer,
6434 and must return a character pointer or NULL. The character
6435 pointer returned must point to memory that will remain valid
6436 after the function has returned (e.g. in static data in the
6437 DLL). If it points to allocated memory, that memory will
6438 leak away. Using a static buffer in the function should work,
6439 it's then freed when the DLL is unloaded.
6440
6441 WARNING: If the function returns a non-valid pointer, Vim may
Bram Moolenaar446cb832008-06-24 21:56:24 +00006442 crash! This also happens if the function returns a number,
Bram Moolenaar071d4272004-06-13 20:20:40 +00006443 because Vim thinks it's a pointer.
6444 For Win32 systems, {libname} should be the filename of the DLL
6445 without the ".DLL" suffix. A full path is only required if
6446 the DLL is not in the usual places.
6447 For Unix: When compiling your own plugins, remember that the
6448 object code must be compiled as position-independent ('PIC').
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006449 {only in Win32 and some Unix versions, when the |+libcall|
Bram Moolenaar071d4272004-06-13 20:20:40 +00006450 feature is present}
6451 Examples: >
6452 :echo libcall("libc.so", "getenv", "HOME")
Bram Moolenaar02b31112019-08-31 22:16:38 +02006453
Bram Moolenaar2e693a82019-10-16 22:35:02 +02006454< Can also be used as a |method|, the base is passed as the
6455 third argument: >
Bram Moolenaar02b31112019-08-31 22:16:38 +02006456 GetValue()->libcall("libc.so", "getenv")
Bram Moolenaar071d4272004-06-13 20:20:40 +00006457<
6458 *libcallnr()*
6459libcallnr({libname}, {funcname}, {argument})
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01006460 Just like |libcall()|, but used for a function that returns an
Bram Moolenaar071d4272004-06-13 20:20:40 +00006461 int instead of a string.
6462 {only in Win32 on some Unix versions, when the |+libcall|
6463 feature is present}
Bram Moolenaar446cb832008-06-24 21:56:24 +00006464 Examples: >
6465 :echo libcallnr("/usr/lib/libc.so", "getpid", "")
Bram Moolenaar071d4272004-06-13 20:20:40 +00006466 :call libcallnr("libc.so", "printf", "Hello World!\n")
6467 :call libcallnr("libc.so", "sleep", 10)
6468<
Bram Moolenaar2e693a82019-10-16 22:35:02 +02006469 Can also be used as a |method|, the base is passed as the
6470 third argument: >
Bram Moolenaar02b31112019-08-31 22:16:38 +02006471 GetValue()->libcallnr("libc.so", "printf")
6472<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02006473
6474line({expr} [, {winid}]) *line()*
6475 The result is a Number, which is the line number of the file
Bram Moolenaar071d4272004-06-13 20:20:40 +00006476 position given with {expr}. The accepted positions are:
6477 . the cursor position
6478 $ the last line in the current buffer
6479 'x position of mark x (if the mark is not set, 0 is
6480 returned)
Bram Moolenaara1d5fa62017-04-03 22:02:55 +02006481 w0 first line visible in current window (one if the
6482 display isn't updated, e.g. in silent Ex mode)
6483 w$ last line visible in current window (this is one
6484 less than "w0" if no lines are visible)
Bram Moolenaar9ecd0232008-06-20 15:31:51 +00006485 v In Visual mode: the start of the Visual area (the
6486 cursor is the end). When not in Visual mode
6487 returns the cursor position. Differs from |'<| in
6488 that it's updated right away.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00006489 Note that a mark in another file can be used. The line number
6490 then applies to another buffer.
Bram Moolenaar0b238792006-03-02 22:49:12 +00006491 To get the column number use |col()|. To get both use
6492 |getpos()|.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02006493 With the optional {winid} argument the values are obtained for
6494 that window instead of the current window.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006495 Examples: >
6496 line(".") line number of the cursor
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02006497 line(".", winid) idem, in window "winid"
Bram Moolenaar071d4272004-06-13 20:20:40 +00006498 line("'t") line number of mark t
6499 line("'" . marker) line number of mark marker
Bram Moolenaar39536dd2019-01-29 22:58:21 +01006500<
6501 To jump to the last known position when opening a file see
6502 |last-position-jump|.
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00006503
Bram Moolenaar02b31112019-08-31 22:16:38 +02006504 Can also be used as a |method|: >
6505 GetValue()->line()
6506
Bram Moolenaar071d4272004-06-13 20:20:40 +00006507line2byte({lnum}) *line2byte()*
6508 Return the byte count from the start of the buffer for line
6509 {lnum}. This includes the end-of-line character, depending on
6510 the 'fileformat' option for the current buffer. The first
Bram Moolenaarb6b046b2011-12-30 13:11:27 +01006511 line returns 1. 'encoding' matters, 'fileencoding' is ignored.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006512 This can also be used to get the byte count for the line just
6513 below the last line: >
6514 line2byte(line("$") + 1)
Bram Moolenaarb6b046b2011-12-30 13:11:27 +01006515< This is the buffer size plus one. If 'fileencoding' is empty
6516 it is the file size plus one.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006517 When {lnum} is invalid, or the |+byte_offset| feature has been
6518 disabled at compile time, -1 is returned.
6519 Also see |byte2line()|, |go| and |:goto|.
6520
Bram Moolenaar02b31112019-08-31 22:16:38 +02006521 Can also be used as a |method|: >
6522 GetLnum()->line2byte()
6523
Bram Moolenaar071d4272004-06-13 20:20:40 +00006524lispindent({lnum}) *lispindent()*
6525 Get the amount of indent for line {lnum} according the lisp
6526 indenting rules, as with 'lisp'.
6527 The indent is counted in spaces, the value of 'tabstop' is
6528 relevant. {lnum} is used just like in |getline()|.
6529 When {lnum} is invalid or Vim was not compiled the
6530 |+lispindent| feature, -1 is returned.
6531
Bram Moolenaar02b31112019-08-31 22:16:38 +02006532 Can also be used as a |method|: >
6533 GetLnum()->lispindent()
6534
Bram Moolenaar9d401282019-04-06 13:18:12 +02006535list2str({list} [, {utf8}]) *list2str()*
6536 Convert each number in {list} to a character string can
6537 concatenate them all. Examples: >
6538 list2str([32]) returns " "
6539 list2str([65, 66, 67]) returns "ABC"
6540< The same can be done (slowly) with: >
6541 join(map(list, {nr, val -> nr2char(val)}), '')
6542< |str2list()| does the opposite.
6543
6544 When {utf8} is omitted or zero, the current 'encoding' is used.
6545 With {utf8} is 1, always return utf-8 characters.
6546 With utf-8 composing characters work as expected: >
6547 list2str([97, 769]) returns "á"
6548<
Bram Moolenaar02b31112019-08-31 22:16:38 +02006549 Can also be used as a |method|: >
6550 GetList()->list2str()
6551
Bram Moolenaara3347722019-05-11 21:14:24 +02006552listener_add({callback} [, {buf}]) *listener_add()*
6553 Add a callback function that will be invoked when changes have
6554 been made to buffer {buf}.
6555 {buf} refers to a buffer name or number. For the accepted
6556 values, see |bufname()|. When {buf} is omitted the current
6557 buffer is used.
6558 Returns a unique ID that can be passed to |listener_remove()|.
6559
Bram Moolenaaraad222c2019-09-06 22:46:09 +02006560 The {callback} is invoked with five arguments:
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006561 a:bufnr the buffer that was changed
6562 a:start first changed line number
6563 a:end first line number below the change
Bram Moolenaar96f45c02019-10-26 19:53:45 +02006564 a:added number of lines added, negative if lines were
6565 deleted
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006566 a:changes a List of items with details about the changes
6567
6568 Example: >
6569 func Listener(bufnr, start, end, added, changes)
6570 echo 'lines ' .. a:start .. ' until ' .. a:end .. ' changed'
6571 endfunc
6572 call listener_add('Listener', bufnr)
6573
6574< The List cannot be changed. Each item in a:changes is a
Bram Moolenaar8aad88d2019-05-12 13:53:50 +02006575 dictionary with these entries:
Bram Moolenaara3347722019-05-11 21:14:24 +02006576 lnum the first line number of the change
6577 end the first line below the change
6578 added number of lines added; negative if lines were
6579 deleted
6580 col first column in "lnum" that was affected by
6581 the change; one if unknown or the whole line
6582 was affected; this is a byte index, first
6583 character has a value of one.
6584 When lines are inserted the values are:
Bram Moolenaar68e65602019-05-26 21:33:31 +02006585 lnum line above which the new line is added
Bram Moolenaara3347722019-05-11 21:14:24 +02006586 end equal to "lnum"
6587 added number of lines inserted
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006588 col 1
Bram Moolenaara3347722019-05-11 21:14:24 +02006589 When lines are deleted the values are:
6590 lnum the first deleted line
6591 end the line below the first deleted line, before
6592 the deletion was done
6593 added negative, number of lines deleted
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006594 col 1
Bram Moolenaara3347722019-05-11 21:14:24 +02006595 When lines are changed:
6596 lnum the first changed line
6597 end the line below the last changed line
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006598 added 0
6599 col first column with a change or 1
Bram Moolenaara3347722019-05-11 21:14:24 +02006600
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006601 The entries are in the order the changes were made, thus the
6602 most recent change is at the end. The line numbers are valid
6603 when the callback is invoked, but later changes may make them
6604 invalid, thus keeping a copy for later might not work.
Bram Moolenaar8aad88d2019-05-12 13:53:50 +02006605
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006606 The {callback} is invoked just before the screen is updated,
6607 when |listener_flush()| is called or when a change is being
6608 made that changes the line count in a way it causes a line
6609 number in the list of changes to become invalid.
Bram Moolenaar8aad88d2019-05-12 13:53:50 +02006610
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006611 The {callback} is invoked with the text locked, see
6612 |textlock|. If you do need to make changes to the buffer, use
6613 a timer to do this later |timer_start()|.
Bram Moolenaara3347722019-05-11 21:14:24 +02006614
6615 The {callback} is not invoked when the buffer is first loaded.
6616 Use the |BufReadPost| autocmd event to handle the initial text
6617 of a buffer.
6618 The {callback} is also not invoked when the buffer is
6619 unloaded, use the |BufUnload| autocmd event for that.
6620
Bram Moolenaar2e693a82019-10-16 22:35:02 +02006621 Can also be used as a |method|, the base is passed as the
6622 second argument: >
Bram Moolenaar02b31112019-08-31 22:16:38 +02006623 GetBuffer()->listener_add(callback)
6624
Bram Moolenaarfe1ade02019-05-14 21:20:36 +02006625listener_flush([{buf}]) *listener_flush()*
6626 Invoke listener callbacks for buffer {buf}. If there are no
6627 pending changes then no callbacks are invoked.
6628
6629 {buf} refers to a buffer name or number. For the accepted
6630 values, see |bufname()|. When {buf} is omitted the current
6631 buffer is used.
6632
Bram Moolenaar02b31112019-08-31 22:16:38 +02006633 Can also be used as a |method|: >
6634 GetBuffer()->listener_flush()
6635
Bram Moolenaara3347722019-05-11 21:14:24 +02006636listener_remove({id}) *listener_remove()*
6637 Remove a listener previously added with listener_add().
Bram Moolenaar809ce4d2019-07-13 21:21:40 +02006638 Returns zero when {id} could not be found, one when {id} was
6639 removed.
Bram Moolenaara3347722019-05-11 21:14:24 +02006640
Bram Moolenaar02b31112019-08-31 22:16:38 +02006641 Can also be used as a |method|: >
6642 GetListenerId()->listener_remove()
6643
Bram Moolenaar071d4272004-06-13 20:20:40 +00006644localtime() *localtime()*
6645 Return the current time, measured as seconds since 1st Jan
Bram Moolenaar10455d42019-11-21 15:36:18 +01006646 1970. See also |strftime()|, |strptime()| and |getftime()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006647
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006648
Bram Moolenaardb7c6862010-05-21 16:33:48 +02006649log({expr}) *log()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02006650 Return the natural logarithm (base e) of {expr} as a |Float|.
6651 {expr} must evaluate to a |Float| or a |Number| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02006652 (0, inf].
6653 Examples: >
6654 :echo log(10)
6655< 2.302585 >
6656 :echo log(exp(5))
6657< 5.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02006658
6659 Can also be used as a |method|: >
6660 Compute()->log()
6661<
Bram Moolenaardb84e452010-08-15 13:50:43 +02006662 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02006663
6664
Bram Moolenaar446cb832008-06-24 21:56:24 +00006665log10({expr}) *log10()*
6666 Return the logarithm of Float {expr} to base 10 as a |Float|.
6667 {expr} must evaluate to a |Float| or a |Number|.
6668 Examples: >
6669 :echo log10(1000)
6670< 3.0 >
6671 :echo log10(0.01)
6672< -2.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02006673
6674 Can also be used as a |method|: >
6675 Compute()->log10()
6676<
Bram Moolenaar446cb832008-06-24 21:56:24 +00006677 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006678
6679luaeval({expr} [, {expr}]) *luaeval()*
6680 Evaluate Lua expression {expr} and return its result converted
6681 to Vim data structures. Second {expr} may hold additional
Bram Moolenaard38b0552012-04-25 19:07:41 +02006682 argument accessible as _A inside first {expr}.
6683 Strings are returned as they are.
6684 Boolean objects are converted to numbers.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006685 Numbers are converted to |Float| values if vim was compiled
Bram Moolenaard38b0552012-04-25 19:07:41 +02006686 with |+float| and to numbers otherwise.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006687 Dictionaries and lists obtained by vim.eval() are returned
Bram Moolenaard38b0552012-04-25 19:07:41 +02006688 as-is.
6689 Other objects are returned as zero without any errors.
6690 See |lua-luaeval| for more details.
Bram Moolenaar02b31112019-08-31 22:16:38 +02006691
6692 Can also be used as a |method|: >
6693 GetExpr()->luaeval()
6694
6695< {only available when compiled with the |+lua| feature}
Bram Moolenaard38b0552012-04-25 19:07:41 +02006696
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006697map({expr1}, {expr2}) *map()*
6698 {expr1} must be a |List| or a |Dictionary|.
6699 Replace each item in {expr1} with the result of evaluating
6700 {expr2}. {expr2} must be a |string| or |Funcref|.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006701
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006702 If {expr2} is a |string|, inside {expr2} |v:val| has the value
6703 of the current item. For a |Dictionary| |v:key| has the key
6704 of the current item and for a |List| |v:key| has the index of
6705 the current item.
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006706 Example: >
6707 :call map(mylist, '"> " . v:val . " <"')
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006708< This puts "> " before and " <" after each item in "mylist".
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006709
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006710 Note that {expr2} is the result of an expression and is then
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006711 used as an expression again. Often it is good to use a
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00006712 |literal-string| to avoid having to double backslashes. You
6713 still have to double ' quotes
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006714
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006715 If {expr2} is a |Funcref| it is called with two arguments:
6716 1. The key or the index of the current item.
6717 2. the value of the current item.
6718 The function must return the new value of the item. Example
6719 that changes each value by "key-value": >
6720 func KeyValue(key, val)
6721 return a:key . '-' . a:val
6722 endfunc
6723 call map(myDict, function('KeyValue'))
Bram Moolenaar50ba5262016-09-22 22:33:02 +02006724< It is shorter when using a |lambda|: >
6725 call map(myDict, {key, val -> key . '-' . val})
6726< If you do not use "val" you can leave it out: >
6727 call map(myDict, {key -> 'item: ' . key})
Bram Moolenaar088e8e32019-08-08 22:15:18 +02006728< If you do not use "key" you can use a short name: >
6729 call map(myDict, {_, val -> 'item: ' . val})
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006730<
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006731 The operation is done in-place. If you want a |List| or
6732 |Dictionary| to remain unmodified make a copy first: >
Bram Moolenaar30b65812012-07-12 22:01:11 +02006733 :let tlist = map(copy(mylist), ' v:val . "\t"')
Bram Moolenaar2fda12f2005-01-15 22:14:15 +00006734
Bram Moolenaarb33c7eb2016-07-04 22:29:49 +02006735< Returns {expr1}, the |List| or |Dictionary| that was filtered.
6736 When an error is encountered while evaluating {expr2} no
6737 further items in {expr1} are processed. When {expr2} is a
6738 Funcref errors inside a function are ignored, unless it was
6739 defined with the "abort" flag.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006740
Bram Moolenaarac92e252019-08-03 21:58:38 +02006741 Can also be used as a |method|: >
6742 mylist->map(expr2)
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006743
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006744maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
Bram Moolenaarbd743252010-10-20 21:23:33 +02006745 When {dict} is omitted or zero: Return the rhs of mapping
6746 {name} in mode {mode}. The returned String has special
6747 characters translated like in the output of the ":map" command
6748 listing.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006749
Bram Moolenaarbd743252010-10-20 21:23:33 +02006750 When there is no mapping for {name}, an empty String is
Bram Moolenaar0b0f0992018-05-22 21:41:30 +02006751 returned. When the mapping for {name} is empty, then "<Nop>"
6752 is returned.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006753
6754 The {name} can have special key names, like in the ":map"
6755 command.
6756
Bram Moolenaard12f5c12006-01-25 22:10:52 +00006757 {mode} can be one of these strings:
Bram Moolenaar071d4272004-06-13 20:20:40 +00006758 "n" Normal
Bram Moolenaarbd743252010-10-20 21:23:33 +02006759 "v" Visual (including Select)
Bram Moolenaar071d4272004-06-13 20:20:40 +00006760 "o" Operator-pending
6761 "i" Insert
6762 "c" Cmd-line
Bram Moolenaarbd743252010-10-20 21:23:33 +02006763 "s" Select
6764 "x" Visual
Bram Moolenaar071d4272004-06-13 20:20:40 +00006765 "l" langmap |language-mapping|
Bram Moolenaar37c64c72017-09-19 22:06:03 +02006766 "t" Terminal-Job
Bram Moolenaar071d4272004-06-13 20:20:40 +00006767 "" Normal, Visual and Operator-pending
Bram Moolenaard12f5c12006-01-25 22:10:52 +00006768 When {mode} is omitted, the modes for "" are used.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006769
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006770 When {abbr} is there and it is |TRUE| use abbreviations
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00006771 instead of mappings.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006772
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006773 When {dict} is there and it is |TRUE| return a dictionary
Bram Moolenaarbd743252010-10-20 21:23:33 +02006774 containing all the information of the mapping with the
6775 following items:
6776 "lhs" The {lhs} of the mapping.
6777 "rhs" The {rhs} of the mapping as typed.
6778 "silent" 1 for a |:map-silent| mapping, else 0.
Bram Moolenaar05365702010-10-27 18:34:44 +02006779 "noremap" 1 if the {rhs} of the mapping is not remappable.
Bram Moolenaarbd743252010-10-20 21:23:33 +02006780 "expr" 1 for an expression mapping (|:map-<expr>|).
6781 "buffer" 1 for a buffer local mapping (|:map-local|).
6782 "mode" Modes for which the mapping is defined. In
6783 addition to the modes mentioned above, these
6784 characters will be used:
6785 " " Normal, Visual and Operator-pending
6786 "!" Insert and Commandline mode
Bram Moolenaar166af9b2010-11-16 20:34:40 +01006787 (|mapmode-ic|)
Bram Moolenaar05365702010-10-27 18:34:44 +02006788 "sid" The script local ID, used for <sid> mappings
6789 (|<SID>|).
Bram Moolenaarf29c1c62018-09-10 21:05:02 +02006790 "lnum" The line number in "sid", zero if unknown.
Bram Moolenaardfb18412013-12-11 18:53:29 +01006791 "nowait" Do not wait for other, longer mappings.
6792 (|:map-<nowait>|).
Bram Moolenaarbd743252010-10-20 21:23:33 +02006793
Bram Moolenaar071d4272004-06-13 20:20:40 +00006794 The mappings local to the current buffer are checked first,
6795 then the global mappings.
Bram Moolenaara40ceaf2006-01-13 22:35:40 +00006796 This function can be used to map a key even when it's already
6797 mapped, and have it do the original mapping too. Sketch: >
6798 exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
6799
Bram Moolenaara1449832019-09-01 20:16:52 +02006800< Can also be used as a |method|: >
6801 GetKey()->maparg('n')
Bram Moolenaar071d4272004-06-13 20:20:40 +00006802
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006803mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00006804 Check if there is a mapping that matches with {name} in mode
6805 {mode}. See |maparg()| for {mode} and special names in
6806 {name}.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02006807 When {abbr} is there and it is |TRUE| use abbreviations
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00006808 instead of mappings.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006809 A match happens with a mapping that starts with {name} and
6810 with a mapping which is equal to the start of {name}.
6811
Bram Moolenaar446cb832008-06-24 21:56:24 +00006812 matches mapping "a" "ab" "abc" ~
Bram Moolenaar071d4272004-06-13 20:20:40 +00006813 mapcheck("a") yes yes yes
6814 mapcheck("abc") yes yes yes
6815 mapcheck("ax") yes no no
6816 mapcheck("b") no no no
6817
6818 The difference with maparg() is that mapcheck() finds a
6819 mapping that matches with {name}, while maparg() only finds a
6820 mapping for {name} exactly.
6821 When there is no mapping that starts with {name}, an empty
Bram Moolenaar0b0f0992018-05-22 21:41:30 +02006822 String is returned. If there is one, the RHS of that mapping
Bram Moolenaar071d4272004-06-13 20:20:40 +00006823 is returned. If there are several mappings that start with
Bram Moolenaar0b0f0992018-05-22 21:41:30 +02006824 {name}, the RHS of one of them is returned. This will be
6825 "<Nop>" if the RHS is empty.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006826 The mappings local to the current buffer are checked first,
6827 then the global mappings.
6828 This function can be used to check if a mapping can be added
6829 without being ambiguous. Example: >
6830 :if mapcheck("_vv") == ""
6831 : map _vv :set guifont=7x13<CR>
6832 :endif
6833< This avoids adding the "_vv" mapping when there already is a
6834 mapping for "_v" or for "_vvv".
6835
Bram Moolenaara1449832019-09-01 20:16:52 +02006836 Can also be used as a |method|: >
6837 GetKey()->mapcheck('n')
6838
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006839match({expr}, {pat} [, {start} [, {count}]]) *match()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006840 When {expr} is a |List| then this returns the index of the
6841 first item where {pat} matches. Each item is used as a
Bram Moolenaara23ccb82006-02-27 00:08:02 +00006842 String, |Lists| and |Dictionaries| are used as echoed.
Bram Moolenaar93a1df22018-09-10 11:51:50 +02006843
Bram Moolenaar58b85342016-08-14 19:54:54 +02006844 Otherwise, {expr} is used as a String. The result is a
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006845 Number, which gives the index (byte offset) in {expr} where
6846 {pat} matches.
Bram Moolenaar93a1df22018-09-10 11:51:50 +02006847
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006848 A match at the first character or |List| item returns zero.
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00006849 If there is no match -1 is returned.
Bram Moolenaar93a1df22018-09-10 11:51:50 +02006850
Bram Moolenaar20f90cf2011-05-19 12:22:51 +02006851 For getting submatches see |matchlist()|.
Bram Moolenaar89cb5e02004-07-19 20:55:54 +00006852 Example: >
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006853 :echo match("testing", "ing") " results in 4
Bram Moolenaar362e1a32006-03-06 23:29:24 +00006854 :echo match([1, 'x'], '\a') " results in 1
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006855< See |string-match| for how {pat} is used.
Bram Moolenaar05159a02005-02-26 23:04:13 +00006856 *strpbrk()*
Bram Moolenaar58b85342016-08-14 19:54:54 +02006857 Vim doesn't have a strpbrk() function. But you can do: >
Bram Moolenaar05159a02005-02-26 23:04:13 +00006858 :let sepidx = match(line, '[.,;: \t]')
6859< *strcasestr()*
6860 Vim doesn't have a strcasestr() function. But you can add
6861 "\c" to the pattern to ignore case: >
6862 :let idx = match(haystack, '\cneedle')
6863<
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006864 If {start} is given, the search starts from byte index
Bram Moolenaar32466aa2006-02-24 23:53:04 +00006865 {start} in a String or item {start} in a |List|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00006866 The result, however, is still the index counted from the
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00006867 first character/item. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00006868 :echo match("testing", "ing", 2)
6869< result is again "4". >
6870 :echo match("testing", "ing", 4)
6871< result is again "4". >
6872 :echo match("testing", "t", 2)
6873< result is "3".
Bram Moolenaar5e3cb7e2006-02-27 23:58:35 +00006874 For a String, if {start} > 0 then it is like the string starts
Bram Moolenaar0b238792006-03-02 22:49:12 +00006875 {start} bytes later, thus "^" will match at {start}. Except
6876 when {count} is given, then it's like matches before the
6877 {start} byte are ignored (this is a bit complicated to keep it
6878 backwards compatible).
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006879 For a String, if {start} < 0, it will be set to 0. For a list
6880 the index is counted from the end.
Bram Moolenaare224ffa2006-03-01 00:01:28 +00006881 If {start} is out of range ({start} > strlen({expr}) for a
6882 String or {start} > len({expr}) for a |List|) -1 is returned.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00006883
Bram Moolenaar5e3cb7e2006-02-27 23:58:35 +00006884 When {count} is given use the {count}'th match. When a match
Bram Moolenaare224ffa2006-03-01 00:01:28 +00006885 is found in a String the search for the next one starts one
Bram Moolenaar5e3cb7e2006-02-27 23:58:35 +00006886 character further. Thus this example results in 1: >
6887 echo match("testing", "..", 0, 2)
6888< In a |List| the search continues in the next item.
Bram Moolenaar0b238792006-03-02 22:49:12 +00006889 Note that when {count} is added the way {start} works changes,
6890 see above.
Bram Moolenaar5e3cb7e2006-02-27 23:58:35 +00006891
Bram Moolenaar071d4272004-06-13 20:20:40 +00006892 See |pattern| for the patterns that are accepted.
6893 The 'ignorecase' option is used to set the ignore-caseness of
Bram Moolenaar58b85342016-08-14 19:54:54 +02006894 the pattern. 'smartcase' is NOT used. The matching is always
Bram Moolenaar071d4272004-06-13 20:20:40 +00006895 done like 'magic' is set and 'cpoptions' is empty.
6896
Bram Moolenaara1449832019-09-01 20:16:52 +02006897 Can also be used as a |method|: >
6898 GetList()->match('word')
6899<
Bram Moolenaar95e51472018-07-28 16:55:56 +02006900 *matchadd()* *E798* *E799* *E801* *E957*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006901matchadd({group}, {pattern} [, {priority} [, {id} [, {dict}]]])
Bram Moolenaar6ee10162007-07-26 20:58:42 +00006902 Defines a pattern to be highlighted in the current window (a
6903 "match"). It will be highlighted with {group}. Returns an
6904 identification number (ID), which can be used to delete the
Bram Moolenaaraff74912019-03-30 18:11:49 +01006905 match using |matchdelete()|. The ID is bound to the window.
Bram Moolenaar8e69b4a2013-11-09 03:41:58 +01006906 Matching is case sensitive and magic, unless case sensitivity
6907 or magicness are explicitly overridden in {pattern}. The
6908 'magic', 'smartcase' and 'ignorecase' options are not used.
Bram Moolenaarf9132812015-07-21 19:19:13 +02006909 The "Conceal" value is special, it causes the match to be
6910 concealed.
Bram Moolenaar6ee10162007-07-26 20:58:42 +00006911
6912 The optional {priority} argument assigns a priority to the
Bram Moolenaar58b85342016-08-14 19:54:54 +02006913 match. A match with a high priority will have its
Bram Moolenaar6ee10162007-07-26 20:58:42 +00006914 highlighting overrule that of a match with a lower priority.
6915 A priority is specified as an integer (negative numbers are no
6916 exception). If the {priority} argument is not specified, the
6917 default priority is 10. The priority of 'hlsearch' is zero,
6918 hence all matches with a priority greater than zero will
6919 overrule it. Syntax highlighting (see 'syntax') is a separate
6920 mechanism, and regardless of the chosen priority a match will
6921 always overrule syntax highlighting.
6922
6923 The optional {id} argument allows the request for a specific
6924 match ID. If a specified ID is already taken, an error
6925 message will appear and the match will not be added. An ID
6926 is specified as a positive integer (zero excluded). IDs 1, 2
6927 and 3 are reserved for |:match|, |:2match| and |:3match|,
Bram Moolenaar6561d522015-07-21 15:48:27 +02006928 respectively. If the {id} argument is not specified or -1,
Bram Moolenaar6ee10162007-07-26 20:58:42 +00006929 |matchadd()| automatically chooses a free ID.
6930
Bram Moolenaar85084ef2016-01-17 22:26:33 +01006931 The optional {dict} argument allows for further custom
6932 values. Currently this is used to specify a match specific
Bram Moolenaar6561d522015-07-21 15:48:27 +02006933 conceal character that will be shown for |hl-Conceal|
6934 highlighted matches. The dict can have the following members:
6935
6936 conceal Special character to show instead of the
Bram Moolenaar6463ca22016-02-13 17:04:46 +01006937 match (only for |hl-Conceal| highlighted
Bram Moolenaar6561d522015-07-21 15:48:27 +02006938 matches, see |:syn-cchar|)
Bram Moolenaar95e51472018-07-28 16:55:56 +02006939 window Instead of the current window use the
6940 window with this number or window ID.
Bram Moolenaar6561d522015-07-21 15:48:27 +02006941
Bram Moolenaar6ee10162007-07-26 20:58:42 +00006942 The number of matches is not limited, as it is the case with
6943 the |:match| commands.
6944
6945 Example: >
6946 :highlight MyGroup ctermbg=green guibg=green
6947 :let m = matchadd("MyGroup", "TODO")
6948< Deletion of the pattern: >
6949 :call matchdelete(m)
6950
6951< A list of matches defined by |matchadd()| and |:match| are
Bram Moolenaar58b85342016-08-14 19:54:54 +02006952 available from |getmatches()|. All matches can be deleted in
Bram Moolenaar6ee10162007-07-26 20:58:42 +00006953 one operation by |clearmatches()|.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00006954
Bram Moolenaara1449832019-09-01 20:16:52 +02006955 Can also be used as a |method|: >
6956 GetGroup()->matchadd('TODO')
6957<
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02006958 *matchaddpos()*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006959matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
Bram Moolenaarb3414592014-06-17 17:48:32 +02006960 Same as |matchadd()|, but requires a list of positions {pos}
6961 instead of a pattern. This command is faster than |matchadd()|
6962 because it does not require to handle regular expressions and
6963 sets buffer line boundaries to redraw screen. It is supposed
6964 to be used when fast match additions and deletions are
6965 required, for example to highlight matching parentheses.
6966
6967 The list {pos} can contain one of these items:
Bram Moolenaarb6da44a2014-06-25 18:15:22 +02006968 - A number. This whole line will be highlighted. The first
Bram Moolenaarb3414592014-06-17 17:48:32 +02006969 line has number 1.
6970 - A list with one number, e.g., [23]. The whole line with this
6971 number will be highlighted.
6972 - A list with two numbers, e.g., [23, 11]. The first number is
Bram Moolenaarb6da44a2014-06-25 18:15:22 +02006973 the line number, the second one is the column number (first
6974 column is 1, the value must correspond to the byte index as
6975 |col()| would return). The character at this position will
6976 be highlighted.
Bram Moolenaarb3414592014-06-17 17:48:32 +02006977 - A list with three numbers, e.g., [23, 11, 3]. As above, but
Bram Moolenaarb6da44a2014-06-25 18:15:22 +02006978 the third number gives the length of the highlight in bytes.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01006979
Bram Moolenaarb3414592014-06-17 17:48:32 +02006980 The maximum number of positions is 8.
6981
6982 Example: >
6983 :highlight MyGroup ctermbg=green guibg=green
6984 :let m = matchaddpos("MyGroup", [[23, 24], 34])
6985< Deletion of the pattern: >
6986 :call matchdelete(m)
6987
6988< Matches added by |matchaddpos()| are returned by
6989 |getmatches()| with an entry "pos1", "pos2", etc., with the
6990 value a list like the {pos} item.
Bram Moolenaarb3414592014-06-17 17:48:32 +02006991
Bram Moolenaara1449832019-09-01 20:16:52 +02006992 Can also be used as a |method|: >
6993 GetGroup()->matchaddpos([23, 11])
6994
Bram Moolenaar910f66f2006-04-05 20:41:53 +00006995matcharg({nr}) *matcharg()*
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00006996 Selects the {nr} match item, as set with a |:match|,
Bram Moolenaar910f66f2006-04-05 20:41:53 +00006997 |:2match| or |:3match| command.
6998 Return a |List| with two elements:
6999 The name of the highlight group used
7000 The pattern used.
7001 When {nr} is not 1, 2 or 3 returns an empty |List|.
7002 When there is no match item set returns ['', ''].
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007003 This is useful to save and restore a |:match|.
7004 Highlighting matches using the |:match| commands are limited
7005 to three matches. |matchadd()| does not have this limitation.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007006
Bram Moolenaara1449832019-09-01 20:16:52 +02007007 Can also be used as a |method|: >
7008 GetMatch()->matcharg()
7009
Bram Moolenaaraff74912019-03-30 18:11:49 +01007010matchdelete({id} [, {win}) *matchdelete()* *E802* *E803*
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007011 Deletes a match with ID {id} previously defined by |matchadd()|
Bram Moolenaar446cb832008-06-24 21:56:24 +00007012 or one of the |:match| commands. Returns 0 if successful,
Bram Moolenaar6ee10162007-07-26 20:58:42 +00007013 otherwise -1. See example for |matchadd()|. All matches can
7014 be deleted in one operation by |clearmatches()|.
Bram Moolenaaraff74912019-03-30 18:11:49 +01007015 If {win} is specified, use the window with this number or
7016 window ID instead of the current window.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007017
Bram Moolenaara1449832019-09-01 20:16:52 +02007018 Can also be used as a |method|: >
7019 GetMatch()->matchdelete()
7020
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007021matchend({expr}, {pat} [, {start} [, {count}]]) *matchend()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007022 Same as |match()|, but return the index of first character
7023 after the match. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007024 :echo matchend("testing", "ing")
7025< results in "7".
Bram Moolenaar05159a02005-02-26 23:04:13 +00007026 *strspn()* *strcspn()*
7027 Vim doesn't have a strspn() or strcspn() function, but you can
7028 do it with matchend(): >
7029 :let span = matchend(line, '[a-zA-Z]')
7030 :let span = matchend(line, '[^a-zA-Z]')
7031< Except that -1 is returned when there are no matches.
7032
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007033 The {start}, if given, has the same meaning as for |match()|. >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007034 :echo matchend("testing", "ing", 2)
7035< results in "7". >
7036 :echo matchend("testing", "ing", 5)
7037< result is "-1".
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007038 When {expr} is a |List| the result is equal to |match()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007039
Bram Moolenaara1449832019-09-01 20:16:52 +02007040 Can also be used as a |method|: >
7041 GetText()->matchend('word')
7042
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007043matchlist({expr}, {pat} [, {start} [, {count}]]) *matchlist()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007044 Same as |match()|, but return a |List|. The first item in the
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007045 list is the matched string, same as what matchstr() would
7046 return. Following items are submatches, like "\1", "\2", etc.
Bram Moolenaarf9393ef2006-04-24 19:47:27 +00007047 in |:substitute|. When an optional submatch didn't match an
7048 empty string is used. Example: >
7049 echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')
7050< Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007051 When there is no match an empty list is returned.
7052
Bram Moolenaara1449832019-09-01 20:16:52 +02007053 Can also be used as a |method|: >
7054 GetList()->matchlist('word')
7055
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007056matchstr({expr}, {pat} [, {start} [, {count}]]) *matchstr()*
Bram Moolenaar446cb832008-06-24 21:56:24 +00007057 Same as |match()|, but return the matched string. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007058 :echo matchstr("testing", "ing")
7059< results in "ing".
7060 When there is no match "" is returned.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007061 The {start}, if given, has the same meaning as for |match()|. >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007062 :echo matchstr("testing", "ing", 2)
7063< results in "ing". >
7064 :echo matchstr("testing", "ing", 5)
7065< result is "".
Bram Moolenaar32466aa2006-02-24 23:53:04 +00007066 When {expr} is a |List| then the matching item is returned.
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00007067 The type isn't changed, it's not necessarily a String.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007068
Bram Moolenaara1449832019-09-01 20:16:52 +02007069 Can also be used as a |method|: >
7070 GetText()->matchstr('word')
7071
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007072matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()*
Bram Moolenaar7fed5c12016-03-29 23:10:31 +02007073 Same as |matchstr()|, but return the matched string, the start
7074 position and the end position of the match. Example: >
7075 :echo matchstrpos("testing", "ing")
7076< results in ["ing", 4, 7].
7077 When there is no match ["", -1, -1] is returned.
7078 The {start}, if given, has the same meaning as for |match()|. >
7079 :echo matchstrpos("testing", "ing", 2)
7080< results in ["ing", 4, 7]. >
7081 :echo matchstrpos("testing", "ing", 5)
7082< result is ["", -1, -1].
7083 When {expr} is a |List| then the matching item, the index
7084 of first item where {pat} matches, the start position and the
7085 end position of the match are returned. >
7086 :echo matchstrpos([1, '__x'], '\a')
7087< result is ["x", 1, 2, 3].
7088 The type isn't changed, it's not necessarily a String.
7089
Bram Moolenaara1449832019-09-01 20:16:52 +02007090 Can also be used as a |method|: >
7091 GetText()->matchstrpos('word')
Bram Moolenaar2e693a82019-10-16 22:35:02 +02007092<
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00007093 *max()*
Bram Moolenaar690afe12017-01-28 18:34:47 +01007094max({expr}) Return the maximum value of all items in {expr}.
Bram Moolenaar29634562020-01-09 21:46:04 +01007095 {expr} can be a List or a Dictionary. For a Dictionary,
7096 it returns the maximum of all values in the Dictionary.
7097 If {expr} is neither a List nor a Dictionary, or one of the
Bram Moolenaar690afe12017-01-28 18:34:47 +01007098 items in {expr} cannot be used as a Number this results in
Bram Moolenaarf8be4612017-06-23 20:52:40 +02007099 an error. An empty |List| or |Dictionary| results in zero.
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00007100
Bram Moolenaarac92e252019-08-03 21:58:38 +02007101 Can also be used as a |method|: >
7102 mylist->max()
7103
7104< *min()*
Bram Moolenaar690afe12017-01-28 18:34:47 +01007105min({expr}) Return the minimum value of all items in {expr}.
Bram Moolenaar29634562020-01-09 21:46:04 +01007106 {expr} can be a List or a Dictionary. For a Dictionary,
7107 it returns the minimum of all values in the Dictionary.
7108 If {expr} is neither a List nor a Dictionary, or one of the
Bram Moolenaar690afe12017-01-28 18:34:47 +01007109 items in {expr} cannot be used as a Number this results in
Bram Moolenaarf8be4612017-06-23 20:52:40 +02007110 an error. An empty |List| or |Dictionary| results in zero.
Bram Moolenaar9588a0f2005-01-08 21:45:39 +00007111
Bram Moolenaarac92e252019-08-03 21:58:38 +02007112 Can also be used as a |method|: >
7113 mylist->min()
7114
7115< *mkdir()* *E739*
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007116mkdir({name} [, {path} [, {prot}]])
7117 Create directory {name}.
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007118
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007119 If {path} is "p" then intermediate directories are created as
7120 necessary. Otherwise it must be "".
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007121
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007122 If {prot} is given it is used to set the protection bits of
7123 the new directory. The default is 0755 (rwxr-xr-x: r/w for
Bram Moolenaar58b85342016-08-14 19:54:54 +02007124 the user readable for others). Use 0700 to make it unreadable
Bram Moolenaared39e1d2008-08-09 17:55:22 +00007125 for others. This is only used for the last part of {name}.
7126 Thus if you create /tmp/foo/bar then /tmp/foo will be created
7127 with 0755.
7128 Example: >
7129 :call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007130
Bram Moolenaared39e1d2008-08-09 17:55:22 +00007131< This function is not available in the |sandbox|.
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007132
Bram Moolenaar78a16b02018-04-14 13:51:55 +02007133 There is no error if the directory already exists and the "p"
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007134 flag is passed (since patch 8.0.1708). However, without the
Bram Moolenaar10455d42019-11-21 15:36:18 +01007135 "p" option the call will fail.
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007136
Bram Moolenaar10455d42019-11-21 15:36:18 +01007137 The function result is a Number, which is 1 if the call was
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007138 successful or 0 if the directory creation failed or partly
7139 failed.
7140
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007141 Not available on all systems. To check use: >
7142 :if exists("*mkdir")
Bram Moolenaara1449832019-09-01 20:16:52 +02007143
7144< Can also be used as a |method|: >
7145 GetName()->mkdir()
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007146<
Bram Moolenaar071d4272004-06-13 20:20:40 +00007147 *mode()*
Bram Moolenaar446cb832008-06-24 21:56:24 +00007148mode([expr]) Return a string that indicates the current mode.
Bram Moolenaar05bb9532008-07-04 09:44:11 +00007149 If [expr] is supplied and it evaluates to a non-zero Number or
7150 a non-empty String (|non-zero-arg|), then the full mode is
Bram Moolenaare381d3d2016-07-07 14:50:41 +02007151 returned, otherwise only the first letter is returned.
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02007152 Also see |state()|.
Bram Moolenaar446cb832008-06-24 21:56:24 +00007153
Bram Moolenaar612cc382018-07-29 15:34:26 +02007154 n Normal, Terminal-Normal
7155 no Operator-pending
Bram Moolenaar5976f8f2018-12-27 23:44:44 +01007156 nov Operator-pending (forced characterwise |o_v|)
7157 noV Operator-pending (forced linewise |o_V|)
7158 noCTRL-V Operator-pending (forced blockwise |o_CTRL-V|);
Bram Moolenaar5b69c222019-01-11 14:50:06 +01007159 CTRL-V is one character
Bram Moolenaar612cc382018-07-29 15:34:26 +02007160 niI Normal using |i_CTRL-O| in |Insert-mode|
7161 niR Normal using |i_CTRL-O| in |Replace-mode|
7162 niV Normal using |i_CTRL-O| in |Virtual-Replace-mode|
7163 v Visual by character
7164 V Visual by line
7165 CTRL-V Visual blockwise
7166 s Select by character
7167 S Select by line
7168 CTRL-S Select blockwise
7169 i Insert
7170 ic Insert mode completion |compl-generic|
7171 ix Insert mode |i_CTRL-X| completion
7172 R Replace |R|
7173 Rc Replace mode completion |compl-generic|
7174 Rv Virtual Replace |gR|
7175 Rx Replace mode |i_CTRL-X| completion
7176 c Command-line editing
7177 cv Vim Ex mode |gQ|
7178 ce Normal Ex mode |Q|
7179 r Hit-enter prompt
7180 rm The -- more -- prompt
7181 r? A |:confirm| query of some sort
7182 ! Shell or external command is executing
7183 t Terminal-Job mode: keys go to the job
Bram Moolenaar446cb832008-06-24 21:56:24 +00007184 This is useful in the 'statusline' option or when used
7185 with |remote_expr()| In most other places it always returns
7186 "c" or "n".
Bram Moolenaar612cc382018-07-29 15:34:26 +02007187 Note that in the future more modes and more specific modes may
7188 be added. It's better not to compare the whole string but only
7189 the leading character(s).
Bram Moolenaar446cb832008-06-24 21:56:24 +00007190 Also see |visualmode()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007191
Bram Moolenaara1449832019-09-01 20:16:52 +02007192 Can also be used as a |method|: >
7193 DoFull()->mode()
7194
Bram Moolenaar7e506b62010-01-19 15:55:06 +01007195mzeval({expr}) *mzeval()*
7196 Evaluate MzScheme expression {expr} and return its result
Bram Moolenaard38b0552012-04-25 19:07:41 +02007197 converted to Vim data structures.
Bram Moolenaar7e506b62010-01-19 15:55:06 +01007198 Numbers and strings are returned as they are.
7199 Pairs (including lists and improper lists) and vectors are
7200 returned as Vim |Lists|.
7201 Hash tables are represented as Vim |Dictionary| type with keys
7202 converted to strings.
7203 All other types are converted to string with display function.
7204 Examples: >
7205 :mz (define l (list 1 2 3))
7206 :mz (define h (make-hash)) (hash-set! h "list" l)
7207 :echo mzeval("l")
7208 :echo mzeval("h")
7209<
Bram Moolenaara1449832019-09-01 20:16:52 +02007210 Can also be used as a |method|: >
7211 GetExpr()->mzeval()
7212<
Bram Moolenaar7e506b62010-01-19 15:55:06 +01007213 {only available when compiled with the |+mzscheme| feature}
7214
Bram Moolenaar071d4272004-06-13 20:20:40 +00007215nextnonblank({lnum}) *nextnonblank()*
7216 Return the line number of the first line at or below {lnum}
7217 that is not blank. Example: >
7218 if getline(nextnonblank(1)) =~ "Java"
7219< When {lnum} is invalid or there is no non-blank line at or
7220 below it, zero is returned.
7221 See also |prevnonblank()|.
7222
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007223 Can also be used as a |method|: >
7224 GetLnum()->nextnonblank()
7225
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007226nr2char({expr} [, {utf8}]) *nr2char()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00007227 Return a string with a single character, which has the number
7228 value {expr}. Examples: >
7229 nr2char(64) returns "@"
7230 nr2char(32) returns " "
Bram Moolenaard35d7842013-01-23 17:17:10 +01007231< When {utf8} is omitted or zero, the current 'encoding' is used.
7232 Example for "utf-8": >
Bram Moolenaar071d4272004-06-13 20:20:40 +00007233 nr2char(300) returns I with bow character
Bram Moolenaard35d7842013-01-23 17:17:10 +01007234< With {utf8} set to 1, always return utf-8 characters.
7235 Note that a NUL character in the file is specified with
Bram Moolenaar071d4272004-06-13 20:20:40 +00007236 nr2char(10), because NULs are represented with newline
7237 characters. nr2char(0) is a real NUL and terminates the
Bram Moolenaar383f9bc2005-01-19 22:18:32 +00007238 string, thus results in an empty string.
Bram Moolenaaraff74912019-03-30 18:11:49 +01007239 To turn a list of character numbers into a string: >
7240 let list = [65, 66, 67]
7241 let str = join(map(list, {_, val -> nr2char(val)}), '')
7242< Result: "ABC"
Bram Moolenaar071d4272004-06-13 20:20:40 +00007243
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007244 Can also be used as a |method|: >
7245 GetNumber()->nr2char()
Bram Moolenaar073e4b92019-08-18 23:01:56 +02007246
Bram Moolenaard6e256c2011-12-14 15:32:50 +01007247or({expr}, {expr}) *or()*
7248 Bitwise OR on the two arguments. The arguments are converted
7249 to a number. A List, Dict or Float argument causes an error.
7250 Example: >
7251 :let bits = or(bits, 0x80)
Bram Moolenaar073e4b92019-08-18 23:01:56 +02007252< Can also be used as a |method|: >
7253 :let bits = bits->or(0x80)
Bram Moolenaard6e256c2011-12-14 15:32:50 +01007254
7255
Bram Moolenaar910f66f2006-04-05 20:41:53 +00007256pathshorten({expr}) *pathshorten()*
7257 Shorten directory names in the path {expr} and return the
7258 result. The tail, the file name, is kept as-is. The other
7259 components in the path are reduced to single letters. Leading
7260 '~' and '.' characters are kept. Example: >
7261 :echo pathshorten('~/.vim/autoload/myfile.vim')
7262< ~/.v/a/myfile.vim ~
7263 It doesn't matter if the path exists or not.
7264
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007265 Can also be used as a |method|: >
7266 GetDirectories()->pathshorten()
7267
Bram Moolenaare9b892e2016-01-17 21:15:58 +01007268perleval({expr}) *perleval()*
7269 Evaluate Perl expression {expr} in scalar context and return
7270 its result converted to Vim data structures. If value can't be
Bram Moolenaar85084ef2016-01-17 22:26:33 +01007271 converted, it is returned as a string Perl representation.
7272 Note: If you want an array or hash, {expr} must return a
7273 reference to it.
Bram Moolenaare9b892e2016-01-17 21:15:58 +01007274 Example: >
7275 :echo perleval('[1 .. 4]')
7276< [1, 2, 3, 4]
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007277
7278 Can also be used as a |method|: >
7279 GetExpr()->perleval()
7280
7281< {only available when compiled with the |+perl| feature}
Bram Moolenaare9b892e2016-01-17 21:15:58 +01007282
Bram Moolenaar931a2772019-07-04 16:54:54 +02007283
7284popup_ functions are documented here: |popup-functions|.
7285
7286
Bram Moolenaar446cb832008-06-24 21:56:24 +00007287pow({x}, {y}) *pow()*
7288 Return the power of {x} to the exponent {y} as a |Float|.
7289 {x} and {y} must evaluate to a |Float| or a |Number|.
7290 Examples: >
7291 :echo pow(3, 3)
7292< 27.0 >
7293 :echo pow(2, 16)
7294< 65536.0 >
7295 :echo pow(32, 0.20)
7296< 2.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02007297
7298 Can also be used as a |method|: >
7299 Compute()->pow(3)
7300<
Bram Moolenaar446cb832008-06-24 21:56:24 +00007301 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007302
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00007303prevnonblank({lnum}) *prevnonblank()*
7304 Return the line number of the first line at or above {lnum}
7305 that is not blank. Example: >
7306 let ind = indent(prevnonblank(v:lnum - 1))
7307< When {lnum} is invalid or there is no non-blank line at or
7308 above it, zero is returned.
7309 Also see |nextnonblank()|.
7310
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007311 Can also be used as a |method|: >
7312 GetLnum()->prevnonblank()
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00007313
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007314printf({fmt}, {expr1} ...) *printf()*
7315 Return a String with {fmt}, where "%" items are replaced by
7316 the formatted form of their respective arguments. Example: >
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007317 printf("%4d: E%d %.30s", lnum, errno, msg)
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007318< May result in:
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007319 " 99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007320
Bram Moolenaarfd8ca212019-08-10 00:13:30 +02007321 When used as a |method| the base is passed as the second
7322 argument: >
7323 Compute()->printf("result: %d")
7324
7325< Often used items are:
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007326 %s string
Bram Moolenaar3ab72c52012-11-14 18:10:56 +01007327 %6S string right-aligned in 6 display cells
Bram Moolenaar98692072006-02-04 00:57:42 +00007328 %6s string right-aligned in 6 bytes
Bram Moolenaar446cb832008-06-24 21:56:24 +00007329 %.9s string truncated to 9 bytes
7330 %c single byte
7331 %d decimal number
7332 %5d decimal number padded with spaces to 5 characters
7333 %x hex number
7334 %04x hex number padded with zeros to at least 4 characters
7335 %X hex number using upper case letters
7336 %o octal number
Bram Moolenaar91984b92016-08-16 21:58:41 +02007337 %08b binary number padded with zeros to at least 8 chars
Bram Moolenaar04186092016-08-29 21:55:35 +02007338 %f floating point number as 12.23, inf, -inf or nan
7339 %F floating point number as 12.23, INF, -INF or NAN
7340 %e floating point number as 1.23e3, inf, -inf or nan
7341 %E floating point number as 1.23E3, INF, -INF or NAN
Bram Moolenaar446cb832008-06-24 21:56:24 +00007342 %g floating point number, as %f or %e depending on value
Bram Moolenaar3df01732017-02-17 22:47:16 +01007343 %G floating point number, as %F or %E depending on value
Bram Moolenaar446cb832008-06-24 21:56:24 +00007344 %% the % character itself
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007345
7346 Conversion specifications start with '%' and end with the
7347 conversion type. All other characters are copied unchanged to
7348 the result.
7349
7350 The "%" starts a conversion specification. The following
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007351 arguments appear in sequence:
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007352
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007353 % [flags] [field-width] [.precision] type
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007354
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007355 flags
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007356 Zero or more of the following flags:
7357
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007358 # The value should be converted to an "alternate
7359 form". For c, d, and s conversions, this option
7360 has no effect. For o conversions, the precision
7361 of the number is increased to force the first
7362 character of the output string to a zero (except
7363 if a zero value is printed with an explicit
7364 precision of zero).
Bram Moolenaar91984b92016-08-16 21:58:41 +02007365 For b and B conversions, a non-zero result has
7366 the string "0b" (or "0B" for B conversions)
7367 prepended to it.
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007368 For x and X conversions, a non-zero result has
7369 the string "0x" (or "0X" for X conversions)
7370 prepended to it.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007371
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007372 0 (zero) Zero padding. For all conversions the converted
7373 value is padded on the left with zeros rather
7374 than blanks. If a precision is given with a
Bram Moolenaar91984b92016-08-16 21:58:41 +02007375 numeric conversion (d, b, B, o, x, and X), the 0
7376 flag is ignored.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007377
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007378 - A negative field width flag; the converted value
7379 is to be left adjusted on the field boundary.
7380 The converted value is padded on the right with
7381 blanks, rather than on the left with blanks or
7382 zeros. A - overrides a 0 if both are given.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007383
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007384 ' ' (space) A blank should be left before a positive
7385 number produced by a signed conversion (d).
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007386
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007387 + A sign must always be placed before a number
Bram Moolenaar58b85342016-08-14 19:54:54 +02007388 produced by a signed conversion. A + overrides
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007389 a space if both are used.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007390
7391 field-width
7392 An optional decimal digit string specifying a minimum
Bram Moolenaar98692072006-02-04 00:57:42 +00007393 field width. If the converted value has fewer bytes
7394 than the field width, it will be padded with spaces on
7395 the left (or right, if the left-adjustment flag has
7396 been given) to fill out the field width.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007397
7398 .precision
7399 An optional precision, in the form of a period '.'
7400 followed by an optional digit string. If the digit
7401 string is omitted, the precision is taken as zero.
7402 This gives the minimum number of digits to appear for
7403 d, o, x, and X conversions, or the maximum number of
Bram Moolenaar98692072006-02-04 00:57:42 +00007404 bytes to be printed from a string for s conversions.
Bram Moolenaar446cb832008-06-24 21:56:24 +00007405 For floating point it is the number of digits after
7406 the decimal point.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007407
7408 type
7409 A character that specifies the type of conversion to
7410 be applied, see below.
7411
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007412 A field width or precision, or both, may be indicated by an
7413 asterisk '*' instead of a digit string. In this case, a
Bram Moolenaar58b85342016-08-14 19:54:54 +02007414 Number argument supplies the field width or precision. A
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007415 negative field width is treated as a left adjustment flag
7416 followed by a positive field width; a negative precision is
7417 treated as though it were missing. Example: >
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007418 :echo printf("%d: %.*s", nr, width, line)
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007419< This limits the length of the text used from "line" to
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007420 "width" bytes.
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007421
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007422 The conversion specifiers and their meanings are:
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007423
Bram Moolenaar91984b92016-08-16 21:58:41 +02007424 *printf-d* *printf-b* *printf-B* *printf-o*
7425 *printf-x* *printf-X*
7426 dbBoxX The Number argument is converted to signed decimal
7427 (d), unsigned binary (b and B), unsigned octal (o), or
7428 unsigned hexadecimal (x and X) notation. The letters
7429 "abcdef" are used for x conversions; the letters
7430 "ABCDEF" are used for X conversions.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007431 The precision, if any, gives the minimum number of
7432 digits that must appear; if the converted value
7433 requires fewer digits, it is padded on the left with
7434 zeros.
7435 In no case does a non-existent or small field width
7436 cause truncation of a numeric field; if the result of
7437 a conversion is wider than the field width, the field
7438 is expanded to contain the conversion result.
Bram Moolenaar30567352016-08-27 21:25:44 +02007439 The 'h' modifier indicates the argument is 16 bits.
7440 The 'l' modifier indicates the argument is 32 bits.
7441 The 'L' modifier indicates the argument is 64 bits.
7442 Generally, these modifiers are not useful. They are
7443 ignored when type is known from the argument.
7444
7445 i alias for d
7446 D alias for ld
7447 U alias for lu
7448 O alias for lo
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007449
Bram Moolenaar446cb832008-06-24 21:56:24 +00007450 *printf-c*
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007451 c The Number argument is converted to a byte, and the
7452 resulting character is written.
7453
Bram Moolenaar446cb832008-06-24 21:56:24 +00007454 *printf-s*
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007455 s The text of the String argument is used. If a
7456 precision is specified, no more bytes than the number
7457 specified are used.
Bram Moolenaar7571d552016-08-18 22:54:46 +02007458 If the argument is not a String type, it is
7459 automatically converted to text with the same format
7460 as ":echo".
Bram Moolenaar0122c402015-02-03 19:13:34 +01007461 *printf-S*
Bram Moolenaar3ab72c52012-11-14 18:10:56 +01007462 S The text of the String argument is used. If a
7463 precision is specified, no more display cells than the
Bram Moolenaar4c92e752019-02-17 21:18:32 +01007464 number specified are used.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007465
Bram Moolenaar446cb832008-06-24 21:56:24 +00007466 *printf-f* *E807*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007467 f F The Float argument is converted into a string of the
Bram Moolenaar446cb832008-06-24 21:56:24 +00007468 form 123.456. The precision specifies the number of
7469 digits after the decimal point. When the precision is
7470 zero the decimal point is omitted. When the precision
7471 is not specified 6 is used. A really big number
Bram Moolenaar04186092016-08-29 21:55:35 +02007472 (out of range or dividing by zero) results in "inf"
Bram Moolenaarf8be4612017-06-23 20:52:40 +02007473 or "-inf" with %f (INF or -INF with %F).
7474 "0.0 / 0.0" results in "nan" with %f (NAN with %F).
Bram Moolenaar446cb832008-06-24 21:56:24 +00007475 Example: >
7476 echo printf("%.2f", 12.115)
7477< 12.12
7478 Note that roundoff depends on the system libraries.
7479 Use |round()| when in doubt.
7480
7481 *printf-e* *printf-E*
7482 e E The Float argument is converted into a string of the
7483 form 1.234e+03 or 1.234E+03 when using 'E'. The
7484 precision specifies the number of digits after the
7485 decimal point, like with 'f'.
7486
7487 *printf-g* *printf-G*
7488 g G The Float argument is converted like with 'f' if the
7489 value is between 0.001 (inclusive) and 10000000.0
7490 (exclusive). Otherwise 'e' is used for 'g' and 'E'
7491 for 'G'. When no precision is specified superfluous
7492 zeroes and '+' signs are removed, except for the zero
7493 immediately after the decimal point. Thus 10000000.0
7494 results in 1.0e7.
7495
7496 *printf-%*
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007497 % A '%' is written. No argument is converted. The
7498 complete conversion specification is "%%".
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007499
Bram Moolenaarc236c162008-07-13 17:41:49 +00007500 When a Number argument is expected a String argument is also
7501 accepted and automatically converted.
7502 When a Float or String argument is expected a Number argument
7503 is also accepted and automatically converted.
7504 Any other argument type results in an error message.
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007505
Bram Moolenaar83bab712005-08-01 21:58:57 +00007506 *E766* *E767*
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007507 The number of {exprN} arguments must exactly match the number
7508 of "%" items. If there are not sufficient or too many
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00007509 arguments an error is given. Up to 18 arguments can be used.
Bram Moolenaar4be06f92005-07-29 22:36:03 +00007510
7511
Bram Moolenaarf2732452018-06-03 14:47:35 +02007512prompt_setcallback({buf}, {expr}) *prompt_setcallback()*
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02007513 Set prompt callback for buffer {buf} to {expr}. When {expr}
7514 is an empty string the callback is removed. This has only
Bram Moolenaarf2732452018-06-03 14:47:35 +02007515 effect if {buf} has 'buftype' set to "prompt".
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02007516
Bram Moolenaarf2732452018-06-03 14:47:35 +02007517 The callback is invoked when pressing Enter. The current
7518 buffer will always be the prompt buffer. A new line for a
7519 prompt is added before invoking the callback, thus the prompt
7520 for which the callback was invoked will be in the last but one
7521 line.
7522 If the callback wants to add text to the buffer, it must
7523 insert it above the last line, since that is where the current
7524 prompt is. This can also be done asynchronously.
7525 The callback is invoked with one argument, which is the text
7526 that was entered at the prompt. This can be an empty string
7527 if the user only typed Enter.
7528 Example: >
Bram Moolenaara8eee212019-08-24 22:14:58 +02007529 call prompt_setcallback(bufnr(), function('s:TextEntered'))
Bram Moolenaarf2732452018-06-03 14:47:35 +02007530 func s:TextEntered(text)
7531 if a:text == 'exit' || a:text == 'quit'
7532 stopinsert
7533 close
7534 else
7535 call append(line('$') - 1, 'Entered: "' . a:text . '"')
7536 " Reset 'modified' to allow the buffer to be closed.
7537 set nomodified
7538 endif
7539 endfunc
7540
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007541< Can also be used as a |method|: >
7542 GetBuffer()->prompt_setcallback(callback)
7543
7544
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02007545prompt_setinterrupt({buf}, {expr}) *prompt_setinterrupt()*
7546 Set a callback for buffer {buf} to {expr}. When {expr} is an
7547 empty string the callback is removed. This has only effect if
7548 {buf} has 'buftype' set to "prompt".
7549
7550 This callback will be invoked when pressing CTRL-C in Insert
7551 mode. Without setting a callback Vim will exit Insert mode,
7552 as in any buffer.
7553
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007554 Can also be used as a |method|: >
7555 GetBuffer()->prompt_setinterrupt(callback)
7556
Bram Moolenaar0e5979a2018-06-17 19:36:33 +02007557prompt_setprompt({buf}, {text}) *prompt_setprompt()*
7558 Set prompt for buffer {buf} to {text}. You most likely want
7559 {text} to end in a space.
7560 The result is only visible if {buf} has 'buftype' set to
7561 "prompt". Example: >
Bram Moolenaara8eee212019-08-24 22:14:58 +02007562 call prompt_setprompt(bufnr(), 'command: ')
Bram Moolenaar98aefe72018-12-13 22:20:09 +01007563<
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007564 Can also be used as a |method|: >
7565 GetBuffer()->prompt_setprompt('command: ')
7566
Bram Moolenaared997ad2019-07-21 16:42:00 +02007567prop_ functions are documented here: |text-prop-functions|.
Bram Moolenaarf2732452018-06-03 14:47:35 +02007568
Bram Moolenaare9bd5722019-08-17 19:36:06 +02007569pum_getpos() *pum_getpos()*
7570 If the popup menu (see |ins-completion-menu|) is not visible,
7571 returns an empty |Dictionary|, otherwise, returns a
7572 |Dictionary| with the following keys:
7573 height nr of items visible
7574 width screen cells
7575 row top screen row (0 first row)
7576 col leftmost screen column (0 first col)
7577 size total nr of items
Bram Moolenaar96f45c02019-10-26 19:53:45 +02007578 scrollbar |TRUE| if scrollbar is visible
Bram Moolenaare9bd5722019-08-17 19:36:06 +02007579
7580 The values are the same as in |v:event| during
7581 |CompleteChanged|.
7582
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00007583pumvisible() *pumvisible()*
7584 Returns non-zero when the popup menu is visible, zero
7585 otherwise. See |ins-completion-menu|.
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00007586 This can be used to avoid some things that would remove the
7587 popup menu.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007588
Bram Moolenaar30b65812012-07-12 22:01:11 +02007589py3eval({expr}) *py3eval()*
7590 Evaluate Python expression {expr} and return its result
7591 converted to Vim data structures.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007592 Numbers and strings are returned as they are (strings are
7593 copied though, Unicode strings are additionally converted to
Bram Moolenaar30b65812012-07-12 22:01:11 +02007594 'encoding').
7595 Lists are represented as Vim |List| type.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007596 Dictionaries are represented as Vim |Dictionary| type with
Bram Moolenaar30b65812012-07-12 22:01:11 +02007597 keys converted to strings.
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007598
7599 Can also be used as a |method|: >
7600 GetExpr()->py3eval()
7601
7602< {only available when compiled with the |+python3| feature}
Bram Moolenaar30b65812012-07-12 22:01:11 +02007603
7604 *E858* *E859*
7605pyeval({expr}) *pyeval()*
7606 Evaluate Python expression {expr} and return its result
7607 converted to Vim data structures.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007608 Numbers and strings are returned as they are (strings are
Bram Moolenaar30b65812012-07-12 22:01:11 +02007609 copied though).
7610 Lists are represented as Vim |List| type.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007611 Dictionaries are represented as Vim |Dictionary| type,
Bram Moolenaard09acef2012-09-21 14:54:30 +02007612 non-string keys result in error.
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007613
7614 Can also be used as a |method|: >
7615 GetExpr()->pyeval()
7616
7617< {only available when compiled with the |+python| feature}
Bram Moolenaar30b65812012-07-12 22:01:11 +02007618
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +01007619pyxeval({expr}) *pyxeval()*
7620 Evaluate Python expression {expr} and return its result
7621 converted to Vim data structures.
7622 Uses Python 2 or 3, see |python_x| and 'pyxversion'.
7623 See also: |pyeval()|, |py3eval()|
Bram Moolenaar3f4f3d82019-09-04 20:05:59 +02007624
7625 Can also be used as a |method|: >
7626 GetExpr()->pyxeval()
7627
7628< {only available when compiled with the |+python| or the
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +01007629 |+python3| feature}
7630
Bram Moolenaar3a3a7232005-01-17 22:16:15 +00007631 *E726* *E727*
Bram Moolenaard8b02732005-01-14 21:48:43 +00007632range({expr} [, {max} [, {stride}]]) *range()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00007633 Returns a |List| with Numbers:
Bram Moolenaard8b02732005-01-14 21:48:43 +00007634 - If only {expr} is specified: [0, 1, ..., {expr} - 1]
7635 - If {max} is specified: [{expr}, {expr} + 1, ..., {max}]
7636 - If {stride} is specified: [{expr}, {expr} + {stride}, ...,
7637 {max}] (increasing {expr} with {stride} each time, not
7638 producing a value past {max}).
Bram Moolenaare7566042005-06-17 22:00:15 +00007639 When the maximum is one before the start the result is an
7640 empty list. When the maximum is more than one before the
7641 start this is an error.
Bram Moolenaard8b02732005-01-14 21:48:43 +00007642 Examples: >
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007643 range(4) " [0, 1, 2, 3]
Bram Moolenaard8b02732005-01-14 21:48:43 +00007644 range(2, 4) " [2, 3, 4]
7645 range(2, 9, 3) " [2, 5, 8]
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00007646 range(2, -2, -1) " [2, 1, 0, -1, -2]
Bram Moolenaare7566042005-06-17 22:00:15 +00007647 range(0) " []
7648 range(2, 0) " error!
Bram Moolenaard8b02732005-01-14 21:48:43 +00007649<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007650 Can also be used as a |method|: >
7651 GetExpr()->range()
7652<
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01007653
7654rand([{expr}]) *rand()*
Bram Moolenaarf8c1f922019-11-28 22:13:14 +01007655 Return a pseudo-random Number generated with an xoshiro128**
Bram Moolenaar0c0734d2019-11-26 21:44:46 +01007656 algorithm using seed {expr}. The returned number is 32 bits,
7657 also on 64 bits systems, for consistency.
7658 {expr} can be initialized by |srand()| and will be updated by
7659 rand(). If {expr} is omitted, an internal seed value is used
7660 and updated.
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01007661
7662 Examples: >
7663 :echo rand()
7664 :let seed = srand()
7665 :echo rand(seed)
Bram Moolenaar0c0734d2019-11-26 21:44:46 +01007666 :echo rand(seed) % 16 " random number 0 - 15
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01007667<
Bram Moolenaar543c9b12019-04-05 22:50:40 +02007668 *readdir()*
7669readdir({directory} [, {expr}])
7670 Return a list with file and directory names in {directory}.
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02007671 You can also use |glob()| if you don't need to do complicated
7672 things, such as limiting the number of matches.
Bram Moolenaar543c9b12019-04-05 22:50:40 +02007673
7674 When {expr} is omitted all entries are included.
7675 When {expr} is given, it is evaluated to check what to do:
7676 If {expr} results in -1 then no further entries will
7677 be handled.
7678 If {expr} results in 0 then this entry will not be
7679 added to the list.
7680 If {expr} results in 1 then this entry will be added
7681 to the list.
7682 Each time {expr} is evaluated |v:val| is set to the entry name.
7683 When {expr} is a function the name is passed as the argument.
7684 For example, to get a list of files ending in ".txt": >
7685 readdir(dirname, {n -> n =~ '.txt$'})
7686< To skip hidden and backup files: >
7687 readdir(dirname, {n -> n !~ '^\.\|\~$'})
7688
7689< If you want to get a directory tree: >
7690 function! s:tree(dir)
7691 return {a:dir : map(readdir(a:dir),
7692 \ {_, x -> isdirectory(x) ?
7693 \ {x : s:tree(a:dir . '/' . x)} : x})}
7694 endfunction
7695 echo s:tree(".")
7696<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007697 Can also be used as a |method|: >
7698 GetDirName()->readdir()
7699<
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007700 *readfile()*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01007701readfile({fname} [, {type} [, {max}]])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00007702 Read file {fname} and return a |List|, each line of the file
Bram Moolenaar6100d022016-10-02 16:51:57 +02007703 as an item. Lines are broken at NL characters. Macintosh
7704 files separated with CR will result in a single long line
7705 (unless a NL appears somewhere).
Bram Moolenaar06583f12010-08-07 20:30:49 +02007706 All NUL characters are replaced with a NL character.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01007707 When {type} contains "b" binary mode is used:
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007708 - When the last line ends in a NL an extra empty list item is
7709 added.
7710 - No CR characters are removed.
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01007711 When {type} contains "B" a |Blob| is returned with the binary
7712 data of the file unmodified.
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007713 Otherwise:
7714 - CR characters that appear before a NL are removed.
7715 - Whether the last line ends in a NL or not does not matter.
Bram Moolenaar06583f12010-08-07 20:30:49 +02007716 - When 'encoding' is Unicode any UTF-8 byte order mark is
7717 removed from the text.
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007718 When {max} is given this specifies the maximum number of lines
7719 to be read. Useful if you only want to check the first ten
7720 lines of a file: >
7721 :for line in readfile(fname, '', 10)
7722 : if line =~ 'Date' | echo line | endif
7723 :endfor
Bram Moolenaar582fd852005-03-28 20:58:01 +00007724< When {max} is negative -{max} lines from the end of the file
7725 are returned, or as many as there are.
7726 When {max} is zero the result is an empty list.
Bram Moolenaar26a60b42005-02-22 08:49:11 +00007727 Note that without {max} the whole file is read into memory.
7728 Also note that there is no recognition of encoding. Read a
7729 file into a buffer if you need to.
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +00007730 When the file can't be opened an error message is given and
7731 the result is an empty list.
7732 Also see |writefile()|.
7733
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007734 Can also be used as a |method|: >
7735 GetFileName()->readfile()
7736
Bram Moolenaar0b6d9112018-05-22 20:35:17 +02007737reg_executing() *reg_executing()*
7738 Returns the single letter name of the register being executed.
7739 Returns an empty string when no register is being executed.
7740 See |@|.
7741
7742reg_recording() *reg_recording()*
7743 Returns the single letter name of the register being recorded.
Bram Moolenaar62e1bb42019-04-08 16:25:07 +02007744 Returns an empty string when not recording. See |q|.
Bram Moolenaar0b6d9112018-05-22 20:35:17 +02007745
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007746reltime([{start} [, {end}]]) *reltime()*
7747 Return an item that represents a time value. The format of
7748 the item depends on the system. It can be passed to
Bram Moolenaar03413f42016-04-12 21:07:15 +02007749 |reltimestr()| to convert it to a string or |reltimefloat()|
7750 to convert to a Float.
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007751 Without an argument it returns the current time.
7752 With one argument is returns the time passed since the time
7753 specified in the argument.
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00007754 With two arguments it returns the time passed between {start}
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007755 and {end}.
7756 The {start} and {end} arguments must be values returned by
7757 reltime().
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007758
7759 Can also be used as a |method|: >
7760 GetStart()->reltime()
7761<
Bram Moolenaardb84e452010-08-15 13:50:43 +02007762 {only available when compiled with the |+reltime| feature}
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007763
Bram Moolenaar03413f42016-04-12 21:07:15 +02007764reltimefloat({time}) *reltimefloat()*
7765 Return a Float that represents the time value of {time}.
7766 Example: >
7767 let start = reltime()
7768 call MyFunction()
7769 let seconds = reltimefloat(reltime(start))
7770< See the note of reltimestr() about overhead.
7771 Also see |profiling|.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007772
7773 Can also be used as a |method|: >
7774 reltime(start)->reltimefloat()
7775
7776< {only available when compiled with the |+reltime| feature}
Bram Moolenaar03413f42016-04-12 21:07:15 +02007777
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007778reltimestr({time}) *reltimestr()*
7779 Return a String that represents the time value of {time}.
7780 This is the number of seconds, a dot and the number of
7781 microseconds. Example: >
7782 let start = reltime()
7783 call MyFunction()
7784 echo reltimestr(reltime(start))
7785< Note that overhead for the commands will be added to the time.
7786 The accuracy depends on the system.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00007787 Leading spaces are used to make the string align nicely. You
7788 can use split() to remove it. >
7789 echo split(reltimestr(reltime(start)))[0]
7790< Also see |profiling|.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007791
7792 Can also be used as a |method|: >
7793 reltime(start)->reltimestr()
7794
7795< {only available when compiled with the |+reltime| feature}
Bram Moolenaar433f7c82006-03-21 21:29:36 +00007796
Bram Moolenaar071d4272004-06-13 20:20:40 +00007797 *remote_expr()* *E449*
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01007798remote_expr({server}, {string} [, {idvar} [, {timeout}]])
Bram Moolenaar58b85342016-08-14 19:54:54 +02007799 Send the {string} to {server}. The string is sent as an
Bram Moolenaar071d4272004-06-13 20:20:40 +00007800 expression and the result is returned after evaluation.
Bram Moolenaar362e1a32006-03-06 23:29:24 +00007801 The result must be a String or a |List|. A |List| is turned
7802 into a String by joining the items with a line break in
7803 between (not at the end), like with join(expr, "\n").
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01007804 If {idvar} is present and not empty, it is taken as the name
7805 of a variable and a {serverid} for later use with
Bram Moolenaar6bb2cdf2018-02-24 19:53:53 +01007806 |remote_read()| is stored there.
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01007807 If {timeout} is given the read times out after this many
7808 seconds. Otherwise a timeout of 600 seconds is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007809 See also |clientserver| |RemoteReply|.
7810 This function is not available in the |sandbox|.
7811 {only available when compiled with the |+clientserver| feature}
7812 Note: Any errors will cause a local error message to be issued
7813 and the result will be the empty string.
Bram Moolenaar01164a62017-11-02 22:58:42 +01007814
7815 Variables will be evaluated in the global namespace,
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01007816 independent of a function currently being active. Except
Bram Moolenaar01164a62017-11-02 22:58:42 +01007817 when in debug mode, then local function variables and
7818 arguments can be evaluated.
7819
Bram Moolenaar071d4272004-06-13 20:20:40 +00007820 Examples: >
7821 :echo remote_expr("gvim", "2+2")
7822 :echo remote_expr("gvim1", "b:current_syntax")
7823<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007824 Can also be used as a |method|: >
7825 ServerName()->remote_expr(expr)
Bram Moolenaar071d4272004-06-13 20:20:40 +00007826
7827remote_foreground({server}) *remote_foreground()*
7828 Move the Vim server with the name {server} to the foreground.
7829 This works like: >
7830 remote_expr({server}, "foreground()")
7831< Except that on Win32 systems the client does the work, to work
7832 around the problem that the OS doesn't always allow the server
7833 to bring itself to the foreground.
Bram Moolenaar9372a112005-12-06 19:59:18 +00007834 Note: This does not restore the window if it was minimized,
7835 like foreground() does.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007836 This function is not available in the |sandbox|.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007837
7838 Can also be used as a |method|: >
7839 ServerName()->remote_foreground()
7840
7841< {only in the Win32, Athena, Motif and GTK GUI versions and the
Bram Moolenaar071d4272004-06-13 20:20:40 +00007842 Win32 console version}
7843
7844
7845remote_peek({serverid} [, {retvar}]) *remote_peek()*
7846 Returns a positive number if there are available strings
7847 from {serverid}. Copies any reply string into the variable
Bram Moolenaar58b85342016-08-14 19:54:54 +02007848 {retvar} if specified. {retvar} must be a string with the
Bram Moolenaar071d4272004-06-13 20:20:40 +00007849 name of a variable.
7850 Returns zero if none are available.
7851 Returns -1 if something is wrong.
7852 See also |clientserver|.
7853 This function is not available in the |sandbox|.
7854 {only available when compiled with the |+clientserver| feature}
7855 Examples: >
7856 :let repl = ""
7857 :echo "PEEK: ".remote_peek(id, "repl").": ".repl
7858
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007859< Can also be used as a |method|: >
7860 ServerId()->remote_peek()
7861
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01007862remote_read({serverid}, [{timeout}]) *remote_read()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00007863 Return the oldest available reply from {serverid} and consume
Bram Moolenaar81b9d0b2017-03-19 21:20:53 +01007864 it. Unless a {timeout} in seconds is given, it blocks until a
7865 reply is available.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007866 See also |clientserver|.
7867 This function is not available in the |sandbox|.
7868 {only available when compiled with the |+clientserver| feature}
7869 Example: >
7870 :echo remote_read(id)
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007871
7872< Can also be used as a |method|: >
7873 ServerId()->remote_read()
Bram Moolenaar071d4272004-06-13 20:20:40 +00007874<
7875 *remote_send()* *E241*
7876remote_send({server}, {string} [, {idvar}])
Bram Moolenaar58b85342016-08-14 19:54:54 +02007877 Send the {string} to {server}. The string is sent as input
Bram Moolenaard4755bb2004-09-02 19:12:26 +00007878 keys and the function returns immediately. At the Vim server
7879 the keys are not mapped |:map|.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00007880 If {idvar} is present, it is taken as the name of a variable
7881 and a {serverid} for later use with remote_read() is stored
7882 there.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007883 See also |clientserver| |RemoteReply|.
7884 This function is not available in the |sandbox|.
7885 {only available when compiled with the |+clientserver| feature}
Bram Moolenaar7416f3e2017-03-18 18:10:13 +01007886
Bram Moolenaar071d4272004-06-13 20:20:40 +00007887 Note: Any errors will be reported in the server and may mess
7888 up the display.
7889 Examples: >
7890 :echo remote_send("gvim", ":DropAndReply ".file, "serverid").
7891 \ remote_read(serverid)
7892
7893 :autocmd NONE RemoteReply *
7894 \ echo remote_read(expand("<amatch>"))
7895 :echo remote_send("gvim", ":sleep 10 | echo ".
7896 \ 'server2client(expand("<client>"), "HELLO")<CR>')
Bram Moolenaara14de3d2005-01-07 21:48:26 +00007897<
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007898 Can also be used as a |method|: >
7899 ServerName()->remote_send(keys)
7900<
Bram Moolenaar7416f3e2017-03-18 18:10:13 +01007901 *remote_startserver()* *E941* *E942*
7902remote_startserver({name})
7903 Become the server {name}. This fails if already running as a
7904 server, when |v:servername| is not empty.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007905
7906 Can also be used as a |method|: >
7907 ServerName()->remote_startserver()
7908
7909< {only available when compiled with the |+clientserver| feature}
Bram Moolenaar7416f3e2017-03-18 18:10:13 +01007910
Bram Moolenaarde8866b2005-01-06 23:24:37 +00007911remove({list}, {idx} [, {end}]) *remove()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00007912 Without {end}: Remove the item at {idx} from |List| {list} and
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007913 return the item.
Bram Moolenaarde8866b2005-01-06 23:24:37 +00007914 With {end}: Remove items from {idx} to {end} (inclusive) and
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01007915 return a List with these items. When {idx} points to the same
Bram Moolenaarde8866b2005-01-06 23:24:37 +00007916 item as {end} a list with one item is returned. When {end}
7917 points to an item before {idx} this is an error.
7918 See |list-index| for possible values of {idx} and {end}.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00007919 Example: >
7920 :echo "last item: " . remove(mylist, -1)
Bram Moolenaarde8866b2005-01-06 23:24:37 +00007921 :call remove(mylist, 0, 9)
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007922<
7923 Use |delete()| to remove a file.
7924
Bram Moolenaarac92e252019-08-03 21:58:38 +02007925 Can also be used as a |method|: >
7926 mylist->remove(idx)
7927
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01007928remove({blob}, {idx} [, {end}])
7929 Without {end}: Remove the byte at {idx} from |Blob| {blob} and
7930 return the byte.
7931 With {end}: Remove bytes from {idx} to {end} (inclusive) and
7932 return a |Blob| with these bytes. When {idx} points to the same
7933 byte as {end} a |Blob| with one byte is returned. When {end}
7934 points to a byte before {idx} this is an error.
7935 Example: >
7936 :echo "last byte: " . remove(myblob, -1)
7937 :call remove(mylist, 0, 9)
Bram Moolenaar39536dd2019-01-29 22:58:21 +01007938
Bram Moolenaard8b02732005-01-14 21:48:43 +00007939remove({dict}, {key})
Bram Moolenaar54775062019-07-31 21:07:14 +02007940 Remove the entry from {dict} with key {key} and return it.
7941 Example: >
Bram Moolenaard8b02732005-01-14 21:48:43 +00007942 :echo "removed " . remove(dict, "one")
7943< If there is no {key} in {dict} this is an error.
7944
Bram Moolenaar071d4272004-06-13 20:20:40 +00007945rename({from}, {to}) *rename()*
7946 Rename the file by the name {from} to the name {to}. This
7947 should also work to move files across file systems. The
7948 result is a Number, which is 0 if the file was renamed
7949 successfully, and non-zero when the renaming failed.
Bram Moolenaar798b30b2009-04-22 10:56:16 +00007950 NOTE: If {to} exists it is overwritten without warning.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007951 This function is not available in the |sandbox|.
7952
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007953 Can also be used as a |method|: >
7954 GetOldName()->rename(newname)
7955
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00007956repeat({expr}, {count}) *repeat()*
7957 Repeat {expr} {count} times and return the concatenated
7958 result. Example: >
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00007959 :let separator = repeat('-', 80)
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00007960< When {count} is zero or negative the result is empty.
Bram Moolenaar32466aa2006-02-24 23:53:04 +00007961 When {expr} is a |List| the result is {expr} concatenated
Bram Moolenaar58b85342016-08-14 19:54:54 +02007962 {count} times. Example: >
Bram Moolenaarde8866b2005-01-06 23:24:37 +00007963 :let longlist = repeat(['a', 'b'], 3)
7964< Results in ['a', 'b', 'a', 'b', 'a', 'b'].
Bram Moolenaarab79bcb2004-07-18 21:34:53 +00007965
Bram Moolenaarac92e252019-08-03 21:58:38 +02007966 Can also be used as a |method|: >
7967 mylist->repeat(count)
Bram Moolenaara14de3d2005-01-07 21:48:26 +00007968
Bram Moolenaar071d4272004-06-13 20:20:40 +00007969resolve({filename}) *resolve()* *E655*
7970 On MS-Windows, when {filename} is a shortcut (a .lnk file),
7971 returns the path the shortcut points to in a simplified form.
Bram Moolenaardce1e892019-02-10 23:18:53 +01007972 When {filename} is a symbolic link or junction point, return
7973 the full path to the target. If the target of junction is
7974 removed, return {filename}.
Bram Moolenaar071d4272004-06-13 20:20:40 +00007975 On Unix, repeat resolving symbolic links in all path
7976 components of {filename} and return the simplified result.
7977 To cope with link cycles, resolving of symbolic links is
7978 stopped after 100 iterations.
7979 On other systems, return the simplified {filename}.
7980 The simplification step is done as by |simplify()|.
7981 resolve() keeps a leading path component specifying the
7982 current directory (provided the result is still a relative
7983 path name) and also keeps a trailing path separator.
7984
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02007985 Can also be used as a |method|: >
7986 GetName()->resolve()
Bram Moolenaarac92e252019-08-03 21:58:38 +02007987
7988reverse({object}) *reverse()*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +01007989 Reverse the order of items in {object} in-place.
7990 {object} can be a |List| or a |Blob|.
7991 Returns {object}.
7992 If you want an object to remain unmodified make a copy first: >
Bram Moolenaara14de3d2005-01-07 21:48:26 +00007993 :let revlist = reverse(copy(mylist))
Bram Moolenaarac92e252019-08-03 21:58:38 +02007994< Can also be used as a |method|: >
7995 mylist->reverse()
Bram Moolenaara14de3d2005-01-07 21:48:26 +00007996
Bram Moolenaar446cb832008-06-24 21:56:24 +00007997round({expr}) *round()*
Bram Moolenaarc236c162008-07-13 17:41:49 +00007998 Round off {expr} to the nearest integral value and return it
Bram Moolenaar446cb832008-06-24 21:56:24 +00007999 as a |Float|. If {expr} lies halfway between two integral
8000 values, then use the larger one (away from zero).
8001 {expr} must evaluate to a |Float| or a |Number|.
8002 Examples: >
8003 echo round(0.456)
8004< 0.0 >
8005 echo round(4.5)
8006< 5.0 >
8007 echo round(-4.5)
8008< -5.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02008009
8010 Can also be used as a |method|: >
8011 Compute()->round()
8012<
Bram Moolenaar446cb832008-06-24 21:56:24 +00008013 {only available when compiled with the |+float| feature}
Bram Moolenaar34feacb2012-12-05 19:01:43 +01008014
Bram Moolenaare99be0e2019-03-26 22:51:09 +01008015rubyeval({expr}) *rubyeval()*
8016 Evaluate Ruby expression {expr} and return its result
8017 converted to Vim data structures.
8018 Numbers, floats and strings are returned as they are (strings
8019 are copied though).
8020 Arrays are represented as Vim |List| type.
8021 Hashes are represented as Vim |Dictionary| type.
8022 Other objects are represented as strings resulted from their
8023 "Object#to_s" method.
Bram Moolenaara0d1fef2019-09-04 22:29:14 +02008024
8025 Can also be used as a |method|: >
8026 GetRubyExpr()->rubyeval()
8027
8028< {only available when compiled with the |+ruby| feature}
Bram Moolenaare99be0e2019-03-26 22:51:09 +01008029
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008030screenattr({row}, {col}) *screenattr()*
Bram Moolenaar36f44c22016-08-28 18:17:20 +02008031 Like |screenchar()|, but return the attribute. This is a rather
Bram Moolenaar9a773482013-06-11 18:40:13 +02008032 arbitrary number that can only be used to compare to the
8033 attribute at other positions.
8034
Bram Moolenaar196b4662019-09-06 21:34:30 +02008035 Can also be used as a |method|: >
8036 GetRow()->screenattr(col)
8037
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008038screenchar({row}, {col}) *screenchar()*
Bram Moolenaar9a773482013-06-11 18:40:13 +02008039 The result is a Number, which is the character at position
8040 [row, col] on the screen. This works for every possible
8041 screen position, also status lines, window separators and the
8042 command line. The top left position is row one, column one
8043 The character excludes composing characters. For double-byte
8044 encodings it may only be the first byte.
8045 This is mainly to be used for testing.
8046 Returns -1 when row or col is out of range.
8047
Bram Moolenaar196b4662019-09-06 21:34:30 +02008048 Can also be used as a |method|: >
8049 GetRow()->screenchar(col)
8050
Bram Moolenaar2912abb2019-03-29 14:16:42 +01008051screenchars({row}, {col}) *screenchars()*
8052 The result is a List of Numbers. The first number is the same
8053 as what |screenchar()| returns. Further numbers are
8054 composing characters on top of the base character.
8055 This is mainly to be used for testing.
8056 Returns an empty List when row or col is out of range.
8057
Bram Moolenaar196b4662019-09-06 21:34:30 +02008058 Can also be used as a |method|: >
8059 GetRow()->screenchars(col)
8060
Bram Moolenaar34feacb2012-12-05 19:01:43 +01008061screencol() *screencol()*
8062 The result is a Number, which is the current screen column of
8063 the cursor. The leftmost column has number 1.
8064 This function is mainly used for testing.
8065
8066 Note: Always returns the current screen column, thus if used
8067 in a command (e.g. ":echo screencol()") it will return the
8068 column inside the command line, which is 1 when the command is
8069 executed. To get the cursor position in the file use one of
8070 the following mappings: >
8071 nnoremap <expr> GG ":echom ".screencol()."\n"
8072 nnoremap <silent> GG :echom screencol()<CR>
8073<
Bram Moolenaarb3d17a22019-07-07 18:28:14 +02008074screenpos({winid}, {lnum}, {col}) *screenpos()*
8075 The result is a Dict with the screen position of the text
8076 character in window {winid} at buffer line {lnum} and column
8077 {col}. {col} is a one-based byte index.
8078 The Dict has these members:
8079 row screen row
8080 col first screen column
8081 endcol last screen column
8082 curscol cursor screen column
8083 If the specified position is not visible, all values are zero.
8084 The "endcol" value differs from "col" when the character
8085 occupies more than one screen cell. E.g. for a Tab "col" can
8086 be 1 and "endcol" can be 8.
8087 The "curscol" value is where the cursor would be placed. For
8088 a Tab it would be the same as "endcol", while for a double
8089 width character it would be the same as "col".
8090
Bram Moolenaar196b4662019-09-06 21:34:30 +02008091 Can also be used as a |method|: >
8092 GetWinid()->screenpos(lnum, col)
8093
Bram Moolenaar34feacb2012-12-05 19:01:43 +01008094screenrow() *screenrow()*
8095 The result is a Number, which is the current screen row of the
8096 cursor. The top line has number one.
8097 This function is mainly used for testing.
Bram Moolenaar437bafe2016-08-01 15:40:54 +02008098 Alternatively you can use |winline()|.
Bram Moolenaar34feacb2012-12-05 19:01:43 +01008099
8100 Note: Same restrictions as with |screencol()|.
8101
Bram Moolenaar2912abb2019-03-29 14:16:42 +01008102screenstring({row}, {col}) *screenstring()*
8103 The result is a String that contains the base character and
8104 any composing characters at position [row, col] on the screen.
8105 This is like |screenchars()| but returning a String with the
8106 characters.
8107 This is mainly to be used for testing.
8108 Returns an empty String when row or col is out of range.
8109
Bram Moolenaar196b4662019-09-06 21:34:30 +02008110 Can also be used as a |method|: >
8111 GetRow()->screenstring(col)
8112
Bram Moolenaar76929292008-01-06 19:07:36 +00008113search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00008114 Search for regexp pattern {pattern}. The search starts at the
Bram Moolenaar383f9bc2005-01-19 22:18:32 +00008115 cursor position (you can use |cursor()| to set it).
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008116
Bram Moolenaar2df58b42012-11-28 18:21:11 +01008117 When a match has been found its line number is returned.
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +01008118 If there is no match a 0 is returned and the cursor doesn't
8119 move. No error message is given.
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +01008120
Bram Moolenaar071d4272004-06-13 20:20:40 +00008121 {flags} is a String, which can contain these character flags:
Bram Moolenaarad4d8a12015-12-28 19:20:36 +01008122 'b' search Backward instead of forward
8123 'c' accept a match at the Cursor position
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008124 'e' move to the End of the match
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00008125 'n' do Not move the cursor
Bram Moolenaarad4d8a12015-12-28 19:20:36 +01008126 'p' return number of matching sub-Pattern (see below)
8127 's' Set the ' mark at the previous location of the cursor
8128 'w' Wrap around the end of the file
8129 'W' don't Wrap around the end of the file
8130 'z' start searching at the cursor column instead of zero
Bram Moolenaar071d4272004-06-13 20:20:40 +00008131 If neither 'w' or 'W' is given, the 'wrapscan' option applies.
8132
Bram Moolenaar02743632005-07-25 20:42:36 +00008133 If the 's' flag is supplied, the ' mark is set, only if the
8134 cursor is moved. The 's' flag cannot be combined with the 'n'
8135 flag.
8136
Bram Moolenaaref2f6562007-05-06 13:32:59 +00008137 'ignorecase', 'smartcase' and 'magic' are used.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008138
Bram Moolenaar85084ef2016-01-17 22:26:33 +01008139 When the 'z' flag is not given, searching always starts in
Bram Moolenaarad4d8a12015-12-28 19:20:36 +01008140 column zero and then matches before the cursor are skipped.
8141 When the 'c' flag is present in 'cpo' the next search starts
8142 after the match. Without the 'c' flag the next search starts
8143 one column further.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00008144
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008145 When the {stopline} argument is given then the search stops
8146 after searching this line. This is useful to restrict the
8147 search to a range of lines. Examples: >
8148 let match = search('(', 'b', line("w0"))
8149 let end = search('END', '', line("w$"))
8150< When {stopline} is used and it is not zero this also implies
8151 that the search does not wrap around the end of the file.
Bram Moolenaar76929292008-01-06 19:07:36 +00008152 A zero value is equal to not giving the argument.
8153
8154 When the {timeout} argument is given the search stops when
Bram Moolenaar58b85342016-08-14 19:54:54 +02008155 more than this many milliseconds have passed. Thus when
Bram Moolenaar76929292008-01-06 19:07:36 +00008156 {timeout} is 500 the search stops after half a second.
8157 The value must not be negative. A zero value is like not
8158 giving the argument.
Bram Moolenaardb84e452010-08-15 13:50:43 +02008159 {only available when compiled with the |+reltime| feature}
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008160
Bram Moolenaar362e1a32006-03-06 23:29:24 +00008161 *search()-sub-match*
8162 With the 'p' flag the returned value is one more than the
8163 first sub-match in \(\). One if none of them matched but the
8164 whole pattern did match.
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008165 To get the column number too use |searchpos()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008166
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008167 The cursor will be positioned at the match, unless the 'n'
8168 flag is used.
8169
Bram Moolenaar071d4272004-06-13 20:20:40 +00008170 Example (goes over all files in the argument list): >
8171 :let n = 1
8172 :while n <= argc() " loop over all files in arglist
8173 : exe "argument " . n
8174 : " start at the last char in the file and wrap for the
8175 : " first search to find match at start of file
8176 : normal G$
8177 : let flags = "w"
8178 : while search("foo", flags) > 0
Bram Moolenaar446cb832008-06-24 21:56:24 +00008179 : s/foo/bar/g
Bram Moolenaar071d4272004-06-13 20:20:40 +00008180 : let flags = "W"
8181 : endwhile
8182 : update " write the file if modified
8183 : let n = n + 1
8184 :endwhile
8185<
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008186 Example for using some flags: >
8187 :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe')
8188< This will search for the keywords "if", "else", and "endif"
8189 under or after the cursor. Because of the 'p' flag, it
8190 returns 1, 2, or 3 depending on which keyword is found, or 0
8191 if the search fails. With the cursor on the first word of the
8192 line:
8193 if (foo == 0) | let foo = foo + 1 | endif ~
8194 the function returns 1. Without the 'c' flag, the function
8195 finds the "endif" and returns 3. The same thing happens
8196 without the 'e' flag if the cursor is on the "f" of "if".
8197 The 'n' flag tells the function not to move the cursor.
8198
Bram Moolenaar196b4662019-09-06 21:34:30 +02008199 Can also be used as a |method|: >
8200 GetPattern()->search()
Bram Moolenaar92d640f2005-09-05 22:11:52 +00008201
Bram Moolenaarf75a9632005-09-13 21:20:47 +00008202searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()*
8203 Search for the declaration of {name}.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00008204
Bram Moolenaarf75a9632005-09-13 21:20:47 +00008205 With a non-zero {global} argument it works like |gD|, find
8206 first match in the file. Otherwise it works like |gd|, find
8207 first match in the function.
8208
8209 With a non-zero {thisblock} argument matches in a {} block
8210 that ends before the cursor position are ignored. Avoids
8211 finding variable declarations only valid in another scope.
8212
Bram Moolenaar92d640f2005-09-05 22:11:52 +00008213 Moves the cursor to the found match.
8214 Returns zero for success, non-zero for failure.
8215 Example: >
8216 if searchdecl('myvar') == 0
8217 echo getline('.')
8218 endif
8219<
Bram Moolenaar196b4662019-09-06 21:34:30 +02008220 Can also be used as a |method|: >
8221 GetName()->searchdecl()
8222<
Bram Moolenaar071d4272004-06-13 20:20:40 +00008223 *searchpair()*
Bram Moolenaar76929292008-01-06 19:07:36 +00008224searchpair({start}, {middle}, {end} [, {flags} [, {skip}
8225 [, {stopline} [, {timeout}]]]])
Bram Moolenaar071d4272004-06-13 20:20:40 +00008226 Search for the match of a nested start-end pair. This can be
8227 used to find the "endif" that matches an "if", while other
8228 if/endif pairs in between are ignored.
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00008229 The search starts at the cursor. The default is to search
8230 forward, include 'b' in {flags} to search backward.
8231 If a match is found, the cursor is positioned at it and the
8232 line number is returned. If no match is found 0 or -1 is
8233 returned and the cursor doesn't move. No error message is
8234 given.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008235
8236 {start}, {middle} and {end} are patterns, see |pattern|. They
8237 must not contain \( \) pairs. Use of \%( \) is allowed. When
8238 {middle} is not empty, it is found when searching from either
8239 direction, but only when not in a nested start-end pair. A
8240 typical use is: >
8241 searchpair('\<if\>', '\<else\>', '\<endif\>')
8242< By leaving {middle} empty the "else" is skipped.
8243
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008244 {flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with
8245 |search()|. Additionally:
Bram Moolenaar071d4272004-06-13 20:20:40 +00008246 'r' Repeat until no more matches found; will find the
Bram Moolenaar446cb832008-06-24 21:56:24 +00008247 outer pair. Implies the 'W' flag.
8248 'm' Return number of matches instead of line number with
Bram Moolenaar87b5ca52006-03-04 21:55:31 +00008249 the match; will be > 1 when 'r' is used.
Bram Moolenaar446cb832008-06-24 21:56:24 +00008250 Note: it's nearly always a good idea to use the 'W' flag, to
8251 avoid wrapping around the end of the file.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008252
8253 When a match for {start}, {middle} or {end} is found, the
8254 {skip} expression is evaluated with the cursor positioned on
8255 the start of the match. It should return non-zero if this
8256 match is to be skipped. E.g., because it is inside a comment
8257 or a string.
8258 When {skip} is omitted or empty, every match is accepted.
8259 When evaluating {skip} causes an error the search is aborted
8260 and -1 returned.
Bram Moolenaar48570482017-10-30 21:48:41 +01008261 {skip} can be a string, a lambda, a funcref or a partial.
Bram Moolenaar675e8d62018-06-24 20:42:01 +02008262 Anything else makes the function fail.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008263
Bram Moolenaar76929292008-01-06 19:07:36 +00008264 For {stopline} and {timeout} see |search()|.
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008265
Bram Moolenaar071d4272004-06-13 20:20:40 +00008266 The value of 'ignorecase' is used. 'magic' is ignored, the
8267 patterns are used like it's on.
8268
8269 The search starts exactly at the cursor. A match with
8270 {start}, {middle} or {end} at the next character, in the
8271 direction of searching, is the first one found. Example: >
8272 if 1
8273 if 2
8274 endif 2
8275 endif 1
8276< When starting at the "if 2", with the cursor on the "i", and
8277 searching forwards, the "endif 2" is found. When starting on
8278 the character just before the "if 2", the "endif 1" will be
Bram Moolenaar58b85342016-08-14 19:54:54 +02008279 found. That's because the "if 2" will be found first, and
Bram Moolenaar071d4272004-06-13 20:20:40 +00008280 then this is considered to be a nested if/endif from "if 2" to
8281 "endif 2".
8282 When searching backwards and {end} is more than one character,
8283 it may be useful to put "\zs" at the end of the pattern, so
8284 that when the cursor is inside a match with the end it finds
8285 the matching start.
8286
8287 Example, to find the "endif" command in a Vim script: >
8288
8289 :echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W',
8290 \ 'getline(".") =~ "^\\s*\""')
8291
8292< The cursor must be at or after the "if" for which a match is
8293 to be found. Note that single-quote strings are used to avoid
8294 having to double the backslashes. The skip expression only
8295 catches comments at the start of a line, not after a command.
8296 Also, a word "en" or "if" halfway a line is considered a
8297 match.
8298 Another example, to search for the matching "{" of a "}": >
8299
8300 :echo searchpair('{', '', '}', 'bW')
8301
8302< This works when the cursor is at or before the "}" for which a
8303 match is to be found. To reject matches that syntax
8304 highlighting recognized as strings: >
8305
8306 :echo searchpair('{', '', '}', 'bW',
8307 \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
8308<
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00008309 *searchpairpos()*
Bram Moolenaar76929292008-01-06 19:07:36 +00008310searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
8311 [, {stopline} [, {timeout}]]]])
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008312 Same as |searchpair()|, but returns a |List| with the line and
Bram Moolenaar32466aa2006-02-24 23:53:04 +00008313 column position of the match. The first element of the |List|
8314 is the line number and the second element is the byte index of
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00008315 the column position of the match. If no match is found,
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02008316 returns [0, 0]. >
8317
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00008318 :let [lnum,col] = searchpairpos('{', '', '}', 'n')
8319<
8320 See |match-parens| for a bigger and more useful example.
8321
Bram Moolenaar76929292008-01-06 19:07:36 +00008322searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *searchpos()*
Bram Moolenaara23ccb82006-02-27 00:08:02 +00008323 Same as |search()|, but returns a |List| with the line and
Bram Moolenaar32466aa2006-02-24 23:53:04 +00008324 column position of the match. The first element of the |List|
8325 is the line number and the second element is the byte index of
8326 the column position of the match. If no match is found,
8327 returns [0, 0].
Bram Moolenaar362e1a32006-03-06 23:29:24 +00008328 Example: >
8329 :let [lnum, col] = searchpos('mypattern', 'n')
8330
8331< When the 'p' flag is given then there is an extra item with
8332 the sub-pattern match number |search()-sub-match|. Example: >
8333 :let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np')
8334< In this example "submatch" is 2 when a lowercase letter is
8335 found |/\l|, 3 when an uppercase letter is found |/\u|.
8336
Bram Moolenaar196b4662019-09-06 21:34:30 +02008337 Can also be used as a |method|: >
8338 GetPattern()->searchpos()
8339
Bram Moolenaar81edd172016-04-14 13:51:37 +02008340server2client({clientid}, {string}) *server2client()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00008341 Send a reply string to {clientid}. The most recent {clientid}
8342 that sent a string can be retrieved with expand("<client>").
8343 {only available when compiled with the |+clientserver| feature}
8344 Note:
8345 This id has to be stored before the next command can be
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00008346 received. I.e. before returning from the received command and
Bram Moolenaar071d4272004-06-13 20:20:40 +00008347 before calling any commands that waits for input.
8348 See also |clientserver|.
8349 Example: >
8350 :echo server2client(expand("<client>"), "HELLO")
Bram Moolenaar196b4662019-09-06 21:34:30 +02008351
8352< Can also be used as a |method|: >
8353 GetClientId()->server2client(string)
Bram Moolenaar071d4272004-06-13 20:20:40 +00008354<
8355serverlist() *serverlist()*
8356 Return a list of available server names, one per line.
8357 When there are no servers or the information is not available
8358 an empty string is returned. See also |clientserver|.
8359 {only available when compiled with the |+clientserver| feature}
8360 Example: >
8361 :echo serverlist()
8362<
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008363setbufline({expr}, {lnum}, {text}) *setbufline()*
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008364 Set line {lnum} to {text} in buffer {expr}. This works like
8365 |setline()| for the specified buffer.
8366
8367 This function works only for loaded buffers. First call
8368 |bufload()| if needed.
8369
8370 To insert lines use |appendbufline()|.
8371 Any text properties in {lnum} are cleared.
8372
8373 {text} can be a string to set one line, or a list of strings
8374 to set multiple lines. If the list extends below the last
8375 line then those lines are added.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008376
8377 For the use of {expr}, see |bufname()| above.
8378
8379 {lnum} is used like with |setline()|.
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008380 When {lnum} is just below the last line the {text} will be
8381 added below the last line.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008382
Bram Moolenaar6bf2c622019-07-04 17:12:09 +02008383 When {expr} is not a valid buffer, the buffer is not loaded or
8384 {lnum} is not valid then 1 is returned. On success 0 is
8385 returned.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008386
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008387 Can also be used as a |method|, the base is passed as the
8388 third argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02008389 GetText()->setbufline(buf, lnum)
8390
Bram Moolenaar071d4272004-06-13 20:20:40 +00008391setbufvar({expr}, {varname}, {val}) *setbufvar()*
8392 Set option or local variable {varname} in buffer {expr} to
8393 {val}.
8394 This also works for a global or local window option, but it
8395 doesn't work for a global or local window variable.
8396 For a local window option the global value is unchanged.
8397 For the use of {expr}, see |bufname()| above.
8398 Note that the variable name without "b:" must be used.
8399 Examples: >
8400 :call setbufvar(1, "&mod", 1)
8401 :call setbufvar("todo", "myvar", "foobar")
8402< This function is not available in the |sandbox|.
8403
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008404 Can also be used as a |method|, the base is passed as the
8405 third argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02008406 GetValue()->setbufvar(buf, varname)
8407
Bram Moolenaar12969c02015-09-08 23:36:10 +02008408setcharsearch({dict}) *setcharsearch()*
Bram Moolenaardbd24b52015-08-11 14:26:19 +02008409 Set the current character search information to {dict},
8410 which contains one or more of the following entries:
8411
8412 char character which will be used for a subsequent
8413 |,| or |;| command; an empty string clears the
8414 character search
8415 forward direction of character search; 1 for forward,
8416 0 for backward
8417 until type of character search; 1 for a |t| or |T|
8418 character search, 0 for an |f| or |F|
8419 character search
8420
8421 This can be useful to save/restore a user's character search
8422 from a script: >
8423 :let prevsearch = getcharsearch()
8424 :" Perform a command which clobbers user's search
8425 :call setcharsearch(prevsearch)
8426< Also see |getcharsearch()|.
8427
Bram Moolenaar196b4662019-09-06 21:34:30 +02008428 Can also be used as a |method|: >
8429 SavedSearch()->setcharsearch()
8430
Bram Moolenaar071d4272004-06-13 20:20:40 +00008431setcmdpos({pos}) *setcmdpos()*
8432 Set the cursor position in the command line to byte position
Bram Moolenaar58b85342016-08-14 19:54:54 +02008433 {pos}. The first position is 1.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008434 Use |getcmdpos()| to obtain the current position.
8435 Only works while editing the command line, thus you must use
Bram Moolenaard8b02732005-01-14 21:48:43 +00008436 |c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='. For
8437 |c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is
8438 set after the command line is set to the expression. For
8439 |c_CTRL-R_=| it is set after evaluating the expression but
8440 before inserting the resulting text.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008441 When the number is too big the cursor is put at the end of the
8442 line. A number smaller than one has undefined results.
8443 Returns 0 when successful, 1 when not editing the command
8444 line.
8445
Bram Moolenaar196b4662019-09-06 21:34:30 +02008446 Can also be used as a |method|: >
8447 GetPos()->setcmdpos()
8448
Bram Moolenaar691ddee2019-05-09 14:52:41 +02008449setenv({name}, {val}) *setenv()*
8450 Set environment variable {name} to {val}.
8451 When {val} is |v:null| the environment variable is deleted.
8452 See also |expr-env|.
8453
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008454 Can also be used as a |method|, the base is passed as the
8455 second argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02008456 GetPath()->setenv('PATH')
8457
Bram Moolenaar80492532016-03-08 17:08:53 +01008458setfperm({fname}, {mode}) *setfperm()* *chmod*
8459 Set the file permissions for {fname} to {mode}.
8460 {mode} must be a string with 9 characters. It is of the form
8461 "rwxrwxrwx", where each group of "rwx" flags represent, in
8462 turn, the permissions of the owner of the file, the group the
8463 file belongs to, and other users. A '-' character means the
8464 permission is off, any other character means on. Multi-byte
8465 characters are not supported.
8466
8467 For example "rw-r-----" means read-write for the user,
8468 readable by the group, not accessible by others. "xx-x-----"
8469 would do the same thing.
8470
8471 Returns non-zero for success, zero for failure.
8472
Bram Moolenaar4c313b12019-08-24 22:58:31 +02008473 Can also be used as a |method|: >
8474 GetFilename()->setfperm(mode)
8475<
Bram Moolenaar80492532016-03-08 17:08:53 +01008476 To read permissions see |getfperm()|.
8477
8478
Bram Moolenaar446cb832008-06-24 21:56:24 +00008479setline({lnum}, {text}) *setline()*
Bram Moolenaarb8ff1fb2012-02-04 21:59:01 +01008480 Set line {lnum} of the current buffer to {text}. To insert
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008481 lines use |append()|. To set lines in another buffer use
Bram Moolenaarb328cca2019-01-06 16:24:01 +01008482 |setbufline()|. Any text properties in {lnum} are cleared.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008483
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00008484 {lnum} is used like with |getline()|.
Bram Moolenaar446cb832008-06-24 21:56:24 +00008485 When {lnum} is just below the last line the {text} will be
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008486 added below the last line.
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008487
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00008488 If this succeeds, 0 is returned. If this fails (most likely
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008489 because {lnum} is invalid) 1 is returned.
8490
8491 Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00008492 :call setline(5, strftime("%c"))
Bram Moolenaarb31cf2b2017-09-02 19:45:19 +02008493
Bram Moolenaar446cb832008-06-24 21:56:24 +00008494< When {text} is a |List| then line {lnum} and following lines
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00008495 will be set to the items in the list. Example: >
8496 :call setline(5, ['aaa', 'bbb', 'ccc'])
8497< This is equivalent to: >
Bram Moolenaar53bfca22012-04-13 23:04:47 +02008498 :for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']]
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00008499 : call setline(n, l)
8500 :endfor
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02008501
Bram Moolenaar071d4272004-06-13 20:20:40 +00008502< Note: The '[ and '] marks are not set.
8503
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008504 Can also be used as a |method|, the base is passed as the
8505 second argument: >
Bram Moolenaar196b4662019-09-06 21:34:30 +02008506 GetText()->setline(lnum)
8507
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008508setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()*
Bram Moolenaar17c7c012006-01-26 22:25:15 +00008509 Create or replace or add to the location list for window {nr}.
Bram Moolenaar7571d552016-08-18 22:54:46 +02008510 {nr} can be the window number or the |window-ID|.
Bram Moolenaar888ccac2016-06-04 18:49:36 +02008511 When {nr} is zero the current window is used.
8512
8513 For a location list window, the displayed location list is
8514 modified. For an invalid window number {nr}, -1 is returned.
Bram Moolenaar6ee10162007-07-26 20:58:42 +00008515 Otherwise, same as |setqflist()|.
8516 Also see |location-list|.
8517
Bram Moolenaard823fa92016-08-12 16:29:27 +02008518 If the optional {what} dictionary argument is supplied, then
8519 only the items listed in {what} are set. Refer to |setqflist()|
8520 for the list of supported keys in {what}.
8521
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008522 Can also be used as a |method|, the base is passed as the
8523 second argument: >
8524 GetLoclist()->setloclist(winnr)
8525
Bram Moolenaaraff74912019-03-30 18:11:49 +01008526setmatches({list} [, {win}]) *setmatches()*
Bram Moolenaarfd133322019-03-29 12:20:27 +01008527 Restores a list of matches saved by |getmatches() for the
8528 current window|. Returns 0 if successful, otherwise -1. All
8529 current matches are cleared before the list is restored. See
8530 example for |getmatches()|.
Bram Moolenaaraff74912019-03-30 18:11:49 +01008531 If {win} is specified, use the window with this number or
8532 window ID instead of the current window.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008533
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008534 Can also be used as a |method|: >
8535 GetMatches()->setmatches()
8536<
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008537 *setpos()*
8538setpos({expr}, {list})
8539 Set the position for {expr}. Possible values:
8540 . the cursor
8541 'x mark x
8542
Bram Moolenaar493c1782014-05-28 14:34:46 +02008543 {list} must be a |List| with four or five numbers:
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008544 [bufnum, lnum, col, off]
Bram Moolenaar493c1782014-05-28 14:34:46 +02008545 [bufnum, lnum, col, off, curswant]
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008546
Bram Moolenaar58b85342016-08-14 19:54:54 +02008547 "bufnum" is the buffer number. Zero can be used for the
Bram Moolenaarf13e00b2017-01-28 18:23:54 +01008548 current buffer. When setting an uppercase mark "bufnum" is
8549 used for the mark position. For other marks it specifies the
8550 buffer to set the mark in. You can use the |bufnr()| function
8551 to turn a file name into a buffer number.
8552 For setting the cursor and the ' mark "bufnum" is ignored,
8553 since these are associated with a window, not a buffer.
Bram Moolenaardb552d602006-03-23 22:59:57 +00008554 Does not change the jumplist.
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008555
8556 "lnum" and "col" are the position in the buffer. The first
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008557 column is 1. Use a zero "lnum" to delete a mark. If "col" is
8558 smaller than 1 then 1 is used.
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008559
8560 The "off" number is only used when 'virtualedit' is set. Then
8561 it is the offset in screen columns from the start of the
Bram Moolenaard46bbc72007-05-12 14:38:41 +00008562 character. E.g., a position within a <Tab> or after the last
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008563 character.
8564
Bram Moolenaar493c1782014-05-28 14:34:46 +02008565 The "curswant" number is only used when setting the cursor
8566 position. It sets the preferred column for when moving the
8567 cursor vertically. When the "curswant" number is missing the
8568 preferred column is not set. When it is present and setting a
8569 mark position it is not used.
8570
Bram Moolenaardfb18412013-12-11 18:53:29 +01008571 Note that for '< and '> changing the line number may result in
8572 the marks to be effectively be swapped, so that '< is always
8573 before '>.
8574
Bram Moolenaar08250432008-02-13 11:42:46 +00008575 Returns 0 when the position could be set, -1 otherwise.
8576 An error message is given if {expr} is invalid.
8577
Bram Moolenaar6f6c0f82014-05-28 20:31:42 +02008578 Also see |getpos()| and |getcurpos()|.
Bram Moolenaar65c923a2006-03-03 22:56:30 +00008579
Bram Moolenaaref2f6562007-05-06 13:32:59 +00008580 This does not restore the preferred column for moving
Bram Moolenaar493c1782014-05-28 14:34:46 +02008581 vertically; if you set the cursor position with this, |j| and
8582 |k| motions will jump to previous columns! Use |cursor()| to
8583 also set the preferred column. Also see the "curswant" key in
8584 |winrestview()|.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00008585
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008586 Can also be used as a |method|: >
8587 GetPosition()->setpos('.')
8588
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008589setqflist({list} [, {action} [, {what}]]) *setqflist()*
Bram Moolenaarae338332017-08-11 20:25:26 +02008590 Create or replace or add to the quickfix list.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008591
Bram Moolenaarae338332017-08-11 20:25:26 +02008592 When {what} is not present, use the items in {list}. Each
8593 item must be a dictionary. Non-dictionary items in {list} are
8594 ignored. Each dictionary item can contain the following
8595 entries:
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008596
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00008597 bufnr buffer number; must be the number of a valid
Bram Moolenaar446cb832008-06-24 21:56:24 +00008598 buffer
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00008599 filename name of a file; only used when "bufnr" is not
Bram Moolenaar446cb832008-06-24 21:56:24 +00008600 present or it is invalid.
Bram Moolenaard76ce852018-05-01 15:02:04 +02008601 module name of a module; if given it will be used in
8602 quickfix error window instead of the filename.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008603 lnum line number in the file
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008604 pattern search pattern used to locate the error
Bram Moolenaar582fd852005-03-28 20:58:01 +00008605 col column number
8606 vcol when non-zero: "col" is visual column
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00008607 when zero: "col" is byte index
Bram Moolenaar582fd852005-03-28 20:58:01 +00008608 nr error number
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008609 text description of the error
Bram Moolenaar582fd852005-03-28 20:58:01 +00008610 type single-character error type, 'E', 'W', etc.
Bram Moolenaarf1d21c82017-04-22 21:20:46 +02008611 valid recognized error message
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008612
Bram Moolenaar582fd852005-03-28 20:58:01 +00008613 The "col", "vcol", "nr", "type" and "text" entries are
8614 optional. Either "lnum" or "pattern" entry can be used to
8615 locate a matching error line.
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00008616 If the "filename" and "bufnr" entries are not present or
8617 neither the "lnum" or "pattern" entries are present, then the
8618 item will not be handled as an error line.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008619 If both "pattern" and "lnum" are present then "pattern" will
8620 be used.
Bram Moolenaarf1d21c82017-04-22 21:20:46 +02008621 If the "valid" entry is not supplied, then the valid flag is
8622 set when "bufnr" is a valid buffer or "filename" exists.
Bram Moolenaar00a927d2010-05-14 23:24:24 +02008623 If you supply an empty {list}, the quickfix list will be
8624 cleared.
Bram Moolenaar48b66fb2007-02-04 01:58:18 +00008625 Note that the list is not exactly the same as what
8626 |getqflist()| returns.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008627
Bram Moolenaarb6fa30c2017-03-29 14:19:25 +02008628 {action} values: *E927*
8629 'a' The items from {list} are added to the existing
8630 quickfix list. If there is no existing list, then a
8631 new list is created.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008632
Bram Moolenaarb6fa30c2017-03-29 14:19:25 +02008633 'r' The items from the current quickfix list are replaced
8634 with the items from {list}. This can also be used to
8635 clear the list: >
8636 :call setqflist([], 'r')
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008637<
Bram Moolenaarb6fa30c2017-03-29 14:19:25 +02008638 'f' All the quickfix lists in the quickfix stack are
8639 freed.
8640
Bram Moolenaar511972d2016-06-04 18:09:59 +02008641 If {action} is not present or is set to ' ', then a new list
Bram Moolenaar55b69262017-08-13 13:42:01 +02008642 is created. The new quickfix list is added after the current
8643 quickfix list in the stack and all the following lists are
8644 freed. To add a new quickfix list at the end of the stack,
Bram Moolenaar36538222017-09-02 19:51:44 +02008645 set "nr" in {what} to "$".
Bram Moolenaar35c54e52005-05-20 21:25:31 +00008646
Bram Moolenaard823fa92016-08-12 16:29:27 +02008647 If the optional {what} dictionary argument is supplied, then
8648 only the items listed in {what} are set. The first {list}
8649 argument is ignored. The following items can be specified in
8650 {what}:
Bram Moolenaar15142e22018-04-30 22:19:58 +02008651 context quickfix list context. See |quickfix-context|
Bram Moolenaar36538222017-09-02 19:51:44 +02008652 efm errorformat to use when parsing text from
8653 "lines". If this is not present, then the
8654 'errorformat' option value is used.
Bram Moolenaar5b69c222019-01-11 14:50:06 +01008655 See |quickfix-parse|
Bram Moolenaara539f4f2017-08-30 20:33:55 +02008656 id quickfix list identifier |quickfix-ID|
Bram Moolenaar5b69c222019-01-11 14:50:06 +01008657 idx index of the current entry in the quickfix
8658 list specified by 'id' or 'nr'. If set to '$',
8659 then the last entry in the list is set as the
8660 current entry. See |quickfix-index|
Bram Moolenaar6a8958d2017-06-22 21:33:20 +02008661 items list of quickfix entries. Same as the {list}
8662 argument.
Bram Moolenaar2c809b72017-09-01 18:34:02 +02008663 lines use 'errorformat' to parse a list of lines and
8664 add the resulting entries to the quickfix list
8665 {nr} or {id}. Only a |List| value is supported.
Bram Moolenaar5b69c222019-01-11 14:50:06 +01008666 See |quickfix-parse|
Bram Moolenaar875feea2017-06-11 16:07:51 +02008667 nr list number in the quickfix stack; zero
Bram Moolenaar36538222017-09-02 19:51:44 +02008668 means the current quickfix list and "$" means
Bram Moolenaar5b69c222019-01-11 14:50:06 +01008669 the last quickfix list.
8670 title quickfix list title text. See |quickfix-title|
Bram Moolenaard823fa92016-08-12 16:29:27 +02008671 Unsupported keys in {what} are ignored.
8672 If the "nr" item is not present, then the current quickfix list
Bram Moolenaar86f100dc2017-06-28 21:26:27 +02008673 is modified. When creating a new quickfix list, "nr" can be
8674 set to a value one greater than the quickfix stack size.
Bram Moolenaara539f4f2017-08-30 20:33:55 +02008675 When modifying a quickfix list, to guarantee that the correct
Bram Moolenaar36538222017-09-02 19:51:44 +02008676 list is modified, "id" should be used instead of "nr" to
Bram Moolenaara539f4f2017-08-30 20:33:55 +02008677 specify the list.
Bram Moolenaard823fa92016-08-12 16:29:27 +02008678
Bram Moolenaar15142e22018-04-30 22:19:58 +02008679 Examples (See also |setqflist-examples|): >
Bram Moolenaar2c809b72017-09-01 18:34:02 +02008680 :call setqflist([], 'r', {'title': 'My search'})
8681 :call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
Bram Moolenaar15142e22018-04-30 22:19:58 +02008682 :call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]})
Bram Moolenaard823fa92016-08-12 16:29:27 +02008683<
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008684 Returns zero for success, -1 for failure.
8685
8686 This function can be used to create a quickfix list
8687 independent of the 'errorformat' setting. Use a command like
Bram Moolenaar94237492017-04-23 18:40:21 +02008688 `:cc 1` to jump to the first position.
Bram Moolenaar68b76a62005-03-25 21:53:48 +00008689
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008690 Can also be used as a |method|, the base is passed as the
8691 second argument: >
8692 GetErrorlist()->setqflist()
8693<
Bram Moolenaar071d4272004-06-13 20:20:40 +00008694 *setreg()*
Bram Moolenaare0fa3742016-02-20 15:47:01 +01008695setreg({regname}, {value} [, {options}])
Bram Moolenaar071d4272004-06-13 20:20:40 +00008696 Set the register {regname} to {value}.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008697 {value} may be any value returned by |getreg()|, including
Bram Moolenaar5a50c222014-04-02 22:17:10 +02008698 a |List|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008699 If {options} contains "a" or {regname} is upper case,
8700 then the value is appended.
Bram Moolenaarc6485bc2010-07-28 17:02:55 +02008701 {options} can also contain a register type specification:
Bram Moolenaar071d4272004-06-13 20:20:40 +00008702 "c" or "v" |characterwise| mode
8703 "l" or "V" |linewise| mode
8704 "b" or "<CTRL-V>" |blockwise-visual| mode
8705 If a number immediately follows "b" or "<CTRL-V>" then this is
8706 used as the width of the selection - if it is not specified
8707 then the width of the block is set to the number of characters
Bram Moolenaard46bbc72007-05-12 14:38:41 +00008708 in the longest line (counting a <Tab> as 1 character).
Bram Moolenaar071d4272004-06-13 20:20:40 +00008709
8710 If {options} contains no register settings, then the default
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008711 is to use character mode unless {value} ends in a <NL> for
8712 string {value} and linewise mode for list {value}. Blockwise
Bram Moolenaar5a50c222014-04-02 22:17:10 +02008713 mode is never selected automatically.
8714 Returns zero for success, non-zero for failure.
8715
8716 *E883*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008717 Note: you may not use |List| containing more than one item to
8718 set search and expression registers. Lists containing no
Bram Moolenaar5a50c222014-04-02 22:17:10 +02008719 items act like empty strings.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008720
8721 Examples: >
8722 :call setreg(v:register, @*)
8723 :call setreg('*', @%, 'ac')
8724 :call setreg('a', "1\n2\n3", 'b5')
8725
8726< This example shows using the functions to save and restore a
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02008727 register: >
Bram Moolenaar5a50c222014-04-02 22:17:10 +02008728 :let var_a = getreg('a', 1, 1)
Bram Moolenaar071d4272004-06-13 20:20:40 +00008729 :let var_amode = getregtype('a')
8730 ....
8731 :call setreg('a', var_a, var_amode)
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008732< Note: you may not reliably restore register value
8733 without using the third argument to |getreg()| as without it
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02008734 newlines are represented as newlines AND Nul bytes are
8735 represented as newlines as well, see |NL-used-for-Nul|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008736
Bram Moolenaarb4d5fba2017-09-11 19:31:28 +02008737 You can also change the type of a register by appending
Bram Moolenaar071d4272004-06-13 20:20:40 +00008738 nothing: >
8739 :call setreg('a', '', 'al')
8740
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008741< Can also be used as a |method|, the base is passed as the
8742 second argument: >
8743 GetText()->setreg('a')
8744
Bram Moolenaar06b5d512010-05-22 15:37:44 +02008745settabvar({tabnr}, {varname}, {val}) *settabvar()*
8746 Set tab-local variable {varname} to {val} in tab page {tabnr}.
8747 |t:var|
Bram Moolenaarb4230122019-05-30 18:40:53 +02008748 Note that autocommands are blocked, side effects may not be
8749 triggered, e.g. when setting 'filetype'.
Bram Moolenaar06b5d512010-05-22 15:37:44 +02008750 Note that the variable name without "t:" must be used.
8751 Tabs are numbered starting with one.
Bram Moolenaar06b5d512010-05-22 15:37:44 +02008752 This function is not available in the |sandbox|.
8753
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008754 Can also be used as a |method|, the base is passed as the
8755 third argument: >
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008756 GetValue()->settabvar(tab, name)
8757
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00008758settabwinvar({tabnr}, {winnr}, {varname}, {val}) *settabwinvar()*
8759 Set option or local variable {varname} in window {winnr} to
8760 {val}.
8761 Tabs are numbered starting with one. For the current tabpage
8762 use |setwinvar()|.
Bram Moolenaar7571d552016-08-18 22:54:46 +02008763 {winnr} can be the window number or the |window-ID|.
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00008764 When {winnr} is zero the current window is used.
Bram Moolenaarb4230122019-05-30 18:40:53 +02008765 Note that autocommands are blocked, side effects may not be
8766 triggered, e.g. when setting 'filetype' or 'syntax'.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008767 This also works for a global or local buffer option, but it
8768 doesn't work for a global or local buffer variable.
8769 For a local buffer option the global value is unchanged.
8770 Note that the variable name without "w:" must be used.
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00008771 Examples: >
8772 :call settabwinvar(1, 1, "&list", 0)
8773 :call settabwinvar(3, 2, "myvar", "foobar")
8774< This function is not available in the |sandbox|.
8775
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008776 Can also be used as a |method|, the base is passed as the
8777 fourth argument: >
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008778 GetValue()->settabvar(tab, winnr, name)
8779
Bram Moolenaarf49cc602018-11-11 15:21:05 +01008780settagstack({nr}, {dict} [, {action}]) *settagstack()*
8781 Modify the tag stack of the window {nr} using {dict}.
8782 {nr} can be the window number or the |window-ID|.
8783
8784 For a list of supported items in {dict}, refer to
Bram Moolenaar271fa082020-01-02 14:02:16 +01008785 |gettagstack()|. "curidx" takes effect before changing the tag
8786 stack.
Bram Moolenaarf49cc602018-11-11 15:21:05 +01008787 *E962*
Bram Moolenaar271fa082020-01-02 14:02:16 +01008788 How the tag stack is modified depends on the {action}
8789 argument:
8790 - If {action} is not present or is set to 'r', then the tag
8791 stack is replaced.
8792 - If {action} is set to 'a', then new entries from {dict} are
8793 pushed (added) onto the tag stack.
8794 - If {action} is set to 't', then all the entries from the
8795 current entry in the tag stack or "curidx" in {dict} are
8796 removed and then new entries are pushed to the stack.
8797
8798 The current index is set to one after the length of the tag
8799 stack after the modification.
Bram Moolenaarf49cc602018-11-11 15:21:05 +01008800
8801 Returns zero for success, -1 for failure.
8802
8803 Examples:
8804 Set current index of the tag stack to 4: >
8805 call settagstack(1005, {'curidx' : 4})
8806
8807< Empty the tag stack of window 3: >
8808 call settagstack(3, {'items' : []})
8809
8810< Push a new item onto the tag stack: >
8811 let pos = [bufnr('myfile.txt'), 10, 1, 0]
8812 let newtag = [{'tagname' : 'mytag', 'from' : pos}]
8813 call settagstack(2, {'items' : newtag}, 'a')
8814
8815< Save and restore the tag stack: >
8816 let stack = gettagstack(1003)
8817 " do something else
8818 call settagstack(1003, stack)
8819 unlet stack
8820<
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008821 Can also be used as a |method|, the base is passed as the
8822 second argument: >
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008823 GetStack()->settagstack(winnr)
8824
8825setwinvar({winnr}, {varname}, {val}) *setwinvar()*
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00008826 Like |settabwinvar()| for the current tab page.
Bram Moolenaar071d4272004-06-13 20:20:40 +00008827 Examples: >
8828 :call setwinvar(1, "&list", 0)
8829 :call setwinvar(2, "myvar", "foobar")
Bram Moolenaar071d4272004-06-13 20:20:40 +00008830
Bram Moolenaar2e693a82019-10-16 22:35:02 +02008831< Can also be used as a |method|, the base is passed as the
8832 third argument: >
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008833 GetValue()->setwinvar(winnr, name)
8834
Bram Moolenaaraf9aeb92013-02-13 17:35:04 +01008835sha256({string}) *sha256()*
Bram Moolenaar2b8388b2015-02-28 13:11:45 +01008836 Returns a String with 64 hex characters, which is the SHA256
Bram Moolenaaraf9aeb92013-02-13 17:35:04 +01008837 checksum of {string}.
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008838
8839 Can also be used as a |method|: >
8840 GetText()->sha256()
8841
8842< {only available when compiled with the |+cryptv| feature}
Bram Moolenaaraf9aeb92013-02-13 17:35:04 +01008843
Bram Moolenaar05bb9532008-07-04 09:44:11 +00008844shellescape({string} [, {special}]) *shellescape()*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008845 Escape {string} for use as a shell command argument.
Bram Moolenaar25e42232019-08-04 15:04:10 +02008846 On MS-Windows, when 'shellslash' is not set, it will enclose
8847 {string} in double quotes and double all double quotes within
8848 {string}.
Bram Moolenaare381d3d2016-07-07 14:50:41 +02008849 Otherwise it will enclose {string} in single quotes and
8850 replace all "'" with "'\''".
Bram Moolenaar875feea2017-06-11 16:07:51 +02008851
Bram Moolenaar05bb9532008-07-04 09:44:11 +00008852 When the {special} argument is present and it's a non-zero
8853 Number or a non-empty String (|non-zero-arg|), then special
Bram Moolenaare37d50a2008-08-06 17:06:04 +00008854 items such as "!", "%", "#" and "<cword>" will be preceded by
8855 a backslash. This backslash will be removed again by the |:!|
Bram Moolenaar05bb9532008-07-04 09:44:11 +00008856 command.
Bram Moolenaar875feea2017-06-11 16:07:51 +02008857
Bram Moolenaare37d50a2008-08-06 17:06:04 +00008858 The "!" character will be escaped (again with a |non-zero-arg|
8859 {special}) when 'shell' contains "csh" in the tail. That is
8860 because for csh and tcsh "!" is used for history replacement
8861 even when inside single quotes.
Bram Moolenaar875feea2017-06-11 16:07:51 +02008862
8863 With a |non-zero-arg| {special} the <NL> character is also
8864 escaped. When 'shell' containing "csh" in the tail it's
Bram Moolenaare37d50a2008-08-06 17:06:04 +00008865 escaped a second time.
Bram Moolenaar875feea2017-06-11 16:07:51 +02008866
Bram Moolenaar05bb9532008-07-04 09:44:11 +00008867 Example of use with a |:!| command: >
8868 :exe '!dir ' . shellescape(expand('<cfile>'), 1)
8869< This results in a directory listing for the file under the
8870 cursor. Example of use with |system()|: >
8871 :call system("chmod +w -- " . shellescape(expand("%")))
Bram Moolenaar26df0922014-02-23 23:39:13 +01008872< See also |::S|.
Bram Moolenaar60a495f2006-10-03 12:44:42 +00008873
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008874 Can also be used as a |method|: >
8875 GetCommand()->shellescape()
Bram Moolenaar60a495f2006-10-03 12:44:42 +00008876
Bram Moolenaarf9514162018-11-22 03:08:29 +01008877shiftwidth([{col}]) *shiftwidth()*
Bram Moolenaar2d17fa32012-10-21 00:45:18 +02008878 Returns the effective value of 'shiftwidth'. This is the
8879 'shiftwidth' value unless it is zero, in which case it is the
Bram Moolenaar009d84a2016-01-28 14:12:00 +01008880 'tabstop' value. This function was introduced with patch
Bram Moolenaarf9514162018-11-22 03:08:29 +01008881 7.3.694 in 2012, everybody should have it by now (however it
8882 did not allow for the optional {col} argument until 8.1.542).
Bram Moolenaar2d17fa32012-10-21 00:45:18 +02008883
Bram Moolenaarf9514162018-11-22 03:08:29 +01008884 When there is one argument {col} this is used as column number
8885 for which to return the 'shiftwidth' value. This matters for the
8886 'vartabstop' feature. If the 'vartabstop' setting is enabled and
8887 no {col} argument is given, column 1 will be assumed.
Bram Moolenaarf0d58ef2018-11-16 16:13:44 +01008888
Bram Moolenaaraad222c2019-09-06 22:46:09 +02008889 Can also be used as a |method|: >
8890 GetColumn()->shiftwidth()
8891
Bram Moolenaared997ad2019-07-21 16:42:00 +02008892sign_ functions are documented here: |sign-functions-details|
Bram Moolenaar2d17fa32012-10-21 00:45:18 +02008893
Bram Moolenaar162b7142018-12-21 15:17:36 +01008894
Bram Moolenaar071d4272004-06-13 20:20:40 +00008895simplify({filename}) *simplify()*
8896 Simplify the file name as much as possible without changing
8897 the meaning. Shortcuts (on MS-Windows) or symbolic links (on
8898 Unix) are not resolved. If the first path component in
8899 {filename} designates the current directory, this will be
8900 valid for the result as well. A trailing path separator is
8901 not removed either.
8902 Example: >
8903 simplify("./dir/.././/file/") == "./file/"
8904< Note: The combination "dir/.." is only removed if "dir" is
8905 a searchable directory or does not exist. On Unix, it is also
8906 removed when "dir" is a symbolic link within the same
8907 directory. In order to resolve all the involved symbolic
8908 links before simplifying the path name, use |resolve()|.
8909
Bram Moolenaara14de3d2005-01-07 21:48:26 +00008910
Bram Moolenaar446cb832008-06-24 21:56:24 +00008911sin({expr}) *sin()*
8912 Return the sine of {expr}, measured in radians, as a |Float|.
8913 {expr} must evaluate to a |Float| or a |Number|.
8914 Examples: >
8915 :echo sin(100)
8916< -0.506366 >
8917 :echo sin(-4.01)
8918< 0.763301
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02008919
8920 Can also be used as a |method|: >
8921 Compute()->sin()
8922<
Bram Moolenaar446cb832008-06-24 21:56:24 +00008923 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008924
Bram Moolenaar446cb832008-06-24 21:56:24 +00008925
Bram Moolenaardb7c6862010-05-21 16:33:48 +02008926sinh({expr}) *sinh()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02008927 Return the hyperbolic sine of {expr} as a |Float| in the range
Bram Moolenaardb7c6862010-05-21 16:33:48 +02008928 [-inf, inf].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02008929 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02008930 Examples: >
8931 :echo sinh(0.5)
8932< 0.521095 >
8933 :echo sinh(-0.9)
8934< -1.026517
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02008935
8936 Can also be used as a |method|: >
8937 Compute()->sinh()
8938<
Bram Moolenaardb84e452010-08-15 13:50:43 +02008939 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02008940
8941
Bram Moolenaar5f894962011-06-19 02:55:37 +02008942sort({list} [, {func} [, {dict}]]) *sort()* *E702*
Bram Moolenaar327aa022014-03-25 18:24:23 +01008943 Sort the items in {list} in-place. Returns {list}.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008944
Bram Moolenaar327aa022014-03-25 18:24:23 +01008945 If you want a list to remain unmodified make a copy first: >
Bram Moolenaara14de3d2005-01-07 21:48:26 +00008946 :let sortedlist = sort(copy(mylist))
Bram Moolenaar822ff862014-06-12 21:46:14 +02008947
Bram Moolenaar946e27a2014-06-25 18:50:27 +02008948< When {func} is omitted, is empty or zero, then sort() uses the
8949 string representation of each item to sort on. Numbers sort
8950 after Strings, |Lists| after Numbers. For sorting text in the
8951 current buffer use |:sort|.
Bram Moolenaar327aa022014-03-25 18:24:23 +01008952
Bram Moolenaar34401cc2014-08-29 15:12:19 +02008953 When {func} is given and it is '1' or 'i' then case is
Bram Moolenaar946e27a2014-06-25 18:50:27 +02008954 ignored.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01008955
Bram Moolenaar946e27a2014-06-25 18:50:27 +02008956 When {func} is given and it is 'n' then all items will be
8957 sorted numerical (Implementation detail: This uses the
8958 strtod() function to parse numbers, Strings, Lists, Dicts and
8959 Funcrefs will be considered as being 0).
8960
Bram Moolenaarb00da1d2015-12-03 16:33:12 +01008961 When {func} is given and it is 'N' then all items will be
8962 sorted numerical. This is like 'n' but a string containing
8963 digits will be used as the number they represent.
8964
Bram Moolenaar13d5aee2016-01-21 23:36:05 +01008965 When {func} is given and it is 'f' then all items will be
8966 sorted numerical. All values must be a Number or a Float.
8967
Bram Moolenaar32466aa2006-02-24 23:53:04 +00008968 When {func} is a |Funcref| or a function name, this function
8969 is called to compare items. The function is invoked with two
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008970 items as argument and must return zero if they are equal, 1 or
8971 bigger if the first one sorts after the second one, -1 or
8972 smaller if the first one sorts before the second one.
Bram Moolenaar327aa022014-03-25 18:24:23 +01008973
8974 {dict} is for functions with the "dict" attribute. It will be
8975 used to set the local variable "self". |Dictionary-function|
8976
Bram Moolenaar8bb1c3e2014-07-04 16:43:17 +02008977 The sort is stable, items which compare equal (as number or as
8978 string) will keep their relative position. E.g., when sorting
Bram Moolenaardb6ea062014-07-10 22:01:47 +02008979 on numbers, text strings will sort next to each other, in the
Bram Moolenaar8bb1c3e2014-07-04 16:43:17 +02008980 same order as they were originally.
8981
Bram Moolenaarac92e252019-08-03 21:58:38 +02008982 Can also be used as a |method|: >
8983 mylist->sort()
8984
8985< Also see |uniq()|.
Bram Moolenaar327aa022014-03-25 18:24:23 +01008986
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008987 Example: >
Bram Moolenaara14de3d2005-01-07 21:48:26 +00008988 func MyCompare(i1, i2)
8989 return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
8990 endfunc
8991 let sortedlist = sort(mylist, "MyCompare")
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01008992< A shorter compare version for this specific simple case, which
8993 ignores overflow: >
8994 func MyCompare(i1, i2)
8995 return a:i1 - a:i2
8996 endfunc
Bram Moolenaard857f0e2005-06-21 22:37:39 +00008997<
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02008998sound_clear() *sound_clear()*
8999 Stop playing all sounds.
Bram Moolenaar9b283522019-06-17 22:19:33 +02009000 {only available when compiled with the |+sound| feature}
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02009001
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009002 *sound_playevent()*
9003sound_playevent({name} [, {callback}])
9004 Play a sound identified by {name}. Which event names are
9005 supported depends on the system. Often the XDG sound names
9006 are used. On Ubuntu they may be found in
9007 /usr/share/sounds/freedesktop/stereo. Example: >
9008 call sound_playevent('bell')
Bram Moolenaar9b283522019-06-17 22:19:33 +02009009< On MS-Windows, {name} can be SystemAsterisk, SystemDefault,
9010 SystemExclamation, SystemExit, SystemHand, SystemQuestion,
9011 SystemStart, SystemWelcome, etc.
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009012
Bram Moolenaar9b283522019-06-17 22:19:33 +02009013 When {callback} is specified it is invoked when the sound is
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009014 finished. The first argument is the sound ID, the second
9015 argument is the status:
9016 0 sound was played to the end
Bram Moolenaar12ee7ff2019-06-10 22:47:40 +02009017 1 sound was interrupted
Bram Moolenaar6c1e1572019-06-22 02:13:00 +02009018 2 error occurred after sound started
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009019 Example: >
9020 func Callback(id, status)
9021 echomsg "sound " .. a:id .. " finished with " .. a:status
9022 endfunc
9023 call sound_playevent('bell', 'Callback')
9024
Bram Moolenaar9b283522019-06-17 22:19:33 +02009025< MS-Windows: {callback} doesn't work for this function.
9026
9027 Returns the sound ID, which can be passed to `sound_stop()`.
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009028 Returns zero if the sound could not be played.
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009029
9030 Can also be used as a |method|: >
9031 GetSoundName()->sound_playevent()
9032
9033< {only available when compiled with the |+sound| feature}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009034
9035 *sound_playfile()*
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +02009036sound_playfile({path} [, {callback}])
9037 Like `sound_playevent()` but play sound file {path}. {path}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009038 must be a full path. On Ubuntu you may find files to play
9039 with this command: >
9040 :!find /usr/share/sounds -type f | grep -v index.theme
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009041
9042< Can also be used as a |method|: >
9043 GetSoundPath()->sound_playfile()
9044
Bram Moolenaar12ee7ff2019-06-10 22:47:40 +02009045< {only available when compiled with the |+sound| feature}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009046
9047
9048sound_stop({id}) *sound_stop()*
9049 Stop playing sound {id}. {id} must be previously returned by
9050 `sound_playevent()` or `sound_playfile()`.
Bram Moolenaar9b283522019-06-17 22:19:33 +02009051
9052 On MS-Windows, this does not work for event sound started by
9053 `sound_playevent()`. To stop event sounds, use `sound_clear()`.
9054
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009055 Can also be used as a |method|: >
9056 soundid->sound_stop()
9057
9058< {only available when compiled with the |+sound| feature}
Bram Moolenaar427f5b62019-06-09 13:43:51 +02009059
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +00009060 *soundfold()*
9061soundfold({word})
9062 Return the sound-folded equivalent of {word}. Uses the first
Bram Moolenaar446cb832008-06-24 21:56:24 +00009063 language in 'spelllang' for the current window that supports
Bram Moolenaar42eeac32005-06-29 22:40:58 +00009064 soundfolding. 'spell' must be set. When no sound folding is
9065 possible the {word} is returned unmodified.
Bram Moolenaar24bbcfe2005-06-28 23:32:02 +00009066 This can be used for making spelling suggestions. Note that
9067 the method can be quite slow.
9068
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009069 Can also be used as a |method|: >
9070 GetWord()->soundfold()
9071<
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009072 *spellbadword()*
Bram Moolenaar1e015462005-09-25 22:16:38 +00009073spellbadword([{sentence}])
9074 Without argument: The result is the badly spelled word under
9075 or after the cursor. The cursor is moved to the start of the
9076 bad word. When no bad word is found in the cursor line the
9077 result is an empty string and the cursor doesn't move.
9078
9079 With argument: The result is the first word in {sentence} that
9080 is badly spelled. If there are no spelling mistakes the
9081 result is an empty string.
9082
9083 The return value is a list with two items:
9084 - The badly spelled word or an empty string.
9085 - The type of the spelling error:
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00009086 "bad" spelling mistake
Bram Moolenaar1e015462005-09-25 22:16:38 +00009087 "rare" rare word
9088 "local" word only valid in another region
9089 "caps" word should start with Capital
9090 Example: >
9091 echo spellbadword("the quik brown fox")
9092< ['quik', 'bad'] ~
9093
9094 The spelling information for the current window is used. The
9095 'spell' option must be set and the value of 'spelllang' is
9096 used.
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009097
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009098 Can also be used as a |method|: >
9099 GetText()->spellbadword()
9100<
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009101 *spellsuggest()*
Bram Moolenaarc54b8a72005-09-30 21:20:29 +00009102spellsuggest({word} [, {max} [, {capital}]])
Bram Moolenaar32466aa2006-02-24 23:53:04 +00009103 Return a |List| with spelling suggestions to replace {word}.
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009104 When {max} is given up to this number of suggestions are
9105 returned. Otherwise up to 25 suggestions are returned.
9106
Bram Moolenaarc54b8a72005-09-30 21:20:29 +00009107 When the {capital} argument is given and it's non-zero only
9108 suggestions with a leading capital will be given. Use this
9109 after a match with 'spellcapcheck'.
9110
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009111 {word} can be a badly spelled word followed by other text.
9112 This allows for joining two words that were split. The
Bram Moolenaarf461c8e2005-06-25 23:04:51 +00009113 suggestions also include the following text, thus you can
9114 replace a line.
9115
9116 {word} may also be a good word. Similar words will then be
Bram Moolenaarc54b8a72005-09-30 21:20:29 +00009117 returned. {word} itself is not included in the suggestions,
9118 although it may appear capitalized.
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009119
9120 The spelling information for the current window is used. The
Bram Moolenaar42eeac32005-06-29 22:40:58 +00009121 'spell' option must be set and the values of 'spelllang' and
9122 'spellsuggest' are used.
Bram Moolenaard857f0e2005-06-21 22:37:39 +00009123
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009124 Can also be used as a |method|: >
9125 GetWord()->spellsuggest()
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009126
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00009127split({expr} [, {pattern} [, {keepempty}]]) *split()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00009128 Make a |List| out of {expr}. When {pattern} is omitted or
9129 empty each white-separated sequence of characters becomes an
9130 item.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009131 Otherwise the string is split where {pattern} matches,
Bram Moolenaar97d62492012-11-15 21:28:22 +01009132 removing the matched characters. 'ignorecase' is not used
9133 here, add \c to ignore case. |/\c|
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00009134 When the first or last item is empty it is omitted, unless the
9135 {keepempty} argument is given and it's non-zero.
Bram Moolenaar5c06f8b2005-05-31 22:14:58 +00009136 Other empty items are kept when {pattern} matches at least one
9137 character or when {keepempty} is non-zero.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009138 Example: >
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00009139 :let words = split(getline('.'), '\W\+')
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00009140< To split a string in individual characters: >
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00009141 :for c in split(mystring, '\zs')
Bram Moolenaar12969c02015-09-08 23:36:10 +02009142< If you want to keep the separator you can also use '\zs' at
9143 the end of the pattern: >
Bram Moolenaar0cb032e2005-04-23 20:52:00 +00009144 :echo split('abc:def:ghi', ':\zs')
9145< ['abc:', 'def:', 'ghi'] ~
Bram Moolenaar2389c3c2005-05-22 22:07:59 +00009146 Splitting a table where the first element can be empty: >
9147 :let items = split(line, ':', 1)
9148< The opposite function is |join()|.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009149
Bram Moolenaara74e4942019-08-04 17:35:53 +02009150 Can also be used as a |method|: >
9151 GetString()->split()
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009152
Bram Moolenaar446cb832008-06-24 21:56:24 +00009153sqrt({expr}) *sqrt()*
9154 Return the non-negative square root of Float {expr} as a
9155 |Float|.
9156 {expr} must evaluate to a |Float| or a |Number|. When {expr}
9157 is negative the result is NaN (Not a Number).
9158 Examples: >
9159 :echo sqrt(100)
9160< 10.0 >
9161 :echo sqrt(-4.01)
9162< nan
Bram Moolenaarc236c162008-07-13 17:41:49 +00009163 "nan" may be different, it depends on system libraries.
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02009164
9165 Can also be used as a |method|: >
9166 Compute()->sqrt()
9167<
Bram Moolenaar446cb832008-06-24 21:56:24 +00009168 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009169
Bram Moolenaar446cb832008-06-24 21:56:24 +00009170
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01009171srand([{expr}]) *srand()*
9172 Initialize seed used by |rand()|:
9173 - If {expr} is not given, seed values are initialized by
Bram Moolenaarf8c1f922019-11-28 22:13:14 +01009174 reading from /dev/urandom, if possible, or using time(NULL)
9175 a.k.a. epoch time otherwise; this only has second accuracy.
9176 - If {expr} is given it must be a Number. It is used to
9177 initialize the seed values. This is useful for testing or
9178 when a predictable sequence is intended.
Bram Moolenaar06b0b4b2019-11-25 15:40:55 +01009179
9180 Examples: >
9181 :let seed = srand()
9182 :let seed = srand(userinput)
9183 :echo rand(seed)
9184
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02009185state([{what}]) *state()*
9186 Return a string which contains characters indicating the
9187 current state. Mostly useful in callbacks that want to do
9188 work that may not always be safe. Roughly this works like:
9189 - callback uses state() to check if work is safe to do.
Bram Moolenaar589edb32019-09-20 14:38:13 +02009190 Yes: then do it right away.
9191 No: add to work queue and add a |SafeState| and/or
9192 |SafeStateAgain| autocommand (|SafeState| triggers at
9193 toplevel, |SafeStateAgain| triggers after handling
9194 messages and callbacks).
9195 - When SafeState or SafeStateAgain is triggered and executes
9196 your autocommand, check with `state()` if the work can be
9197 done now, and if yes remove it from the queue and execute.
9198 Remove the autocommand if the queue is now empty.
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02009199 Also see |mode()|.
9200
9201 When {what} is given only characters in this string will be
9202 added. E.g, this checks if the screen has scrolled: >
Bram Moolenaar589edb32019-09-20 14:38:13 +02009203 if state('s') == ''
9204 " screen has not scrolled
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02009205<
Bram Moolenaard103ee72019-09-18 21:15:31 +02009206 These characters indicate the state, generally indicating that
9207 something is busy:
Bram Moolenaar589edb32019-09-20 14:38:13 +02009208 m halfway a mapping, :normal command, feedkeys() or
9209 stuffed command
9210 o operator pending or waiting for a command argument,
9211 e.g. after |f|
9212 a Insert mode autocomplete active
9213 x executing an autocommand
Bram Moolenaar2e693a82019-10-16 22:35:02 +02009214 w blocked on waiting, e.g. ch_evalexpr(), ch_read() and
9215 ch_readraw() when reading json.
Bram Moolenaar589edb32019-09-20 14:38:13 +02009216 S not triggering SafeState or SafeStateAgain
9217 c callback invoked, including timer (repeats for
9218 recursiveness up to "ccc")
9219 s screen has scrolled for messages
Bram Moolenaar0e57dd82019-09-16 22:56:03 +02009220
Bram Moolenaar81edd172016-04-14 13:51:37 +02009221str2float({expr}) *str2float()*
Bram Moolenaar446cb832008-06-24 21:56:24 +00009222 Convert String {expr} to a Float. This mostly works the same
9223 as when using a floating point number in an expression, see
9224 |floating-point-format|. But it's a bit more permissive.
9225 E.g., "1e40" is accepted, while in an expression you need to
Bram Moolenaard47d5222018-12-09 20:43:55 +01009226 write "1.0e40". The hexadecimal form "0x123" is also
9227 accepted, but not others, like binary or octal.
Bram Moolenaar446cb832008-06-24 21:56:24 +00009228 Text after the number is silently ignored.
9229 The decimal point is always '.', no matter what the locale is
9230 set to. A comma ends the number: "12,345.67" is converted to
9231 12.0. You can strip out thousands separators with
9232 |substitute()|: >
9233 let f = str2float(substitute(text, ',', '', 'g'))
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02009234<
9235 Can also be used as a |method|: >
9236 let f = text->substitute(',', '', 'g')->str2float()
9237<
9238 {only available when compiled with the |+float| feature}
Bram Moolenaar446cb832008-06-24 21:56:24 +00009239
Bram Moolenaar9d401282019-04-06 13:18:12 +02009240str2list({expr} [, {utf8}]) *str2list()*
9241 Return a list containing the number values which represent
9242 each character in String {expr}. Examples: >
9243 str2list(" ") returns [32]
9244 str2list("ABC") returns [65, 66, 67]
9245< |list2str()| does the opposite.
9246
9247 When {utf8} is omitted or zero, the current 'encoding' is used.
9248 With {utf8} set to 1, always treat the String as utf-8
9249 characters. With utf-8 composing characters are handled
9250 properly: >
9251 str2list("á") returns [97, 769]
Bram Moolenaar446cb832008-06-24 21:56:24 +00009252
Bram Moolenaara74e4942019-08-04 17:35:53 +02009253< Can also be used as a |method|: >
9254 GetString()->str2list()
9255
9256
Bram Moolenaar60a8de22019-09-15 14:33:22 +02009257str2nr({expr} [, {base} [, {quoted}]]) *str2nr()*
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009258 Convert string {expr} to a number.
Bram Moolenaarfa735342016-01-03 22:14:44 +01009259 {base} is the conversion base, it can be 2, 8, 10 or 16.
Bram Moolenaar60a8de22019-09-15 14:33:22 +02009260 When {quoted} is present and non-zero then embedded single
9261 quotes are ignored, thus "1'000'000" is a million.
Bram Moolenaara74e4942019-08-04 17:35:53 +02009262
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009263 When {base} is omitted base 10 is used. This also means that
9264 a leading zero doesn't cause octal conversion to be used, as
Bram Moolenaara74e4942019-08-04 17:35:53 +02009265 with the default String to Number conversion. Example: >
Bram Moolenaar2e693a82019-10-16 22:35:02 +02009266 let nr = str2nr('0123')
Bram Moolenaara74e4942019-08-04 17:35:53 +02009267<
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009268 When {base} is 16 a leading "0x" or "0X" is ignored. With a
Bram Moolenaarfa735342016-01-03 22:14:44 +01009269 different base the result will be zero. Similarly, when
9270 {base} is 8 a leading "0" is ignored, and when {base} is 2 a
9271 leading "0b" or "0B" is ignored.
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009272 Text after the number is silently ignored.
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00009273
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009274 Can also be used as a |method|: >
9275 GetText()->str2nr()
9276
9277strcharpart({src}, {start} [, {len}]) *strcharpart()*
9278 Like |strpart()| but using character index and length instead
9279 of byte index and length.
9280 When a character index is used where a character does not
9281 exist it is assumed to be one character. For example: >
9282 strcharpart('abc', -1, 2)
9283< results in 'a'.
9284
9285 Can also be used as a |method|: >
9286 GetText()->strcharpart(5)
Bram Moolenaar97b2ad32006-03-18 21:40:56 +00009287
Bram Moolenaar979243b2015-06-26 19:35:49 +02009288strchars({expr} [, {skipcc}]) *strchars()*
Bram Moolenaar72597a52010-07-18 15:31:08 +02009289 The result is a Number, which is the number of characters
Bram Moolenaar979243b2015-06-26 19:35:49 +02009290 in String {expr}.
9291 When {skipcc} is omitted or zero, composing characters are
9292 counted separately.
9293 When {skipcc} set to 1, Composing characters are ignored.
Bram Moolenaardc536092010-07-18 15:45:49 +02009294 Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009295
Bram Moolenaar86ae7202015-07-10 19:31:35 +02009296 {skipcc} is only available after 7.4.755. For backward
9297 compatibility, you can define a wrapper function: >
9298 if has("patch-7.4.755")
9299 function s:strchars(str, skipcc)
9300 return strchars(a:str, a:skipcc)
9301 endfunction
9302 else
9303 function s:strchars(str, skipcc)
9304 if a:skipcc
9305 return strlen(substitute(a:str, ".", "x", "g"))
9306 else
9307 return strchars(a:str)
9308 endif
9309 endfunction
9310 endif
9311<
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009312 Can also be used as a |method|: >
9313 GetText()->strchars()
Bram Moolenaar86ae7202015-07-10 19:31:35 +02009314
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009315strdisplaywidth({expr} [, {col}]) *strdisplaywidth()*
Bram Moolenaardc536092010-07-18 15:45:49 +02009316 The result is a Number, which is the number of display cells
Bram Moolenaar4c92e752019-02-17 21:18:32 +01009317 String {expr} occupies on the screen when it starts at {col}
9318 (first column is zero). When {col} is omitted zero is used.
9319 Otherwise it is the screen column where to start. This
9320 matters for Tab characters.
Bram Moolenaar4d32c2d2010-07-18 22:10:01 +02009321 The option settings of the current window are used. This
9322 matters for anything that's displayed differently, such as
9323 'tabstop' and 'display'.
Bram Moolenaardc536092010-07-18 15:45:49 +02009324 When {expr} contains characters with East Asian Width Class
9325 Ambiguous, this function's return value depends on 'ambiwidth'.
9326 Also see |strlen()|, |strwidth()| and |strchars()|.
Bram Moolenaar72597a52010-07-18 15:31:08 +02009327
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009328 Can also be used as a |method|: >
9329 GetText()->strdisplaywidth()
9330
Bram Moolenaar071d4272004-06-13 20:20:40 +00009331strftime({format} [, {time}]) *strftime()*
9332 The result is a String, which is a formatted date and time, as
9333 specified by the {format} string. The given {time} is used,
9334 or the current time if no time is given. The accepted
9335 {format} depends on your system, thus this is not portable!
9336 See the manual page of the C function strftime() for the
9337 format. The maximum length of the result is 80 characters.
Bram Moolenaar10455d42019-11-21 15:36:18 +01009338 See also |localtime()|, |getftime()| and |strptime()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009339 The language can be changed with the |:language| command.
9340 Examples: >
9341 :echo strftime("%c") Sun Apr 27 11:49:23 1997
9342 :echo strftime("%Y %b %d %X") 1997 Apr 27 11:53:25
9343 :echo strftime("%y%m%d %T") 970427 11:53:55
9344 :echo strftime("%H:%M") 11:55
9345 :echo strftime("%c", getftime("file.c"))
9346 Show mod time of file.c.
Bram Moolenaara14de3d2005-01-07 21:48:26 +00009347< Not available on all systems. To check use: >
9348 :if exists("*strftime")
9349
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009350< Can also be used as a |method|: >
9351 GetFormat()->strftime()
9352
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02009353strgetchar({str}, {index}) *strgetchar()*
9354 Get character {index} from {str}. This uses a character
9355 index, not a byte index. Composing characters are considered
9356 separate characters here.
9357 Also see |strcharpart()| and |strchars()|.
9358
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009359 Can also be used as a |method|: >
9360 GetText()->strgetchar(5)
9361
Bram Moolenaar8f999f12005-01-25 22:12:55 +00009362stridx({haystack}, {needle} [, {start}]) *stridx()*
9363 The result is a Number, which gives the byte index in
9364 {haystack} of the first occurrence of the String {needle}.
Bram Moolenaar677ee682005-01-27 14:41:15 +00009365 If {start} is specified, the search starts at index {start}.
9366 This can be used to find a second match: >
Bram Moolenaar81af9252010-12-10 20:35:50 +01009367 :let colon1 = stridx(line, ":")
9368 :let colon2 = stridx(line, ":", colon1 + 1)
Bram Moolenaar677ee682005-01-27 14:41:15 +00009369< The search is done case-sensitive.
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009370 For pattern searches use |match()|.
Bram Moolenaar8f999f12005-01-25 22:12:55 +00009371 -1 is returned if the {needle} does not occur in {haystack}.
Bram Moolenaar677ee682005-01-27 14:41:15 +00009372 See also |strridx()|.
9373 Examples: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00009374 :echo stridx("An Example", "Example") 3
9375 :echo stridx("Starting point", "Start") 0
9376 :echo stridx("Starting point", "start") -1
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00009377< *strstr()* *strchr()*
Bram Moolenaar05159a02005-02-26 23:04:13 +00009378 stridx() works similar to the C function strstr(). When used
9379 with a single character it works similar to strchr().
9380
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009381 Can also be used as a |method|: >
9382 GetHaystack()->stridx(needle)
Bram Moolenaar2e693a82019-10-16 22:35:02 +02009383<
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00009384 *string()*
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00009385string({expr}) Return {expr} converted to a String. If {expr} is a Number,
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01009386 Float, String, Blob or a composition of them, then the result
9387 can be parsed back with |eval()|.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00009388 {expr} type result ~
Bram Moolenaar4f3f6682016-03-26 23:01:59 +01009389 String 'string' (single quotes are doubled)
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00009390 Number 123
Bram Moolenaar446cb832008-06-24 21:56:24 +00009391 Float 123.123456 or 1.123456e8
Bram Moolenaard8b02732005-01-14 21:48:43 +00009392 Funcref function('name')
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +01009393 Blob 0z00112233.44556677.8899
Bram Moolenaar5f2bb9f2005-01-11 21:29:04 +00009394 List [item, item]
Bram Moolenaar9ba0eb82005-06-13 22:28:56 +00009395 Dictionary {key: value, key: value}
Bram Moolenaar4f3f6682016-03-26 23:01:59 +01009396
9397 When a List or Dictionary has a recursive reference it is
9398 replaced by "[...]" or "{...}". Using eval() on the result
9399 will then fail.
9400
Bram Moolenaarac92e252019-08-03 21:58:38 +02009401 Can also be used as a |method|: >
9402 mylist->string()
9403
9404< Also see |strtrans()|.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00009405
Bram Moolenaar071d4272004-06-13 20:20:40 +00009406 *strlen()*
9407strlen({expr}) The result is a Number, which is the length of the String
Bram Moolenaare344bea2005-09-01 20:46:49 +00009408 {expr} in bytes.
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +00009409 If the argument is a Number it is first converted to a String.
9410 For other types an error is given.
Bram Moolenaar641e48c2015-06-25 16:09:26 +02009411 If you want to count the number of multi-byte characters use
9412 |strchars()|.
9413 Also see |len()|, |strdisplaywidth()| and |strwidth()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009414
Bram Moolenaara74e4942019-08-04 17:35:53 +02009415 Can also be used as a |method|: >
9416 GetString()->strlen()
9417
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009418strpart({src}, {start} [, {len}]) *strpart()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00009419 The result is a String, which is part of {src}, starting from
Bram Moolenaar9372a112005-12-06 19:59:18 +00009420 byte {start}, with the byte length {len}.
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02009421 To count characters instead of bytes use |strcharpart()|.
9422
9423 When bytes are selected which do not exist, this doesn't
9424 result in an error, the bytes are simply omitted.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009425 If {len} is missing, the copy continues from {start} till the
9426 end of the {src}. >
9427 strpart("abcdefg", 3, 2) == "de"
9428 strpart("abcdefg", -2, 4) == "ab"
9429 strpart("abcdefg", 5, 4) == "fg"
Bram Moolenaar446cb832008-06-24 21:56:24 +00009430 strpart("abcdefg", 3) == "defg"
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02009431
Bram Moolenaar071d4272004-06-13 20:20:40 +00009432< Note: To get the first character, {start} must be 0. For
9433 example, to get three bytes under and after the cursor: >
Bram Moolenaar61660ea2006-04-07 21:40:07 +00009434 strpart(getline("."), col(".") - 1, 3)
Bram Moolenaar071d4272004-06-13 20:20:40 +00009435<
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009436 Can also be used as a |method|: >
9437 GetText()->strpart(5)
9438
Bram Moolenaar10455d42019-11-21 15:36:18 +01009439strptime({format}, {timestring}) *strptime()*
9440 The result is a Number, which is a unix timestamp representing
9441 the date and time in {timestring}, which is expected to match
9442 the format specified in {format}.
9443
9444 The accepted {format} depends on your system, thus this is not
9445 portable! See the manual page of the C function strptime()
9446 for the format. Especially avoid "%c". The value of $TZ also
9447 matters.
9448
9449 If the {timestring} cannot be parsed with {format} zero is
9450 returned. If you do not know the format of {timestring} you
9451 can try different {format} values until you get a non-zero
9452 result.
9453
9454 See also |strftime()|.
9455 Examples: >
9456 :echo strptime("%Y %b %d %X", "1997 Apr 27 11:49:23")
9457< 862156163 >
9458 :echo strftime("%c", strptime("%y%m%d %T", "970427 11:53:55"))
9459< Sun Apr 27 11:53:55 1997 >
9460 :echo strftime("%c", strptime("%Y%m%d%H%M%S", "19970427115355") + 3600)
9461< Sun Apr 27 12:53:55 1997
9462
9463 Not available on all systems. To check use: >
9464 :if exists("*strptime")
9465
9466
Bram Moolenaar677ee682005-01-27 14:41:15 +00009467strridx({haystack}, {needle} [, {start}]) *strridx()*
9468 The result is a Number, which gives the byte index in
9469 {haystack} of the last occurrence of the String {needle}.
9470 When {start} is specified, matches beyond this index are
9471 ignored. This can be used to find a match before a previous
9472 match: >
9473 :let lastcomma = strridx(line, ",")
9474 :let comma2 = strridx(line, ",", lastcomma - 1)
9475< The search is done case-sensitive.
Bram Moolenaar8f999f12005-01-25 22:12:55 +00009476 For pattern searches use |match()|.
9477 -1 is returned if the {needle} does not occur in {haystack}.
Bram Moolenaard4755bb2004-09-02 19:12:26 +00009478 If the {needle} is empty the length of {haystack} is returned.
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00009479 See also |stridx()|. Examples: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00009480 :echo strridx("an angry armadillo", "an") 3
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00009481< *strrchr()*
Bram Moolenaar05159a02005-02-26 23:04:13 +00009482 When used with a single character it works similar to the C
9483 function strrchr().
9484
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009485 Can also be used as a |method|: >
9486 GetHaystack()->strridx(needle)
9487
Bram Moolenaar071d4272004-06-13 20:20:40 +00009488strtrans({expr}) *strtrans()*
9489 The result is a String, which is {expr} with all unprintable
9490 characters translated into printable characters |'isprint'|.
9491 Like they are shown in a window. Example: >
9492 echo strtrans(@a)
9493< This displays a newline in register a as "^@" instead of
9494 starting a new line.
9495
Bram Moolenaara74e4942019-08-04 17:35:53 +02009496 Can also be used as a |method|: >
9497 GetString()->strtrans()
9498
Bram Moolenaar72597a52010-07-18 15:31:08 +02009499strwidth({expr}) *strwidth()*
9500 The result is a Number, which is the number of display cells
9501 String {expr} occupies. A Tab character is counted as one
Bram Moolenaardc536092010-07-18 15:45:49 +02009502 cell, alternatively use |strdisplaywidth()|.
Bram Moolenaar72597a52010-07-18 15:31:08 +02009503 When {expr} contains characters with East Asian Width Class
9504 Ambiguous, this function's return value depends on 'ambiwidth'.
Bram Moolenaardc536092010-07-18 15:45:49 +02009505 Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
Bram Moolenaar72597a52010-07-18 15:31:08 +02009506
Bram Moolenaara74e4942019-08-04 17:35:53 +02009507 Can also be used as a |method|: >
9508 GetString()->strwidth()
9509
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009510submatch({nr} [, {list}]) *submatch()* *E935*
Bram Moolenaar251e1912011-06-19 05:09:16 +02009511 Only for an expression in a |:substitute| command or
9512 substitute() function.
9513 Returns the {nr}'th submatch of the matched text. When {nr}
9514 is 0 the whole matched text is returned.
Bram Moolenaar41571762014-04-02 19:00:58 +02009515 Note that a NL in the string can stand for a line break of a
9516 multi-line match or a NUL character in the text.
Bram Moolenaar251e1912011-06-19 05:09:16 +02009517 Also see |sub-replace-expression|.
Bram Moolenaar41571762014-04-02 19:00:58 +02009518
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009519 If {list} is present and non-zero then submatch() returns
9520 a list of strings, similar to |getline()| with two arguments.
Bram Moolenaar41571762014-04-02 19:00:58 +02009521 NL characters in the text represent NUL characters in the
9522 text.
9523 Only returns more than one item for |:substitute|, inside
9524 |substitute()| this list will always contain one or zero
9525 items, since there are no real line breaks.
9526
Bram Moolenaar6100d022016-10-02 16:51:57 +02009527 When substitute() is used recursively only the submatches in
9528 the current (deepest) call can be obtained.
9529
Bram Moolenaar2f058492017-11-30 20:27:52 +01009530 Examples: >
Bram Moolenaar071d4272004-06-13 20:20:40 +00009531 :s/\d\+/\=submatch(0) + 1/
Bram Moolenaar2f058492017-11-30 20:27:52 +01009532 :echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
Bram Moolenaar071d4272004-06-13 20:20:40 +00009533< This finds the first number in the line and adds one to it.
9534 A line break is included as a newline character.
9535
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009536 Can also be used as a |method|: >
9537 GetNr()->submatch()
9538
Bram Moolenaar071d4272004-06-13 20:20:40 +00009539substitute({expr}, {pat}, {sub}, {flags}) *substitute()*
9540 The result is a String, which is a copy of {expr}, in which
Bram Moolenaar251e1912011-06-19 05:09:16 +02009541 the first match of {pat} is replaced with {sub}.
9542 When {flags} is "g", all matches of {pat} in {expr} are
9543 replaced. Otherwise {flags} should be "".
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009544
Bram Moolenaar251e1912011-06-19 05:09:16 +02009545 This works like the ":substitute" command (without any flags).
9546 But the matching with {pat} is always done like the 'magic'
9547 option is set and 'cpoptions' is empty (to make scripts
Bram Moolenaar2df58b42012-11-28 18:21:11 +01009548 portable). 'ignorecase' is still relevant, use |/\c| or |/\C|
9549 if you want to ignore or match case and ignore 'ignorecase'.
9550 'smartcase' is not used. See |string-match| for how {pat} is
9551 used.
Bram Moolenaar251e1912011-06-19 05:09:16 +02009552
9553 A "~" in {sub} is not replaced with the previous {sub}.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009554 Note that some codes in {sub} have a special meaning
Bram Moolenaar58b85342016-08-14 19:54:54 +02009555 |sub-replace-special|. For example, to replace something with
Bram Moolenaar071d4272004-06-13 20:20:40 +00009556 "\n" (two characters), use "\\\\n" or '\\n'.
Bram Moolenaar251e1912011-06-19 05:09:16 +02009557
Bram Moolenaar071d4272004-06-13 20:20:40 +00009558 When {pat} does not match in {expr}, {expr} is returned
9559 unmodified.
Bram Moolenaar251e1912011-06-19 05:09:16 +02009560
Bram Moolenaar071d4272004-06-13 20:20:40 +00009561 Example: >
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009562 :let &path = substitute(&path, ",\\=[^,]*$", "", "")
Bram Moolenaar071d4272004-06-13 20:20:40 +00009563< This removes the last component of the 'path' option. >
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009564 :echo substitute("testing", ".*", "\\U\\0", "")
Bram Moolenaar071d4272004-06-13 20:20:40 +00009565< results in "TESTING".
Bram Moolenaar251e1912011-06-19 05:09:16 +02009566
9567 When {sub} starts with "\=", the remainder is interpreted as
9568 an expression. See |sub-replace-expression|. Example: >
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009569 :echo substitute(s, '%\(\x\x\)',
Bram Moolenaar20f90cf2011-05-19 12:22:51 +02009570 \ '\=nr2char("0x" . submatch(1))', 'g')
Bram Moolenaar071d4272004-06-13 20:20:40 +00009571
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009572< When {sub} is a Funcref that function is called, with one
9573 optional argument. Example: >
9574 :echo substitute(s, '%\(\x\x\)', SubNr, 'g')
9575< The optional argument is a list which contains the whole
Bram Moolenaar58b85342016-08-14 19:54:54 +02009576 matched string and up to nine submatches, like what
9577 |submatch()| returns. Example: >
9578 :echo substitute(s, '%\(\x\x\)', {m -> '0x' . m[1]}, 'g')
Bram Moolenaardf48fb42016-07-22 21:50:18 +02009579
Bram Moolenaara74e4942019-08-04 17:35:53 +02009580< Can also be used as a |method|: >
9581 GetString()->substitute(pat, sub, flags)
9582
Bram Moolenaar20aac6c2018-09-02 21:07:30 +02009583swapinfo({fname}) *swapinfo()*
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009584 The result is a dictionary, which holds information about the
9585 swapfile {fname}. The available fields are:
Bram Moolenaar95bafa22018-10-02 13:26:25 +02009586 version Vim version
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009587 user user name
9588 host host name
9589 fname original file name
Bram Moolenaar95bafa22018-10-02 13:26:25 +02009590 pid PID of the Vim process that created the swap
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009591 file
9592 mtime last modification time in seconds
9593 inode Optional: INODE number of the file
Bram Moolenaar47ad5652018-08-21 21:09:07 +02009594 dirty 1 if file was modified, 0 if not
Bram Moolenaarfc65cab2018-08-28 22:58:02 +02009595 Note that "user" and "host" are truncated to at most 39 bytes.
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009596 In case of failure an "error" item is added with the reason:
9597 Cannot open file: file not found or in accessible
9598 Cannot read file: cannot read first block
Bram Moolenaar47ad5652018-08-21 21:09:07 +02009599 Not a swap file: does not contain correct block ID
9600 Magic number mismatch: Info in first block is invalid
Bram Moolenaar00f123a2018-08-21 20:28:54 +02009601
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009602 Can also be used as a |method|: >
9603 GetFilename()->swapinfo()
9604
Bram Moolenaar110bd602018-09-16 18:46:59 +02009605swapname({expr}) *swapname()*
9606 The result is the swap file path of the buffer {expr}.
9607 For the use of {expr}, see |bufname()| above.
9608 If buffer {expr} is the current buffer, the result is equal to
9609 |:swapname| (unless no swap file).
9610 If buffer {expr} has no swap file, returns an empty string.
9611
Bram Moolenaarf6ed61e2019-09-07 19:05:09 +02009612 Can also be used as a |method|: >
9613 GetBufname()->swapname()
9614
Bram Moolenaar47136d72004-10-12 20:02:24 +00009615synID({lnum}, {col}, {trans}) *synID()*
Bram Moolenaar071d4272004-06-13 20:20:40 +00009616 The result is a Number, which is the syntax ID at the position
Bram Moolenaar47136d72004-10-12 20:02:24 +00009617 {lnum} and {col} in the current window.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009618 The syntax ID can be used with |synIDattr()| and
9619 |synIDtrans()| to obtain syntax information about text.
Bram Moolenaarce0842a2005-07-18 21:58:11 +00009620
Bram Moolenaar47136d72004-10-12 20:02:24 +00009621 {col} is 1 for the leftmost column, {lnum} is 1 for the first
Bram Moolenaarce0842a2005-07-18 21:58:11 +00009622 line. 'synmaxcol' applies, in a longer line zero is returned.
Bram Moolenaarca635012015-09-25 20:34:21 +02009623 Note that when the position is after the last character,
9624 that's where the cursor can be in Insert mode, synID() returns
9625 zero.
Bram Moolenaarce0842a2005-07-18 21:58:11 +00009626
Bram Moolenaar79815f12016-07-09 17:07:29 +02009627 When {trans} is |TRUE|, transparent items are reduced to the
Bram Moolenaar58b85342016-08-14 19:54:54 +02009628 item that they reveal. This is useful when wanting to know
Bram Moolenaar79815f12016-07-09 17:07:29 +02009629 the effective color. When {trans} is |FALSE|, the transparent
Bram Moolenaar071d4272004-06-13 20:20:40 +00009630 item is returned. This is useful when wanting to know which
9631 syntax item is effective (e.g. inside parens).
9632 Warning: This function can be very slow. Best speed is
9633 obtained by going through the file in forward direction.
9634
9635 Example (echoes the name of the syntax item under the cursor): >
9636 :echo synIDattr(synID(line("."), col("."), 1), "name")
9637<
Bram Moolenaar7510fe72010-07-25 12:46:44 +02009638
Bram Moolenaar071d4272004-06-13 20:20:40 +00009639synIDattr({synID}, {what} [, {mode}]) *synIDattr()*
9640 The result is a String, which is the {what} attribute of
9641 syntax ID {synID}. This can be used to obtain information
9642 about a syntax item.
9643 {mode} can be "gui", "cterm" or "term", to get the attributes
Bram Moolenaar58b85342016-08-14 19:54:54 +02009644 for that mode. When {mode} is omitted, or an invalid value is
Bram Moolenaar071d4272004-06-13 20:20:40 +00009645 used, the attributes for the currently active highlighting are
9646 used (GUI, cterm or term).
9647 Use synIDtrans() to follow linked highlight groups.
9648 {what} result
9649 "name" the name of the syntax item
9650 "fg" foreground color (GUI: color name used to set
9651 the color, cterm: color number as a string,
9652 term: empty string)
Bram Moolenaar6f507d62008-11-28 10:16:05 +00009653 "bg" background color (as with "fg")
Bram Moolenaar12682fd2010-03-10 13:43:49 +01009654 "font" font name (only available in the GUI)
9655 |highlight-font|
Bram Moolenaar6f507d62008-11-28 10:16:05 +00009656 "sp" special color (as with "fg") |highlight-guisp|
Bram Moolenaar071d4272004-06-13 20:20:40 +00009657 "fg#" like "fg", but for the GUI and the GUI is
9658 running the name in "#RRGGBB" form
9659 "bg#" like "fg#" for "bg"
Bram Moolenaar6f507d62008-11-28 10:16:05 +00009660 "sp#" like "fg#" for "sp"
Bram Moolenaar071d4272004-06-13 20:20:40 +00009661 "bold" "1" if bold
9662 "italic" "1" if italic
9663 "reverse" "1" if reverse
9664 "inverse" "1" if inverse (= reverse)
Bram Moolenaar12682fd2010-03-10 13:43:49 +01009665 "standout" "1" if standout
Bram Moolenaar071d4272004-06-13 20:20:40 +00009666 "underline" "1" if underlined
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009667 "undercurl" "1" if undercurled
Bram Moolenaarcf4b00c2017-09-02 18:33:56 +02009668 "strike" "1" if strikethrough
Bram Moolenaar071d4272004-06-13 20:20:40 +00009669
9670 Example (echoes the color of the syntax item under the
9671 cursor): >
9672 :echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
9673<
Bram Moolenaara74e4942019-08-04 17:35:53 +02009674 Can also be used as a |method|: >
9675 :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
9676
9677
Bram Moolenaar071d4272004-06-13 20:20:40 +00009678synIDtrans({synID}) *synIDtrans()*
9679 The result is a Number, which is the translated syntax ID of
9680 {synID}. This is the syntax group ID of what is being used to
9681 highlight the character. Highlight links given with
9682 ":highlight link" are followed.
9683
Bram Moolenaara74e4942019-08-04 17:35:53 +02009684 Can also be used as a |method|: >
9685 :echo synID(line("."), col("."), 1)->synIDtrans()->synIDattr("fg")
9686
Bram Moolenaar483c5d82010-10-20 18:45:33 +02009687synconcealed({lnum}, {col}) *synconcealed()*
Bram Moolenaar4d785892017-06-22 22:00:50 +02009688 The result is a List with currently three items:
9689 1. The first item in the list is 0 if the character at the
9690 position {lnum} and {col} is not part of a concealable
9691 region, 1 if it is.
9692 2. The second item in the list is a string. If the first item
9693 is 1, the second item contains the text which will be
9694 displayed in place of the concealed text, depending on the
9695 current setting of 'conceallevel' and 'listchars'.
Bram Moolenaarcc0750d2017-06-24 22:29:24 +02009696 3. The third and final item in the list is a number
9697 representing the specific syntax region matched in the
9698 line. When the character is not concealed the value is
9699 zero. This allows detection of the beginning of a new
9700 concealable region if there are two consecutive regions
9701 with the same replacement character. For an example, if
9702 the text is "123456" and both "23" and "45" are concealed
Bram Moolenaar95bafa22018-10-02 13:26:25 +02009703 and replaced by the character "X", then:
Bram Moolenaarcc0750d2017-06-24 22:29:24 +02009704 call returns ~
Bram Moolenaarc572da52017-08-27 16:52:01 +02009705 synconcealed(lnum, 1) [0, '', 0]
9706 synconcealed(lnum, 2) [1, 'X', 1]
9707 synconcealed(lnum, 3) [1, 'X', 1]
9708 synconcealed(lnum, 4) [1, 'X', 2]
9709 synconcealed(lnum, 5) [1, 'X', 2]
9710 synconcealed(lnum, 6) [0, '', 0]
Bram Moolenaar483c5d82010-10-20 18:45:33 +02009711
9712
Bram Moolenaar9d188ab2008-01-10 21:24:39 +00009713synstack({lnum}, {col}) *synstack()*
9714 Return a |List|, which is the stack of syntax items at the
9715 position {lnum} and {col} in the current window. Each item in
9716 the List is an ID like what |synID()| returns.
Bram Moolenaar9d188ab2008-01-10 21:24:39 +00009717 The first item in the List is the outer region, following are
9718 items contained in that one. The last one is what |synID()|
9719 returns, unless not the whole item is highlighted or it is a
9720 transparent item.
9721 This function is useful for debugging a syntax file.
9722 Example that shows the syntax stack under the cursor: >
9723 for id in synstack(line("."), col("."))
9724 echo synIDattr(id, "name")
9725 endfor
Bram Moolenaar0bc380a2010-07-10 13:52:13 +02009726< When the position specified with {lnum} and {col} is invalid
9727 nothing is returned. The position just after the last
9728 character in a line and the first column in an empty line are
9729 valid positions.
Bram Moolenaar9d188ab2008-01-10 21:24:39 +00009730
Bram Moolenaarc0197e22004-09-13 20:26:32 +00009731system({expr} [, {input}]) *system()* *E677*
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009732 Get the output of the shell command {expr} as a string. See
9733 |systemlist()| to get the output as a List.
Bram Moolenaar57ebe6e2014-04-05 18:55:46 +02009734
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009735 When {input} is given and is a string this string is written
9736 to a file and passed as stdin to the command. The string is
9737 written as-is, you need to take care of using the correct line
Bram Moolenaar57ebe6e2014-04-05 18:55:46 +02009738 separators yourself.
9739 If {input} is given and is a |List| it is written to the file
9740 in a way |writefile()| does with {binary} set to "b" (i.e.
9741 with a newline between each list item with newlines inside
Bram Moolenaar12c44922017-01-08 13:26:03 +01009742 list items converted to NULs).
9743 When {input} is given and is a number that is a valid id for
9744 an existing buffer then the content of the buffer is written
9745 to the file line by line, each line terminated by a NL and
9746 NULs characters where the text has a NL.
Bram Moolenaar069c1e72016-07-15 21:25:08 +02009747
9748 Pipes are not used, the 'shelltemp' option is not used.
Bram Moolenaar57ebe6e2014-04-05 18:55:46 +02009749
Bram Moolenaar04186092016-08-29 21:55:35 +02009750 When prepended by |:silent| the terminal will not be set to
Bram Moolenaar52a72462014-08-29 15:53:52 +02009751 cooked mode. This is meant to be used for commands that do
9752 not need the user to type. It avoids stray characters showing
9753 up on the screen which require |CTRL-L| to remove. >
9754 :silent let f = system('ls *.vim')
9755<
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009756 Note: Use |shellescape()| or |::S| with |expand()| or
9757 |fnamemodify()| to escape special characters in a command
9758 argument. Newlines in {expr} may cause the command to fail.
9759 The characters in 'shellquote' and 'shellxquote' may also
Bram Moolenaar26df0922014-02-23 23:39:13 +01009760 cause trouble.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009761 This is not to be used for interactive commands.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009762
Bram Moolenaar05bb9532008-07-04 09:44:11 +00009763 The result is a String. Example: >
9764 :let files = system("ls " . shellescape(expand('%:h')))
Bram Moolenaar26df0922014-02-23 23:39:13 +01009765 :let files = system('ls ' . expand('%:h:S'))
Bram Moolenaar071d4272004-06-13 20:20:40 +00009766
9767< To make the result more system-independent, the shell output
9768 is filtered to replace <CR> with <NL> for Macintosh, and
9769 <CR><NL> with <NL> for DOS-like systems.
Bram Moolenaar9d98fe92013-08-03 18:35:36 +02009770 To avoid the string being truncated at a NUL, all NUL
9771 characters are replaced with SOH (0x01).
9772
Bram Moolenaar071d4272004-06-13 20:20:40 +00009773 The command executed is constructed using several options:
9774 'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
9775 ({tmp} is an automatically generated file name).
Bram Moolenaar6f345a12019-12-17 21:27:18 +01009776 For Unix, braces are put around {expr} to allow for
Bram Moolenaar071d4272004-06-13 20:20:40 +00009777 concatenated commands.
9778
Bram Moolenaar433f7c82006-03-21 21:29:36 +00009779 The command will be executed in "cooked" mode, so that a
9780 CTRL-C will interrupt the command (on Unix at least).
9781
Bram Moolenaar071d4272004-06-13 20:20:40 +00009782 The resulting error code can be found in |v:shell_error|.
9783 This function will fail in |restricted-mode|.
Bram Moolenaar4770d092006-01-12 23:22:24 +00009784
9785 Note that any wrong value in the options mentioned above may
9786 make the function fail. It has also been reported to fail
9787 when using a security agent application.
Bram Moolenaar071d4272004-06-13 20:20:40 +00009788 Unlike ":!cmd" there is no automatic check for changed files.
9789 Use |:checktime| to force a check.
9790
Bram Moolenaara74e4942019-08-04 17:35:53 +02009791 Can also be used as a |method|: >
9792 :echo GetCmd()->system()
9793
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009794
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009795systemlist({expr} [, {input}]) *systemlist()*
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009796 Same as |system()|, but returns a |List| with lines (parts of
9797 output separated by NL) with NULs transformed into NLs. Output
9798 is the same as |readfile()| will output with {binary} argument
Bram Moolenaar5be4cee2019-09-27 19:34:08 +02009799 set to "b", except that there is no extra empty item when the
9800 result ends in a NL.
9801 Note that on MS-Windows you may get trailing CR characters.
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009802
Bram Moolenaar5be4cee2019-09-27 19:34:08 +02009803 To see the difference between "echo hello" and "echo -n hello"
9804 use |system()| and |split()|: >
9805 echo system('echo hello')->split('\n', 1)
9806<
Bram Moolenaar975b5272016-03-15 23:10:59 +01009807 Returns an empty string on error.
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009808
Bram Moolenaara74e4942019-08-04 17:35:53 +02009809 Can also be used as a |method|: >
9810 :echo GetCmd()->systemlist()
9811
Bram Moolenaar39c29ed2014-04-05 19:44:40 +02009812
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009813tabpagebuflist([{arg}]) *tabpagebuflist()*
Bram Moolenaar32466aa2006-02-24 23:53:04 +00009814 The result is a |List|, where each item is the number of the
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009815 buffer associated with each window in the current tab page.
Bram Moolenaardc1f1642016-08-16 18:33:43 +02009816 {arg} specifies the number of the tab page to be used. When
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009817 omitted the current tab page is used.
9818 When {arg} is invalid the number zero is returned.
9819 To get a list of all buffers in all tabs use this: >
Bram Moolenaar61d35bd2012-03-28 20:51:51 +02009820 let buflist = []
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009821 for i in range(tabpagenr('$'))
Bram Moolenaar61d35bd2012-03-28 20:51:51 +02009822 call extend(buflist, tabpagebuflist(i + 1))
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009823 endfor
9824< Note that a buffer may appear in more than one window.
9825
Bram Moolenaarce90e362019-09-08 18:58:44 +02009826 Can also be used as a |method|: >
9827 GetTabpage()->tabpagebuflist()
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009828
9829tabpagenr([{arg}]) *tabpagenr()*
Bram Moolenaar7e8fd632006-02-18 22:14:51 +00009830 The result is a Number, which is the number of the current
9831 tab page. The first tab page has number 1.
9832 When the optional argument is "$", the number of the last tab
9833 page is returned (the tab page count).
9834 The number can be used with the |:tab| command.
9835
9836
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +01009837tabpagewinnr({tabarg} [, {arg}]) *tabpagewinnr()*
Bram Moolenaard04f4402010-08-15 13:30:34 +02009838 Like |winnr()| but for tab page {tabarg}.
Bram Moolenaarfaa959a2006-02-20 21:37:40 +00009839 {tabarg} specifies the number of tab page to be used.
9840 {arg} is used like with |winnr()|:
9841 - When omitted the current window number is returned. This is
9842 the window which will be used when going to this tab page.
9843 - When "$" the number of windows is returned.
9844 - When "#" the previous window nr is returned.
9845 Useful examples: >
9846 tabpagewinnr(1) " current window of tab page 1
9847 tabpagewinnr(4, '$') " number of windows in tab page 4
9848< When {tabarg} is invalid zero is returned.
9849
Bram Moolenaarce90e362019-09-08 18:58:44 +02009850 Can also be used as a |method|: >
9851 GetTabpage()->tabpagewinnr()
9852<
Bram Moolenaarfa1d1402006-03-25 21:59:56 +00009853 *tagfiles()*
9854tagfiles() Returns a |List| with the file names used to search for tags
9855 for the current buffer. This is the 'tags' option expanded.
9856
9857
Bram Moolenaarb0d45e72017-11-05 18:19:24 +01009858taglist({expr} [, {filename}]) *taglist()*
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009859 Returns a list of tags matching the regular expression {expr}.
Bram Moolenaarc6aafba2017-03-21 17:09:10 +01009860
9861 If {filename} is passed it is used to prioritize the results
9862 in the same way that |:tselect| does. See |tag-priority|.
9863 {filename} should be the full path of the file.
9864
Bram Moolenaard8c00872005-07-22 21:52:15 +00009865 Each list item is a dictionary with at least the following
9866 entries:
Bram Moolenaar280f1262006-01-30 00:14:18 +00009867 name Name of the tag.
9868 filename Name of the file where the tag is
Bram Moolenaaref2f6562007-05-06 13:32:59 +00009869 defined. It is either relative to the
9870 current directory or a full path.
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009871 cmd Ex command used to locate the tag in
9872 the file.
Bram Moolenaar280f1262006-01-30 00:14:18 +00009873 kind Type of the tag. The value for this
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009874 entry depends on the language specific
Bram Moolenaaref2f6562007-05-06 13:32:59 +00009875 kind values. Only available when
9876 using a tags file generated by
9877 Exuberant ctags or hdrtag.
Bram Moolenaar280f1262006-01-30 00:14:18 +00009878 static A file specific tag. Refer to
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009879 |static-tag| for more information.
Bram Moolenaaref2f6562007-05-06 13:32:59 +00009880 More entries may be present, depending on the content of the
9881 tags file: access, implementation, inherits and signature.
9882 Refer to the ctags documentation for information about these
9883 fields. For C code the fields "struct", "class" and "enum"
9884 may appear, they give the name of the entity the tag is
9885 contained in.
Bram Moolenaar5a8684e2005-07-30 22:43:24 +00009886
Bram Moolenaar214641f2017-03-05 17:04:09 +01009887 The ex-command "cmd" can be either an ex search pattern, a
Bram Moolenaar4317d9b2005-03-18 20:25:31 +00009888 line number or a line number followed by a byte number.
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009889
9890 If there are no matching tags, then an empty list is returned.
9891
9892 To get an exact tag match, the anchors '^' and '$' should be
Bram Moolenaara3e6bc92013-01-30 14:18:00 +01009893 used in {expr}. This also make the function work faster.
9894 Refer to |tag-regexp| for more information about the tag
9895 search regular expression pattern.
Bram Moolenaare2cc9702005-03-15 22:43:58 +00009896
9897 Refer to |'tags'| for information about how the tags file is
9898 located by Vim. Refer to |tags-file-format| for the format of
9899 the tags file generated by the different ctags tools.
9900
Bram Moolenaarce90e362019-09-08 18:58:44 +02009901 Can also be used as a |method|: >
9902 GetTagpattern()->taglist()
9903
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009904tan({expr}) *tan()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02009905 Return the tangent of {expr}, measured in radians, as a |Float|
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009906 in the range [-inf, inf].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02009907 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009908 Examples: >
9909 :echo tan(10)
9910< 0.648361 >
9911 :echo tan(-4.01)
9912< -1.181502
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02009913
9914 Can also be used as a |method|: >
9915 Compute()->tan()
9916<
Bram Moolenaardb84e452010-08-15 13:50:43 +02009917 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009918
9919
9920tanh({expr}) *tanh()*
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02009921 Return the hyperbolic tangent of {expr} as a |Float| in the
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009922 range [-1, 1].
Bram Moolenaar9855d6b2010-07-18 14:34:51 +02009923 {expr} must evaluate to a |Float| or a |Number|.
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009924 Examples: >
9925 :echo tanh(0.5)
9926< 0.462117 >
9927 :echo tanh(-1)
9928< -0.761594
Bram Moolenaar93cf85f2019-08-17 21:36:28 +02009929
9930 Can also be used as a |method|: >
9931 Compute()->tanh()
9932<
Bram Moolenaardb84e452010-08-15 13:50:43 +02009933 {only available when compiled with the |+float| feature}
Bram Moolenaardb7c6862010-05-21 16:33:48 +02009934
9935
Bram Moolenaar574860b2016-05-24 17:33:34 +02009936tempname() *tempname()* *temp-file-name*
9937 The result is a String, which is the name of a file that
Bram Moolenaar58b85342016-08-14 19:54:54 +02009938 doesn't exist. It can be used for a temporary file. The name
Bram Moolenaar574860b2016-05-24 17:33:34 +02009939 is different for at least 26 consecutive calls. Example: >
9940 :let tmpfile = tempname()
9941 :exe "redir > " . tmpfile
9942< For Unix, the file will be in a private directory |tempfile|.
9943 For MS-Windows forward slashes are used when the 'shellslash'
9944 option is set or when 'shellcmdflag' starts with '-'.
9945
Bram Moolenaared997ad2019-07-21 16:42:00 +02009946
Bram Moolenaar6bf2c622019-07-04 17:12:09 +02009947term_ functions are documented here: |terminal-function-details|
Bram Moolenaar574860b2016-05-24 17:33:34 +02009948
Bram Moolenaar54775062019-07-31 21:07:14 +02009949test_ functions are documented here: |test-functions-details|
Bram Moolenaar8e8df252016-05-25 21:23:21 +02009950
Bram Moolenaar574860b2016-05-24 17:33:34 +02009951
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02009952 *timer_info()*
9953timer_info([{id}])
9954 Return a list with information about timers.
9955 When {id} is given only information about this timer is
9956 returned. When timer {id} does not exist an empty list is
9957 returned.
9958 When {id} is omitted information about all timers is returned.
9959
9960 For each timer the information is stored in a Dictionary with
9961 these items:
9962 "id" the timer ID
9963 "time" time the timer was started with
9964 "remaining" time until the timer fires
9965 "repeat" number of times the timer will still fire;
Bram Moolenaarb73598e2016-08-07 18:22:53 +02009966 -1 means forever
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02009967 "callback" the callback
Bram Moolenaarb73598e2016-08-07 18:22:53 +02009968 "paused" 1 if the timer is paused, 0 otherwise
9969
Bram Moolenaarf92e58c2019-09-08 21:51:41 +02009970 Can also be used as a |method|: >
9971 GetTimer()->timer_info()
9972
9973< {only available when compiled with the |+timers| feature}
Bram Moolenaarb73598e2016-08-07 18:22:53 +02009974
9975timer_pause({timer}, {paused}) *timer_pause()*
9976 Pause or unpause a timer. A paused timer does not invoke its
Bram Moolenaardc1f1642016-08-16 18:33:43 +02009977 callback when its time expires. Unpausing a timer may cause
9978 the callback to be invoked almost immediately if enough time
9979 has passed.
Bram Moolenaarb73598e2016-08-07 18:22:53 +02009980
9981 Pausing a timer is useful to avoid the callback to be called
9982 for a short time.
9983
9984 If {paused} evaluates to a non-zero Number or a non-empty
9985 String, then the timer is paused, otherwise it is unpaused.
9986 See |non-zero-arg|.
9987
Bram Moolenaarf92e58c2019-09-08 21:51:41 +02009988 Can also be used as a |method|: >
9989 GetTimer()->timer_pause(1)
9990
9991< {only available when compiled with the |+timers| feature}
Bram Moolenaar8e97bd72016-08-06 22:05:07 +02009992
Bram Moolenaardc1f1642016-08-16 18:33:43 +02009993 *timer_start()* *timer* *timers*
Bram Moolenaar975b5272016-03-15 23:10:59 +01009994timer_start({time}, {callback} [, {options}])
9995 Create a timer and return the timer ID.
9996
9997 {time} is the waiting time in milliseconds. This is the
9998 minimum time before invoking the callback. When the system is
9999 busy or Vim is not waiting for input the time will be longer.
10000
10001 {callback} is the function to call. It can be the name of a
Bram Moolenaarf37506f2016-08-31 22:22:10 +020010002 function or a |Funcref|. It is called with one argument, which
Bram Moolenaar975b5272016-03-15 23:10:59 +010010003 is the timer ID. The callback is only invoked when Vim is
10004 waiting for input.
10005
10006 {options} is a dictionary. Supported entries:
10007 "repeat" Number of times to repeat calling the
Bram Moolenaarabd468e2016-09-08 22:22:43 +020010008 callback. -1 means forever. When not present
10009 the callback will be called once.
Bram Moolenaarc577d812017-07-08 22:37:34 +020010010 If the timer causes an error three times in a
10011 row the repeat is cancelled. This avoids that
10012 Vim becomes unusable because of all the error
10013 messages.
Bram Moolenaar975b5272016-03-15 23:10:59 +010010014
10015 Example: >
10016 func MyHandler(timer)
10017 echo 'Handler called'
10018 endfunc
10019 let timer = timer_start(500, 'MyHandler',
10020 \ {'repeat': 3})
10021< This will invoke MyHandler() three times at 500 msec
10022 intervals.
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010023
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010024 Can also be used as a |method|: >
10025 GetMsec()->timer_start(callback)
10026
10027< Not available in the |sandbox|.
Bram Moolenaar975b5272016-03-15 23:10:59 +010010028 {only available when compiled with the |+timers| feature}
10029
Bram Moolenaar03602ec2016-03-20 20:57:45 +010010030timer_stop({timer}) *timer_stop()*
Bram Moolenaar06d2d382016-05-20 17:24:11 +020010031 Stop a timer. The timer callback will no longer be invoked.
10032 {timer} is an ID returned by timer_start(), thus it must be a
Bram Moolenaar8e97bd72016-08-06 22:05:07 +020010033 Number. If {timer} does not exist there is no error.
Bram Moolenaar03602ec2016-03-20 20:57:45 +010010034
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010035 Can also be used as a |method|: >
10036 GetTimer()->timer_stop()
10037
10038< {only available when compiled with the |+timers| feature}
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010039
10040timer_stopall() *timer_stopall()*
10041 Stop all timers. The timer callbacks will no longer be
Bram Moolenaar809ce4d2019-07-13 21:21:40 +020010042 invoked. Useful if a timer is misbehaving. If there are no
10043 timers there is no error.
Bram Moolenaarb73598e2016-08-07 18:22:53 +020010044
10045 {only available when compiled with the |+timers| feature}
10046
Bram Moolenaar071d4272004-06-13 20:20:40 +000010047tolower({expr}) *tolower()*
10048 The result is a copy of the String given, with all uppercase
10049 characters turned into lowercase (just like applying |gu| to
10050 the string).
10051
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010052 Can also be used as a |method|: >
10053 GetText()->tolower()
10054
Bram Moolenaar071d4272004-06-13 20:20:40 +000010055toupper({expr}) *toupper()*
10056 The result is a copy of the String given, with all lowercase
10057 characters turned into uppercase (just like applying |gU| to
10058 the string).
10059
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010060 Can also be used as a |method|: >
10061 GetText()->toupper()
10062
Bram Moolenaar8299df92004-07-10 09:47:34 +000010063tr({src}, {fromstr}, {tostr}) *tr()*
10064 The result is a copy of the {src} string with all characters
10065 which appear in {fromstr} replaced by the character in that
10066 position in the {tostr} string. Thus the first character in
10067 {fromstr} is translated into the first character in {tostr}
10068 and so on. Exactly like the unix "tr" command.
10069 This code also deals with multibyte characters properly.
10070
10071 Examples: >
10072 echo tr("hello there", "ht", "HT")
10073< returns "Hello THere" >
10074 echo tr("<blob>", "<>", "{}")
10075< returns "{blob}"
10076
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010077 Can also be used as a |method|: >
10078 GetText()->tr(from, to)
10079
Bram Moolenaard473c8c2018-08-11 18:00:22 +020010080trim({text} [, {mask}]) *trim()*
Bram Moolenaar295ac5a2018-03-22 23:04:02 +010010081 Return {text} as a String where any character in {mask} is
10082 removed from the beginning and end of {text}.
10083 If {mask} is not given, {mask} is all characters up to 0x20,
10084 which includes Tab, space, NL and CR, plus the non-breaking
10085 space character 0xa0.
10086 This code deals with multibyte characters properly.
10087
10088 Examples: >
Bram Moolenaarab943432018-03-29 18:27:07 +020010089 echo trim(" some text ")
10090< returns "some text" >
10091 echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL"
Bram Moolenaar295ac5a2018-03-22 23:04:02 +010010092< returns "RESERVE_TAIL" >
Bram Moolenaarab943432018-03-29 18:27:07 +020010093 echo trim("rm<Xrm<>X>rrm", "rm<>")
10094< returns "Xrm<>X" (characters in the middle are not removed)
Bram Moolenaar295ac5a2018-03-22 23:04:02 +010010095
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010096 Can also be used as a |method|: >
10097 GetText()->trim()
10098
Bram Moolenaar446cb832008-06-24 21:56:24 +000010099trunc({expr}) *trunc()*
Bram Moolenaarc236c162008-07-13 17:41:49 +000010100 Return the largest integral value with magnitude less than or
Bram Moolenaar446cb832008-06-24 21:56:24 +000010101 equal to {expr} as a |Float| (truncate towards zero).
10102 {expr} must evaluate to a |Float| or a |Number|.
10103 Examples: >
10104 echo trunc(1.456)
10105< 1.0 >
10106 echo trunc(-5.456)
10107< -5.0 >
10108 echo trunc(4.0)
10109< 4.0
Bram Moolenaar93cf85f2019-08-17 21:36:28 +020010110
10111 Can also be used as a |method|: >
10112 Compute()->trunc()
10113<
Bram Moolenaar446cb832008-06-24 21:56:24 +000010114 {only available when compiled with the |+float| feature}
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010010115
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000010116 *type()*
Bram Moolenaardf48fb42016-07-22 21:50:18 +020010117type({expr}) The result is a Number representing the type of {expr}.
10118 Instead of using the number directly, it is better to use the
10119 v:t_ variable that has the value:
10120 Number: 0 |v:t_number|
10121 String: 1 |v:t_string|
10122 Funcref: 2 |v:t_func|
10123 List: 3 |v:t_list|
10124 Dictionary: 4 |v:t_dict|
10125 Float: 5 |v:t_float|
10126 Boolean: 6 |v:t_bool| (v:false and v:true)
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010127 None: 7 |v:t_none| (v:null and v:none)
10128 Job: 8 |v:t_job|
10129 Channel: 9 |v:t_channel|
10130 Blob: 10 |v:t_blob|
Bram Moolenaardf48fb42016-07-22 21:50:18 +020010131 For backward compatibility, this method can be used: >
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000010132 :if type(myvar) == type(0)
10133 :if type(myvar) == type("")
10134 :if type(myvar) == type(function("tr"))
10135 :if type(myvar) == type([])
Bram Moolenaar748bf032005-02-02 23:04:36 +000010136 :if type(myvar) == type({})
Bram Moolenaar446cb832008-06-24 21:56:24 +000010137 :if type(myvar) == type(0.0)
Bram Moolenaar705ada12016-01-24 17:56:50 +010010138 :if type(myvar) == type(v:false)
Bram Moolenaar6463ca22016-02-13 17:04:46 +010010139 :if type(myvar) == type(v:none)
Bram Moolenaardf48fb42016-07-22 21:50:18 +020010140< To check if the v:t_ variables exist use this: >
10141 :if exists('v:t_number')
Bram Moolenaar071d4272004-06-13 20:20:40 +000010142
Bram Moolenaarac92e252019-08-03 21:58:38 +020010143< Can also be used as a |method|: >
10144 mylist->type()
10145
Bram Moolenaara17d4c12010-05-30 18:30:36 +020010146undofile({name}) *undofile()*
10147 Return the name of the undo file that would be used for a file
10148 with name {name} when writing. This uses the 'undodir'
10149 option, finding directories that exist. It does not check if
Bram Moolenaar860cae12010-06-05 23:22:07 +020010150 the undo file exists.
Bram Moolenaar945e2db2010-06-05 17:43:32 +020010151 {name} is always expanded to the full path, since that is what
10152 is used internally.
Bram Moolenaar80716072012-05-01 21:14:34 +020010153 If {name} is empty undofile() returns an empty string, since a
10154 buffer without a file name will not write an undo file.
Bram Moolenaara17d4c12010-05-30 18:30:36 +020010155 Useful in combination with |:wundo| and |:rundo|.
Bram Moolenaarb328cca2019-01-06 16:24:01 +010010156 When compiled without the |+persistent_undo| option this always
Bram Moolenaara17d4c12010-05-30 18:30:36 +020010157 returns an empty string.
10158
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010159 Can also be used as a |method|: >
10160 GetFilename()->undofile()
10161
Bram Moolenaara800b422010-06-27 01:15:55 +020010162undotree() *undotree()*
10163 Return the current state of the undo tree in a dictionary with
10164 the following items:
10165 "seq_last" The highest undo sequence number used.
10166 "seq_cur" The sequence number of the current position in
10167 the undo tree. This differs from "seq_last"
10168 when some changes were undone.
10169 "time_cur" Time last used for |:earlier| and related
10170 commands. Use |strftime()| to convert to
10171 something readable.
10172 "save_last" Number of the last file write. Zero when no
10173 write yet.
Bram Moolenaar730cde92010-06-27 05:18:54 +020010174 "save_cur" Number of the current position in the undo
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010010175 tree.
Bram Moolenaara800b422010-06-27 01:15:55 +020010176 "synced" Non-zero when the last undo block was synced.
10177 This happens when waiting from input from the
10178 user. See |undo-blocks|.
10179 "entries" A list of dictionaries with information about
10180 undo blocks.
10181
10182 The first item in the "entries" list is the oldest undo item.
10183 Each List item is a Dictionary with these items:
10184 "seq" Undo sequence number. Same as what appears in
10185 |:undolist|.
10186 "time" Timestamp when the change happened. Use
10187 |strftime()| to convert to something readable.
10188 "newhead" Only appears in the item that is the last one
10189 that was added. This marks the last change
10190 and where further changes will be added.
10191 "curhead" Only appears in the item that is the last one
10192 that was undone. This marks the current
10193 position in the undo tree, the block that will
10194 be used by a redo command. When nothing was
10195 undone after the last change this item will
10196 not appear anywhere.
10197 "save" Only appears on the last block before a file
10198 write. The number is the write count. The
10199 first write has number 1, the last one the
10200 "save_last" mentioned above.
10201 "alt" Alternate entry. This is again a List of undo
10202 blocks. Each item may again have an "alt"
10203 item.
10204
Bram Moolenaar327aa022014-03-25 18:24:23 +010010205uniq({list} [, {func} [, {dict}]]) *uniq()* *E882*
10206 Remove second and succeeding copies of repeated adjacent
10207 {list} items in-place. Returns {list}. If you want a list
10208 to remain unmodified make a copy first: >
10209 :let newlist = uniq(copy(mylist))
10210< The default compare function uses the string representation of
10211 each item. For the use of {func} and {dict} see |sort()|.
10212
Bram Moolenaarac92e252019-08-03 21:58:38 +020010213 Can also be used as a |method|: >
10214 mylist->uniq()
10215
Bram Moolenaar677ee682005-01-27 14:41:15 +000010216values({dict}) *values()*
Bram Moolenaar58b85342016-08-14 19:54:54 +020010217 Return a |List| with all the values of {dict}. The |List| is
Bram Moolenaar0d17f0d2019-01-22 22:20:38 +010010218 in arbitrary order. Also see |items()| and |keys()|.
Bram Moolenaar677ee682005-01-27 14:41:15 +000010219
Bram Moolenaarac92e252019-08-03 21:58:38 +020010220 Can also be used as a |method|: >
10221 mydict->values()
Bram Moolenaar677ee682005-01-27 14:41:15 +000010222
Bram Moolenaar071d4272004-06-13 20:20:40 +000010223virtcol({expr}) *virtcol()*
10224 The result is a Number, which is the screen column of the file
10225 position given with {expr}. That is, the last screen position
10226 occupied by the character at that position, when the screen
10227 would be of unlimited width. When there is a <Tab> at the
10228 position, the returned Number will be the column at the end of
10229 the <Tab>. For example, for a <Tab> in column 1, with 'ts'
Bram Moolenaar61d35bd2012-03-28 20:51:51 +020010230 set to 8, it returns 8. |conceal| is ignored.
Bram Moolenaar477933c2007-07-17 14:32:23 +000010231 For the byte position use |col()|.
10232 For the use of {expr} see |col()|.
10233 When 'virtualedit' is used {expr} can be [lnum, col, off], where
Bram Moolenaar0b238792006-03-02 22:49:12 +000010234 "off" is the offset in screen columns from the start of the
Bram Moolenaard46bbc72007-05-12 14:38:41 +000010235 character. E.g., a position within a <Tab> or after the last
Bram Moolenaar97293012011-07-18 19:40:27 +020010236 character. When "off" is omitted zero is used.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010237 When Virtual editing is active in the current mode, a position
10238 beyond the end of the line can be returned. |'virtualedit'|
10239 The accepted positions are:
10240 . the cursor position
10241 $ the end of the cursor line (the result is the
10242 number of displayed characters in the cursor line
10243 plus one)
10244 'x position of mark x (if the mark is not set, 0 is
10245 returned)
Bram Moolenaare3faf442014-12-14 01:27:49 +010010246 v In Visual mode: the start of the Visual area (the
10247 cursor is the end). When not in Visual mode
10248 returns the cursor position. Differs from |'<| in
10249 that it's updated right away.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010250 Note that only marks in the current file can be used.
10251 Examples: >
10252 virtcol(".") with text "foo^Lbar", with cursor on the "^L", returns 5
10253 virtcol("$") with text "foo^Lbar", returns 9
Bram Moolenaar446cb832008-06-24 21:56:24 +000010254 virtcol("'t") with text " there", with 't at 'h', returns 6
Bram Moolenaar58b85342016-08-14 19:54:54 +020010255< The first column is 1. 0 is returned for an error.
Bram Moolenaaref2f6562007-05-06 13:32:59 +000010256 A more advanced example that echoes the maximum length of
10257 all lines: >
10258 echo max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
10259
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010260< Can also be used as a |method|: >
10261 GetPos()->virtcol()
Bram Moolenaar071d4272004-06-13 20:20:40 +000010262
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010263
10264visualmode([{expr}]) *visualmode()*
Bram Moolenaar071d4272004-06-13 20:20:40 +000010265 The result is a String, which describes the last Visual mode
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000010266 used in the current buffer. Initially it returns an empty
10267 string, but once Visual mode has been used, it returns "v",
10268 "V", or "<CTRL-V>" (a single CTRL-V character) for
10269 character-wise, line-wise, or block-wise Visual mode
10270 respectively.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010271 Example: >
10272 :exe "normal " . visualmode()
10273< This enters the same Visual mode as before. It is also useful
10274 in scripts if you wish to act differently depending on the
10275 Visual mode that was used.
Bram Moolenaar446cb832008-06-24 21:56:24 +000010276 If Visual mode is active, use |mode()| to get the Visual mode
10277 (e.g., in a |:vmap|).
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010278 If {expr} is supplied and it evaluates to a non-zero Number or
Bram Moolenaar05bb9532008-07-04 09:44:11 +000010279 a non-empty String, then the Visual mode will be cleared and
Bram Moolenaare381d3d2016-07-07 14:50:41 +020010280 the old value is returned. See |non-zero-arg|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010281
Bram Moolenaar8738fc12013-02-20 17:59:11 +010010282wildmenumode() *wildmenumode()*
Bram Moolenaare381d3d2016-07-07 14:50:41 +020010283 Returns |TRUE| when the wildmenu is active and |FALSE|
Bram Moolenaar8738fc12013-02-20 17:59:11 +010010284 otherwise. See 'wildmenu' and 'wildmode'.
10285 This can be used in mappings to handle the 'wildcharm' option
10286 gracefully. (Makes only sense with |mapmode-c| mappings).
10287
10288 For example to make <c-j> work like <down> in wildmode, use: >
10289 :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
10290<
10291 (Note, this needs the 'wildcharm' option set appropriately).
10292
Bram Moolenaar868b7b62019-05-29 21:44:40 +020010293win_execute({id}, {command} [, {silent}]) *win_execute()*
10294 Like `execute()` but in the context of window {id}.
10295 The window will temporarily be made the current window,
Bram Moolenaarb4230122019-05-30 18:40:53 +020010296 without triggering autocommands. When executing {command}
10297 autocommands will be triggered, this may have unexpected side
10298 effects. Use |:noautocmd| if needed.
Bram Moolenaar868b7b62019-05-29 21:44:40 +020010299 Example: >
Bram Moolenaarb4230122019-05-30 18:40:53 +020010300 call win_execute(winid, 'set syntax=python')
10301< Doing the same with `setwinvar()` would not trigger
10302 autocommands and not actually show syntax highlighting.
Bram Moolenaar61da1bf2019-06-06 12:14:49 +020010303 *E994*
10304 Not all commands are allowed in popup windows.
Bram Moolenaar56c860c2019-08-17 20:09:31 +020010305 When window {id} does not exist then no error is given.
Bram Moolenaar8738fc12013-02-20 17:59:11 +010010306
Bram Moolenaar2e693a82019-10-16 22:35:02 +020010307 Can also be used as a |method|, the base is passed as the
10308 second argument: >
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010309 GetCommand()->win_execute(winid)
10310
Bram Moolenaar9cdf86b2016-03-13 19:04:51 +010010311win_findbuf({bufnr}) *win_findbuf()*
Bram Moolenaar7571d552016-08-18 22:54:46 +020010312 Returns a list with |window-ID|s for windows that contain
10313 buffer {bufnr}. When there is none the list is empty.
Bram Moolenaar9cdf86b2016-03-13 19:04:51 +010010314
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010315 Can also be used as a |method|: >
10316 GetBufnr()->win_findbuf()
10317
Bram Moolenaar86edef62016-03-13 18:07:30 +010010318win_getid([{win} [, {tab}]]) *win_getid()*
Bram Moolenaar7571d552016-08-18 22:54:46 +020010319 Get the |window-ID| for the specified window.
Bram Moolenaar86edef62016-03-13 18:07:30 +010010320 When {win} is missing use the current window.
10321 With {win} this is the window number. The top window has
Bram Moolenaarba3ff532018-11-04 14:45:49 +010010322 number 1.
Bram Moolenaar86edef62016-03-13 18:07:30 +010010323 Without {tab} use the current tab, otherwise the tab with
10324 number {tab}. The first tab has number one.
10325 Return zero if the window cannot be found.
10326
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010327 Can also be used as a |method|: >
10328 GetWinnr()->win_getid()
10329
Bram Moolenaar86edef62016-03-13 18:07:30 +010010330win_gotoid({expr}) *win_gotoid()*
10331 Go to window with ID {expr}. This may also change the current
10332 tabpage.
10333 Return 1 if successful, 0 if the window cannot be found.
10334
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010335 Can also be used as a |method|: >
10336 GetWinid()->win_gotoid()
10337
Bram Moolenaar03413f42016-04-12 21:07:15 +020010338win_id2tabwin({expr}) *win_id2tabwin()*
Bram Moolenaar86edef62016-03-13 18:07:30 +010010339 Return a list with the tab number and window number of window
10340 with ID {expr}: [tabnr, winnr].
10341 Return [0, 0] if the window cannot be found.
10342
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010343 Can also be used as a |method|: >
10344 GetWinid()->win_id2tabwin()
10345
Bram Moolenaar86edef62016-03-13 18:07:30 +010010346win_id2win({expr}) *win_id2win()*
10347 Return the window number of window with ID {expr}.
10348 Return 0 if the window cannot be found in the current tabpage.
10349
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010350 Can also be used as a |method|: >
10351 GetWinid()->win_id2win()
10352
Bram Moolenaar22044dc2017-12-02 15:43:37 +010010353win_screenpos({nr}) *win_screenpos()*
10354 Return the screen position of window {nr} as a list with two
10355 numbers: [row, col]. The first window always has position
Bram Moolenaar7132ddc2018-07-15 17:01:11 +020010356 [1, 1], unless there is a tabline, then it is [2, 1].
Bram Moolenaar22044dc2017-12-02 15:43:37 +010010357 {nr} can be the window number or the |window-ID|.
10358 Return [0, 0] if the window cannot be found in the current
10359 tabpage.
10360
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010361 Can also be used as a |method|: >
10362 GetWinid()->win_screenpos()
10363<
Bram Moolenaard20dcb32019-09-10 21:22:58 +020010364win_splitmove({nr}, {target} [, {options}]) *win_splitmove()*
10365 Move the window {nr} to a new split of the window {target}.
10366 This is similar to moving to {target}, creating a new window
10367 using |:split| but having the same contents as window {nr}, and
10368 then closing {nr}.
10369
10370 Both {nr} and {target} can be window numbers or |window-ID|s.
Bram Moolenaar29634562020-01-09 21:46:04 +010010371 Both must be in the current tab page.
Bram Moolenaard20dcb32019-09-10 21:22:58 +020010372
10373 Returns zero for success, non-zero for failure.
10374
10375 {options} is a Dictionary with the following optional entries:
10376 "vertical" When TRUE, the split is created vertically,
10377 like with |:vsplit|.
10378 "rightbelow" When TRUE, the split is made below or to the
10379 right (if vertical). When FALSE, it is done
10380 above or to the left (if vertical). When not
10381 present, the values of 'splitbelow' and
10382 'splitright' are used.
10383
10384 Can also be used as a |method|: >
10385 GetWinid()->win_splitmove(target)
10386<
Bram Moolenaar071d4272004-06-13 20:20:40 +000010387 *winbufnr()*
10388winbufnr({nr}) The result is a Number, which is the number of the buffer
Bram Moolenaar888ccac2016-06-04 18:49:36 +020010389 associated with window {nr}. {nr} can be the window number or
Bram Moolenaar7571d552016-08-18 22:54:46 +020010390 the |window-ID|.
Bram Moolenaar888ccac2016-06-04 18:49:36 +020010391 When {nr} is zero, the number of the buffer in the current
10392 window is returned.
10393 When window {nr} doesn't exist, -1 is returned.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010394 Example: >
10395 :echo "The file in the current window is " . bufname(winbufnr(0))
10396<
Bram Moolenaare49fbff2019-08-21 22:50:07 +020010397 Can also be used as a |method|: >
10398 FindWindow()->winbufnr()->bufname()
10399<
Bram Moolenaar071d4272004-06-13 20:20:40 +000010400 *wincol()*
10401wincol() The result is a Number, which is the virtual column of the
10402 cursor in the window. This is counting screen cells from the
10403 left side of the window. The leftmost column is one.
10404
Bram Moolenaar0c1e3742019-12-27 13:49:24 +010010405 *windowsversion()*
10406windowsversion()
10407 The result is a String. For MS-Windows it indicates the OS
10408 version. E.g, Windows 10 is "10.0", Windows 8 is "6.2",
10409 Windows XP is "5.1". For non-MS-Windows systems the result is
10410 an empty string.
10411
Bram Moolenaar071d4272004-06-13 20:20:40 +000010412winheight({nr}) *winheight()*
10413 The result is a Number, which is the height of window {nr}.
Bram Moolenaar7571d552016-08-18 22:54:46 +020010414 {nr} can be the window number or the |window-ID|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010415 When {nr} is zero, the height of the current window is
10416 returned. When window {nr} doesn't exist, -1 is returned.
10417 An existing window always has a height of zero or more.
Bram Moolenaar37c64c72017-09-19 22:06:03 +020010418 This excludes any window toolbar line.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010419 Examples: >
10420 :echo "The current window has " . winheight(0) . " lines."
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010421
10422< Can also be used as a |method|: >
10423 GetWinid()->winheight()
Bram Moolenaar071d4272004-06-13 20:20:40 +000010424<
Bram Moolenaar0f6b4f02018-08-21 16:56:34 +020010425winlayout([{tabnr}]) *winlayout()*
10426 The result is a nested List containing the layout of windows
10427 in a tabpage.
10428
10429 Without {tabnr} use the current tabpage, otherwise the tabpage
10430 with number {tabnr}. If the tabpage {tabnr} is not found,
10431 returns an empty list.
10432
10433 For a leaf window, it returns:
10434 ['leaf', {winid}]
10435 For horizontally split windows, which form a column, it
10436 returns:
10437 ['col', [{nested list of windows}]]
10438 For vertically split windows, which form a row, it returns:
10439 ['row', [{nested list of windows}]]
10440
10441 Example: >
10442 " Only one window in the tab page
10443 :echo winlayout()
10444 ['leaf', 1000]
10445 " Two horizontally split windows
10446 :echo winlayout()
10447 ['col', [['leaf', 1000], ['leaf', 1001]]]
10448 " Three horizontally split windows, with two
10449 " vertically split windows in the middle window
10450 :echo winlayout(2)
10451 ['col', [['leaf', 1002], ['row', ['leaf', 1003],
10452 ['leaf', 1001]]], ['leaf', 1000]]
10453<
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010454 Can also be used as a |method|: >
10455 GetTabnr()->winlayout()
10456<
Bram Moolenaar071d4272004-06-13 20:20:40 +000010457 *winline()*
10458winline() The result is a Number, which is the screen line of the cursor
Bram Moolenaar58b85342016-08-14 19:54:54 +020010459 in the window. This is counting screen lines from the top of
Bram Moolenaar071d4272004-06-13 20:20:40 +000010460 the window. The first line is one.
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +000010461 If the cursor was moved the view on the file will be updated
10462 first, this may cause a scroll.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010463
10464 *winnr()*
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000010465winnr([{arg}]) The result is a Number, which is the number of the current
10466 window. The top window has number 1.
Bram Moolenaar560979e2020-02-04 22:53:05 +010010467 Returns zero for a popup window.
Bram Moolenaar46ad2882019-04-08 20:01:47 +020010468
10469 The optional argument {arg} supports the following values:
10470 $ the number of the last window (the window
10471 count).
10472 # the number of the last accessed window (where
10473 |CTRL-W_p| goes to). If there is no previous
10474 window or it is in another tab page 0 is
10475 returned.
10476 {N}j the number of the Nth window below the
10477 current window (where |CTRL-W_j| goes to).
10478 {N}k the number of the Nth window above the current
10479 window (where |CTRL-W_k| goes to).
10480 {N}h the number of the Nth window left of the
10481 current window (where |CTRL-W_h| goes to).
10482 {N}l the number of the Nth window right of the
10483 current window (where |CTRL-W_l| goes to).
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000010484 The number can be used with |CTRL-W_w| and ":wincmd w"
10485 |:wincmd|.
Bram Moolenaar690afe12017-01-28 18:34:47 +010010486 Also see |tabpagewinnr()| and |win_getid()|.
Bram Moolenaar46ad2882019-04-08 20:01:47 +020010487 Examples: >
10488 let window_count = winnr('$')
10489 let prev_window = winnr('#')
10490 let wnum = winnr('3k')
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010491
10492< Can also be used as a |method|: >
10493 GetWinval()->winnr()
Bram Moolenaar46ad2882019-04-08 20:01:47 +020010494<
Bram Moolenaar071d4272004-06-13 20:20:40 +000010495 *winrestcmd()*
10496winrestcmd() Returns a sequence of |:resize| commands that should restore
10497 the current window sizes. Only works properly when no windows
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010498 are opened or closed and the current window and tab page is
10499 unchanged.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010500 Example: >
10501 :let cmd = winrestcmd()
10502 :call MessWithWindowSizes()
10503 :exe cmd
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010504<
10505 *winrestview()*
10506winrestview({dict})
10507 Uses the |Dictionary| returned by |winsaveview()| to restore
10508 the view of the current window.
Bram Moolenaar82c25852014-05-28 16:47:16 +020010509 Note: The {dict} does not have to contain all values, that are
10510 returned by |winsaveview()|. If values are missing, those
10511 settings won't be restored. So you can use: >
10512 :call winrestview({'curswant': 4})
10513<
10514 This will only set the curswant value (the column the cursor
10515 wants to move on vertical movements) of the cursor to column 5
10516 (yes, that is 5), while all other settings will remain the
10517 same. This is useful, if you set the cursor position manually.
10518
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010519 If you have changed the values the result is unpredictable.
10520 If the window size changed the result won't be the same.
10521
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010522 Can also be used as a |method|: >
10523 GetView()->winrestview()
10524<
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010525 *winsaveview()*
10526winsaveview() Returns a |Dictionary| that contains information to restore
10527 the view of the current window. Use |winrestview()| to
10528 restore the view.
10529 This is useful if you have a mapping that jumps around in the
10530 buffer and you want to go back to the original view.
10531 This does not save fold information. Use the 'foldenable'
Bram Moolenaardb552d602006-03-23 22:59:57 +000010532 option to temporarily switch off folding, so that folds are
Bram Moolenaar07d87792014-07-19 14:04:47 +020010533 not opened when moving around. This may have side effects.
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010534 The return value includes:
10535 lnum cursor line number
Bram Moolenaar82c25852014-05-28 16:47:16 +020010536 col cursor column (Note: the first column
10537 zero, as opposed to what getpos()
10538 returns)
Bram Moolenaar87b5ca52006-03-04 21:55:31 +000010539 coladd cursor column offset for 'virtualedit'
10540 curswant column for vertical movement
10541 topline first line in the window
10542 topfill filler lines, only in diff mode
10543 leftcol first column displayed
10544 skipcol columns skipped
10545 Note that no option values are saved.
10546
Bram Moolenaar071d4272004-06-13 20:20:40 +000010547
10548winwidth({nr}) *winwidth()*
10549 The result is a Number, which is the width of window {nr}.
Bram Moolenaar7571d552016-08-18 22:54:46 +020010550 {nr} can be the window number or the |window-ID|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010551 When {nr} is zero, the width of the current window is
10552 returned. When window {nr} doesn't exist, -1 is returned.
10553 An existing window always has a width of zero or more.
10554 Examples: >
10555 :echo "The current window has " . winwidth(0) . " columns."
10556 :if winwidth(0) <= 50
Bram Moolenaar7567d0b2017-11-16 23:04:15 +010010557 : 50 wincmd |
Bram Moolenaar071d4272004-06-13 20:20:40 +000010558 :endif
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010559< For getting the terminal or screen size, see the 'columns'
10560 option.
Bram Moolenaar22fcfad2016-07-01 18:17:26 +020010561
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010562 Can also be used as a |method|: >
10563 GetWinid()->winwidth()
10564
Bram Moolenaar22fcfad2016-07-01 18:17:26 +020010565
Bram Moolenaared767a22016-01-03 22:49:16 +010010566wordcount() *wordcount()*
10567 The result is a dictionary of byte/chars/word statistics for
10568 the current buffer. This is the same info as provided by
10569 |g_CTRL-G|
10570 The return value includes:
10571 bytes Number of bytes in the buffer
10572 chars Number of chars in the buffer
10573 words Number of words in the buffer
10574 cursor_bytes Number of bytes before cursor position
10575 (not in Visual mode)
10576 cursor_chars Number of chars before cursor position
10577 (not in Visual mode)
10578 cursor_words Number of words before cursor position
10579 (not in Visual mode)
10580 visual_bytes Number of bytes visually selected
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010581 (only in Visual mode)
Bram Moolenaared767a22016-01-03 22:49:16 +010010582 visual_chars Number of chars visually selected
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010583 (only in Visual mode)
Bram Moolenaarc572da52017-08-27 16:52:01 +020010584 visual_words Number of words visually selected
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010585 (only in Visual mode)
Bram Moolenaared767a22016-01-03 22:49:16 +010010586
10587
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +000010588 *writefile()*
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010010589writefile({object}, {fname} [, {flags}])
10590 When {object} is a |List| write it to file {fname}. Each list
10591 item is separated with a NL. Each list item must be a String
10592 or Number.
Bram Moolenaar6b2e9382014-11-05 18:06:01 +010010593 When {flags} contains "b" then binary mode is used: There will
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +000010594 not be a NL after the last list item. An empty item at the
10595 end does cause the last line in the file to end in a NL.
Bram Moolenaar6b2e9382014-11-05 18:06:01 +010010596
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010010597 When {object} is a |Blob| write the bytes to file {fname}
10598 unmodified.
10599
Bram Moolenaar6b2e9382014-11-05 18:06:01 +010010600 When {flags} contains "a" then append mode is used, lines are
Bram Moolenaar46fceaa2016-10-23 21:21:08 +020010601 appended to the file: >
Bram Moolenaar6b2e9382014-11-05 18:06:01 +010010602 :call writefile(["foo"], "event.log", "a")
10603 :call writefile(["bar"], "event.log", "a")
Bram Moolenaar7567d0b2017-11-16 23:04:15 +010010604<
10605 When {flags} contains "s" then fsync() is called after writing
10606 the file. This flushes the file to disk, if possible. This
10607 takes more time but avoids losing the file if the system
10608 crashes.
Bram Moolenaar74240d32017-12-10 15:26:15 +010010609 When {flags} does not contain "S" or "s" then fsync() is
10610 called if the 'fsync' option is set.
Bram Moolenaar7567d0b2017-11-16 23:04:15 +010010611 When {flags} contains "S" then fsync() is not called, even
10612 when 'fsync' is set.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010010613
Bram Moolenaar7567d0b2017-11-16 23:04:15 +010010614 All NL characters are replaced with a NUL character.
Bram Moolenaar3a7c85b2005-02-05 21:39:53 +000010615 Inserting CR characters needs to be done before passing {list}
10616 to writefile().
10617 An existing file is overwritten, if possible.
10618 When the write fails -1 is returned, otherwise 0. There is an
10619 error message if the file can't be created or when writing
10620 fails.
10621 Also see |readfile()|.
10622 To copy a file byte for byte: >
10623 :let fl = readfile("foo", "b")
10624 :call writefile(fl, "foocopy", "b")
Bram Moolenaard6e256c2011-12-14 15:32:50 +010010625
Bram Moolenaarf92e58c2019-09-08 21:51:41 +020010626< Can also be used as a |method|: >
10627 GetText()->writefile("thefile")
10628
Bram Moolenaard6e256c2011-12-14 15:32:50 +010010629
10630xor({expr}, {expr}) *xor()*
10631 Bitwise XOR on the two arguments. The arguments are converted
10632 to a number. A List, Dict or Float argument causes an error.
10633 Example: >
10634 :let bits = xor(bits, 0x80)
Bram Moolenaar2e693a82019-10-16 22:35:02 +020010635<
10636 Can also be used as a |method|: >
Bram Moolenaar073e4b92019-08-18 23:01:56 +020010637 :let bits = bits->xor(0x80)
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010010638<
Bram Moolenaard6e256c2011-12-14 15:32:50 +010010639
Bram Moolenaar071d4272004-06-13 20:20:40 +000010640 *feature-list*
Bram Moolenaarade0d392020-01-21 22:33:58 +010010641There are three types of features:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000106421. Features that are only supported when they have been enabled when Vim
10643 was compiled |+feature-list|. Example: >
10644 :if has("cindent")
106452. Features that are only supported when certain conditions have been met.
10646 Example: >
10647 :if has("gui_running")
10648< *has-patch*
Bram Moolenaar2f018892018-05-18 18:12:06 +0200106493. Beyond a certain version or at a certain version and including a specific
10650 patch. The "patch-7.4.248" feature means that the Vim version is 7.5 or
10651 later, or it is version 7.4 and patch 248 was included. Example: >
Bram Moolenaarbcb98982014-05-01 14:08:19 +020010652 :if has("patch-7.4.248")
Bram Moolenaar2f018892018-05-18 18:12:06 +020010653< Note that it's possible for patch 248 to be omitted even though 249 is
10654 included. Only happens when cherry-picking patches.
10655 Note that this form only works for patch 7.4.237 and later, before that
10656 you need to check for the patch and the v:version. Example (checking
10657 version 6.2.148 or later): >
10658 :if v:version > 602 || (v:version == 602 && has("patch148"))
Bram Moolenaar071d4272004-06-13 20:20:40 +000010659
Bram Moolenaard823fa92016-08-12 16:29:27 +020010660Hint: To find out if Vim supports backslashes in a file name (MS-Windows),
10661use: `if exists('+shellslash')`
10662
10663
Bram Moolenaar7cba6c02013-09-05 22:13:31 +020010664acl Compiled with |ACL| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010665all_builtin_terms Compiled with all builtin terminals enabled.
10666amiga Amiga version of Vim.
10667arabic Compiled with Arabic support |Arabic|.
10668arp Compiled with ARP support (Amiga).
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010669autocmd Compiled with autocommand support. (always true)
Bram Moolenaar91f84f62018-07-29 15:07:52 +020010670autochdir Compiled with support for 'autochdir'
Bram Moolenaare42a6d22017-11-12 19:21:51 +010010671autoservername Automatically enable |clientserver|
Bram Moolenaar071d4272004-06-13 20:20:40 +000010672balloon_eval Compiled with |balloon-eval| support.
Bram Moolenaar45360022005-07-21 21:08:21 +000010673balloon_multiline GUI supports multiline balloons.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010674beos BeOS version of Vim.
10675browse Compiled with |:browse| support, and browse() will
10676 work.
Bram Moolenaar30b65812012-07-12 22:01:11 +020010677browsefilter Compiled with support for |browsefilter|.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010678bsd Compiled on an OS in the BSD family (excluding macOS).
Bram Moolenaar071d4272004-06-13 20:20:40 +000010679builtin_terms Compiled with some builtin terminals.
10680byte_offset Compiled with support for 'o' in 'statusline'
10681cindent Compiled with 'cindent' support.
10682clientserver Compiled with remote invocation support |clientserver|.
10683clipboard Compiled with 'clipboard' support.
Bram Moolenaar4999a7f2019-08-10 22:21:48 +020010684clipboard_working Compiled with 'clipboard' support and it can be used.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010685cmdline_compl Compiled with |cmdline-completion| support.
10686cmdline_hist Compiled with |cmdline-history| support.
10687cmdline_info Compiled with 'showcmd' and 'ruler' support.
10688comments Compiled with |'comments'| support.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010689compatible Compiled to be very Vi compatible.
Bram Moolenaaraa5df7e2019-02-03 14:53:10 +010010690conpty Platform where |ConPTY| can be used.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010691cryptv Compiled with encryption support |encryption|.
10692cscope Compiled with |cscope| support.
Bram Moolenaar314dd792019-02-03 15:27:20 +010010693cursorbind Compiled with |'cursorbind'| (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010694debug Compiled with "DEBUG" defined.
10695dialog_con Compiled with console dialog support.
10696dialog_gui Compiled with GUI dialog support.
10697diff Compiled with |vimdiff| and 'diff' support.
10698digraphs Compiled with support for digraphs.
Bram Moolenaar58b85342016-08-14 19:54:54 +020010699directx Compiled with support for DirectX and 'renderoptions'.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010700dnd Compiled with support for the "~ register |quote_~|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010701ebcdic Compiled on a machine with ebcdic character set.
10702emacs_tags Compiled with support for Emacs tags.
10703eval Compiled with expression evaluation support. Always
10704 true, of course!
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010705ex_extra |+ex_extra| (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010706extra_search Compiled with support for |'incsearch'| and
10707 |'hlsearch'|
Bram Moolenaar4ceaa3a2019-12-03 22:49:09 +010010708farsi Support for Farsi was removed |farsi|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010709file_in_path Compiled with support for |gf| and |<cfile>|
Bram Moolenaar26a60b42005-02-22 08:49:11 +000010710filterpipe When 'shelltemp' is off pipes are used for shell
10711 read/write/filter commands
Bram Moolenaar071d4272004-06-13 20:20:40 +000010712find_in_path Compiled with support for include file searches
10713 |+find_in_path|.
Bram Moolenaar446cb832008-06-24 21:56:24 +000010714float Compiled with support for |Float|.
Bram Moolenaar5666fcd2019-12-26 14:35:26 +010010715fname_case Case in file names matters (for Amiga and MS-Windows
10716 this is not present).
Bram Moolenaar071d4272004-06-13 20:20:40 +000010717folding Compiled with |folding| support.
10718footer Compiled with GUI footer support. |gui-footer|
10719fork Compiled to use fork()/exec() instead of system().
10720gettext Compiled with message translation |multi-lang|
10721gui Compiled with GUI enabled.
10722gui_athena Compiled with Athena GUI.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010723gui_gnome Compiled with Gnome support (gui_gtk is also defined).
Bram Moolenaar071d4272004-06-13 20:20:40 +000010724gui_gtk Compiled with GTK+ GUI (any version).
10725gui_gtk2 Compiled with GTK+ 2 GUI (gui_gtk is also defined).
Bram Moolenaar98921892016-02-23 17:14:37 +010010726gui_gtk3 Compiled with GTK+ 3 GUI (gui_gtk is also defined).
Bram Moolenaar071d4272004-06-13 20:20:40 +000010727gui_mac Compiled with Macintosh GUI.
10728gui_motif Compiled with Motif GUI.
10729gui_photon Compiled with Photon GUI.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010730gui_running Vim is running in the GUI, or it will start soon.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010731gui_win32 Compiled with MS Windows Win32 GUI.
10732gui_win32s idem, and Win32s system being used (Windows 3.1)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010733hangul_input Compiled with Hangul input support. |hangul|
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010734hpux HP-UX version of Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010735iconv Can use iconv() for conversion.
10736insert_expand Compiled with support for CTRL-X expansion commands in
Bram Moolenaare49fbff2019-08-21 22:50:07 +020010737 Insert mode. (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010738jumplist Compiled with |jumplist| support.
10739keymap Compiled with 'keymap' support.
Bram Moolenaar437bafe2016-08-01 15:40:54 +020010740lambda Compiled with |lambda| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010741langmap Compiled with 'langmap' support.
10742libcall Compiled with |libcall()| support.
Bram Moolenaar597a4222014-06-25 14:39:50 +020010743linebreak Compiled with 'linebreak', 'breakat', 'showbreak' and
10744 'breakindent' support.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010745linux Linux version of Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010746lispindent Compiled with support for lisp indenting.
10747listcmds Compiled with commands for the buffer list |:files|
10748 and the argument list |arglist|.
10749localmap Compiled with local mappings and abbr. |:map-local|
Bram Moolenaar0ba04292010-07-14 23:23:17 +020010750lua Compiled with Lua interface |Lua|.
Bram Moolenaard0573012017-10-28 21:11:06 +020010751mac Any Macintosh version of Vim cf. osx
10752macunix Synonym for osxdarwin
Bram Moolenaar071d4272004-06-13 20:20:40 +000010753menu Compiled with support for |:menu|.
10754mksession Compiled with support for |:mksession|.
10755modify_fname Compiled with file name modifiers. |filename-modifiers|
Bram Moolenaara0d1fef2019-09-04 22:29:14 +020010756 (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010757mouse Compiled with support mouse.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010758mouse_dec Compiled with support for Dec terminal mouse.
10759mouse_gpm Compiled with support for gpm (Linux console mouse)
Bram Moolenaar4b8366b2019-05-04 17:34:34 +020010760mouse_gpm_enabled GPM mouse is working
Bram Moolenaar071d4272004-06-13 20:20:40 +000010761mouse_netterm Compiled with support for netterm mouse.
10762mouse_pterm Compiled with support for qnx pterm mouse.
Bram Moolenaar446cb832008-06-24 21:56:24 +000010763mouse_sysmouse Compiled with support for sysmouse (*BSD console mouse)
Bram Moolenaar9b451252012-08-15 17:43:31 +020010764mouse_sgr Compiled with support for sgr mouse.
Bram Moolenaarf1568ec2011-12-14 21:17:39 +010010765mouse_urxvt Compiled with support for urxvt mouse.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010766mouse_xterm Compiled with support for xterm mouse.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010767mouseshape Compiled with support for 'mouseshape'.
Bram Moolenaar4c92e752019-02-17 21:18:32 +010010768multi_byte Compiled with support for 'encoding' (always true)
Bram Moolenaar42022d52008-12-09 09:57:49 +000010769multi_byte_encoding 'encoding' is set to a multi-byte encoding.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010770multi_byte_ime Compiled with support for IME input method.
10771multi_lang Compiled with support for multiple languages.
Bram Moolenaar325b7a22004-07-05 15:58:32 +000010772mzscheme Compiled with MzScheme interface |mzscheme|.
Bram Moolenaarb26e6322010-05-22 21:34:09 +020010773netbeans_enabled Compiled with support for |netbeans| and connected.
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010774netbeans_intg Compiled with support for |netbeans|.
Bram Moolenaar22fcfad2016-07-01 18:17:26 +020010775num64 Compiled with 64-bit |Number| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010776ole Compiled with OLE automation support for Win32.
Bram Moolenaard0573012017-10-28 21:11:06 +020010777osx Compiled for macOS cf. mac
10778osxdarwin Compiled for macOS, with |mac-darwin-feature|
Bram Moolenaar91c49372016-05-08 09:50:29 +020010779packages Compiled with |packages| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010780path_extra Compiled with up/downwards search in 'path' and 'tags'
10781perl Compiled with Perl interface.
Bram Moolenaar55debbe2010-05-23 23:34:36 +020010782persistent_undo Compiled with support for persistent undo history.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010783postscript Compiled with PostScript file printing.
10784printer Compiled with |:hardcopy| support.
Bram Moolenaar05159a02005-02-26 23:04:13 +000010785profile Compiled with |:profile| support.
Bram Moolenaar84b242c2018-01-28 17:45:49 +010010786python Python 2.x interface available. |has-python|
10787python_compiled Compiled with Python 2.x interface. |has-python|
10788python_dynamic Python 2.x interface is dynamically loaded. |has-python|
10789python3 Python 3.x interface available. |has-python|
10790python3_compiled Compiled with Python 3.x interface. |has-python|
10791python3_dynamic Python 3.x interface is dynamically loaded. |has-python|
Bram Moolenaarf42dd3c2017-01-28 16:06:38 +010010792pythonx Compiled with |python_x| interface. |has-pythonx|
Bram Moolenaar071d4272004-06-13 20:20:40 +000010793qnx QNX version of Vim.
10794quickfix Compiled with |quickfix| support.
Bram Moolenaard68071d2006-05-02 22:08:30 +000010795reltime Compiled with |reltime()| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010796rightleft Compiled with 'rightleft' support.
10797ruby Compiled with Ruby interface |ruby|.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010798scrollbind Compiled with 'scrollbind' support. (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010799showcmd Compiled with 'showcmd' support.
10800signs Compiled with |:sign| support.
10801smartindent Compiled with 'smartindent' support.
Bram Moolenaar427f5b62019-06-09 13:43:51 +020010802sound Compiled with sound support, e.g. `sound_playevent()`
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010803spell Compiled with spell checking support |spell|.
Bram Moolenaaref94eec2009-11-11 13:22:11 +000010804startuptime Compiled with |--startuptime| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010805statusline Compiled with support for 'statusline', 'rulerformat'
10806 and special formats of 'titlestring' and 'iconstring'.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010807sun SunOS version of Vim.
Bram Moolenaard09091d2019-01-17 16:07:22 +010010808sun_workshop Support for Sun |workshop| has been removed.
Bram Moolenaar82cf9b62005-06-07 21:09:25 +000010809syntax Compiled with syntax highlighting support |syntax|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010810syntax_items There are active syntax highlighting items for the
10811 current buffer.
10812system Compiled to use system() instead of fork()/exec().
10813tag_binary Compiled with binary searching in tags files
10814 |tag-binary-search|.
Bram Moolenaar723dd942019-04-04 13:11:03 +020010815tag_old_static Support for old static tags was removed, see
Bram Moolenaar071d4272004-06-13 20:20:40 +000010816 |tag-old-static|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010817tcl Compiled with Tcl interface.
Bram Moolenaar91c49372016-05-08 09:50:29 +020010818termguicolors Compiled with true color in terminal support.
Bram Moolenaarc2ce52c2017-08-01 18:35:38 +020010819terminal Compiled with |terminal| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010820terminfo Compiled with terminfo instead of termcap.
10821termresponse Compiled with support for |t_RV| and |v:termresponse|.
10822textobjects Compiled with support for |text-objects|.
Bram Moolenaar98aefe72018-12-13 22:20:09 +010010823textprop Compiled with support for |text-properties|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010824tgetent Compiled with tgetent support, able to use a termcap
10825 or terminfo file.
Bram Moolenaar975b5272016-03-15 23:10:59 +010010826timers Compiled with |timer_start()| support.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010827title Compiled with window title support |'title'|.
10828toolbar Compiled with support for |gui-toolbar|.
Bram Moolenaar2cab0e12016-11-24 15:09:07 +010010829ttyin input is a terminal (tty)
10830ttyout output is a terminal (tty)
Bram Moolenaar37c64c72017-09-19 22:06:03 +020010831unix Unix version of Vim. *+unix*
Bram Moolenaar3df01732017-02-17 22:47:16 +010010832unnamedplus Compiled with support for "unnamedplus" in 'clipboard'
Bram Moolenaarac9fb182019-04-27 13:04:13 +020010833user_commands User-defined commands. (always true)
Bram Moolenaar4ceaa3a2019-12-03 22:49:09 +010010834vartabs Compiled with variable tabstop support |'vartabstop'|.
Bram Moolenaar22f1d0e2018-02-27 14:53:30 +010010835vcon Win32: Virtual console support is working, can use
10836 'termguicolors'. Also see |+vtp|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010837vertsplit Compiled with vertically split windows |:vsplit|.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010838 (always true)
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010839vim_starting True while initial source'ing takes place. |startup|
Bram Moolenaar4f3f6682016-03-26 23:01:59 +010010840 *vim_starting*
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010841viminfo Compiled with viminfo support.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020010842vimscript-1 Compiled Vim script version 1 support
10843vimscript-2 Compiled Vim script version 2 support
Bram Moolenaar911ead12019-04-21 00:03:35 +020010844vimscript-3 Compiled Vim script version 3 support
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010845virtualedit Compiled with 'virtualedit' option. (always true)
Bram Moolenaar5b69c222019-01-11 14:50:06 +010010846visual Compiled with Visual mode. (always true)
10847visualextra Compiled with extra Visual mode commands. (always
10848 true) |blockwise-operators|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010849vms VMS version of Vim.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010850vreplace Compiled with |gR| and |gr| commands. (always true)
Bram Moolenaar98ef2332018-03-18 14:44:37 +010010851vtp Compiled for vcon support |+vtp| (check vcon to find
Bram Moolenaar5a3a49e2018-03-20 18:35:53 +010010852 out if it works in the current console).
Bram Moolenaar071d4272004-06-13 20:20:40 +000010853wildignore Compiled with 'wildignore' option.
10854wildmenu Compiled with 'wildmenu' option.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010855win16 old version for MS-Windows 3.1 (always false)
Bram Moolenaard58e9292011-02-09 17:07:58 +010010856win32 Win32 version of Vim (MS-Windows 95 and later, 32 or
10857 64 bits)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010858win32unix Win32 version of Vim, using Unix files (Cygwin)
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010859win64 Win64 version of Vim (MS-Windows 64 bit).
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010860win95 Win32 version for MS-Windows 95/98/ME (always false)
Bram Moolenaar2a8a3ec2011-01-08 16:06:37 +010010861winaltkeys Compiled with 'winaltkeys' option.
10862windows Compiled with support for more than one window.
Bram Moolenaar39536dd2019-01-29 22:58:21 +010010863 (always true)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010864writebackup Compiled with 'writebackup' default on.
10865xfontset Compiled with X fontset support |xfontset|.
10866xim Compiled with X input method support |xim|.
Bram Moolenaar7cba6c02013-09-05 22:13:31 +020010867xpm Compiled with pixmap support.
10868xpm_w32 Compiled with pixmap support for Win32. (Only for
10869 backward compatibility. Use "xpm" instead.)
Bram Moolenaar071d4272004-06-13 20:20:40 +000010870xsmp Compiled with X session management support.
10871xsmp_interact Compiled with interactive X session management support.
10872xterm_clipboard Compiled with support for xterm clipboard.
10873xterm_save Compiled with support for saving and restoring the
10874 xterm screen.
10875x11 Compiled with X11 support.
10876
10877 *string-match*
10878Matching a pattern in a String
10879
10880A regexp pattern as explained at |pattern| is normally used to find a match in
10881the buffer lines. When a pattern is used to find a match in a String, almost
10882everything works in the same way. The difference is that a String is handled
10883like it is one line. When it contains a "\n" character, this is not seen as a
10884line break for the pattern. It can be matched with a "\n" in the pattern, or
10885with ".". Example: >
10886 :let a = "aaaa\nxxxx"
10887 :echo matchstr(a, "..\n..")
10888 aa
10889 xx
10890 :echo matchstr(a, "a.x")
10891 a
10892 x
10893
10894Don't forget that "^" will only match at the first character of the String and
10895"$" at the last character of the string. They don't match after or before a
10896"\n".
10897
10898==============================================================================
108995. Defining functions *user-functions*
10900
10901New functions can be defined. These can be called just like builtin
10902functions. The function executes a sequence of Ex commands. Normal mode
10903commands can be executed with the |:normal| command.
10904
Bram Moolenaar8a7d6542020-01-26 15:56:19 +010010905This section is about the legacy functions. For the Vim9 functions, which
10906execute much faster, support type checking and more, see |vim9.txt|.
10907
Bram Moolenaar071d4272004-06-13 20:20:40 +000010908The function name must start with an uppercase letter, to avoid confusion with
10909builtin functions. To prevent from using the same name in different scripts
10910avoid obvious, short names. A good habit is to start the function name with
10911the name of the script, e.g., "HTMLcolor()".
10912
Bram Moolenaar92d640f2005-09-05 22:11:52 +000010913It's also possible to use curly braces, see |curly-braces-names|. And the
10914|autoload| facility is useful to define a function only when it's called.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010915
10916 *local-function*
10917A function local to a script must start with "s:". A local script function
10918can only be called from within the script and from functions, user commands
10919and autocommands defined in the script. It is also possible to call the
Bram Moolenaare37d50a2008-08-06 17:06:04 +000010920function from a mapping defined in the script, but then |<SID>| must be used
Bram Moolenaar071d4272004-06-13 20:20:40 +000010921instead of "s:" when the mapping is expanded outside of the script.
Bram Moolenaarbcb98982014-05-01 14:08:19 +020010922There are only script-local functions, no buffer-local or window-local
10923functions.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010924
10925 *:fu* *:function* *E128* *E129* *E123*
10926:fu[nction] List all functions and their arguments.
10927
10928:fu[nction] {name} List function {name}.
Bram Moolenaar32466aa2006-02-24 23:53:04 +000010929 {name} can also be a |Dictionary| entry that is a
10930 |Funcref|: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000010931 :function dict.init
Bram Moolenaar92d640f2005-09-05 22:11:52 +000010932
10933:fu[nction] /{pattern} List functions with a name matching {pattern}.
10934 Example that lists all functions ending with "File": >
10935 :function /File$
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000010936<
10937 *:function-verbose*
10938When 'verbose' is non-zero, listing a function will also display where it was
10939last defined. Example: >
10940
10941 :verbose function SetFileTypeSH
10942 function SetFileTypeSH(name)
10943 Last set from /usr/share/vim/vim-7.0/filetype.vim
10944<
Bram Moolenaar8aff23a2005-08-19 20:40:30 +000010945See |:verbose-cmd| for more information.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +000010946
Bram Moolenaarbcb98982014-05-01 14:08:19 +020010947 *E124* *E125* *E853* *E884*
Bram Moolenaar10ce39a2016-07-29 22:37:06 +020010948:fu[nction][!] {name}([arguments]) [range] [abort] [dict] [closure]
Bram Moolenaar01164a62017-11-02 22:58:42 +010010949 Define a new function by the name {name}. The body of
10950 the function follows in the next lines, until the
10951 matching |:endfunction|.
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010010952
Bram Moolenaar01164a62017-11-02 22:58:42 +010010953 The name must be made of alphanumeric characters and
10954 '_', and must start with a capital or "s:" (see
10955 above). Note that using "b:" or "g:" is not allowed.
10956 (since patch 7.4.260 E884 is given if the function
10957 name has a colon in the name, e.g. for "foo:bar()".
10958 Before that patch no error was given).
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000010959
Bram Moolenaar32466aa2006-02-24 23:53:04 +000010960 {name} can also be a |Dictionary| entry that is a
10961 |Funcref|: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000010962 :function dict.init(arg)
Bram Moolenaar58b85342016-08-14 19:54:54 +020010963< "dict" must be an existing dictionary. The entry
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000010964 "init" is added if it didn't exist yet. Otherwise [!]
Bram Moolenaar58b85342016-08-14 19:54:54 +020010965 is required to overwrite an existing function. The
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000010966 result is a |Funcref| to a numbered function. The
10967 function can only be used with a |Funcref| and will be
10968 deleted if there are no more references to it.
Bram Moolenaar071d4272004-06-13 20:20:40 +000010969 *E127* *E122*
10970 When a function by this name already exists and [!] is
Bram Moolenaarded5f1b2018-11-10 17:33:29 +010010971 not used an error message is given. There is one
10972 exception: When sourcing a script again, a function
10973 that was previously defined in that script will be
10974 silently replaced.
10975 When [!] is used, an existing function is silently
10976 replaced. Unless it is currently being executed, that
10977 is an error.
Bram Moolenaarf8be4612017-06-23 20:52:40 +020010978 NOTE: Use ! wisely. If used without care it can cause
10979 an existing function to be replaced unexpectedly,
10980 which is hard to debug.
Bram Moolenaar8f999f12005-01-25 22:12:55 +000010981
10982 For the {arguments} see |function-argument|.
10983
Bram Moolenaar8d043172014-01-23 14:24:41 +010010984 *:func-range* *a:firstline* *a:lastline*
Bram Moolenaar071d4272004-06-13 20:20:40 +000010985 When the [range] argument is added, the function is
10986 expected to take care of a range itself. The range is
10987 passed as "a:firstline" and "a:lastline". If [range]
10988 is excluded, ":{range}call" will call the function for
10989 each line in the range, with the cursor on the start
10990 of each line. See |function-range-example|.
Bram Moolenaar2df58b42012-11-28 18:21:11 +010010991 The cursor is still moved to the first line of the
10992 range, as is the case with all Ex commands.
Bram Moolenaar8d043172014-01-23 14:24:41 +010010993 *:func-abort*
Bram Moolenaar071d4272004-06-13 20:20:40 +000010994 When the [abort] argument is added, the function will
10995 abort as soon as an error is detected.
Bram Moolenaar8d043172014-01-23 14:24:41 +010010996 *:func-dict*
Bram Moolenaar2fda12f2005-01-15 22:14:15 +000010997 When the [dict] argument is added, the function must
Bram Moolenaar58b85342016-08-14 19:54:54 +020010998 be invoked through an entry in a |Dictionary|. The
Bram Moolenaar2fda12f2005-01-15 22:14:15 +000010999 local variable "self" will then be set to the
11000 dictionary. See |Dictionary-function|.
Bram Moolenaar10ce39a2016-07-29 22:37:06 +020011001 *:func-closure* *E932*
11002 When the [closure] argument is added, the function
11003 can access variables and arguments from the outer
11004 scope. This is usually called a closure. In this
11005 example Bar() uses "x" from the scope of Foo(). It
11006 remains referenced even after Foo() returns: >
11007 :function! Foo()
11008 : let x = 0
11009 : function! Bar() closure
11010 : let x += 1
11011 : return x
11012 : endfunction
Bram Moolenaarbc8801c2016-08-02 21:04:33 +020011013 : return funcref('Bar')
Bram Moolenaar10ce39a2016-07-29 22:37:06 +020011014 :endfunction
11015
11016 :let F = Foo()
11017 :echo F()
11018< 1 >
11019 :echo F()
11020< 2 >
11021 :echo F()
11022< 3
Bram Moolenaar071d4272004-06-13 20:20:40 +000011023
Bram Moolenaar446cb832008-06-24 21:56:24 +000011024 *function-search-undo*
Bram Moolenaar98692072006-02-04 00:57:42 +000011025 The last used search pattern and the redo command "."
Bram Moolenaar446cb832008-06-24 21:56:24 +000011026 will not be changed by the function. This also
11027 implies that the effect of |:nohlsearch| is undone
11028 when the function returns.
Bram Moolenaar98692072006-02-04 00:57:42 +000011029
Bram Moolenaarf8be4612017-06-23 20:52:40 +020011030 *:endf* *:endfunction* *E126* *E193* *W22*
Bram Moolenaar663bb232017-06-22 19:12:10 +020011031:endf[unction] [argument]
11032 The end of a function definition. Best is to put it
11033 on a line by its own, without [argument].
11034
11035 [argument] can be:
11036 | command command to execute next
11037 \n command command to execute next
11038 " comment always ignored
Bram Moolenaarf8be4612017-06-23 20:52:40 +020011039 anything else ignored, warning given when
11040 'verbose' is non-zero
Bram Moolenaar663bb232017-06-22 19:12:10 +020011041 The support for a following command was added in Vim
11042 8.0.0654, before that any argument was silently
11043 ignored.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011044
Bram Moolenaarf8be4612017-06-23 20:52:40 +020011045 To be able to define a function inside an `:execute`
11046 command, use line breaks instead of |:bar|: >
11047 :exe "func Foo()\necho 'foo'\nendfunc"
11048<
Bram Moolenaar437bafe2016-08-01 15:40:54 +020011049 *:delf* *:delfunction* *E130* *E131* *E933*
Bram Moolenaar663bb232017-06-22 19:12:10 +020011050:delf[unction][!] {name}
11051 Delete function {name}.
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011052 {name} can also be a |Dictionary| entry that is a
11053 |Funcref|: >
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011054 :delfunc dict.init
Bram Moolenaar58b85342016-08-14 19:54:54 +020011055< This will remove the "init" entry from "dict". The
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011056 function is deleted if there are no more references to
11057 it.
Bram Moolenaar663bb232017-06-22 19:12:10 +020011058 With the ! there is no error if the function does not
11059 exist.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011060 *:retu* *:return* *E133*
11061:retu[rn] [expr] Return from a function. When "[expr]" is given, it is
11062 evaluated and returned as the result of the function.
11063 If "[expr]" is not given, the number 0 is returned.
11064 When a function ends without an explicit ":return",
11065 the number 0 is returned.
11066 Note that there is no check for unreachable lines,
11067 thus there is no warning if commands follow ":return".
11068
11069 If the ":return" is used after a |:try| but before the
11070 matching |:finally| (if present), the commands
11071 following the ":finally" up to the matching |:endtry|
11072 are executed first. This process applies to all
11073 nested ":try"s inside the function. The function
11074 returns at the outermost ":endtry".
11075
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011076 *function-argument* *a:var*
Bram Moolenaar58b85342016-08-14 19:54:54 +020011077An argument can be defined by giving its name. In the function this can then
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011078be used as "a:name" ("a:" for argument).
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011079 *a:0* *a:1* *a:000* *E740* *...*
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011080Up to 20 arguments can be given, separated by commas. After the named
11081arguments an argument "..." can be specified, which means that more arguments
11082may optionally be following. In the function the extra arguments can be used
11083as "a:1", "a:2", etc. "a:0" is set to the number of extra arguments (which
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011084can be 0). "a:000" is set to a |List| that contains these arguments. Note
11085that "a:1" is the same as "a:000[0]".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011086 *E742*
11087The a: scope and the variables in it cannot be changed, they are fixed.
Bram Moolenaar069c1e72016-07-15 21:25:08 +020011088However, if a composite type is used, such as |List| or |Dictionary| , you can
11089change their contents. Thus you can pass a |List| to a function and have the
11090function add an item to it. If you want to make sure the function cannot
11091change a |List| or |Dictionary| use |:lockvar|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011092
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011093It is also possible to define a function without any arguments. You must
Bram Moolenaar01164a62017-11-02 22:58:42 +010011094still supply the () then.
11095
Bram Moolenaar98ef2332018-03-18 14:44:37 +010011096It is allowed to define another function inside a function body.
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011097
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011098 *optional-function-argument*
11099You can provide default values for positional named arguments. This makes
11100them optional for function calls. When a positional argument is not
11101specified at a call, the default expression is used to initialize it.
Bram Moolenaar68e65602019-05-26 21:33:31 +020011102This only works for functions declared with `:function`, not for lambda
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011103expressions |expr-lambda|.
11104
11105Example: >
11106 function Something(key, value = 10)
Bram Moolenaar8aad88d2019-05-12 13:53:50 +020011107 echo a:key .. ": " .. a:value
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011108 endfunction
11109 call Something('empty') "empty: 10"
Bram Moolenaar8aad88d2019-05-12 13:53:50 +020011110 call Something('key', 20) "key: 20"
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011111
11112The argument default expressions are evaluated at the time of the function
11113call, not definition. Thus it is possible to use an expression which is
Bram Moolenaar68e65602019-05-26 21:33:31 +020011114invalid the moment the function is defined. The expressions are also only
Bram Moolenaar42ae78c2019-05-09 21:08:58 +020011115evaluated when arguments are not specified during a call.
11116
11117You can pass |v:none| to use the default expression. Note that this means you
11118cannot pass v:none as an ordinary value when an argument has a default
11119expression.
11120
11121Example: >
11122 function Something(a = 10, b = 20, c = 30)
11123 endfunction
11124 call Something(1, v:none, 3) " b = 20
11125<
11126 *E989*
11127Optional arguments with default expressions must occur after any mandatory
11128arguments. You can use "..." after all optional named arguments.
11129
11130It is possible for later argument defaults to refer to prior arguments,
11131but not the other way around. They must be prefixed with "a:", as with all
11132arguments.
11133
11134Example that works: >
11135 :function Okay(mandatory, optional = a:mandatory)
11136 :endfunction
11137Example that does NOT work: >
11138 :function NoGood(first = a:second, second = 10)
11139 :endfunction
11140<
11141When not using "...", the number of arguments in a function call must be equal
11142to the number of mandatory named arguments. When using "...", the number of
11143arguments may be larger.
11144
Bram Moolenaar8f999f12005-01-25 22:12:55 +000011145 *local-variables*
Bram Moolenaar069c1e72016-07-15 21:25:08 +020011146Inside a function local variables can be used. These will disappear when the
11147function returns. Global variables need to be accessed with "g:".
Bram Moolenaar071d4272004-06-13 20:20:40 +000011148
11149Example: >
11150 :function Table(title, ...)
11151 : echohl Title
11152 : echo a:title
11153 : echohl None
Bram Moolenaar677ee682005-01-27 14:41:15 +000011154 : echo a:0 . " items:"
11155 : for s in a:000
11156 : echon ' ' . s
11157 : endfor
Bram Moolenaar071d4272004-06-13 20:20:40 +000011158 :endfunction
11159
11160This function can then be called with: >
Bram Moolenaar677ee682005-01-27 14:41:15 +000011161 call Table("Table", "line1", "line2")
11162 call Table("Empty Table")
Bram Moolenaar071d4272004-06-13 20:20:40 +000011163
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011164To return more than one value, return a |List|: >
11165 :function Compute(n1, n2)
Bram Moolenaar071d4272004-06-13 20:20:40 +000011166 : if a:n2 == 0
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011167 : return ["fail", 0]
Bram Moolenaar071d4272004-06-13 20:20:40 +000011168 : endif
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011169 : return ["ok", a:n1 / a:n2]
Bram Moolenaar071d4272004-06-13 20:20:40 +000011170 :endfunction
11171
11172This function can then be called with: >
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011173 :let [success, div] = Compute(102, 6)
Bram Moolenaar071d4272004-06-13 20:20:40 +000011174 :if success == "ok"
11175 : echo div
11176 :endif
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011177<
Bram Moolenaar39f05632006-03-19 22:15:26 +000011178 *:cal* *:call* *E107* *E117*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011179:[range]cal[l] {name}([arguments])
11180 Call a function. The name of the function and its arguments
Bram Moolenaar68e65602019-05-26 21:33:31 +020011181 are as specified with `:function`. Up to 20 arguments can be
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011182 used. The returned value is discarded.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011183 Without a range and for functions that accept a range, the
11184 function is called once. When a range is given the cursor is
11185 positioned at the start of the first line before executing the
11186 function.
11187 When a range is given and the function doesn't handle it
11188 itself, the function is executed for each line in the range,
11189 with the cursor in the first column of that line. The cursor
11190 is left at the last line (possibly moved by the last function
Bram Moolenaar58b85342016-08-14 19:54:54 +020011191 call). The arguments are re-evaluated for each line. Thus
Bram Moolenaar071d4272004-06-13 20:20:40 +000011192 this works:
11193 *function-range-example* >
11194 :function Mynumber(arg)
11195 : echo line(".") . " " . a:arg
11196 :endfunction
11197 :1,5call Mynumber(getline("."))
11198<
11199 The "a:firstline" and "a:lastline" are defined anyway, they
11200 can be used to do something different at the start or end of
11201 the range.
11202
11203 Example of a function that handles the range itself: >
11204
11205 :function Cont() range
11206 : execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ '
11207 :endfunction
11208 :4,8call Cont()
11209<
11210 This function inserts the continuation character "\" in front
11211 of all the lines in the range, except the first one.
11212
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011213 When the function returns a composite value it can be further
11214 dereferenced, but the range will not be used then. Example: >
11215 :4,8call GetDict().method()
11216< Here GetDict() gets the range but method() does not.
11217
Bram Moolenaar071d4272004-06-13 20:20:40 +000011218 *E132*
11219The recursiveness of user functions is restricted with the |'maxfuncdepth'|
11220option.
11221
Bram Moolenaar25e42232019-08-04 15:04:10 +020011222It is also possible to use `:eval`. It does not support a range, but does
11223allow for method chaining, e.g.: >
11224 eval GetList()->Filter()->append('$')
11225
Bram Moolenaar088e8e32019-08-08 22:15:18 +020011226A function can also be called as part of evaluating an expression or when it
11227is used as a method: >
11228 let x = GetList()
11229 let y = GetList()->Filter()
11230
Bram Moolenaar7c626922005-02-07 22:01:03 +000011231
11232AUTOMATICALLY LOADING FUNCTIONS ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000011233 *autoload-functions*
11234When using many or large functions, it's possible to automatically define them
Bram Moolenaar7c626922005-02-07 22:01:03 +000011235only when they are used. There are two methods: with an autocommand and with
11236the "autoload" directory in 'runtimepath'.
11237
11238
11239Using an autocommand ~
11240
Bram Moolenaar05159a02005-02-26 23:04:13 +000011241This is introduced in the user manual, section |41.14|.
11242
Bram Moolenaar7c626922005-02-07 22:01:03 +000011243The autocommand is useful if you have a plugin that is a long Vim script file.
Bram Moolenaar68e65602019-05-26 21:33:31 +020011244You can define the autocommand and quickly quit the script with `:finish`.
Bram Moolenaar58b85342016-08-14 19:54:54 +020011245That makes Vim startup faster. The autocommand should then load the same file
Bram Moolenaar68e65602019-05-26 21:33:31 +020011246again, setting a variable to skip the `:finish` command.
Bram Moolenaar7c626922005-02-07 22:01:03 +000011247
11248Use the FuncUndefined autocommand event with a pattern that matches the
11249function(s) to be defined. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011250
11251 :au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim
11252
11253The file "~/vim/bufnetfuncs.vim" should then define functions that start with
11254"BufNet". Also see |FuncUndefined|.
11255
Bram Moolenaar7c626922005-02-07 22:01:03 +000011256
11257Using an autoload script ~
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011258 *autoload* *E746*
Bram Moolenaar05159a02005-02-26 23:04:13 +000011259This is introduced in the user manual, section |41.15|.
11260
Bram Moolenaar7c626922005-02-07 22:01:03 +000011261Using a script in the "autoload" directory is simpler, but requires using
11262exactly the right file name. A function that can be autoloaded has a name
11263like this: >
11264
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011265 :call filename#funcname()
Bram Moolenaar7c626922005-02-07 22:01:03 +000011266
11267When such a function is called, and it is not defined yet, Vim will search the
11268"autoload" directories in 'runtimepath' for a script file called
11269"filename.vim". For example "~/.vim/autoload/filename.vim". That file should
11270then define the function like this: >
11271
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011272 function filename#funcname()
Bram Moolenaar7c626922005-02-07 22:01:03 +000011273 echo "Done!"
11274 endfunction
11275
Bram Moolenaar60a795a2005-09-16 21:55:43 +000011276The file name and the name used before the # in the function must match
Bram Moolenaar7c626922005-02-07 22:01:03 +000011277exactly, and the defined function must have the name exactly as it will be
11278called.
11279
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011280It is possible to use subdirectories. Every # in the function name works like
11281a path separator. Thus when calling a function: >
Bram Moolenaar7c626922005-02-07 22:01:03 +000011282
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011283 :call foo#bar#func()
Bram Moolenaar7c626922005-02-07 22:01:03 +000011284
11285Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'.
11286
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011287This also works when reading a variable that has not been set yet: >
11288
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011289 :let l = foo#bar#lvar
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011290
Bram Moolenaara5792f52005-11-23 21:25:05 +000011291However, when the autoload script was already loaded it won't be loaded again
11292for an unknown variable.
11293
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011294When assigning a value to such a variable nothing special happens. This can
11295be used to pass settings to the autoload script before it's loaded: >
11296
Bram Moolenaara7fc0102005-05-18 22:17:12 +000011297 :let foo#bar#toggle = 1
11298 :call foo#bar#func()
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011299
Bram Moolenaar4399ef42005-02-12 14:29:27 +000011300Note that when you make a mistake and call a function that is supposed to be
11301defined in an autoload script, but the script doesn't actually define the
11302function, the script will be sourced every time you try to call the function.
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011303And you will get an error message every time.
11304
11305Also note that if you have two script files, and one calls a function in the
Bram Moolenaar446cb832008-06-24 21:56:24 +000011306other and vice versa, before the used function is defined, it won't work.
Bram Moolenaar26a60b42005-02-22 08:49:11 +000011307Avoid using the autoload functionality at the toplevel.
Bram Moolenaar7c626922005-02-07 22:01:03 +000011308
Bram Moolenaar433f7c82006-03-21 21:29:36 +000011309Hint: If you distribute a bunch of scripts you can pack them together with the
11310|vimball| utility. Also read the user manual |distribute-script|.
11311
Bram Moolenaar071d4272004-06-13 20:20:40 +000011312==============================================================================
113136. Curly braces names *curly-braces-names*
11314
Bram Moolenaar84f72352012-03-11 15:57:40 +010011315In most places where you can use a variable, you can use a "curly braces name"
11316variable. This is a regular variable name with one or more expressions
11317wrapped in braces {} like this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011318 my_{adjective}_variable
11319
11320When Vim encounters this, it evaluates the expression inside the braces, puts
11321that in place of the expression, and re-interprets the whole as a variable
11322name. So in the above example, if the variable "adjective" was set to
11323"noisy", then the reference would be to "my_noisy_variable", whereas if
11324"adjective" was set to "quiet", then it would be to "my_quiet_variable".
11325
11326One application for this is to create a set of variables governed by an option
Bram Moolenaar58b85342016-08-14 19:54:54 +020011327value. For example, the statement >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011328 echo my_{&background}_message
11329
11330would output the contents of "my_dark_message" or "my_light_message" depending
11331on the current value of 'background'.
11332
11333You can use multiple brace pairs: >
11334 echo my_{adverb}_{adjective}_message
11335..or even nest them: >
11336 echo my_{ad{end_of_word}}_message
11337where "end_of_word" is either "verb" or "jective".
11338
11339However, the expression inside the braces must evaluate to a valid single
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000011340variable name, e.g. this is invalid: >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011341 :let foo='a + b'
11342 :echo c{foo}d
11343.. since the result of expansion is "ca + bd", which is not a variable name.
11344
11345 *curly-braces-function-names*
11346You can call and define functions by an evaluated name in a similar way.
11347Example: >
11348 :let func_end='whizz'
11349 :call my_func_{func_end}(parameter)
11350
11351This would call the function "my_func_whizz(parameter)".
11352
Bram Moolenaar84f72352012-03-11 15:57:40 +010011353This does NOT work: >
11354 :let i = 3
11355 :let @{i} = '' " error
11356 :echo @{i} " error
11357
Bram Moolenaar071d4272004-06-13 20:20:40 +000011358==============================================================================
113597. Commands *expression-commands*
11360
11361:let {var-name} = {expr1} *:let* *E18*
11362 Set internal variable {var-name} to the result of the
11363 expression {expr1}. The variable will get the type
11364 from the {expr}. If {var-name} didn't exist yet, it
11365 is created.
11366
Bram Moolenaar13065c42005-01-08 16:08:21 +000011367:let {var-name}[{idx}] = {expr1} *E689*
11368 Set a list item to the result of the expression
11369 {expr1}. {var-name} must refer to a list and {idx}
11370 must be a valid index in that list. For nested list
11371 the index can be repeated.
Bram Moolenaar446cb832008-06-24 21:56:24 +000011372 This cannot be used to add an item to a |List|.
Bram Moolenaar58b85342016-08-14 19:54:54 +020011373 This cannot be used to set a byte in a String. You
Bram Moolenaar446cb832008-06-24 21:56:24 +000011374 can do that like this: >
11375 :let var = var[0:2] . 'X' . var[4:]
Bram Moolenaar6e5ea8d2019-01-12 22:47:31 +010011376< When {var-name} is a |Blob| then {idx} can be the
11377 length of the blob, in which case one byte is
11378 appended.
11379
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011380 *E711* *E719*
11381:let {var-name}[{idx1}:{idx2}] = {expr1} *E708* *E709* *E710*
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011382 Set a sequence of items in a |List| to the result of
11383 the expression {expr1}, which must be a list with the
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000011384 correct number of items.
11385 {idx1} can be omitted, zero is used instead.
11386 {idx2} can be omitted, meaning the end of the list.
11387 When the selected range of items is partly past the
11388 end of the list, items will be added.
11389
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020011390 *:let+=* *:let-=* *:letstar=*
11391 *:let/=* *:let%=* *:let.=* *:let..=* *E734* *E985*
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011392:let {var} += {expr1} Like ":let {var} = {var} + {expr1}".
11393:let {var} -= {expr1} Like ":let {var} = {var} - {expr1}".
Bram Moolenaarff697e62019-02-12 22:28:33 +010011394:let {var} *= {expr1} Like ":let {var} = {var} * {expr1}".
11395:let {var} /= {expr1} Like ":let {var} = {var} / {expr1}".
11396:let {var} %= {expr1} Like ":let {var} = {var} % {expr1}".
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011397:let {var} .= {expr1} Like ":let {var} = {var} . {expr1}".
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020011398:let {var} ..= {expr1} Like ":let {var} = {var} .. {expr1}".
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011399 These fail if {var} was not set yet and when the type
11400 of {var} and {expr1} don't fit the operator.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020011401 `.=` is not supported with Vim script version 2 and
11402 later, see |vimscript-version|.
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011403
11404
Bram Moolenaar071d4272004-06-13 20:20:40 +000011405:let ${env-name} = {expr1} *:let-environment* *:let-$*
11406 Set environment variable {env-name} to the result of
11407 the expression {expr1}. The type is always String.
Bram Moolenaar56c860c2019-08-17 20:09:31 +020011408
11409 On some systems making an environment variable empty
11410 causes it to be deleted. Many systems do not make a
11411 difference between an environment variable that is not
11412 set and an environment variable that is empty.
11413
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011414:let ${env-name} .= {expr1}
11415 Append {expr1} to the environment variable {env-name}.
11416 If the environment variable didn't exist yet this
11417 works like "=".
Bram Moolenaar071d4272004-06-13 20:20:40 +000011418
11419:let @{reg-name} = {expr1} *:let-register* *:let-@*
11420 Write the result of the expression {expr1} in register
11421 {reg-name}. {reg-name} must be a single letter, and
11422 must be the name of a writable register (see
11423 |registers|). "@@" can be used for the unnamed
11424 register, "@/" for the search pattern.
11425 If the result of {expr1} ends in a <CR> or <NL>, the
11426 register will be linewise, otherwise it will be set to
11427 characterwise.
11428 This can be used to clear the last search pattern: >
11429 :let @/ = ""
11430< This is different from searching for an empty string,
11431 that would match everywhere.
11432
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011433:let @{reg-name} .= {expr1}
Bram Moolenaar58b85342016-08-14 19:54:54 +020011434 Append {expr1} to register {reg-name}. If the
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011435 register was empty it's like setting it to {expr1}.
11436
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011437:let &{option-name} = {expr1} *:let-option* *:let-&*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011438 Set option {option-name} to the result of the
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011439 expression {expr1}. A String or Number value is
11440 always converted to the type of the option.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011441 For an option local to a window or buffer the effect
11442 is just like using the |:set| command: both the local
Bram Moolenaara5fac542005-10-12 20:58:49 +000011443 value and the global value are changed.
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011444 Example: >
11445 :let &path = &path . ',/usr/local/include'
Bram Moolenaar3df01732017-02-17 22:47:16 +010011446< This also works for terminal codes in the form t_xx.
11447 But only for alphanumerical names. Example: >
11448 :let &t_k1 = "\<Esc>[234;"
11449< When the code does not exist yet it will be created as
11450 a terminal key code, there is no error.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011451
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011452:let &{option-name} .= {expr1}
11453 For a string option: Append {expr1} to the value.
11454 Does not insert a comma like |:set+=|.
11455
11456:let &{option-name} += {expr1}
11457:let &{option-name} -= {expr1}
11458 For a number or boolean option: Add or subtract
11459 {expr1}.
11460
Bram Moolenaar071d4272004-06-13 20:20:40 +000011461:let &l:{option-name} = {expr1}
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011462:let &l:{option-name} .= {expr1}
11463:let &l:{option-name} += {expr1}
11464:let &l:{option-name} -= {expr1}
Bram Moolenaar071d4272004-06-13 20:20:40 +000011465 Like above, but only set the local value of an option
11466 (if there is one). Works like |:setlocal|.
11467
11468:let &g:{option-name} = {expr1}
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011469:let &g:{option-name} .= {expr1}
11470:let &g:{option-name} += {expr1}
11471:let &g:{option-name} -= {expr1}
Bram Moolenaar071d4272004-06-13 20:20:40 +000011472 Like above, but only set the global value of an option
11473 (if there is one). Works like |:setglobal|.
11474
Bram Moolenaar13065c42005-01-08 16:08:21 +000011475:let [{name1}, {name2}, ...] = {expr1} *:let-unpack* *E687* *E688*
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011476 {expr1} must evaluate to a |List|. The first item in
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011477 the list is assigned to {name1}, the second item to
11478 {name2}, etc.
11479 The number of names must match the number of items in
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011480 the |List|.
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011481 Each name can be one of the items of the ":let"
11482 command as mentioned above.
11483 Example: >
11484 :let [s, item] = GetItem(s)
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011485< Detail: {expr1} is evaluated first, then the
11486 assignments are done in sequence. This matters if
11487 {name2} depends on {name1}. Example: >
11488 :let x = [0, 1]
11489 :let i = 0
11490 :let [i, x[i]] = [1, 2]
11491 :echo x
11492< The result is [0, 2].
11493
11494:let [{name1}, {name2}, ...] .= {expr1}
11495:let [{name1}, {name2}, ...] += {expr1}
11496:let [{name1}, {name2}, ...] -= {expr1}
11497 Like above, but append/add/subtract the value for each
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011498 |List| item.
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011499
11500:let [{name}, ..., ; {lastname}] = {expr1}
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011501 Like |:let-unpack| above, but the |List| may have more
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011502 items than there are names. A list of the remaining
11503 items is assigned to {lastname}. If there are no
11504 remaining items {lastname} is set to an empty list.
Bram Moolenaarfca34d62005-01-04 21:38:36 +000011505 Example: >
11506 :let [a, b; rest] = ["aval", "bval", 3, 4]
11507<
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011508:let [{name}, ..., ; {lastname}] .= {expr1}
11509:let [{name}, ..., ; {lastname}] += {expr1}
11510:let [{name}, ..., ; {lastname}] -= {expr1}
11511 Like above, but append/add/subtract the value for each
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011512 |List| item.
Bram Moolenaar4a748032010-09-30 21:47:56 +020011513
Bram Moolenaar24582002019-07-21 14:14:26 +020011514 *:let=<<* *:let-heredoc*
11515 *E990* *E991* *E172* *E221*
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011516:let {var-name} =<< [trim] {endmarker}
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011517text...
11518text...
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011519{endmarker}
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011520 Set internal variable {var-name} to a List containing
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011521 the lines of text bounded by the string {endmarker}.
11522 {endmarker} must not contain white space.
11523 {endmarker} cannot start with a lower case character.
11524 The last line should end only with the {endmarker}
11525 string without any other character. Watch out for
11526 white space after {endmarker}!
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011527
Bram Moolenaare7eb9272019-06-24 00:58:07 +020011528 Without "trim" any white space characters in the lines
11529 of text are preserved. If "trim" is specified before
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011530 {endmarker}, then indentation is stripped so you can
11531 do: >
Bram Moolenaare7eb9272019-06-24 00:58:07 +020011532 let text =<< trim END
11533 if ok
11534 echo 'done'
11535 endif
11536 END
11537< Results in: ["if ok", " echo 'done'", "endif"]
11538 The marker must line up with "let" and the indentation
11539 of the first line is removed from all the text lines.
11540 Specifically: all the leading indentation exactly
11541 matching the leading indentation of the first
11542 non-empty text line is stripped from the input lines.
11543 All leading indentation exactly matching the leading
11544 indentation before `let` is stripped from the line
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011545 containing {endmarker}. Note that the difference
11546 between space and tab matters here.
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011547
11548 If {var-name} didn't exist yet, it is created.
11549 Cannot be followed by another command, but can be
11550 followed by a comment.
11551
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011552 To avoid line continuation to be applied, consider
11553 adding 'C' to 'cpoptions': >
11554 set cpo+=C
11555 let var =<< END
11556 \ leading backslash
11557 END
11558 set cpo-=C
11559<
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011560 Examples: >
11561 let var1 =<< END
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011562 Sample text 1
11563 Sample text 2
11564 Sample text 3
11565 END
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011566
11567 let data =<< trim DATA
Bram Moolenaar2e693a82019-10-16 22:35:02 +020011568 1 2 3 4
11569 5 6 7 8
Bram Moolenaarf5842c52019-05-19 18:41:26 +020011570 DATA
11571<
Bram Moolenaar4a748032010-09-30 21:47:56 +020011572 *E121*
Bram Moolenaar58b85342016-08-14 19:54:54 +020011573:let {var-name} .. List the value of variable {var-name}. Multiple
Bram Moolenaardcaf10e2005-01-21 11:55:25 +000011574 variable names may be given. Special names recognized
11575 here: *E738*
Bram Moolenaarca003e12006-03-17 23:19:38 +000011576 g: global variables
11577 b: local buffer variables
11578 w: local window variables
Bram Moolenaar910f66f2006-04-05 20:41:53 +000011579 t: local tab page variables
Bram Moolenaarca003e12006-03-17 23:19:38 +000011580 s: script-local variables
11581 l: local function variables
Bram Moolenaardcaf10e2005-01-21 11:55:25 +000011582 v: Vim variables.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011583
Bram Moolenaard7ee7ce2005-01-03 21:02:03 +000011584:let List the values of all variables. The type of the
11585 variable is indicated before the value:
11586 <nothing> String
11587 # Number
Bram Moolenaarc9b4b052006-04-30 18:54:39 +000011588 * Funcref
Bram Moolenaar071d4272004-06-13 20:20:40 +000011589
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011590:unl[et][!] {name} ... *:unlet* *:unl* *E108* *E795*
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011591 Remove the internal variable {name}. Several variable
11592 names can be given, they are all removed. The name
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011593 may also be a |List| or |Dictionary| item.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011594 With [!] no error message is given for non-existing
11595 variables.
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011596 One or more items from a |List| can be removed: >
Bram Moolenaar9cd15162005-01-16 22:02:49 +000011597 :unlet list[3] " remove fourth item
11598 :unlet list[3:] " remove fourth item to last
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011599< One item from a |Dictionary| can be removed at a time: >
Bram Moolenaar9cd15162005-01-16 22:02:49 +000011600 :unlet dict['two']
11601 :unlet dict.two
Bram Moolenaarc236c162008-07-13 17:41:49 +000011602< This is especially useful to clean up used global
11603 variables and script-local variables (these are not
11604 deleted when the script ends). Function-local
11605 variables are automatically deleted when the function
11606 ends.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011607
Bram Moolenaar137374f2018-05-13 15:59:50 +020011608:unl[et] ${env-name} ... *:unlet-environment* *:unlet-$*
11609 Remove environment variable {env-name}.
11610 Can mix {name} and ${env-name} in one :unlet command.
11611 No error message is given for a non-existing
11612 variable, also without !.
11613 If the system does not support deleting an environment
Bram Moolenaar9937a052019-06-15 15:45:06 +020011614 variable, it is made empty.
Bram Moolenaar137374f2018-05-13 15:59:50 +020011615
Bram Moolenaar1c196e72019-06-16 15:41:58 +020011616 *:cons* *:const*
Bram Moolenaar9937a052019-06-15 15:45:06 +020011617:cons[t] {var-name} = {expr1}
11618:cons[t] [{name1}, {name2}, ...] = {expr1}
Bram Moolenaar9937a052019-06-15 15:45:06 +020011619:cons[t] [{name}, ..., ; {lastname}] = {expr1}
11620:cons[t] {var-name} =<< [trim] {marker}
11621text...
11622text...
11623{marker}
11624 Similar to |:let|, but additionally lock the variable
11625 after setting the value. This is the same as locking
11626 the variable with |:lockvar| just after |:let|, thus: >
11627 :const x = 1
11628< is equivalent to: >
11629 :let x = 1
11630 :lockvar 1 x
11631< This is useful if you want to make sure the variable
11632 is not modified.
11633 *E995*
Bram Moolenaar9b283522019-06-17 22:19:33 +020011634 |:const| does not allow to for changing a variable: >
Bram Moolenaar9937a052019-06-15 15:45:06 +020011635 :let x = 1
11636 :const x = 2 " Error!
Bram Moolenaar1c196e72019-06-16 15:41:58 +020011637< *E996*
11638 Note that environment variables, option values and
11639 register values cannot be used here, since they cannot
11640 be locked.
11641
Bram Moolenaar85850f32019-07-19 22:05:51 +020011642:cons[t]
11643:cons[t] {var-name}
11644 If no argument is given or only {var-name} is given,
11645 the behavior is the same as |:let|.
11646
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011647:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv*
11648 Lock the internal variable {name}. Locking means that
11649 it can no longer be changed (until it is unlocked).
11650 A locked variable can be deleted: >
11651 :lockvar v
11652 :let v = 'asdf' " fails!
11653 :unlet v
Bram Moolenaare7877fe2017-02-20 22:35:33 +010011654< *E741* *E940*
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011655 If you try to change a locked variable you get an
Bram Moolenaare7877fe2017-02-20 22:35:33 +010011656 error message: "E741: Value is locked: {name}".
11657 If you try to lock or unlock a built-in variable you
11658 get an error message: "E940: Cannot lock or unlock
11659 variable {name}".
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011660
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011661 [depth] is relevant when locking a |List| or
11662 |Dictionary|. It specifies how deep the locking goes:
11663 1 Lock the |List| or |Dictionary| itself,
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011664 cannot add or remove items, but can
11665 still change their values.
11666 2 Also lock the values, cannot change
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011667 the items. If an item is a |List| or
11668 |Dictionary|, cannot add or remove
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011669 items, but can still change the
11670 values.
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011671 3 Like 2 but for the |List| /
11672 |Dictionary| in the |List| /
11673 |Dictionary|, one level deeper.
11674 The default [depth] is 2, thus when {name} is a |List|
11675 or |Dictionary| the values cannot be changed.
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011676 *E743*
11677 For unlimited depth use [!] and omit [depth].
11678 However, there is a maximum depth of 100 to catch
11679 loops.
11680
Bram Moolenaar32466aa2006-02-24 23:53:04 +000011681 Note that when two variables refer to the same |List|
11682 and you lock one of them, the |List| will also be
Bram Moolenaar910f66f2006-04-05 20:41:53 +000011683 locked when used through the other variable.
11684 Example: >
Bram Moolenaar2ce06f62005-01-31 19:19:04 +000011685 :let l = [0, 1, 2, 3]
11686 :let cl = l
11687 :lockvar l
11688 :let cl[1] = 99 " won't work!
11689< You may want to make a copy of a list to avoid this.
11690 See |deepcopy()|.
11691
11692
11693:unlo[ckvar][!] [depth] {name} ... *:unlockvar* *:unlo*
11694 Unlock the internal variable {name}. Does the
11695 opposite of |:lockvar|.
11696
Bram Moolenaar61da1bf2019-06-06 12:14:49 +020011697:if {expr1} *:if* *:end* *:endif* *:en* *E171* *E579* *E580*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011698:en[dif] Execute the commands until the next matching ":else"
11699 or ":endif" if {expr1} evaluates to non-zero.
11700
11701 From Vim version 4.5 until 5.0, every Ex command in
11702 between the ":if" and ":endif" is ignored. These two
11703 commands were just to allow for future expansions in a
Bram Moolenaar85084ef2016-01-17 22:26:33 +010011704 backward compatible way. Nesting was allowed. Note
Bram Moolenaar071d4272004-06-13 20:20:40 +000011705 that any ":else" or ":elseif" was ignored, the "else"
11706 part was not executed either.
11707
11708 You can use this to remain compatible with older
11709 versions: >
11710 :if version >= 500
11711 : version-5-specific-commands
11712 :endif
11713< The commands still need to be parsed to find the
11714 "endif". Sometimes an older Vim has a problem with a
11715 new command. For example, ":silent" is recognized as
11716 a ":substitute" command. In that case ":execute" can
11717 avoid problems: >
11718 :if version >= 600
11719 : execute "silent 1,$delete"
11720 :endif
11721<
11722 NOTE: The ":append" and ":insert" commands don't work
11723 properly in between ":if" and ":endif".
11724
11725 *:else* *:el* *E581* *E583*
11726:el[se] Execute the commands until the next matching ":else"
11727 or ":endif" if they previously were not being
11728 executed.
11729
11730 *:elseif* *:elsei* *E582* *E584*
11731:elsei[f] {expr1} Short for ":else" ":if", with the addition that there
11732 is no extra ":endif".
11733
11734:wh[ile] {expr1} *:while* *:endwhile* *:wh* *:endw*
Bram Moolenaar3a3a7232005-01-17 22:16:15 +000011735 *E170* *E585* *E588* *E733*
Bram Moolenaar071d4272004-06-13 20:20:40 +000011736:endw[hile] Repeat the commands between ":while" and ":endwhile",
11737 as long as {expr1} evaluates to non-zero.
11738 When an error is detected from a command inside the
11739 loop, execution continues after the "endwhile".
Bram Moolenaar12805862005-01-05 22:16:17 +000011740 Example: >
11741 :let lnum = 1
11742 :while lnum <= line("$")
11743 :call FixLine(lnum)
11744 :let lnum = lnum + 1
11745 :endwhile
11746<
Bram Moolenaar071d4272004-06-13 20:20:40 +000011747 NOTE: The ":append" and ":insert" commands don't work
Bram Moolenaard8b02732005-01-14 21:48:43 +000011748 properly inside a ":while" and ":for" loop.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011749
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011750:for {var} in {object} *:for* *E690* *E732*
Bram Moolenaar12805862005-01-05 22:16:17 +000011751:endfo[r] *:endfo* *:endfor*
11752 Repeat the commands between ":for" and ":endfor" for
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011753 each item in {object}. {object} can be a |List| or
11754 a |Blob|. Variable {var} is set to the value of each
11755 item. When an error is detected for a command inside
11756 the loop, execution continues after the "endfor".
11757 Changing {object} inside the loop affects what items
11758 are used. Make a copy if this is unwanted: >
Bram Moolenaarde8866b2005-01-06 23:24:37 +000011759 :for item in copy(mylist)
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011760<
11761 When {object} is a |List| and not making a copy, Vim
11762 stores a reference to the next item in the |List|
11763 before executing the commands with the current item.
11764 Thus the current item can be removed without effect.
11765 Removing any later item means it will not be found.
11766 Thus the following example works (an inefficient way
11767 to make a |List| empty): >
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010011768 for item in mylist
11769 call remove(mylist, 0)
11770 endfor
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011771< Note that reordering the |List| (e.g., with sort() or
Bram Moolenaar9588a0f2005-01-08 21:45:39 +000011772 reverse()) may have unexpected effects.
Bram Moolenaar12805862005-01-05 22:16:17 +000011773
Bram Moolenaar5e66b422019-01-24 21:58:10 +010011774 When {object} is a |Blob|, Vim always makes a copy to
11775 iterate over. Unlike with |List|, modifying the
11776 |Blob| does not affect the iteration.
11777
Bram Moolenaar12805862005-01-05 22:16:17 +000011778:for [{var1}, {var2}, ...] in {listlist}
11779:endfo[r]
11780 Like ":for" above, but each item in {listlist} must be
11781 a list, of which each item is assigned to {var1},
11782 {var2}, etc. Example: >
11783 :for [lnum, col] in [[1, 3], [2, 5], [3, 8]]
11784 :echo getline(lnum)[col]
11785 :endfor
11786<
Bram Moolenaar071d4272004-06-13 20:20:40 +000011787 *:continue* *:con* *E586*
Bram Moolenaar12805862005-01-05 22:16:17 +000011788:con[tinue] When used inside a ":while" or ":for" loop, jumps back
11789 to the start of the loop.
11790 If it is used after a |:try| inside the loop but
11791 before the matching |:finally| (if present), the
11792 commands following the ":finally" up to the matching
11793 |:endtry| are executed first. This process applies to
11794 all nested ":try"s inside the loop. The outermost
11795 ":endtry" then jumps back to the start of the loop.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011796
11797 *:break* *:brea* *E587*
Bram Moolenaar12805862005-01-05 22:16:17 +000011798:brea[k] When used inside a ":while" or ":for" loop, skips to
11799 the command after the matching ":endwhile" or
11800 ":endfor".
11801 If it is used after a |:try| inside the loop but
11802 before the matching |:finally| (if present), the
11803 commands following the ":finally" up to the matching
11804 |:endtry| are executed first. This process applies to
11805 all nested ":try"s inside the loop. The outermost
11806 ":endtry" then jumps to the command after the loop.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011807
11808:try *:try* *:endt* *:endtry* *E600* *E601* *E602*
11809:endt[ry] Change the error handling for the commands between
11810 ":try" and ":endtry" including everything being
11811 executed across ":source" commands, function calls,
11812 or autocommand invocations.
11813
11814 When an error or interrupt is detected and there is
11815 a |:finally| command following, execution continues
11816 after the ":finally". Otherwise, or when the
11817 ":endtry" is reached thereafter, the next
11818 (dynamically) surrounding ":try" is checked for
11819 a corresponding ":finally" etc. Then the script
11820 processing is terminated. (Whether a function
11821 definition has an "abort" argument does not matter.)
11822 Example: >
11823 :try | edit too much | finally | echo "cleanup" | endtry
11824 :echo "impossible" " not reached, script terminated above
11825<
11826 Moreover, an error or interrupt (dynamically) inside
11827 ":try" and ":endtry" is converted to an exception. It
11828 can be caught as if it were thrown by a |:throw|
11829 command (see |:catch|). In this case, the script
11830 processing is not terminated.
11831
11832 The value "Vim:Interrupt" is used for an interrupt
11833 exception. An error in a Vim command is converted
11834 to a value of the form "Vim({command}):{errmsg}",
11835 other errors are converted to a value of the form
11836 "Vim:{errmsg}". {command} is the full command name,
11837 and {errmsg} is the message that is displayed if the
11838 error exception is not caught, always beginning with
11839 the error number.
11840 Examples: >
11841 :try | sleep 100 | catch /^Vim:Interrupt$/ | endtry
11842 :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry
11843<
11844 *:cat* *:catch* *E603* *E604* *E605*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010011845:cat[ch] /{pattern}/ The following commands until the next |:catch|,
Bram Moolenaar071d4272004-06-13 20:20:40 +000011846 |:finally|, or |:endtry| that belongs to the same
11847 |:try| as the ":catch" are executed when an exception
11848 matching {pattern} is being thrown and has not yet
11849 been caught by a previous ":catch". Otherwise, these
11850 commands are skipped.
11851 When {pattern} is omitted all errors are caught.
11852 Examples: >
Bram Moolenaar647e24b2019-03-17 16:39:46 +010011853 :catch /^Vim:Interrupt$/ " catch interrupts (CTRL-C)
11854 :catch /^Vim\%((\a\+)\)\=:E/ " catch all Vim errors
11855 :catch /^Vim\%((\a\+)\)\=:/ " catch errors and interrupts
11856 :catch /^Vim(write):/ " catch all errors in :write
11857 :catch /^Vim\%((\a\+)\)\=:E123:/ " catch error E123
11858 :catch /my-exception/ " catch user exception
11859 :catch /.*/ " catch everything
11860 :catch " same as /.*/
Bram Moolenaar071d4272004-06-13 20:20:40 +000011861<
11862 Another character can be used instead of / around the
11863 {pattern}, so long as it does not have a special
11864 meaning (e.g., '|' or '"') and doesn't occur inside
11865 {pattern}.
Bram Moolenaar7e38ea22014-04-05 22:55:53 +020011866 Information about the exception is available in
11867 |v:exception|. Also see |throw-variables|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011868 NOTE: It is not reliable to ":catch" the TEXT of
11869 an error message because it may vary in different
11870 locales.
11871
11872 *:fina* *:finally* *E606* *E607*
11873:fina[lly] The following commands until the matching |:endtry|
11874 are executed whenever the part between the matching
11875 |:try| and the ":finally" is left: either by falling
11876 through to the ":finally" or by a |:continue|,
11877 |:break|, |:finish|, or |:return|, or by an error or
11878 interrupt or exception (see |:throw|).
11879
11880 *:th* *:throw* *E608*
11881:th[row] {expr1} The {expr1} is evaluated and thrown as an exception.
11882 If the ":throw" is used after a |:try| but before the
11883 first corresponding |:catch|, commands are skipped
11884 until the first ":catch" matching {expr1} is reached.
11885 If there is no such ":catch" or if the ":throw" is
11886 used after a ":catch" but before the |:finally|, the
11887 commands following the ":finally" (if present) up to
11888 the matching |:endtry| are executed. If the ":throw"
11889 is after the ":finally", commands up to the ":endtry"
11890 are skipped. At the ":endtry", this process applies
11891 again for the next dynamically surrounding ":try"
11892 (which may be found in a calling function or sourcing
11893 script), until a matching ":catch" has been found.
11894 If the exception is not caught, the command processing
11895 is terminated.
11896 Example: >
11897 :try | throw "oops" | catch /^oo/ | echo "caught" | endtry
Bram Moolenaar662db672011-03-22 14:05:35 +010011898< Note that "catch" may need to be on a separate line
11899 for when an error causes the parsing to skip the whole
11900 line and not see the "|" that separates the commands.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011901
11902 *:ec* *:echo*
11903:ec[ho] {expr1} .. Echoes each {expr1}, with a space in between. The
11904 first {expr1} starts on a new line.
11905 Also see |:comment|.
11906 Use "\n" to start a new line. Use "\r" to move the
11907 cursor to the first column.
11908 Uses the highlighting set by the |:echohl| command.
11909 Cannot be followed by a comment.
11910 Example: >
11911 :echo "the value of 'shell' is" &shell
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011912< *:echo-redraw*
11913 A later redraw may make the message disappear again.
11914 And since Vim mostly postpones redrawing until it's
11915 finished with a sequence of commands this happens
11916 quite often. To avoid that a command from before the
11917 ":echo" causes a redraw afterwards (redraws are often
11918 postponed until you type something), force a redraw
11919 with the |:redraw| command. Example: >
Bram Moolenaar071d4272004-06-13 20:20:40 +000011920 :new | redraw | echo "there is a new window"
11921<
11922 *:echon*
11923:echon {expr1} .. Echoes each {expr1}, without anything added. Also see
11924 |:comment|.
11925 Uses the highlighting set by the |:echohl| command.
11926 Cannot be followed by a comment.
11927 Example: >
11928 :echon "the value of 'shell' is " &shell
11929<
11930 Note the difference between using ":echo", which is a
11931 Vim command, and ":!echo", which is an external shell
11932 command: >
11933 :!echo % --> filename
11934< The arguments of ":!" are expanded, see |:_%|. >
11935 :!echo "%" --> filename or "filename"
11936< Like the previous example. Whether you see the double
11937 quotes or not depends on your 'shell'. >
11938 :echo % --> nothing
11939< The '%' is an illegal character in an expression. >
11940 :echo "%" --> %
11941< This just echoes the '%' character. >
11942 :echo expand("%") --> filename
11943< This calls the expand() function to expand the '%'.
11944
11945 *:echoh* *:echohl*
11946:echoh[l] {name} Use the highlight group {name} for the following
11947 |:echo|, |:echon| and |:echomsg| commands. Also used
11948 for the |input()| prompt. Example: >
11949 :echohl WarningMsg | echo "Don't panic!" | echohl None
11950< Don't forget to set the group back to "None",
11951 otherwise all following echo's will be highlighted.
11952
11953 *:echom* *:echomsg*
11954:echom[sg] {expr1} .. Echo the expression(s) as a true message, saving the
11955 message in the |message-history|.
11956 Spaces are placed between the arguments as with the
11957 |:echo| command. But unprintable characters are
11958 displayed, not interpreted.
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011959 The parsing works slightly different from |:echo|,
11960 more like |:execute|. All the expressions are first
11961 evaluated and concatenated before echoing anything.
Bram Moolenaar461a7fc2018-12-22 13:28:07 +010011962 If expressions does not evaluate to a Number or
11963 String, string() is used to turn it into a string.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011964 Uses the highlighting set by the |:echohl| command.
11965 Example: >
11966 :echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see."
Bram Moolenaaref2f6562007-05-06 13:32:59 +000011967< See |:echo-redraw| to avoid the message disappearing
11968 when the screen is redrawn.
Bram Moolenaar071d4272004-06-13 20:20:40 +000011969 *:echoe* *:echoerr*
11970:echoe[rr] {expr1} .. Echo the expression(s) as an error message, saving the
11971 message in the |message-history|. When used in a
11972 script or function the line number will be added.
11973 Spaces are placed between the arguments as with the
Bram Moolenaar461a7fc2018-12-22 13:28:07 +010011974 |:echomsg| command. When used inside a try conditional,
Bram Moolenaar071d4272004-06-13 20:20:40 +000011975 the message is raised as an error exception instead
11976 (see |try-echoerr|).
11977 Example: >
11978 :echoerr "This script just failed!"
11979< If you just want a highlighted message use |:echohl|.
11980 And to get a beep: >
11981 :exe "normal \<Esc>"
11982<
Bram Moolenaar09c6f262019-11-17 15:55:14 +010011983 *:eval*
11984:eval {expr} Evaluate {expr} and discard the result. Example: >
11985 :eval Getlist()->Filter()->append('$')
11986
11987< The expression is supposed to have a side effect,
11988 since the resulting value is not used. In the example
11989 the `append()` call appends the List with text to the
11990 buffer. This is similar to `:call` but works with any
11991 expression.
11992
11993 The command can be shortened to `:ev` or `:eva`, but
11994 these are hard to recognize and therefore not to be
11995 used.
11996
11997
Bram Moolenaar071d4272004-06-13 20:20:40 +000011998 *:exe* *:execute*
11999:exe[cute] {expr1} .. Executes the string that results from the evaluation
Bram Moolenaar00a927d2010-05-14 23:24:24 +020012000 of {expr1} as an Ex command.
12001 Multiple arguments are concatenated, with a space in
12002 between. To avoid the extra space use the "."
12003 operator to concatenate strings into one argument.
12004 {expr1} is used as the processed command, command line
12005 editing keys are not recognized.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012006 Cannot be followed by a comment.
12007 Examples: >
Bram Moolenaar00a927d2010-05-14 23:24:24 +020012008 :execute "buffer" nextbuf
12009 :execute "normal" count . "w"
Bram Moolenaar071d4272004-06-13 20:20:40 +000012010<
12011 ":execute" can be used to append a command to commands
12012 that don't accept a '|'. Example: >
12013 :execute '!ls' | echo "theend"
12014
12015< ":execute" is also a nice way to avoid having to type
12016 control characters in a Vim script for a ":normal"
12017 command: >
12018 :execute "normal ixxx\<Esc>"
12019< This has an <Esc> character, see |expr-string|.
12020
Bram Moolenaar446cb832008-06-24 21:56:24 +000012021 Be careful to correctly escape special characters in
12022 file names. The |fnameescape()| function can be used
Bram Moolenaar05bb9532008-07-04 09:44:11 +000012023 for Vim commands, |shellescape()| for |:!| commands.
12024 Examples: >
Bram Moolenaar446cb832008-06-24 21:56:24 +000012025 :execute "e " . fnameescape(filename)
Bram Moolenaar251835e2014-02-24 02:51:51 +010012026 :execute "!ls " . shellescape(filename, 1)
Bram Moolenaar446cb832008-06-24 21:56:24 +000012027<
Bram Moolenaar071d4272004-06-13 20:20:40 +000012028 Note: The executed string may be any command-line, but
Bram Moolenaar76f3b1a2014-03-27 22:30:07 +010012029 starting or ending "if", "while" and "for" does not
12030 always work, because when commands are skipped the
12031 ":execute" is not evaluated and Vim loses track of
12032 where blocks start and end. Also "break" and
12033 "continue" should not be inside ":execute".
12034 This example does not work, because the ":execute" is
12035 not evaluated and Vim does not see the "while", and
12036 gives an error for finding an ":endwhile": >
12037 :if 0
12038 : execute 'while i > 5'
12039 : echo "test"
12040 : endwhile
12041 :endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000012042<
12043 It is allowed to have a "while" or "if" command
12044 completely in the executed string: >
12045 :execute 'while i < 5 | echo i | let i = i + 1 | endwhile'
12046<
12047
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010012048 *:exe-comment*
Bram Moolenaar071d4272004-06-13 20:20:40 +000012049 ":execute", ":echo" and ":echon" cannot be followed by
12050 a comment directly, because they see the '"' as the
12051 start of a string. But, you can use '|' followed by a
12052 comment. Example: >
12053 :echo "foo" | "this is a comment
12054
12055==============================================================================
120568. Exception handling *exception-handling*
12057
12058The Vim script language comprises an exception handling feature. This section
12059explains how it can be used in a Vim script.
12060
12061Exceptions may be raised by Vim on an error or on interrupt, see
12062|catch-errors| and |catch-interrupt|. You can also explicitly throw an
12063exception by using the ":throw" command, see |throw-catch|.
12064
12065
12066TRY CONDITIONALS *try-conditionals*
12067
12068Exceptions can be caught or can cause cleanup code to be executed. You can
12069use a try conditional to specify catch clauses (that catch exceptions) and/or
12070a finally clause (to be executed for cleanup).
12071 A try conditional begins with a |:try| command and ends at the matching
12072|:endtry| command. In between, you can use a |:catch| command to start
12073a catch clause, or a |:finally| command to start a finally clause. There may
12074be none or multiple catch clauses, but there is at most one finally clause,
12075which must not be followed by any catch clauses. The lines before the catch
12076clauses and the finally clause is called a try block. >
12077
12078 :try
Bram Moolenaar446cb832008-06-24 21:56:24 +000012079 : ...
12080 : ... TRY BLOCK
12081 : ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000012082 :catch /{pattern}/
Bram Moolenaar446cb832008-06-24 21:56:24 +000012083 : ...
12084 : ... CATCH CLAUSE
12085 : ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000012086 :catch /{pattern}/
Bram Moolenaar446cb832008-06-24 21:56:24 +000012087 : ...
12088 : ... CATCH CLAUSE
12089 : ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000012090 :finally
Bram Moolenaar446cb832008-06-24 21:56:24 +000012091 : ...
12092 : ... FINALLY CLAUSE
12093 : ...
Bram Moolenaar071d4272004-06-13 20:20:40 +000012094 :endtry
12095
12096The try conditional allows to watch code for exceptions and to take the
12097appropriate actions. Exceptions from the try block may be caught. Exceptions
12098from the try block and also the catch clauses may cause cleanup actions.
12099 When no exception is thrown during execution of the try block, the control
12100is transferred to the finally clause, if present. After its execution, the
12101script continues with the line following the ":endtry".
12102 When an exception occurs during execution of the try block, the remaining
12103lines in the try block are skipped. The exception is matched against the
12104patterns specified as arguments to the ":catch" commands. The catch clause
12105after the first matching ":catch" is taken, other catch clauses are not
12106executed. The catch clause ends when the next ":catch", ":finally", or
12107":endtry" command is reached - whatever is first. Then, the finally clause
12108(if present) is executed. When the ":endtry" is reached, the script execution
12109continues in the following line as usual.
12110 When an exception that does not match any of the patterns specified by the
12111":catch" commands is thrown in the try block, the exception is not caught by
12112that try conditional and none of the catch clauses is executed. Only the
12113finally clause, if present, is taken. The exception pends during execution of
12114the finally clause. It is resumed at the ":endtry", so that commands after
12115the ":endtry" are not executed and the exception might be caught elsewhere,
12116see |try-nesting|.
12117 When during execution of a catch clause another exception is thrown, the
Bram Moolenaar58b85342016-08-14 19:54:54 +020012118remaining lines in that catch clause are not executed. The new exception is
Bram Moolenaar071d4272004-06-13 20:20:40 +000012119not matched against the patterns in any of the ":catch" commands of the same
12120try conditional and none of its catch clauses is taken. If there is, however,
12121a finally clause, it is executed, and the exception pends during its
12122execution. The commands following the ":endtry" are not executed. The new
12123exception might, however, be caught elsewhere, see |try-nesting|.
12124 When during execution of the finally clause (if present) an exception is
Bram Moolenaar58b85342016-08-14 19:54:54 +020012125thrown, the remaining lines in the finally clause are skipped. If the finally
Bram Moolenaar071d4272004-06-13 20:20:40 +000012126clause has been taken because of an exception from the try block or one of the
12127catch clauses, the original (pending) exception is discarded. The commands
12128following the ":endtry" are not executed, and the exception from the finally
12129clause is propagated and can be caught elsewhere, see |try-nesting|.
12130
12131The finally clause is also executed, when a ":break" or ":continue" for
12132a ":while" loop enclosing the complete try conditional is executed from the
12133try block or a catch clause. Or when a ":return" or ":finish" is executed
12134from the try block or a catch clause of a try conditional in a function or
12135sourced script, respectively. The ":break", ":continue", ":return", or
12136":finish" pends during execution of the finally clause and is resumed when the
12137":endtry" is reached. It is, however, discarded when an exception is thrown
12138from the finally clause.
12139 When a ":break" or ":continue" for a ":while" loop enclosing the complete
12140try conditional or when a ":return" or ":finish" is encountered in the finally
12141clause, the rest of the finally clause is skipped, and the ":break",
12142":continue", ":return" or ":finish" is executed as usual. If the finally
12143clause has been taken because of an exception or an earlier ":break",
12144":continue", ":return", or ":finish" from the try block or a catch clause,
12145this pending exception or command is discarded.
12146
12147For examples see |throw-catch| and |try-finally|.
12148
12149
12150NESTING OF TRY CONDITIONALS *try-nesting*
12151
12152Try conditionals can be nested arbitrarily. That is, a complete try
12153conditional can be put into the try block, a catch clause, or the finally
12154clause of another try conditional. If the inner try conditional does not
12155catch an exception thrown in its try block or throws a new exception from one
12156of its catch clauses or its finally clause, the outer try conditional is
12157checked according to the rules above. If the inner try conditional is in the
12158try block of the outer try conditional, its catch clauses are checked, but
Bram Moolenaar58b85342016-08-14 19:54:54 +020012159otherwise only the finally clause is executed. It does not matter for
Bram Moolenaar071d4272004-06-13 20:20:40 +000012160nesting, whether the inner try conditional is directly contained in the outer
12161one, or whether the outer one sources a script or calls a function containing
12162the inner try conditional.
12163
12164When none of the active try conditionals catches an exception, just their
12165finally clauses are executed. Thereafter, the script processing terminates.
12166An error message is displayed in case of an uncaught exception explicitly
12167thrown by a ":throw" command. For uncaught error and interrupt exceptions
12168implicitly raised by Vim, the error message(s) or interrupt message are shown
12169as usual.
12170
12171For examples see |throw-catch|.
12172
12173
12174EXAMINING EXCEPTION HANDLING CODE *except-examine*
12175
12176Exception handling code can get tricky. If you are in doubt what happens, set
12177'verbose' to 13 or use the ":13verbose" command modifier when sourcing your
12178script file. Then you see when an exception is thrown, discarded, caught, or
12179finished. When using a verbosity level of at least 14, things pending in
12180a finally clause are also shown. This information is also given in debug mode
12181(see |debug-scripts|).
12182
12183
12184THROWING AND CATCHING EXCEPTIONS *throw-catch*
12185
12186You can throw any number or string as an exception. Use the |:throw| command
12187and pass the value to be thrown as argument: >
12188 :throw 4711
12189 :throw "string"
12190< *throw-expression*
12191You can also specify an expression argument. The expression is then evaluated
12192first, and the result is thrown: >
12193 :throw 4705 + strlen("string")
12194 :throw strpart("strings", 0, 6)
12195
12196An exception might be thrown during evaluation of the argument of the ":throw"
12197command. Unless it is caught there, the expression evaluation is abandoned.
12198The ":throw" command then does not throw a new exception.
12199 Example: >
12200
12201 :function! Foo(arg)
12202 : try
12203 : throw a:arg
12204 : catch /foo/
12205 : endtry
12206 : return 1
12207 :endfunction
12208 :
12209 :function! Bar()
12210 : echo "in Bar"
12211 : return 4710
12212 :endfunction
12213 :
12214 :throw Foo("arrgh") + Bar()
12215
12216This throws "arrgh", and "in Bar" is not displayed since Bar() is not
12217executed. >
12218 :throw Foo("foo") + Bar()
12219however displays "in Bar" and throws 4711.
12220
12221Any other command that takes an expression as argument might also be
Bram Moolenaar58b85342016-08-14 19:54:54 +020012222abandoned by an (uncaught) exception during the expression evaluation. The
Bram Moolenaar071d4272004-06-13 20:20:40 +000012223exception is then propagated to the caller of the command.
12224 Example: >
12225
12226 :if Foo("arrgh")
12227 : echo "then"
12228 :else
12229 : echo "else"
12230 :endif
12231
12232Here neither of "then" or "else" is displayed.
12233
12234 *catch-order*
12235Exceptions can be caught by a try conditional with one or more |:catch|
12236commands, see |try-conditionals|. The values to be caught by each ":catch"
12237command can be specified as a pattern argument. The subsequent catch clause
12238gets executed when a matching exception is caught.
12239 Example: >
12240
12241 :function! Foo(value)
12242 : try
12243 : throw a:value
12244 : catch /^\d\+$/
12245 : echo "Number thrown"
12246 : catch /.*/
12247 : echo "String thrown"
12248 : endtry
12249 :endfunction
12250 :
12251 :call Foo(0x1267)
12252 :call Foo('string')
12253
12254The first call to Foo() displays "Number thrown", the second "String thrown".
12255An exception is matched against the ":catch" commands in the order they are
12256specified. Only the first match counts. So you should place the more
12257specific ":catch" first. The following order does not make sense: >
12258
12259 : catch /.*/
12260 : echo "String thrown"
12261 : catch /^\d\+$/
12262 : echo "Number thrown"
12263
12264The first ":catch" here matches always, so that the second catch clause is
12265never taken.
12266
12267 *throw-variables*
12268If you catch an exception by a general pattern, you may access the exact value
12269in the variable |v:exception|: >
12270
12271 : catch /^\d\+$/
12272 : echo "Number thrown. Value is" v:exception
12273
12274You may also be interested where an exception was thrown. This is stored in
12275|v:throwpoint|. Note that "v:exception" and "v:throwpoint" are valid for the
12276exception most recently caught as long it is not finished.
12277 Example: >
12278
12279 :function! Caught()
12280 : if v:exception != ""
12281 : echo 'Caught "' . v:exception . '" in ' . v:throwpoint
12282 : else
12283 : echo 'Nothing caught'
12284 : endif
12285 :endfunction
12286 :
12287 :function! Foo()
12288 : try
12289 : try
12290 : try
12291 : throw 4711
12292 : finally
12293 : call Caught()
12294 : endtry
12295 : catch /.*/
12296 : call Caught()
12297 : throw "oops"
12298 : endtry
12299 : catch /.*/
12300 : call Caught()
12301 : finally
12302 : call Caught()
12303 : endtry
12304 :endfunction
12305 :
12306 :call Foo()
12307
12308This displays >
12309
12310 Nothing caught
12311 Caught "4711" in function Foo, line 4
12312 Caught "oops" in function Foo, line 10
12313 Nothing caught
12314
12315A practical example: The following command ":LineNumber" displays the line
12316number in the script or function where it has been used: >
12317
12318 :function! LineNumber()
12319 : return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "")
12320 :endfunction
12321 :command! LineNumber try | throw "" | catch | echo LineNumber() | endtry
12322<
12323 *try-nested*
12324An exception that is not caught by a try conditional can be caught by
12325a surrounding try conditional: >
12326
12327 :try
12328 : try
12329 : throw "foo"
12330 : catch /foobar/
12331 : echo "foobar"
12332 : finally
12333 : echo "inner finally"
12334 : endtry
12335 :catch /foo/
12336 : echo "foo"
12337 :endtry
12338
12339The inner try conditional does not catch the exception, just its finally
12340clause is executed. The exception is then caught by the outer try
12341conditional. The example displays "inner finally" and then "foo".
12342
12343 *throw-from-catch*
12344You can catch an exception and throw a new one to be caught elsewhere from the
12345catch clause: >
12346
12347 :function! Foo()
12348 : throw "foo"
12349 :endfunction
12350 :
12351 :function! Bar()
12352 : try
12353 : call Foo()
12354 : catch /foo/
12355 : echo "Caught foo, throw bar"
12356 : throw "bar"
12357 : endtry
12358 :endfunction
12359 :
12360 :try
12361 : call Bar()
12362 :catch /.*/
12363 : echo "Caught" v:exception
12364 :endtry
12365
12366This displays "Caught foo, throw bar" and then "Caught bar".
12367
12368 *rethrow*
12369There is no real rethrow in the Vim script language, but you may throw
12370"v:exception" instead: >
12371
12372 :function! Bar()
12373 : try
12374 : call Foo()
12375 : catch /.*/
12376 : echo "Rethrow" v:exception
12377 : throw v:exception
12378 : endtry
12379 :endfunction
12380< *try-echoerr*
12381Note that this method cannot be used to "rethrow" Vim error or interrupt
12382exceptions, because it is not possible to fake Vim internal exceptions.
12383Trying so causes an error exception. You should throw your own exception
12384denoting the situation. If you want to cause a Vim error exception containing
12385the original error exception value, you can use the |:echoerr| command: >
12386
12387 :try
12388 : try
12389 : asdf
12390 : catch /.*/
12391 : echoerr v:exception
12392 : endtry
12393 :catch /.*/
12394 : echo v:exception
12395 :endtry
12396
12397This code displays
12398
Bram Moolenaar446cb832008-06-24 21:56:24 +000012399 Vim(echoerr):Vim:E492: Not an editor command: asdf ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000012400
12401
12402CLEANUP CODE *try-finally*
12403
12404Scripts often change global settings and restore them at their end. If the
12405user however interrupts the script by pressing CTRL-C, the settings remain in
Bram Moolenaar58b85342016-08-14 19:54:54 +020012406an inconsistent state. The same may happen to you in the development phase of
Bram Moolenaar071d4272004-06-13 20:20:40 +000012407a script when an error occurs or you explicitly throw an exception without
12408catching it. You can solve these problems by using a try conditional with
12409a finally clause for restoring the settings. Its execution is guaranteed on
12410normal control flow, on error, on an explicit ":throw", and on interrupt.
12411(Note that errors and interrupts from inside the try conditional are converted
Bram Moolenaar58b85342016-08-14 19:54:54 +020012412to exceptions. When not caught, they terminate the script after the finally
Bram Moolenaar071d4272004-06-13 20:20:40 +000012413clause has been executed.)
12414Example: >
12415
12416 :try
12417 : let s:saved_ts = &ts
12418 : set ts=17
12419 :
12420 : " Do the hard work here.
12421 :
12422 :finally
12423 : let &ts = s:saved_ts
12424 : unlet s:saved_ts
12425 :endtry
12426
12427This method should be used locally whenever a function or part of a script
12428changes global settings which need to be restored on failure or normal exit of
12429that function or script part.
12430
12431 *break-finally*
12432Cleanup code works also when the try block or a catch clause is left by
12433a ":continue", ":break", ":return", or ":finish".
12434 Example: >
12435
12436 :let first = 1
12437 :while 1
12438 : try
12439 : if first
12440 : echo "first"
12441 : let first = 0
12442 : continue
12443 : else
12444 : throw "second"
12445 : endif
12446 : catch /.*/
12447 : echo v:exception
12448 : break
12449 : finally
12450 : echo "cleanup"
12451 : endtry
12452 : echo "still in while"
12453 :endwhile
12454 :echo "end"
12455
12456This displays "first", "cleanup", "second", "cleanup", and "end". >
12457
12458 :function! Foo()
12459 : try
12460 : return 4711
12461 : finally
12462 : echo "cleanup\n"
12463 : endtry
12464 : echo "Foo still active"
12465 :endfunction
12466 :
12467 :echo Foo() "returned by Foo"
12468
12469This displays "cleanup" and "4711 returned by Foo". You don't need to add an
Bram Moolenaar58b85342016-08-14 19:54:54 +020012470extra ":return" in the finally clause. (Above all, this would override the
Bram Moolenaar071d4272004-06-13 20:20:40 +000012471return value.)
12472
12473 *except-from-finally*
12474Using either of ":continue", ":break", ":return", ":finish", or ":throw" in
12475a finally clause is possible, but not recommended since it abandons the
12476cleanup actions for the try conditional. But, of course, interrupt and error
12477exceptions might get raised from a finally clause.
12478 Example where an error in the finally clause stops an interrupt from
12479working correctly: >
12480
12481 :try
12482 : try
12483 : echo "Press CTRL-C for interrupt"
12484 : while 1
12485 : endwhile
12486 : finally
12487 : unlet novar
12488 : endtry
12489 :catch /novar/
12490 :endtry
12491 :echo "Script still running"
12492 :sleep 1
12493
12494If you need to put commands that could fail into a finally clause, you should
12495think about catching or ignoring the errors in these commands, see
12496|catch-errors| and |ignore-errors|.
12497
12498
12499CATCHING ERRORS *catch-errors*
12500
12501If you want to catch specific errors, you just have to put the code to be
12502watched in a try block and add a catch clause for the error message. The
12503presence of the try conditional causes all errors to be converted to an
12504exception. No message is displayed and |v:errmsg| is not set then. To find
12505the right pattern for the ":catch" command, you have to know how the format of
12506the error exception is.
12507 Error exceptions have the following format: >
12508
12509 Vim({cmdname}):{errmsg}
12510or >
12511 Vim:{errmsg}
12512
12513{cmdname} is the name of the command that failed; the second form is used when
Bram Moolenaar58b85342016-08-14 19:54:54 +020012514the command name is not known. {errmsg} is the error message usually produced
Bram Moolenaar071d4272004-06-13 20:20:40 +000012515when the error occurs outside try conditionals. It always begins with
12516a capital "E", followed by a two or three-digit error number, a colon, and
12517a space.
12518
12519Examples:
12520
12521The command >
12522 :unlet novar
12523normally produces the error message >
12524 E108: No such variable: "novar"
12525which is converted inside try conditionals to an exception >
12526 Vim(unlet):E108: No such variable: "novar"
12527
12528The command >
12529 :dwim
12530normally produces the error message >
12531 E492: Not an editor command: dwim
12532which is converted inside try conditionals to an exception >
12533 Vim:E492: Not an editor command: dwim
12534
12535You can catch all ":unlet" errors by a >
12536 :catch /^Vim(unlet):/
12537or all errors for misspelled command names by a >
12538 :catch /^Vim:E492:/
12539
12540Some error messages may be produced by different commands: >
12541 :function nofunc
12542and >
12543 :delfunction nofunc
12544both produce the error message >
12545 E128: Function name must start with a capital: nofunc
12546which is converted inside try conditionals to an exception >
12547 Vim(function):E128: Function name must start with a capital: nofunc
12548or >
12549 Vim(delfunction):E128: Function name must start with a capital: nofunc
12550respectively. You can catch the error by its number independently on the
12551command that caused it if you use the following pattern: >
12552 :catch /^Vim(\a\+):E128:/
12553
12554Some commands like >
12555 :let x = novar
12556produce multiple error messages, here: >
12557 E121: Undefined variable: novar
12558 E15: Invalid expression: novar
12559Only the first is used for the exception value, since it is the most specific
12560one (see |except-several-errors|). So you can catch it by >
12561 :catch /^Vim(\a\+):E121:/
12562
12563You can catch all errors related to the name "nofunc" by >
12564 :catch /\<nofunc\>/
12565
12566You can catch all Vim errors in the ":write" and ":read" commands by >
12567 :catch /^Vim(\(write\|read\)):E\d\+:/
12568
12569You can catch all Vim errors by the pattern >
12570 :catch /^Vim\((\a\+)\)\=:E\d\+:/
12571<
12572 *catch-text*
12573NOTE: You should never catch the error message text itself: >
12574 :catch /No such variable/
Bram Moolenaar2b8388b2015-02-28 13:11:45 +010012575only works in the English locale, but not when the user has selected
Bram Moolenaar071d4272004-06-13 20:20:40 +000012576a different language by the |:language| command. It is however helpful to
12577cite the message text in a comment: >
12578 :catch /^Vim(\a\+):E108:/ " No such variable
12579
12580
12581IGNORING ERRORS *ignore-errors*
12582
12583You can ignore errors in a specific Vim command by catching them locally: >
12584
12585 :try
12586 : write
12587 :catch
12588 :endtry
12589
12590But you are strongly recommended NOT to use this simple form, since it could
12591catch more than you want. With the ":write" command, some autocommands could
12592be executed and cause errors not related to writing, for instance: >
12593
12594 :au BufWritePre * unlet novar
12595
12596There could even be such errors you are not responsible for as a script
12597writer: a user of your script might have defined such autocommands. You would
12598then hide the error from the user.
12599 It is much better to use >
12600
12601 :try
12602 : write
12603 :catch /^Vim(write):/
12604 :endtry
12605
12606which only catches real write errors. So catch only what you'd like to ignore
12607intentionally.
12608
12609For a single command that does not cause execution of autocommands, you could
12610even suppress the conversion of errors to exceptions by the ":silent!"
12611command: >
12612 :silent! nunmap k
12613This works also when a try conditional is active.
12614
12615
12616CATCHING INTERRUPTS *catch-interrupt*
12617
12618When there are active try conditionals, an interrupt (CTRL-C) is converted to
Bram Moolenaar58b85342016-08-14 19:54:54 +020012619the exception "Vim:Interrupt". You can catch it like every exception. The
Bram Moolenaar071d4272004-06-13 20:20:40 +000012620script is not terminated, then.
12621 Example: >
12622
12623 :function! TASK1()
12624 : sleep 10
12625 :endfunction
12626
12627 :function! TASK2()
12628 : sleep 20
12629 :endfunction
12630
12631 :while 1
12632 : let command = input("Type a command: ")
12633 : try
12634 : if command == ""
12635 : continue
12636 : elseif command == "END"
12637 : break
12638 : elseif command == "TASK1"
12639 : call TASK1()
12640 : elseif command == "TASK2"
12641 : call TASK2()
12642 : else
12643 : echo "\nIllegal command:" command
12644 : continue
12645 : endif
12646 : catch /^Vim:Interrupt$/
12647 : echo "\nCommand interrupted"
12648 : " Caught the interrupt. Continue with next prompt.
12649 : endtry
12650 :endwhile
12651
12652You can interrupt a task here by pressing CTRL-C; the script then asks for
Bram Moolenaar58b85342016-08-14 19:54:54 +020012653a new command. If you press CTRL-C at the prompt, the script is terminated.
Bram Moolenaar071d4272004-06-13 20:20:40 +000012654
12655For testing what happens when CTRL-C would be pressed on a specific line in
12656your script, use the debug mode and execute the |>quit| or |>interrupt|
12657command on that line. See |debug-scripts|.
12658
12659
12660CATCHING ALL *catch-all*
12661
12662The commands >
12663
12664 :catch /.*/
12665 :catch //
12666 :catch
12667
12668catch everything, error exceptions, interrupt exceptions and exceptions
12669explicitly thrown by the |:throw| command. This is useful at the top level of
12670a script in order to catch unexpected things.
12671 Example: >
12672
12673 :try
12674 :
12675 : " do the hard work here
12676 :
12677 :catch /MyException/
12678 :
12679 : " handle known problem
12680 :
12681 :catch /^Vim:Interrupt$/
12682 : echo "Script interrupted"
12683 :catch /.*/
12684 : echo "Internal error (" . v:exception . ")"
12685 : echo " - occurred at " . v:throwpoint
12686 :endtry
12687 :" end of script
12688
12689Note: Catching all might catch more things than you want. Thus, you are
12690strongly encouraged to catch only for problems that you can really handle by
12691specifying a pattern argument to the ":catch".
12692 Example: Catching all could make it nearly impossible to interrupt a script
12693by pressing CTRL-C: >
12694
12695 :while 1
12696 : try
12697 : sleep 1
12698 : catch
12699 : endtry
12700 :endwhile
12701
12702
12703EXCEPTIONS AND AUTOCOMMANDS *except-autocmd*
12704
12705Exceptions may be used during execution of autocommands. Example: >
12706
12707 :autocmd User x try
12708 :autocmd User x throw "Oops!"
12709 :autocmd User x catch
12710 :autocmd User x echo v:exception
12711 :autocmd User x endtry
12712 :autocmd User x throw "Arrgh!"
12713 :autocmd User x echo "Should not be displayed"
12714 :
12715 :try
12716 : doautocmd User x
12717 :catch
12718 : echo v:exception
12719 :endtry
12720
12721This displays "Oops!" and "Arrgh!".
12722
12723 *except-autocmd-Pre*
12724For some commands, autocommands get executed before the main action of the
12725command takes place. If an exception is thrown and not caught in the sequence
12726of autocommands, the sequence and the command that caused its execution are
12727abandoned and the exception is propagated to the caller of the command.
12728 Example: >
12729
12730 :autocmd BufWritePre * throw "FAIL"
12731 :autocmd BufWritePre * echo "Should not be displayed"
12732 :
12733 :try
12734 : write
12735 :catch
12736 : echo "Caught:" v:exception "from" v:throwpoint
12737 :endtry
12738
12739Here, the ":write" command does not write the file currently being edited (as
12740you can see by checking 'modified'), since the exception from the BufWritePre
12741autocommand abandons the ":write". The exception is then caught and the
12742script displays: >
12743
12744 Caught: FAIL from BufWrite Auto commands for "*"
12745<
12746 *except-autocmd-Post*
12747For some commands, autocommands get executed after the main action of the
12748command has taken place. If this main action fails and the command is inside
12749an active try conditional, the autocommands are skipped and an error exception
12750is thrown that can be caught by the caller of the command.
12751 Example: >
12752
12753 :autocmd BufWritePost * echo "File successfully written!"
12754 :
12755 :try
12756 : write /i/m/p/o/s/s/i/b/l/e
12757 :catch
12758 : echo v:exception
12759 :endtry
12760
12761This just displays: >
12762
12763 Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e)
12764
12765If you really need to execute the autocommands even when the main action
12766fails, trigger the event from the catch clause.
12767 Example: >
12768
12769 :autocmd BufWritePre * set noreadonly
12770 :autocmd BufWritePost * set readonly
12771 :
12772 :try
12773 : write /i/m/p/o/s/s/i/b/l/e
12774 :catch
12775 : doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e
12776 :endtry
12777<
12778You can also use ":silent!": >
12779
12780 :let x = "ok"
12781 :let v:errmsg = ""
12782 :autocmd BufWritePost * if v:errmsg != ""
12783 :autocmd BufWritePost * let x = "after fail"
12784 :autocmd BufWritePost * endif
12785 :try
12786 : silent! write /i/m/p/o/s/s/i/b/l/e
12787 :catch
12788 :endtry
12789 :echo x
12790
12791This displays "after fail".
12792
12793If the main action of the command does not fail, exceptions from the
12794autocommands will be catchable by the caller of the command: >
12795
12796 :autocmd BufWritePost * throw ":-("
12797 :autocmd BufWritePost * echo "Should not be displayed"
12798 :
12799 :try
12800 : write
12801 :catch
12802 : echo v:exception
12803 :endtry
12804<
12805 *except-autocmd-Cmd*
12806For some commands, the normal action can be replaced by a sequence of
12807autocommands. Exceptions from that sequence will be catchable by the caller
12808of the command.
12809 Example: For the ":write" command, the caller cannot know whether the file
Bram Moolenaar58b85342016-08-14 19:54:54 +020012810had actually been written when the exception occurred. You need to tell it in
Bram Moolenaar071d4272004-06-13 20:20:40 +000012811some way. >
12812
12813 :if !exists("cnt")
12814 : let cnt = 0
12815 :
12816 : autocmd BufWriteCmd * if &modified
12817 : autocmd BufWriteCmd * let cnt = cnt + 1
12818 : autocmd BufWriteCmd * if cnt % 3 == 2
12819 : autocmd BufWriteCmd * throw "BufWriteCmdError"
12820 : autocmd BufWriteCmd * endif
12821 : autocmd BufWriteCmd * write | set nomodified
12822 : autocmd BufWriteCmd * if cnt % 3 == 0
12823 : autocmd BufWriteCmd * throw "BufWriteCmdError"
12824 : autocmd BufWriteCmd * endif
12825 : autocmd BufWriteCmd * echo "File successfully written!"
12826 : autocmd BufWriteCmd * endif
12827 :endif
12828 :
12829 :try
12830 : write
12831 :catch /^BufWriteCmdError$/
12832 : if &modified
12833 : echo "Error on writing (file contents not changed)"
12834 : else
12835 : echo "Error after writing"
12836 : endif
12837 :catch /^Vim(write):/
12838 : echo "Error on writing"
12839 :endtry
12840
12841When this script is sourced several times after making changes, it displays
12842first >
12843 File successfully written!
12844then >
12845 Error on writing (file contents not changed)
12846then >
12847 Error after writing
12848etc.
12849
12850 *except-autocmd-ill*
12851You cannot spread a try conditional over autocommands for different events.
12852The following code is ill-formed: >
12853
12854 :autocmd BufWritePre * try
12855 :
12856 :autocmd BufWritePost * catch
12857 :autocmd BufWritePost * echo v:exception
12858 :autocmd BufWritePost * endtry
12859 :
12860 :write
12861
12862
12863EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS *except-hier-param*
12864
12865Some programming languages allow to use hierarchies of exception classes or to
12866pass additional information with the object of an exception class. You can do
12867similar things in Vim.
12868 In order to throw an exception from a hierarchy, just throw the complete
12869class name with the components separated by a colon, for instance throw the
12870string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library.
12871 When you want to pass additional information with your exception class, add
12872it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)"
12873for an error when writing "myfile".
12874 With the appropriate patterns in the ":catch" command, you can catch for
12875base classes or derived classes of your hierarchy. Additional information in
12876parentheses can be cut out from |v:exception| with the ":substitute" command.
12877 Example: >
12878
12879 :function! CheckRange(a, func)
12880 : if a:a < 0
12881 : throw "EXCEPT:MATHERR:RANGE(" . a:func . ")"
12882 : endif
12883 :endfunction
12884 :
12885 :function! Add(a, b)
12886 : call CheckRange(a:a, "Add")
12887 : call CheckRange(a:b, "Add")
12888 : let c = a:a + a:b
12889 : if c < 0
12890 : throw "EXCEPT:MATHERR:OVERFLOW"
12891 : endif
12892 : return c
12893 :endfunction
12894 :
12895 :function! Div(a, b)
12896 : call CheckRange(a:a, "Div")
12897 : call CheckRange(a:b, "Div")
12898 : if (a:b == 0)
12899 : throw "EXCEPT:MATHERR:ZERODIV"
12900 : endif
12901 : return a:a / a:b
12902 :endfunction
12903 :
12904 :function! Write(file)
12905 : try
Bram Moolenaar446cb832008-06-24 21:56:24 +000012906 : execute "write" fnameescape(a:file)
Bram Moolenaar071d4272004-06-13 20:20:40 +000012907 : catch /^Vim(write):/
12908 : throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR"
12909 : endtry
12910 :endfunction
12911 :
12912 :try
12913 :
12914 : " something with arithmetics and I/O
12915 :
12916 :catch /^EXCEPT:MATHERR:RANGE/
12917 : let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "")
12918 : echo "Range error in" function
12919 :
12920 :catch /^EXCEPT:MATHERR/ " catches OVERFLOW and ZERODIV
12921 : echo "Math error"
12922 :
12923 :catch /^EXCEPT:IO/
12924 : let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "")
12925 : let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "")
12926 : if file !~ '^/'
12927 : let file = dir . "/" . file
12928 : endif
12929 : echo 'I/O error for "' . file . '"'
12930 :
12931 :catch /^EXCEPT/
12932 : echo "Unspecified error"
12933 :
12934 :endtry
12935
12936The exceptions raised by Vim itself (on error or when pressing CTRL-C) use
12937a flat hierarchy: they are all in the "Vim" class. You cannot throw yourself
12938exceptions with the "Vim" prefix; they are reserved for Vim.
12939 Vim error exceptions are parameterized with the name of the command that
12940failed, if known. See |catch-errors|.
12941
12942
12943PECULIARITIES
12944 *except-compat*
12945The exception handling concept requires that the command sequence causing the
12946exception is aborted immediately and control is transferred to finally clauses
12947and/or a catch clause.
12948
12949In the Vim script language there are cases where scripts and functions
12950continue after an error: in functions without the "abort" flag or in a command
12951after ":silent!", control flow goes to the following line, and outside
12952functions, control flow goes to the line following the outermost ":endwhile"
12953or ":endif". On the other hand, errors should be catchable as exceptions
12954(thus, requiring the immediate abortion).
12955
12956This problem has been solved by converting errors to exceptions and using
12957immediate abortion (if not suppressed by ":silent!") only when a try
Bram Moolenaar58b85342016-08-14 19:54:54 +020012958conditional is active. This is no restriction since an (error) exception can
12959be caught only from an active try conditional. If you want an immediate
Bram Moolenaar071d4272004-06-13 20:20:40 +000012960termination without catching the error, just use a try conditional without
12961catch clause. (You can cause cleanup code being executed before termination
12962by specifying a finally clause.)
12963
12964When no try conditional is active, the usual abortion and continuation
12965behavior is used instead of immediate abortion. This ensures compatibility of
12966scripts written for Vim 6.1 and earlier.
12967
12968However, when sourcing an existing script that does not use exception handling
12969commands (or when calling one of its functions) from inside an active try
12970conditional of a new script, you might change the control flow of the existing
12971script on error. You get the immediate abortion on error and can catch the
12972error in the new script. If however the sourced script suppresses error
12973messages by using the ":silent!" command (checking for errors by testing
Bram Moolenaar58b85342016-08-14 19:54:54 +020012974|v:errmsg| if appropriate), its execution path is not changed. The error is
12975not converted to an exception. (See |:silent|.) So the only remaining cause
Bram Moolenaar071d4272004-06-13 20:20:40 +000012976where this happens is for scripts that don't care about errors and produce
12977error messages. You probably won't want to use such code from your new
12978scripts.
12979
12980 *except-syntax-err*
12981Syntax errors in the exception handling commands are never caught by any of
12982the ":catch" commands of the try conditional they belong to. Its finally
12983clauses, however, is executed.
12984 Example: >
12985
12986 :try
12987 : try
12988 : throw 4711
12989 : catch /\(/
12990 : echo "in catch with syntax error"
12991 : catch
12992 : echo "inner catch-all"
12993 : finally
12994 : echo "inner finally"
12995 : endtry
12996 :catch
12997 : echo 'outer catch-all caught "' . v:exception . '"'
12998 : finally
12999 : echo "outer finally"
13000 :endtry
13001
13002This displays: >
13003 inner finally
13004 outer catch-all caught "Vim(catch):E54: Unmatched \("
13005 outer finally
13006The original exception is discarded and an error exception is raised, instead.
13007
13008 *except-single-line*
13009The ":try", ":catch", ":finally", and ":endtry" commands can be put on
13010a single line, but then syntax errors may make it difficult to recognize the
13011"catch" line, thus you better avoid this.
13012 Example: >
13013 :try | unlet! foo # | catch | endtry
13014raises an error exception for the trailing characters after the ":unlet!"
13015argument, but does not see the ":catch" and ":endtry" commands, so that the
13016error exception is discarded and the "E488: Trailing characters" message gets
13017displayed.
13018
13019 *except-several-errors*
13020When several errors appear in a single command, the first error message is
13021usually the most specific one and therefor converted to the error exception.
13022 Example: >
13023 echo novar
13024causes >
13025 E121: Undefined variable: novar
13026 E15: Invalid expression: novar
13027The value of the error exception inside try conditionals is: >
13028 Vim(echo):E121: Undefined variable: novar
13029< *except-syntax-error*
13030But when a syntax error is detected after a normal error in the same command,
13031the syntax error is used for the exception being thrown.
13032 Example: >
13033 unlet novar #
13034causes >
13035 E108: No such variable: "novar"
13036 E488: Trailing characters
13037The value of the error exception inside try conditionals is: >
13038 Vim(unlet):E488: Trailing characters
13039This is done because the syntax error might change the execution path in a way
13040not intended by the user. Example: >
13041 try
13042 try | unlet novar # | catch | echo v:exception | endtry
13043 catch /.*/
13044 echo "outer catch:" v:exception
13045 endtry
13046This displays "outer catch: Vim(unlet):E488: Trailing characters", and then
13047a "E600: Missing :endtry" error message is given, see |except-single-line|.
13048
13049==============================================================================
130509. Examples *eval-examples*
13051
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013052Printing in Binary ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000013053>
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +010013054 :" The function Nr2Bin() returns the binary string representation of a number.
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013055 :func Nr2Bin(nr)
Bram Moolenaar071d4272004-06-13 20:20:40 +000013056 : let n = a:nr
13057 : let r = ""
13058 : while n
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013059 : let r = '01'[n % 2] . r
13060 : let n = n / 2
Bram Moolenaar071d4272004-06-13 20:20:40 +000013061 : endwhile
13062 : return r
13063 :endfunc
13064
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013065 :" The function String2Bin() converts each character in a string to a
13066 :" binary string, separated with dashes.
13067 :func String2Bin(str)
Bram Moolenaar071d4272004-06-13 20:20:40 +000013068 : let out = ''
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013069 : for ix in range(strlen(a:str))
13070 : let out = out . '-' . Nr2Bin(char2nr(a:str[ix]))
13071 : endfor
13072 : return out[1:]
Bram Moolenaar071d4272004-06-13 20:20:40 +000013073 :endfunc
13074
13075Example of its use: >
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013076 :echo Nr2Bin(32)
13077result: "100000" >
13078 :echo String2Bin("32")
13079result: "110011-110010"
Bram Moolenaar071d4272004-06-13 20:20:40 +000013080
13081
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013082Sorting lines ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000013083
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013084This example sorts lines with a specific compare function. >
13085
13086 :func SortBuffer()
13087 : let lines = getline(1, '$')
13088 : call sort(lines, function("Strcmp"))
13089 : call setline(1, lines)
Bram Moolenaar071d4272004-06-13 20:20:40 +000013090 :endfunction
13091
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013092As a one-liner: >
13093 :call setline(1, sort(getline(1, '$'), function("Strcmp")))
Bram Moolenaar071d4272004-06-13 20:20:40 +000013094
Bram Moolenaar071d4272004-06-13 20:20:40 +000013095
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013096scanf() replacement ~
Bram Moolenaar071d4272004-06-13 20:20:40 +000013097 *sscanf*
13098There is no sscanf() function in Vim. If you need to extract parts from a
13099line, you can use matchstr() and substitute() to do it. This example shows
13100how to get the file name, line number and column number out of a line like
13101"foobar.txt, 123, 45". >
13102 :" Set up the match bit
13103 :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)'
13104 :"get the part matching the whole expression
13105 :let l = matchstr(line, mx)
13106 :"get each item out of the match
13107 :let file = substitute(l, mx, '\1', '')
13108 :let lnum = substitute(l, mx, '\2', '')
13109 :let col = substitute(l, mx, '\3', '')
13110
13111The input is in the variable "line", the results in the variables "file",
13112"lnum" and "col". (idea from Michael Geddes)
13113
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013114
13115getting the scriptnames in a Dictionary ~
13116 *scriptnames-dictionary*
13117The |:scriptnames| command can be used to get a list of all script files that
13118have been sourced. There is no equivalent function or variable for this
13119(because it's rarely needed). In case you need to manipulate the list this
13120code can be used: >
13121 " Get the output of ":scriptnames" in the scriptnames_output variable.
13122 let scriptnames_output = ''
13123 redir => scriptnames_output
13124 silent scriptnames
13125 redir END
Bram Moolenaarb0d45e72017-11-05 18:19:24 +010013126
Bram Moolenaar446cb832008-06-24 21:56:24 +000013127 " Split the output into lines and parse each line. Add an entry to the
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013128 " "scripts" dictionary.
13129 let scripts = {}
13130 for line in split(scriptnames_output, "\n")
13131 " Only do non-blank lines.
13132 if line =~ '\S'
13133 " Get the first number in the line.
Bram Moolenaar446cb832008-06-24 21:56:24 +000013134 let nr = matchstr(line, '\d\+')
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013135 " Get the file name, remove the script number " 123: ".
Bram Moolenaar446cb832008-06-24 21:56:24 +000013136 let name = substitute(line, '.\+:\s*', '', '')
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013137 " Add an item to the Dictionary
Bram Moolenaar446cb832008-06-24 21:56:24 +000013138 let scripts[nr] = name
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013139 endif
13140 endfor
13141 unlet scriptnames_output
13142
Bram Moolenaar071d4272004-06-13 20:20:40 +000013143==============================================================================
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02001314410. Vim script versions *vimscript-version* *vimscript-versions*
Bram Moolenaar911ead12019-04-21 00:03:35 +020013145 *scriptversion*
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013146Over time many features have been added to Vim script. This includes Ex
13147commands, functions, variable types, etc. Each individual feature can be
13148checked with the |has()| and |exists()| functions.
13149
13150Sometimes old syntax of functionality gets in the way of making Vim better.
13151When support is taken away this will break older Vim scripts. To make this
13152explicit the |:scriptversion| command can be used. When a Vim script is not
13153compatible with older versions of Vim this will give an explicit error,
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +020013154instead of failing in mysterious ways.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013155
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +020013156 *scriptversion-1* >
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013157 :scriptversion 1
13158< This is the original Vim script, same as not using a |:scriptversion|
13159 command. Can be used to go back to old syntax for a range of lines.
13160 Test for support with: >
13161 has('vimscript-1')
13162
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +020013163< *scriptversion-2* >
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013164 :scriptversion 2
Bram Moolenaar68e65602019-05-26 21:33:31 +020013165< String concatenation with "." is not supported, use ".." instead.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013166 This avoids the ambiguity using "." for Dict member access and
13167 floating point numbers. Now ".5" means the number 0.5.
Bram Moolenaar3ff5f0f2019-06-10 13:11:22 +020013168
13169 *scriptversion-3* >
Bram Moolenaar911ead12019-04-21 00:03:35 +020013170 :scriptversion 3
13171< All |vim-variable|s must be prefixed by "v:". E.g. "version" doesn't
13172 work as |v:version| anymore, it can be used as a normal variable.
13173 Same for some obvious names as "count" and others.
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013174
Bram Moolenaar911ead12019-04-21 00:03:35 +020013175 Test for support with: >
13176 has('vimscript-3')
Bram Moolenaar60a8de22019-09-15 14:33:22 +020013177<
13178 *scriptversion-4* >
13179 :scriptversion 4
13180< Numbers with a leading zero are not recognized as octal. With the
13181 previous version you get: >
13182 echo 017 " displays 15
13183 echo 018 " displays 18
13184< with script version 4: >
13185 echo 017 " displays 17
13186 echo 018 " displays 18
13187< Also, it is possible to use single quotes inside numbers to make them
13188 easier to read: >
13189 echo 1'000'000
13190< The quotes must be surrounded by digits.
13191
13192 Test for support with: >
13193 has('vimscript-4')
Bram Moolenaar558ca4a2019-04-04 18:15:38 +020013194
13195==============================================================================
1319611. No +eval feature *no-eval-feature*
Bram Moolenaar071d4272004-06-13 20:20:40 +000013197
13198When the |+eval| feature was disabled at compile time, none of the expression
13199evaluation commands are available. To prevent this from causing Vim scripts
13200to generate all kinds of errors, the ":if" and ":endif" commands are still
13201recognized, though the argument of the ":if" and everything between the ":if"
13202and the matching ":endif" is ignored. Nesting of ":if" blocks is allowed, but
13203only if the commands are at the start of the line. The ":else" command is not
13204recognized.
13205
13206Example of how to avoid executing commands when the |+eval| feature is
13207missing: >
13208
13209 :if 1
13210 : echo "Expression evaluation is compiled in"
13211 :else
13212 : echo "You will _never_ see this message"
13213 :endif
13214
Bram Moolenaar773a97c2019-06-06 20:39:55 +020013215To execute a command only when the |+eval| feature is disabled can be done in
13216two ways. The simplest is to exit the script (or Vim) prematurely: >
13217 if 1
13218 echo "commands executed with +eval"
13219 finish
13220 endif
13221 args " command executed without +eval
13222
13223If you do not want to abort loading the script you can use a trick, as this
13224example shows: >
Bram Moolenaar45d2cca2017-04-30 16:36:05 +020013225
13226 silent! while 0
13227 set history=111
13228 silent! endwhile
13229
13230When the |+eval| feature is available the command is skipped because of the
13231"while 0". Without the |+eval| feature the "while 0" is an error, which is
13232silently ignored, and the command is executed.
Bram Moolenaarcd5c8f82017-04-09 20:11:58 +020013233
Bram Moolenaar071d4272004-06-13 20:20:40 +000013234==============================================================================
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02001323512. The sandbox *eval-sandbox* *sandbox* *E48*
Bram Moolenaar071d4272004-06-13 20:20:40 +000013236
Bram Moolenaar368373e2010-07-19 20:46:22 +020013237The 'foldexpr', 'formatexpr', 'includeexpr', 'indentexpr', 'statusline' and
13238'foldtext' options may be evaluated in a sandbox. This means that you are
13239protected from these expressions having nasty side effects. This gives some
13240safety for when these options are set from a modeline. It is also used when
13241the command from a tags file is executed and for CTRL-R = in the command line.
Bram Moolenaar7b0294c2004-10-11 10:16:09 +000013242The sandbox is also used for the |:sandbox| command.
Bram Moolenaar071d4272004-06-13 20:20:40 +000013243
13244These items are not allowed in the sandbox:
13245 - changing the buffer text
Bram Moolenaarb477af22018-07-15 20:20:18 +020013246 - defining or changing mapping, autocommands, user commands
Bram Moolenaar071d4272004-06-13 20:20:40 +000013247 - setting certain options (see |option-summary|)
Bram Moolenaaref2f6562007-05-06 13:32:59 +000013248 - setting certain v: variables (see |v:var|) *E794*
Bram Moolenaar071d4272004-06-13 20:20:40 +000013249 - executing a shell command
13250 - reading or writing a file
13251 - jumping to another buffer or editing a file
Bram Moolenaar4770d092006-01-12 23:22:24 +000013252 - executing Python, Perl, etc. commands
Bram Moolenaar7b0294c2004-10-11 10:16:09 +000013253This is not guaranteed 100% secure, but it should block most attacks.
13254
13255 *:san* *:sandbox*
Bram Moolenaar045e82d2005-07-08 22:25:33 +000013256:san[dbox] {cmd} Execute {cmd} in the sandbox. Useful to evaluate an
Bram Moolenaar7b0294c2004-10-11 10:16:09 +000013257 option that may have been set from a modeline, e.g.
13258 'foldexpr'.
13259
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013260 *sandbox-option*
13261A few options contain an expression. When this expression is evaluated it may
Bram Moolenaar9b2200a2006-03-20 21:55:45 +000013262have to be done in the sandbox to avoid a security risk. But the sandbox is
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013263restrictive, thus this only happens when the option was set from an insecure
13264location. Insecure in this context are:
Bram Moolenaar551dbcc2006-04-25 22:13:59 +000013265- sourcing a .vimrc or .exrc in the current directory
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013266- while executing in the sandbox
13267- value coming from a modeline
Bram Moolenaarb477af22018-07-15 20:20:18 +020013268- executing a function that was defined in the sandbox
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013269
13270Note that when in the sandbox and saving an option value and restoring it, the
13271option will still be marked as it was set in the sandbox.
13272
13273==============================================================================
Bram Moolenaar558ca4a2019-04-04 18:15:38 +02001327413. Textlock *textlock*
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013275
13276In a few situations it is not allowed to change the text in the buffer, jump
13277to another window and some other things that might confuse or break what Vim
13278is currently doing. This mostly applies to things that happen when Vim is
Bram Moolenaar58b85342016-08-14 19:54:54 +020013279actually doing something else. For example, evaluating the 'balloonexpr' may
Bram Moolenaarb71eaae2006-01-20 23:10:18 +000013280happen any moment the mouse cursor is resting at some position.
13281
13282This is not allowed when the textlock is active:
13283 - changing the buffer text
13284 - jumping to another buffer or window
13285 - editing another file
13286 - closing a window or quitting Vim
13287 - etc.
13288
Bram Moolenaar071d4272004-06-13 20:20:40 +000013289
Bram Moolenaar91f84f62018-07-29 15:07:52 +020013290 vim:tw=78:ts=8:noet:ft=help:norl: