blob: 592acadc09fb58d83e0ccfa7fe74cb1266cafef5 [file] [log] [blame]
Doug Kearns4d427d42024-09-15 19:21:18 +02001vim9script
2# Vim9-script expressions
3
4
Doug Kearns3dca5122025-03-09 16:30:28 +01005# Dictionary
6
7echo {}
8echo { foo: 21 * 2 }
9echo { -foo-: 21 * 2 }
10echo { 42: 21 * 2 }
11echo { 'foo': 21 * 2 }
12echo { "foo": 21 * 2 }
13
14echo { foo: { bar: 21 * 2 } }
15echo { foo: { -bar-: 21 * 2 } }
16echo { foo: { 42: 21 * 2 } }
17echo { foo: { 'bar': 21 * 2 } }
18echo { foo: { "bar": 21 * 2 } }
19
20echo { -foo-: { bar: 21 * 2 } }
21echo { -foo-: { -bar-: 21 * 2 } }
22echo { -foo-: { 42: 21 * 2 } }
23echo { -foo-: { 'bar': 21 * 2 } }
24echo { -foo-: { "bar": 21 * 2 } }
25
26echo { 42: { bar: 21 * 2 } }
27echo { 42: { -bar-: 21 * 2 } }
28echo { 42: { 42: 21 * 2 } }
29echo { 42: { 'bar': 21 * 2 } }
30echo { 42: { "bar": 21 * 2 } }
31
32echo { 'foo': { bar: 21 * 2 } }
33echo { 'foo': { -bar-: 21 * 2 } }
34echo { 'foo': { 42: 21 * 2 } }
35echo { 'foo': { "bar": 21 * 2 } }
36echo { 'foo': { 'bar': 21 * 2 } }
37
38echo { "foo": { bar: 21 * 2 } }
39echo { "foo": { -bar-: 21 * 2 } }
40echo { "foo": { 42: 21 * 2 } }
41echo { "foo": { 'bar': 21 * 2 } }
42echo { "foo": { "bar": 21 * 2 } }
43
44echo {
45 # comment
46 foo: {
47 bar: 21 * 2
48 }
49}
50
51# match as keys not scope dictionaries
52echo { b: 42, w: 42, t: 42, g: 42, l: 42, s: 42, a: 42, v: 42 }
53
Doug Kearnsc273f1a2025-01-20 21:53:01 +010054# Operators
55
56# Ternary
57
58echo expr ? expr : expr
59
60echo lnum == 1 ? "top" : lnum
61echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
62
63echo lnum == 1
64 ? "top"
65 : lnum == 1000
66 ? "last"
67 : lnum
68echo lnum == 1 ?
69 "top" :
70 lnum == 1000 ?
71 "last" :
72 lnum
73
74echo true ? true : false
75echo 1 ? 1 : 0
76echo "foo" ? "foo" : "bar"
77echo foo ? foo : bar
78echo g:foo ? g:foo : g:bar
79echo $FOO ? $FOO : $BAR
80echo True() ? True() : False()
81echo @a ? @a : @b
Doug Kearnsa9c06422025-02-12 20:44:17 +010082echo (true) ? (true) : (false)
Doug Kearnsc273f1a2025-01-20 21:53:01 +010083echo (1) ? (1) : (0)
84
85# Falsy
86
87echo expr ?? expr
88
89echo theList ?? 'list is empty'
90echo GetName() ?? 'unknown'
91
92echo theList
93 \ ?? 'list is empty'
94echo theList ??
95 \ 'list is empty'
96
97echo true ?? true
98echo 1 ?? 1
99echo "foo" ?? "foo"
100echo foo ?? foo
101echo g:foo ?? g:foo
102echo $FOO ?? $FOO
103echo True() ?? True()
104echo @a ?? @a
Doug Kearnsa9c06422025-02-12 20:44:17 +0100105echo (true) ?? (true)
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100106echo (1) ?? (1)
107
108
Doug Kearnsa9c06422025-02-12 20:44:17 +0100109# Function calls
110
111Foo(true, false, null)
112
113
Doug Kearns4d427d42024-09-15 19:21:18 +0200114# Command {expr} arguments
115
116if true
117 echo true
118elseif false
119 echo false
120endif
121
122while true
123 break
124endwhile
125
126def Foo(): bool
127 return true
128enddef
129
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100130
131# Issue #14423 (vim.vim: Opt out of vimSearch*)
132
133:?truthy
134const truthy: number = false
135 ? (0
136 )
137 : (1
138 )
139echo truthy
140
141def Foo()
142 :?truthy
143 const truthy: number = false
144 ? (0
145 )
146 : (1
147 )
148 echo truthy
149enddef
150
151
Hirohito Higashifbe4a8f2025-04-27 15:28:30 +0200152# Issue #16227 (Vim script ternary expression highlighting)
Doug Kearnsc273f1a2025-01-20 21:53:01 +0100153
154var foo = 'foo' # comment
155var bar = foo == 'foo' ? 'bar' : 'baz'
156var baz = foo == 'foo'
157 \ ? 'baz'
158 \ : 'bar'
159var qux = foo == 'foo'
160 ? 'qux' # comment
161 : 'qux' # comment
162echo qux ?? 'quux'
163