thinca | cf8695d | 2024-01-28 18:57:23 +0100 | [diff] [blame] | 1 | " String |
| 2 | |
| 3 | echo 'It''s a string' |
| 4 | echo 'tab: \t, new line: \n, backslash: \\' |
| 5 | echo "tab: \t, new line: \n, backslash: \\" |
| 6 | |
dkearns | e3e3934 | 2024-02-02 07:44:26 +1100 | [diff] [blame] | 7 | " String escape sequences |
| 8 | |
| 9 | echo "\316 - \31 - \3 - \x1f - \xf - \X1F - \XF - \u02a4 - \U000002a4 - \b - \e - \f - \n - \r - \t - \\ - \" - \<C-W>" |
| 10 | echo '\316 \31 \3 \x1f \xf \X1F \XF \u02a4 \U000002a4 \b \e \f \n \r \t \\ \" \<C-W>' |
| 11 | echo "\3160 - \x1f0 - \X1F0 - \u02a40 - \U000002a40" |
| 12 | |
| 13 | echo $"\316 - \31 - \3 - \x1f - \xf - \X1F - \XF - \u02a4 - \U000002a4 - \b - \e - \f - \n - \r - \t - \\ - \" - \<C-W>" |
| 14 | echo $'\316 \31 \3 \x1f \xf \X1F \XF \u02a4 \U000002a4 \b \e \f \n \r \t \\ \" \<C-W>' |
| 15 | echo $"\3160 - \x1f0 - \X1F0 - \u02a40 - \U000002a40" |
| 16 | |
| 17 | echo "\<C-a>" |
| 18 | echo "\<*C-a>" |
| 19 | echo "\<C->>" |
| 20 | echo "\<*C->>" |
| 21 | echo "\<C->>>" |
| 22 | echo "\<*C->>>" |
| 23 | |
Doug Kearns | 695522d | 2025-01-10 20:02:17 +0100 | [diff] [blame] | 24 | echo '''' |
| 25 | echo '''foo' |
| 26 | echo 'foo''' |
| 27 | echo 'foo''bar' |
| 28 | |
| 29 | " Unreported issue (incorrectly matches as vimString vimMark vimOper NONE) |
| 30 | " https://github.com/tpope/vim-unimpaired/blob/6d44a6dc2ec34607c41ec78acf81657248580bf1/plugin/unimpaired.vim#L232 |
| 31 | let cmd = 'put!=repeat(nr2char(10), v:count1)|silent '']+' |
| 32 | |
thinca | cf8695d | 2024-01-28 18:57:23 +0100 | [diff] [blame] | 33 | " String interpolation |
| 34 | |
| 35 | echo 'Don''t highlight interpolation: {{ {1 + 2} }}' |
| 36 | echo "Don't highlight interpolation: {{ {1 + 2} }}" |
| 37 | echo $'Highlight interpolation:\t{{ { string({'foo': 'bar'}) } }}' |
| 38 | echo $'Highlight interpolation:\t{{ { $'nested: {{ {1 + 2} }}' } }}' |
| 39 | echo $"Highlight interpolation:\t{{ { string({"foo": "bar"}) } }}" |
| 40 | echo $"Highlight interpolation:\t{{ { $"nested: {{ {1 + 2} }}" } }}" |
dkearns | 5cd86c6 | 2024-03-12 07:40:58 +1100 | [diff] [blame] | 41 | |
Doug Kearns | 695522d | 2025-01-10 20:02:17 +0100 | [diff] [blame] | 42 | echo $'''' |
| 43 | echo $'''foo' |
| 44 | echo $'foo''' |
| 45 | echo $'foo''bar' |
| 46 | |
dkearns | 5cd86c6 | 2024-03-12 07:40:58 +1100 | [diff] [blame] | 47 | " Number |
| 48 | |
| 49 | " Hexadecimal |
| 50 | echo 0xFF |
| 51 | echo 0XFF |
| 52 | echo -0xFF |
| 53 | echo -0XFF |
| 54 | |
| 55 | " Decimal |
| 56 | echo 255 |
| 57 | echo -255 |
| 58 | |
| 59 | " Octal |
| 60 | echo 0377 |
| 61 | echo 0o377 |
| 62 | echo 0O377 |
| 63 | echo -0377 |
| 64 | echo -0o377 |
| 65 | echo -0O377 |
| 66 | |
| 67 | " Binary |
| 68 | echo 0b11111111 |
| 69 | echo 0B11111111 |
| 70 | echo -0b11111111 |
| 71 | echo -0B11111111 |
| 72 | |
| 73 | " Float |
dkearns | 982e191 | 2024-03-28 20:06:03 +1100 | [diff] [blame] | 74 | echo 123.456 |
| 75 | echo +0.0001 |
| 76 | echo 55.0 |
| 77 | echo -0.123 |
| 78 | echo 1.234e03 |
| 79 | echo 1.0E-6 |
| 80 | echo -3.1416e+88 |
dkearns | 5cd86c6 | 2024-03-12 07:40:58 +1100 | [diff] [blame] | 81 | |
| 82 | " Blob |
dkearns | 982e191 | 2024-03-28 20:06:03 +1100 | [diff] [blame] | 83 | echo 0z |
dkearns | 5cd86c6 | 2024-03-12 07:40:58 +1100 | [diff] [blame] | 84 | echo 0zFF00ED015DAF |
| 85 | echo 0zFF00.ED01.5DAF |
| 86 | echo 0zFF.00.ED.01.5D.AF |
Doug Kearns | 1718e7d | 2025-01-08 18:20:47 +0100 | [diff] [blame] | 87 | |
Doug Kearns | 1aa287e | 2025-02-10 22:00:27 +0100 | [diff] [blame] | 88 | " List |
| 89 | |
| 90 | echo [] |
| 91 | echo [42] |
| 92 | echo [[11, 12], [21, 22], [31, 32]] |
| 93 | echo [1, |
| 94 | \ 2, |
| 95 | \ 3, |
| 96 | \ 4 |
| 97 | \] |
| 98 | echo [1, 'two', 1 + 2, "fo" .. "ur"] |
| 99 | |
| 100 | " Issue #5830 (Incorrect syntax highlighting in Vim script when omitting space in list of string) |
| 101 | let l = ['a','b','c'] |
| 102 | |
Doug Kearns | 3dca512 | 2025-03-09 16:30:28 +0100 | [diff] [blame] | 103 | " Dictionary |
| 104 | |
| 105 | echo {} |
| 106 | echo { 'foo': 21 * 2 } |
| 107 | echo { "foo": 21 * 2 } |
| 108 | echo { 42: 21 * 2 } |
| 109 | |
| 110 | echo { "foo": { 'bar': 21 * 2 } } |
| 111 | echo { "foo": { "bar": 21 * 2 } } |
| 112 | echo { "foo": { 42: 21 * 2 } } |
| 113 | echo { "foo": #{ bar: 21 * 2 } } |
| 114 | echo { "foo": #{ -bar-: 21 * 2 } } |
| 115 | echo { "foo": #{ 42: 21 * 2 } } |
| 116 | |
| 117 | echo { 'foo': { 'bar': 21 * 2 } } |
| 118 | echo { 'foo': { "bar": 21 * 2 } } |
| 119 | echo { 'foo': { 42: 21 * 2 } } |
| 120 | echo { 'foo': #{ bar: 21 * 2 } } |
| 121 | echo { 'foo': #{ -bar-: 21 * 2 } } |
| 122 | echo { 'foo': #{ 42: 21 * 2 } } |
| 123 | |
| 124 | echo { 42: { 'bar': 21 * 2 } } |
| 125 | echo { 42: { "bar": 21 * 2 } } |
| 126 | echo { 42: { 42: 21 * 2 } } |
| 127 | echo { 42: #{ bar: 21 * 2 } } |
| 128 | echo { 42: #{ -bar-: 21 * 2 } } |
| 129 | echo { 42: #{ 42: 21 * 2 } } |
| 130 | |
| 131 | echo { |
| 132 | "\ comment |
| 133 | \ "foo": { "bar": 21 * 2 } |
| 134 | \} |
| 135 | |
| 136 | " TODO: arbitrary expression keys |
| 137 | |
| 138 | " Literal Dictionary |
| 139 | |
| 140 | echo #{} |
| 141 | echo #{ foo: 21 * 2 } |
| 142 | echo #{ -foo-: 21 * 2 } |
| 143 | echo #{ 42: 21 * 2 } |
| 144 | |
| 145 | echo #{ foo: #{ bar: 21 * 2 } } |
| 146 | echo #{ foo: #{ -bar-: 21 * 2 } } |
| 147 | echo #{ foo: #{ 42: 21 * 2 } } |
| 148 | echo #{ foo: { "bar": 21 * 2 } } |
| 149 | echo #{ foo: { 'bar': 21 * 2 } } |
| 150 | echo #{ foo: { 42: 21 * 2 } } |
| 151 | |
| 152 | echo #{ -foo-: #{ bar: 21 * 2 } } |
| 153 | echo #{ -foo-: #{ -bar-: 21 * 2 } } |
| 154 | echo #{ -foo-: #{ 42: 21 * 2 } } |
| 155 | echo #{ -foo-: { "bar": 21 * 2 } } |
| 156 | echo #{ -foo-: { 'bar': 21 * 2 } } |
| 157 | echo #{ -foo-: { 42: 21 * 2 } } |
| 158 | |
| 159 | echo #{ 42: #{ bar: 21 * 2 } } |
| 160 | echo #{ 42: #{ -bar-: 21 * 2 } } |
| 161 | echo #{ 42: #{ 42: 21 * 2 } } |
| 162 | echo #{ 42: { "bar": 21 * 2 } } |
| 163 | echo #{ 42: { 'bar': 21 * 2 } } |
| 164 | echo #{ 42: { 42: 21 * 2 } } |
| 165 | |
| 166 | echo #{ |
| 167 | "\ comment |
| 168 | \ foo: #{ |
| 169 | \ bar: 21 * 2 |
| 170 | \ } |
| 171 | \} |
| 172 | |
| 173 | " match as keys not scope dictionaries |
| 174 | echo #{ b: 42, w: 42, t: 42, g: 42, l: 42, s: 42, a: 42, v: 42 } |
| 175 | |
Doug Kearns | a9c0642 | 2025-02-12 20:44:17 +0100 | [diff] [blame] | 176 | " Register |
| 177 | |
| 178 | echo @" |
| 179 | echo @0 @1 @2 @3 @4 @5 @6 @7 @8 @9 |
| 180 | echo @- |
| 181 | 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 |
| 182 | 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 |
| 183 | echo @: @. @% @# @= @* @+ @~ @_ @/ |
| 184 | |
Doug Kearns | 8dec6c2 | 2025-01-19 14:02:06 +0100 | [diff] [blame] | 185 | " Operators |
| 186 | |
Doug Kearns | c273f1a | 2025-01-20 21:53:01 +0100 | [diff] [blame] | 187 | " Ternary |
| 188 | echo expr ? expr : expr |
| 189 | |
| 190 | echo lnum == 1 ? "top" : lnum |
| 191 | echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum |
| 192 | |
| 193 | echo lnum == 1 |
| 194 | \ ? "top" |
| 195 | \ : lnum == 1000 |
| 196 | \ ? "last" |
| 197 | \ : lnum |
| 198 | echo lnum == 1 ? |
| 199 | \ "top" : |
| 200 | \ lnum == 1000 ? |
| 201 | \ "last" : |
| 202 | \ lnum |
| 203 | |
| 204 | echo 1 ? 1 : 0 |
| 205 | echo "foo" ? "foo" : "bar" |
| 206 | echo foo ? foo : bar |
| 207 | echo g:foo ? g:foo : g:bar |
| 208 | echo $FOO ? $FOO : $BAR |
| 209 | echo True() ? True() : False() |
| 210 | echo @a ? @a : @b |
| 211 | echo (1) ? (1) : (0) |
| 212 | |
| 213 | " Falsy |
| 214 | echo expr ?? expr |
| 215 | |
| 216 | echo theList ?? 'list is empty' |
| 217 | echo GetName() ?? 'unknown' |
| 218 | |
| 219 | echo theList |
| 220 | \ ?? 'list is empty' |
| 221 | echo theList ?? |
| 222 | \ 'list is empty' |
| 223 | |
| 224 | echo 1 ?? 1 |
| 225 | echo "foo" ?? "foo" |
| 226 | echo foo ?? foo |
| 227 | echo g:foo ?? g:foo |
| 228 | echo $FOO ?? $FOO |
| 229 | echo True() ?? True() |
| 230 | echo @a ?? @a |
| 231 | echo (1) ?? (1) |
| 232 | |
Doug Kearns | 8dec6c2 | 2025-01-19 14:02:06 +0100 | [diff] [blame] | 233 | " Comparison - using 'ignorcase' |
| 234 | echo expr == expr |
| 235 | echo expr != expr |
| 236 | echo expr > expr |
| 237 | echo expr >= expr |
| 238 | echo expr < expr |
| 239 | echo expr <= expr |
| 240 | echo expr =~ expr |
| 241 | echo expr !~ expr |
| 242 | echo expr is expr |
| 243 | echo expr isnot expr |
| 244 | |
| 245 | " Comparison - match case |
| 246 | echo expr ==# expr |
| 247 | echo expr !=# expr |
| 248 | echo expr ># expr |
| 249 | echo expr >=# expr |
| 250 | echo expr <# expr |
| 251 | echo expr <=# expr |
| 252 | echo expr =~# expr |
| 253 | echo expr !~# expr |
| 254 | echo expr is# expr |
| 255 | echo expr isnot# expr |
| 256 | |
| 257 | " Comparison - ignore case |
| 258 | echo expr ==? expr |
| 259 | echo expr !=? expr |
| 260 | echo expr >? expr |
| 261 | echo expr >=? expr |
| 262 | echo expr <? expr |
| 263 | echo expr <=? expr |
| 264 | echo expr =~? expr |
| 265 | echo expr !~? expr |
| 266 | echo expr is? expr |
| 267 | echo expr isnot? expr |
| 268 | |
Doug Kearns | 1aa287e | 2025-02-10 22:00:27 +0100 | [diff] [blame] | 269 | " Unreported issue ("is" incorrectly matches as "echo vimNumber *vimCommand* vimNumber") |
Doug Kearns | 8dec6c2 | 2025-01-19 14:02:06 +0100 | [diff] [blame] | 270 | echo 42 is 42 |
Doug Kearns | 1718e7d | 2025-01-08 18:20:47 +0100 | [diff] [blame] | 271 | |
Doug Kearns | 1aa287e | 2025-02-10 22:00:27 +0100 | [diff] [blame] | 272 | " Line continuation |
| 273 | let foo = foo + |
| 274 | \ |
| 275 | "\ comment |
| 276 | \ |
| 277 | "\ comment |
| 278 | \ bar + |
| 279 | \ "baz" |
| 280 | |
| 281 | let foo = foo + |
| 282 | "\ comment |
| 283 | \ |
| 284 | "\ comment |
| 285 | \ |
| 286 | \ bar + |
| 287 | \ "baz" |
| 288 | |
Doug Kearns | a9c0642 | 2025-02-12 20:44:17 +0100 | [diff] [blame] | 289 | " Function calls |
| 290 | |
| 291 | call Foo(v:true, v:false, v:null) |
| 292 | |
Doug Kearns | c273f1a | 2025-01-20 21:53:01 +0100 | [diff] [blame] | 293 | |
Doug Kearns | 1718e7d | 2025-01-08 18:20:47 +0100 | [diff] [blame] | 294 | " Issue #16221 (vimString becomes vimVar when preceded by !) |
| 295 | let bar = !'g:bar'->exists() |
| 296 | |
Doug Kearns | c273f1a | 2025-01-20 21:53:01 +0100 | [diff] [blame] | 297 | |
| 298 | " Issue #14423 (vim.vim: Opt out of vimSearch*) |
| 299 | |
| 300 | ?truthy |
| 301 | let truthy = 0 |
| 302 | \ ? (0 |
| 303 | \ ) |
| 304 | \ : (1 |
| 305 | \ ) |
| 306 | echo truthy |
| 307 | |
| 308 | function Foo() |
| 309 | ?truthy |
| 310 | let truthy = 0 |
| 311 | \ ? (0 |
| 312 | \ ) |
| 313 | \ : (1 |
| 314 | \ ) |
| 315 | echo truthy |
| 316 | endfunction |
| 317 | |