Home Explore Blog CI



neovim

1st chunk of `runtime/doc/vimeval.txt`
cf781d5d6de6dca04f6eee58ca18753650b4e2c711262d360000000100000fa0
*vimeval.txt*	Nvim


		  VIM REFERENCE MANUAL	  by Bram Moolenaar


Expression evaluation	*vimscript* *expression* *expr* *E15* *eval* *eval.txt*

Using expressions is introduced in chapter 41 of the user manual |usr_41.txt|.

				      Type |gO| to see the table of contents.

==============================================================================
1. Variables						*variables*

1.1 Variable types ~
						*E712* *E896* *E897* *E899*
There are seven types of variables:

							*Number* *Integer*
Number		A 32 or 64 bit signed number.  |expr-number|
		The number of bits is available in |v:numbersize|.
		Examples:  -123  0x10  0177  0o177  0b1011

Float		A floating point number. |floating-point-format| *Float*
		Examples: 123.456  1.15e-6  -1.1e3

String		A NUL terminated string of 8-bit unsigned characters (bytes).
		|expr-string| Examples: "ab\txx\"--"  'x-z''a,c'

Funcref		A reference to a function |Funcref|.
		Example: function("strlen")
		It can be bound to a dictionary and arguments, it then works
		like a Partial.
		Example: function("Callback", [arg], myDict)

List		An ordered sequence of items, see |List| for details.
		Example: [1, 2, ['a', 'b']]

Dictionary	An associative, unordered array: Each entry has a key and a
		value. |Dictionary|
		Examples: >
			{"blue": "#0000ff", "red": "#ff0000"}
			#{blue: "#0000ff", red: "#ff0000"}

Blob		Binary Large Object. Stores any sequence of bytes.  See |Blob|
		for details.
		Example: 0zFF00ED015DAF
		0z is an empty Blob.

The Number and String types are converted automatically, depending on how they
are used.

Conversion from a Number to a String is by making the ASCII representation of
the Number.  Examples:
	Number 123	-->	String "123" ~
	Number 0	-->	String "0" ~
	Number -1	-->	String "-1" ~
							*octal*
Conversion from a String to a Number is done by converting the first digits to
a number.  Hexadecimal "0xf9", Octal "017" or "0o17", and Binary "0b10"
numbers are recognized.  If the String doesn't start with digits, the result
is zero. Examples:
	String "456"	-->	Number 456 ~
	String "6bar"	-->	Number 6 ~
	String "foo"	-->	Number 0 ~
	String "0xf1"	-->	Number 241 ~
	String "0100"	-->	Number 64 ~
	String "0o100"	-->	Number 64 ~
	String "0b101"	-->	Number 5 ~
	String "-8"	-->	Number -8 ~
	String "+8"	-->	Number 0 ~

To force conversion from String to Number, add zero to it: >
	:echo "0100" + 0
<	64 ~

To avoid a leading zero to cause octal conversion, or for using a different
base, use |str2nr()|.

						*TRUE* *FALSE* *Boolean*
For boolean operators Numbers are used.  Zero is FALSE, non-zero is TRUE.
You can also use |v:false| and |v:true|.
When TRUE is returned from a function it is the Number one, FALSE is the
number zero.

Note that in the command: >
	:if "foo"
	:" NOT executed
"foo" is converted to 0, which means FALSE.  If the string starts with a
non-zero number it means TRUE: >
	:if "8foo"
	:" executed
To test for a non-empty string, use empty(): >
	:if !empty("foo")

<						*falsy* *truthy*
An expression can be used as a condition, ignoring the type and only using
whether the value is "sort of true" or "sort of false".  Falsy is:
	the number zero
	empty string, blob, list or dictionary
Other values are truthy.  Examples:
	0	falsy
	1	truthy
	-1	truthy
	0.0	falsy
	0.1	truthy
	''	falsy
	'x'	truthy
	[]	falsy
	[0]	truthy
	{}	falsy
	#{x: 1} truthy
	0z	falsy
	0z00	truthy

							*non-zero-arg*
Function arguments often behave slightly different from |TRUE|: If the
argument is present and it evaluates to a non-zero Number, |v:true| or a
non-empty String, then the value is considered to be TRUE.
Note that " " and "0" are also non-empty strings, thus considered to be TRUE.
A List, Dictionary or Float is not a Number or String, thus evaluate to FALSE.

				*E745* *E728* *E703* *E729* *E730* *E731*
				*E974* *E975* *E976*
|List|, |Dictionary|, |Funcref|, and |Blob| types are not automatically
converted.

							*E805* *E806* *E808*
When mixing Number and Float the Number is

Title: Variables and Data Types in Vim Script
Summary
This section of the Vim reference manual describes the different variable types available in Vim script, including Number, Float, String, Funcref, List, Dictionary, and Blob. It details how these types are converted between each other, especially Number and String, and how they are evaluated in boolean contexts (TRUE/FALSE). Additionally, it covers truthy/falsy values.