blob: f42392c2d7ea8f78e9c0eda626f83ebae88a083f [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 Kearns037c32e2025-06-25 20:58:50 +020070" Register
71
72echo @" @@
73echo @0 @1 @2 @3 @4 @5 @6 @7 @8 @9
74echo @a @b @c @d @e @f @g @h @i @j @k @l @m @n @o @p @q @r @s @t @u @v @w @x @y @z
75echo @A @B @C @D @E @F @G @H @I @J @K @L @M @N @O @P @Q @R @S @T @U @V @W @X @Y @Z
76echo @- @: @. @% @# @= @* @+ @~ @_ @/
77
78# read-only @:, @., @%, @~
79@" = "foo"
80@0 = "foo"
81@1 = "foo"
82@9 = "foo"
83@a = "foo"
84@k = "foo"
85@z = "foo"
86@A = "foo"
87@K = "foo"
88@Z = "foo"
89@- = "foo"
90@# = "foo"
91@= = "foo"
92@* = "foo"
93@+ = "foo"
94@_ = "foo"
95@/ = "foo"
96
Doug Kearnsc273f1a2025-01-20 21:53:01 +010097# Operators
98
99# Ternary
100
101echo expr ? expr : expr
102
103echo lnum == 1 ? "top" : lnum
104echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
105
106echo lnum == 1
107 ? "top"
108 : lnum == 1000
109 ? "last"
110 : lnum
111echo lnum == 1 ?
112 "top" :
113 lnum == 1000 ?
114 "last" :
115 lnum
116
117echo true ? true : false
118echo 1 ? 1 : 0
119echo "foo" ? "foo" : "bar"
120echo foo ? foo : bar
121echo g:foo ? g:foo : g:bar
122echo $FOO ? $FOO : $BAR
123echo True() ? True() : False()
124echo @a ? @a : @b
Doug Kearnsa9c06422025-02-12 20:44:17 +0100125echo (true) ? (true) : (false)
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100126echo (1) ? (1) : (0)
127
128# Falsy
129
130echo expr ?? expr
131
132echo theList ?? 'list is empty'
133echo GetName() ?? 'unknown'
134
135echo theList
136 \ ?? 'list is empty'
137echo theList ??
138 \ 'list is empty'
139
140echo true ?? true
141echo 1 ?? 1
142echo "foo" ?? "foo"
143echo foo ?? foo
144echo g:foo ?? g:foo
145echo $FOO ?? $FOO
146echo True() ?? True()
147echo @a ?? @a
Doug Kearnsa9c06422025-02-12 20:44:17 +0100148echo (true) ?? (true)
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100149echo (1) ?? (1)
150
151
Doug Kearnsa9c06422025-02-12 20:44:17 +0100152# Function calls
153
154Foo(true, false, null)
155
156
Doug Kearns4d427d42024-09-15 19:21:18 +0200157# Command {expr} arguments
158
159if true
160 echo true
161elseif false
162 echo false
163endif
164
165while true
166 break
167endwhile
168
169def Foo(): bool
170 return true
171enddef
172
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100173
174# Issue #14423 (vim.vim: Opt out of vimSearch*)
175
176:?truthy
177const truthy: number = false
178 ? (0
179 )
180 : (1
181 )
182echo truthy
183
184def Foo()
185 :?truthy
186 const truthy: number = false
187 ? (0
188 )
189 : (1
190 )
191 echo truthy
192enddef
193
194
Hirohito Higashifbe4a8f2025-04-27 15:28:30 +0200195# Issue #16227 (Vim script ternary expression highlighting)
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100196
197var foo = 'foo' # comment
198var bar = foo == 'foo' ? 'bar' : 'baz'
199var baz = foo == 'foo'
200 \ ? 'baz'
201 \ : 'bar'
202var qux = foo == 'foo'
203 ? 'qux' # comment
204 : 'qux' # comment
205echo qux ?? 'quux'
206