blob: e291309e4587ee3a538af0d333ca1d020a802f05 [file] [log] [blame]
Doug Kearns4d427d42024-09-15 19:21:18 +02001vim9script
2# Vim9-script expressions
3
4
Doug Kearnse957cba2025-05-04 21:01:18 +02005# Number
6
7# ' separated
8
9echo 1'000'000
10echo 1'000'000.00
11echo -1'000'000
12echo -1'000'000.00
13
14echo 0b1000'0000
15echo 0o1000'0000
16echo 0x1000'0000
17echo -0b1000'0000
18echo -0o1000'0000
19echo -0x1000'0000
20
Doug Kearns3dca5122025-03-09 16:30:28 +010021# Dictionary
22
23echo {}
24echo { foo: 21 * 2 }
25echo { -foo-: 21 * 2 }
26echo { 42: 21 * 2 }
27echo { 'foo': 21 * 2 }
28echo { "foo": 21 * 2 }
29
30echo { foo: { bar: 21 * 2 } }
31echo { foo: { -bar-: 21 * 2 } }
32echo { foo: { 42: 21 * 2 } }
33echo { foo: { 'bar': 21 * 2 } }
34echo { foo: { "bar": 21 * 2 } }
35
36echo { -foo-: { bar: 21 * 2 } }
37echo { -foo-: { -bar-: 21 * 2 } }
38echo { -foo-: { 42: 21 * 2 } }
39echo { -foo-: { 'bar': 21 * 2 } }
40echo { -foo-: { "bar": 21 * 2 } }
41
42echo { 42: { bar: 21 * 2 } }
43echo { 42: { -bar-: 21 * 2 } }
44echo { 42: { 42: 21 * 2 } }
45echo { 42: { 'bar': 21 * 2 } }
46echo { 42: { "bar": 21 * 2 } }
47
48echo { 'foo': { bar: 21 * 2 } }
49echo { 'foo': { -bar-: 21 * 2 } }
50echo { 'foo': { 42: 21 * 2 } }
51echo { 'foo': { "bar": 21 * 2 } }
52echo { 'foo': { 'bar': 21 * 2 } }
53
54echo { "foo": { bar: 21 * 2 } }
55echo { "foo": { -bar-: 21 * 2 } }
56echo { "foo": { 42: 21 * 2 } }
57echo { "foo": { 'bar': 21 * 2 } }
58echo { "foo": { "bar": 21 * 2 } }
59
60echo {
61 # comment
62 foo: {
63 bar: 21 * 2
64 }
65}
66
67# match as keys not scope dictionaries
68echo { b: 42, w: 42, t: 42, g: 42, l: 42, s: 42, a: 42, v: 42 }
69
Doug Kearnsc273f1a2025-01-20 21:53:01 +010070# Operators
71
72# Ternary
73
74echo expr ? expr : expr
75
76echo lnum == 1 ? "top" : lnum
77echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
78
79echo lnum == 1
80 ? "top"
81 : lnum == 1000
82 ? "last"
83 : lnum
84echo lnum == 1 ?
85 "top" :
86 lnum == 1000 ?
87 "last" :
88 lnum
89
90echo true ? true : false
91echo 1 ? 1 : 0
92echo "foo" ? "foo" : "bar"
93echo foo ? foo : bar
94echo g:foo ? g:foo : g:bar
95echo $FOO ? $FOO : $BAR
96echo True() ? True() : False()
97echo @a ? @a : @b
Doug Kearnsa9c06422025-02-12 20:44:17 +010098echo (true) ? (true) : (false)
Doug Kearnsc273f1a2025-01-20 21:53:01 +010099echo (1) ? (1) : (0)
100
101# Falsy
102
103echo expr ?? expr
104
105echo theList ?? 'list is empty'
106echo GetName() ?? 'unknown'
107
108echo theList
109 \ ?? 'list is empty'
110echo theList ??
111 \ 'list is empty'
112
113echo true ?? true
114echo 1 ?? 1
115echo "foo" ?? "foo"
116echo foo ?? foo
117echo g:foo ?? g:foo
118echo $FOO ?? $FOO
119echo True() ?? True()
120echo @a ?? @a
Doug Kearnsa9c06422025-02-12 20:44:17 +0100121echo (true) ?? (true)
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100122echo (1) ?? (1)
123
124
Doug Kearnsa9c06422025-02-12 20:44:17 +0100125# Function calls
126
127Foo(true, false, null)
128
129
Doug Kearns4d427d42024-09-15 19:21:18 +0200130# Command {expr} arguments
131
132if true
133 echo true
134elseif false
135 echo false
136endif
137
138while true
139 break
140endwhile
141
142def Foo(): bool
143 return true
144enddef
145
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100146
147# Issue #14423 (vim.vim: Opt out of vimSearch*)
148
149:?truthy
150const truthy: number = false
151 ? (0
152 )
153 : (1
154 )
155echo truthy
156
157def Foo()
158 :?truthy
159 const truthy: number = false
160 ? (0
161 )
162 : (1
163 )
164 echo truthy
165enddef
166
167
Hirohito Higashifbe4a8f2025-04-27 15:28:30 +0200168# Issue #16227 (Vim script ternary expression highlighting)
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100169
170var foo = 'foo' # comment
171var bar = foo == 'foo' ? 'bar' : 'baz'
172var baz = foo == 'foo'
173 \ ? 'baz'
174 \ : 'bar'
175var qux = foo == 'foo'
176 ? 'qux' # comment
177 : 'qux' # comment
178echo qux ?? 'quux'
179