Doug Kearns | 4d427d4 | 2024-09-15 19:21:18 +0200 | [diff] [blame] | 1 | vim9script |
| 2 | # Vim9-script expressions |
| 3 | |
| 4 | |
Doug Kearns | e957cba | 2025-05-04 21:01:18 +0200 | [diff] [blame] | 5 | # Number |
| 6 | |
| 7 | # ' separated |
| 8 | |
| 9 | echo 1'000'000 |
| 10 | echo 1'000'000.00 |
| 11 | echo -1'000'000 |
| 12 | echo -1'000'000.00 |
| 13 | |
| 14 | echo 0b1000'0000 |
| 15 | echo 0o1000'0000 |
| 16 | echo 0x1000'0000 |
| 17 | echo -0b1000'0000 |
| 18 | echo -0o1000'0000 |
| 19 | echo -0x1000'0000 |
| 20 | |
Doug Kearns | 3dca512 | 2025-03-09 16:30:28 +0100 | [diff] [blame] | 21 | # Dictionary |
| 22 | |
| 23 | echo {} |
| 24 | echo { foo: 21 * 2 } |
| 25 | echo { -foo-: 21 * 2 } |
| 26 | echo { 42: 21 * 2 } |
| 27 | echo { 'foo': 21 * 2 } |
| 28 | echo { "foo": 21 * 2 } |
| 29 | |
| 30 | echo { foo: { bar: 21 * 2 } } |
| 31 | echo { foo: { -bar-: 21 * 2 } } |
| 32 | echo { foo: { 42: 21 * 2 } } |
| 33 | echo { foo: { 'bar': 21 * 2 } } |
| 34 | echo { foo: { "bar": 21 * 2 } } |
| 35 | |
| 36 | echo { -foo-: { bar: 21 * 2 } } |
| 37 | echo { -foo-: { -bar-: 21 * 2 } } |
| 38 | echo { -foo-: { 42: 21 * 2 } } |
| 39 | echo { -foo-: { 'bar': 21 * 2 } } |
| 40 | echo { -foo-: { "bar": 21 * 2 } } |
| 41 | |
| 42 | echo { 42: { bar: 21 * 2 } } |
| 43 | echo { 42: { -bar-: 21 * 2 } } |
| 44 | echo { 42: { 42: 21 * 2 } } |
| 45 | echo { 42: { 'bar': 21 * 2 } } |
| 46 | echo { 42: { "bar": 21 * 2 } } |
| 47 | |
| 48 | echo { 'foo': { bar: 21 * 2 } } |
| 49 | echo { 'foo': { -bar-: 21 * 2 } } |
| 50 | echo { 'foo': { 42: 21 * 2 } } |
| 51 | echo { 'foo': { "bar": 21 * 2 } } |
| 52 | echo { 'foo': { 'bar': 21 * 2 } } |
| 53 | |
| 54 | echo { "foo": { bar: 21 * 2 } } |
| 55 | echo { "foo": { -bar-: 21 * 2 } } |
| 56 | echo { "foo": { 42: 21 * 2 } } |
| 57 | echo { "foo": { 'bar': 21 * 2 } } |
| 58 | echo { "foo": { "bar": 21 * 2 } } |
| 59 | |
| 60 | echo { |
| 61 | # comment |
| 62 | foo: { |
| 63 | bar: 21 * 2 |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | # match as keys not scope dictionaries |
| 68 | echo { b: 42, w: 42, t: 42, g: 42, l: 42, s: 42, a: 42, v: 42 } |
| 69 | |
Doug Kearns | 037c32e | 2025-06-25 20:58:50 +0200 | [diff] [blame] | 70 | " Register |
| 71 | |
| 72 | echo @" @@ |
| 73 | echo @0 @1 @2 @3 @4 @5 @6 @7 @8 @9 |
| 74 | echo @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 |
| 75 | echo @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 |
| 76 | echo @- @: @. @% @# @= @* @+ @~ @_ @/ |
| 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 Kearns | c273f1a | 2025-01-20 21:53:01 +0100 | [diff] [blame] | 97 | # Operators |
| 98 | |
| 99 | # Ternary |
| 100 | |
| 101 | echo expr ? expr : expr |
| 102 | |
| 103 | echo lnum == 1 ? "top" : lnum |
| 104 | echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum |
| 105 | |
| 106 | echo lnum == 1 |
| 107 | ? "top" |
| 108 | : lnum == 1000 |
| 109 | ? "last" |
| 110 | : lnum |
| 111 | echo lnum == 1 ? |
| 112 | "top" : |
| 113 | lnum == 1000 ? |
| 114 | "last" : |
| 115 | lnum |
| 116 | |
| 117 | echo true ? true : false |
| 118 | echo 1 ? 1 : 0 |
| 119 | echo "foo" ? "foo" : "bar" |
| 120 | echo foo ? foo : bar |
| 121 | echo g:foo ? g:foo : g:bar |
| 122 | echo $FOO ? $FOO : $BAR |
| 123 | echo True() ? True() : False() |
| 124 | echo @a ? @a : @b |
Doug Kearns | a9c0642 | 2025-02-12 20:44:17 +0100 | [diff] [blame] | 125 | echo (true) ? (true) : (false) |
Doug Kearns | c273f1a | 2025-01-20 21:53:01 +0100 | [diff] [blame] | 126 | echo (1) ? (1) : (0) |
| 127 | |
| 128 | # Falsy |
| 129 | |
| 130 | echo expr ?? expr |
| 131 | |
| 132 | echo theList ?? 'list is empty' |
| 133 | echo GetName() ?? 'unknown' |
| 134 | |
| 135 | echo theList |
| 136 | \ ?? 'list is empty' |
| 137 | echo theList ?? |
| 138 | \ 'list is empty' |
| 139 | |
| 140 | echo true ?? true |
| 141 | echo 1 ?? 1 |
| 142 | echo "foo" ?? "foo" |
| 143 | echo foo ?? foo |
| 144 | echo g:foo ?? g:foo |
| 145 | echo $FOO ?? $FOO |
| 146 | echo True() ?? True() |
| 147 | echo @a ?? @a |
Doug Kearns | a9c0642 | 2025-02-12 20:44:17 +0100 | [diff] [blame] | 148 | echo (true) ?? (true) |
Doug Kearns | c273f1a | 2025-01-20 21:53:01 +0100 | [diff] [blame] | 149 | echo (1) ?? (1) |
| 150 | |
| 151 | |
Doug Kearns | a9c0642 | 2025-02-12 20:44:17 +0100 | [diff] [blame] | 152 | # Function calls |
| 153 | |
| 154 | Foo(true, false, null) |
| 155 | |
| 156 | |
Doug Kearns | 4d427d4 | 2024-09-15 19:21:18 +0200 | [diff] [blame] | 157 | # Command {expr} arguments |
| 158 | |
| 159 | if true |
| 160 | echo true |
| 161 | elseif false |
| 162 | echo false |
| 163 | endif |
| 164 | |
| 165 | while true |
| 166 | break |
| 167 | endwhile |
| 168 | |
| 169 | def Foo(): bool |
| 170 | return true |
| 171 | enddef |
| 172 | |
Doug Kearns | c273f1a | 2025-01-20 21:53:01 +0100 | [diff] [blame] | 173 | |
| 174 | # Issue #14423 (vim.vim: Opt out of vimSearch*) |
| 175 | |
| 176 | :?truthy |
| 177 | const truthy: number = false |
| 178 | ? (0 |
| 179 | ) |
| 180 | : (1 |
| 181 | ) |
| 182 | echo truthy |
| 183 | |
| 184 | def Foo() |
| 185 | :?truthy |
| 186 | const truthy: number = false |
| 187 | ? (0 |
| 188 | ) |
| 189 | : (1 |
| 190 | ) |
| 191 | echo truthy |
| 192 | enddef |
| 193 | |
| 194 | |
Hirohito Higashi | fbe4a8f | 2025-04-27 15:28:30 +0200 | [diff] [blame] | 195 | # Issue #16227 (Vim script ternary expression highlighting) |
Doug Kearns | c273f1a | 2025-01-20 21:53:01 +0100 | [diff] [blame] | 196 | |
| 197 | var foo = 'foo' # comment |
| 198 | var bar = foo == 'foo' ? 'bar' : 'baz' |
| 199 | var baz = foo == 'foo' |
| 200 | \ ? 'baz' |
| 201 | \ : 'bar' |
| 202 | var qux = foo == 'foo' |
| 203 | ? 'qux' # comment |
| 204 | : 'qux' # comment |
| 205 | echo qux ?? 'quux' |
| 206 | |