Repository navigation
Expand file tree
/
Copy pathnews.txt
More file actions
620 lines (521 loc) · 27.9 KB
/
Copy pathnews.txt
File metadata and controls
620 lines (521 loc) · 27.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
*news.txt* Nvim
NVIM REFERENCE MANUAL
Notable changes since Nvim 0.12 *news*
For changes in the previous release, see |news-0.12|.
Type |gO| to see the table of contents.
==============================================================================
BREAKING CHANGES IN HEAD OR EXPERIMENTAL *news-breaking-dev*
====== Remove this section before release. ======
The following changes to UNRELEASED features were made during the development
cycle (Nvim HEAD, the "master" branch).
EVENTS
• todo
EXPERIMENTS
• todo
LSP
• todo
LUA
• vim.pos, vim.range always require the `buf` parameter.
• range.cursor() and range.to_cursor() are removed.
Use range.mark() and range.to_mark() instead.
• pos.to_cursor() returns a (`row,` `col)` tuple
instead of returning them as separate values.
• Renamed current_level param of vim.log.new().
• `vim.opt.{option}:get()` has improved structure for dict-like options.
Some shapes changed:
- "key:value" list options (e.g. 'diffopt', 'mousescroll') return a map
`{ key = value }` instead of an array of `"key:value"` strings.
- The `,,` literal-comma convention (e.g. 'isfname') is not reconstructed in
the structured view; the raw string value is unchanged.
DIAGNOSTICS
• todo
OPTIONS
• When |ui2| is enabled, since the ruler is no longer a left-aligned box of
fixed width, there is no longer an inconsistent special handling of item
groups in 'rulerformat' to configure that fixed width. An old-style left-
aligned fixed-width ruler can now be achieved by using item groups exactly
as they are documented, e.g. `%-20.20(...%)`.
TREESITTER
• todo
UI
• Healthchecks for |vim.ui.img| were moved to `:checkhealth vim.health`.
• |ui2| messages pager no longer uses <CR> by default; use |g<| or set
'messagesopt' "pager", e.g. `:set messagesopt+=pager:<CR>`.
• |ui2| `cfg.pager_char` and `cfg.msg.msg.timeout` were replaced by the
'messagesopt' items "pager" and "timeout".
VIMSCRIPT
• todo
==============================================================================
BREAKING CHANGES *news-breaking*
These changes may require adaptations in your config or plugins.
API
• API results containing a Lua function reference (e.g. a "callback" reported
by |nvim_get_keymap()| or |nvim_get_autocmds()|, or a "callback" option
value) are serialized over RPC as a human-readable `"<Lua …>"` hint string,
instead of nil.
• |nvim_create_autocmd()|, |nvim_exec_autocmds()| and |nvim_clear_autocmds()|
no longer treat an empty non-nil pattern as nil.
• |nvim_clear_autocmds()| no longer treats an empty array event as nil.
• |vim.o|, |vim.opt|, and |nvim_set_option_value()| expand `~` and environment
variables (|expand-env|).
DIAGNOSTICS
• `vim.diagnostic.Opts.Status.format` no longer accepts the table mapping
from severity to text. Use `vim.diagnostic.Opts.Signs.text` instead.
• `current_line` property of |vim.diagnostic.Opts.VirtualLines| and
|vim.diagnostic.Opts.VirtualText| is now applied on |CursorHold| event.
Make sure your 'updatetime' is reasonable.
EDITOR
• Interactive |Ex-mode| (|:exmode|, `nvim -e`) is a persistent |cmdwin|. This is much
more flexible and makes "Ex mode" more useful as a kind of "cmdline REPL",
with the tradeoff of dropping some POSIX Ex-mode quirks.
• |mode()| returns "n" or "i"; "cv" indicates |-es| (script mode) only.
• Ex mode is entered with "1q:" or |:exmode|, not "gQ".
• ":global/pat/visual" no longer switches to Normal mode per matching line.
• Non-interactive Ex-mode (|-es|, "script mode") executes stdin as Ex commands
directly. It is a "script host", not "POSIX Ex mode".
• Output ends with a final newline.
• |:visual| is |:edit|: it does not switch to reading stdin as Normal-mode
commands, and ":global/pat/visual" does not enter Normal mode per
matching line.
• Commands that wait for typed input (|input()|, |getchar()|, …) stop Nvim
at end-of-input instead of consuming the next stdin line.
• An empty line is a no-op instead of advancing the cursor (or failing
with |E501| at end-of-file).
• On Windows, the |trust| db now stores paths with "/" slashes. This means the
trust store will be reset (one time).
• `stdpath("log")` moved to `stdpath("state")/logs`.
• An operator on a target that creates a Visual selection ("cgn") does not
change |'<| |'>|. |gv|
• |cmdwin| (|q:|, |q/|, |q?|, |c_CTRL-F|):
• Only supports one "cmdline level", not "infinite recursion".
• Expr-register (|i_CTRL-R_=|, |c_CTRL-R_=|) no longer supports opening
cmdwin via |c_CTRL-F|.
• Behavior of |:restart| changed. Use "!" (|:restart!|) to get the old behavior.
• |ZR| now performs |:restart|. Add a count to change the behavior.
• |ins-repeat| replays the full Insert session, including cursor-moves.
Undo and |quote.| still restart at each cursor-move. Use |i_CTRL-O| to get
the old behavior: >vim
inoremap <Left> <C-o><Left>
inoremap <Right> <C-o><Right>
• |visual-repeat| is "semantic" instead of "fixed-size". See
|visual-fixed-size| if you prefer Vim's "fixed-size" Visual-repeat.
• |:diffget|, |:diffput| (|do|, |dp|) can be |.| repeated.
• |Q| adds a |multicursor| instead of replaying the last recorded register.
To get the old behavior: >lua
vim.keymap.set('n', 'Q', function()
local reg = vim.fn.reg_recorded()
return reg == '' and '' or ('@' .. reg)
end, { expr = true })
<
EVENTS
• |vim.on_key()| callbacks are not invoked for keys consumed by |getchar()|.
• |BufModifiedSet| has been removed. Use the |OptionSet| event with pattern
"modified" instead.
• |ui-messages| `msg_show.bufwrite` and `msg_show.completion` messages are now
`msg_show.progress` events.
LSP
• `vim.lsp.ClientConfig.cmd` given as a string array now uses
`vim.lsp.ClientConfig.root_dir` as its default process working directory.
• `client.attached_buffers[buf]` now stores `languageId` string (was boolean).
LUA
• "standalone" Lua interpreter mode `nvim -ll` was removed. Use |-l| script
mode instead.
• |vim.opt| no longer supports chaining multiple infix operators (e.g.
`vim.opt.wildignore + '*.o' + '*.obj'`). Instead, use tables:
`vim.opt.wildignore + {'*.o', '*.obj'}`
OPTIONS
• The 'statusline' `%=` item is no longer ignored in item groups. It applies
to the containing item group and its `minwid`.
An `%<` item inside an item group now only applies to the containing group
and its `maxwid`. Therefore, multiple `%<` can now be effective.
The default truncation of item groups is now at the first contained item.
To restore the previous truncation from the left, add a `%<` to the start.
The same applies to 'rulerformat', 'statuscolumn', 'tabline', 'winbar',
'titlestring', and 'iconstring'.
• 'rulerformat' can no longer be set empty, the new default expression will be
restored instead.
PLUGINS
• todo
TREESITTER
• todo
UI
• The bottom right cell of the screen is no longer left empty when the ruler
is shown. This was originally intended to prevent unwanted scrolling on
quirky terminals.
VIMSCRIPT
• Removed: ctxget(), ctxpop(), ctxpush(), ctxset(), ctxsize(). Use
|nvim_get_context()| and |nvim_load_context()| instead.
==============================================================================
NEW FEATURES *news-features*
The following new features were added.
API
• |nvim_win_resize()| resizes a window with a specified anchor edge.
|nvim_win_set_height()| and |nvim_win_set_width()| are now deprecated.
• |api-contract| treats `opts` and any parameters thereafter, as optional
(equivalent to passing an empty dict). Clients may omit such optional
parameters.
• The Lua |vim.api| bridge is also a "client" and thus may omit `opts` and
any following parameters: >lua
-- Before:
vim.print(vim.api.nvim_get_mark('A', {}))
-- After:
vim.print(vim.api.nvim_get_mark('A'))
• |nvim_buf_call()| and |nvim_win_call()| now preserve multiple return values.
• |nvim_del_keymap()|, |nvim_buf_del_keymap()| and |vim.keymap.del()| can
match only {lhs}, not {rhs}, with `opts.lhs=true`.
• |nvim_set_hl()| supports "font" key.
• |nvim_open_win()| `zindex` controls whether the UI will use a dimmed cursor
shape when an unfocused float is on top of the cursor.
• |nvim_echo()| distinguishes zero percent from omitted percent for Progress
events.
• |nvim_create_user_command()| accepts `desc` for Vimscript commands.
• Support for tabpage-local options ('cmdheight'):
• |gettabvar()|
• |gettabwinvar()|
• |nvim_get_option_info2()|
• |nvim_get_option_value()|
• |nvim_set_option_value()|
• |nvim_buf_set_extmark()| `virt_lines_overflow` accepts "wrap" to enable
wrapping onto extra rows and "auto" which enables horizontal scrolling when
'nowrap' is set and wrapping when 'wrap' is set.
• |nvim_buf_set_extmark()| `virt_lines` can extend the last `hl` in each `virt_line`
till the end of the line.
• |nvim_set_option_value()| accepts a new `operation` field to modify the
existing option value.
• |nvim_set_option_value()| returns the new option value.
• |nvim_create_autocmd()| is now |api-fast|, so it can be called from a fast
event context (e.g. |vim.uv| callbacks).
• |nvim_create_autocmd()| callback |event-args| provide `win`.
• |nvim_chan_set()| sets channel properties. With `detach=false`, any RPC
channel can enable Nvim "self-exit on channel-close" behavior.
BUILD
• Building using "zig build" requires zig 0.16.x.
• zig build: "-Dcross" option was removed. Often cross-compilation is now
detected, so e.g. from a linux host: >
zig build -Dtarget=aarch64-macos
< will automatically compile a host Lua for use during build.
• zig build: The new "-Dhost={target_string}" option can be used to override
the used host. Use "-Dhost=native" to force cross-compiling or "-Dhost="
(empty string) to assume that target binaries can run on the host during the
build process (e.g. if target is x86 on a x86_64 system, or if emulation set
up with binfmt or similar).
• zig build: Nvim can now be built to produce a WebAssembly binary via
"-Dtarget=wasm32-emscripten", which can run inside a web browser. A basic
browser-based demo for running it is also included. Still very
experimental.
DEFAULTS
• 'rulerformat' default is exposed as a statusline expression (previously it
was implemented as an internal C routine).
DIAGNOSTICS
• |vim.diagnostic.status()| uses the severity names defined by the `signs`
field of |vim.diagnostic.config()|, if any.
• `virtual_lines.overflow` in |vim.diagnostic.config()| controls
how virtual lines wider than the window are displayed.
EDITOR
• Multiple cursors (|multicursor|): edit in many places at once.
• Toggle cursors with |Q|, |<C-LeftMouse>|, or via API (the
"nvim.multicursor" extmarks namespace).
• Toggle "follow mode" with |q=|.
• Clear cursors with |CTRL-L|, restore them with |gQ|.
• |zq| places a cursor at all targets of a motion. E.g. "zqgn" places at
every match (and "gv" selects the matches), "Vzqw" places at every
Visual-selected word.
• |:bcd| sets a buffer-local directory. |getcwd()| and |haslocaldir()| take
`bufnr` as a third parameter.
• |:lcd!| |:tcd!| |:bcd!| unsets the directory of that scope.
• |:command-completion-customlist| can return a list of dictionaries with
kind/menu/info/abbr for the popup menu.
• |cmdwin| (|q:|, |q/|, |q?|, |c_CTRL-F|) is implemented as a "normal"
buffer+window instead of a nested-state modal loop:
• You can create/navigate windows/tabpages while cmdwin is active. Chaos!
• 'inccommand' works in cmdwin!
• API calls (e.g. |nvim_buf_delete()|) that previously failed with
"E11: Invalid in command-line window" while cmdwin was open, now work
normally. Async plugins no longer need special |CmdwinLeave| workarounds.
• The |cmdwin-char| is shown via 'statuscolumn'.
• |gf| and |<cfile>| support `file://…` URIs.
• |:log| opens log files.
• |:marks| can list |extmarks| for a given |namespace|.
• |:marks| gained tab-completion.
• |:restart| saves/restores the current session (window layout, buffers, …).
• |:restart!| (with a bang "!") does not save/restore the session.
• |ZR| restarts Nvim (|:restart|).
• |:detach| with range "%" detaches all UIs except the current one.
• |:detach!| (with bang "!") marks the current UI as detachable: Nvim will
continue running if the UI disconnects unexpectedly (e.g. if you
accidentally close your terminal, ssh connection lost, etc.).
Use |:connect| to reattach.
• |:uptime| displays uptime.
• |:packupdate| and |:packdel| for managing |vim.pack|.
• 'scrollback' is now also valid in |prompt-buffer| buffers to limit the
number of history lines kept above the prompt.
• |v_al| and |v_il| text objects select the whole buffer and the current line
without leading or trailing white space.
• 'autoread' uses file system watchers to detect external changes in
real-time, instead of only on |FocusGained| or |:checktime|.
• During |complete()|-triggered completion, CTRL-N and CTRL-P are now subject
to insert-mode mappings.
• |undo| restores the cursor to its original position ("diw", "atest<Esc>",
"d^", …), instead of jumping to the start of the changed text.
• |undo| no longer restores the old (wrong) position of a mark that you moved
(|m|, |:mark|) later. The mark shifts with the text it was moved to, the
same as a mark the change never touched.
• Multibyte characters, translated by 'langmap', now invoke correct
mappings.
Example: >vim
set langmap=õ]
< Typing õõ in |Normal-mode| now invokes a mapping bound to ]].
• New |complete-items| field "commit_chars": characters that accept the
selected completion item when typed.
EVENTS
• |:delmarks| now triggers the |MarkSet| autocommand with line==col==0, same
as |nvim_buf_del_mark()|
• |ChanClose| is triggered after a channel is closed, before it is removed.
• |CmdAtom| fires after each atomic user action (motion, mapping, operator,
insert session, visual, Ex command, …).
• |SessionWritePre| event emits just before |:mksession|.
• |TextPutPre| and |TextPutPost| are triggered before/after putting text.
• |TabMoved| is triggered when tabs are reordered.
• |DirReadPost| is triggered after each |dir| listing is rendered, so it can
be sorted or filtered. See |dir-render|.
HIGHLIGHTS
• `Dimmed` for text that should be de-emphasized.
• |vim.hl.hl_op()| highlights text regions for |TextYankPost| and
|TextPutPost| events. It replaces the now deprecated `vim.hl.on_yank()`.
LSP
• LSP capabilities:
• Completion supports `CompletionItem.preselect` if 'completeopt' has
"preselect". https://microsoft.github.io/language-server-protocol/specification/#completionClientCapabilities
• `textDocument/foldingRange` |vim.lsp.foldtext()| highlights collapsed text.
https://microsoft.github.io/language-server-protocol/specification/#textDocument_foldingRange
• Completion supports `CompletionList.applyKind`: a server can ask for
`commitCharacters` and `data` from `itemDefaults` to be merged with the
item's own values instead of replacing them.
https://microsoft.github.io/language-server-protocol/specification/#completionItemApplyKinds
• Completion supports a `completionProvider` registered with
`client/registerCapability` instead of declared at `initialize`. Nvim does
not advertise `completion.dynamicRegistration` by default; set it in
|vim.lsp.Config| `capabilities` to opt in.
https://microsoft.github.io/language-server-protocol/specification/#client_registerCapability
• `:checkhealth vim.lsp` highlights the "current buffer".
• |vim.lsp.buf.declaration()|, |vim.lsp.buf.definition()|,
|vim.lsp.buf.type_definition()|, and |vim.lsp.buf.implementation()|
now follows 'switchbuf'.
• |vim.lsp.buf.declaration()|, |vim.lsp.buf.definition()|,
|vim.lsp.buf.type_definition()|, and |vim.lsp.buf.implementation()|
now supports passing arbitrary positions.
• Support for nested snippets.
• |lsp-completion| supports `commitCharacters`: typing a commit character
while a completion item is selected accepts the item as with
|complete_CTRL-Y|, then inserts the character. Previously
`commitCharacters` had no effect.
• The `reuse_client` predicate now passes the target buffer. See |vim.lsp.Config| and
|vim.lsp.start()|
• |vim.lsp.formatexpr()| now falls back to `textDocument/formatting` if the whole
buffer is being formatted and the language server doesn't support
`textDocument/rangeFormatting`.
• |vim.lsp.buf.format()| respects an explicit `timeout_ms` with `async=true`.
The timeout applies per client. Async requests have no timeout when the
option is omitted.
• Support for `workspace/foldingRange/refresh`:
https://microsoft.github.io/language-server-protocol/specifications/lsp/3.18/specification/#workspace_foldingRange_refresh
• |vim.lsp.completion.get()| accepts a `client_id` to request from only the
given clients.
LUA
• |lua-async|: `vim.async` provides structured concurrency primitives for Lua
code, including task handles, await helpers, cooperative cancellation,
completion-order iteration, and semaphores.
• |vim.ui.img| can display images. Use `:checkhealth vim.health` to confirm
your terminal supports it.
• |vim.net.request()| can specify custom headers by passing `opts.headers`.
• |vim.net.request()| can now accept `method` param overload for multiple HTTP methods.
• |writefile()| treats Lua and RPC strings as |Blob|, so it can be used to
write binary data.
• |vim.fs.abspath()| gained `cwd` and `plain` parameters.
• |vim.fs.dir()| with `opts.err=true`, reports errors. An inaccessible root
dir yields a single (name, nil, err) item.
• |vim.fs.dir()| gained a `plain` parameter.
• |vim.fs.find()| returns a list of errors as its second return value.
• |vim.fs.mkdir()| creates directories, including parent directories with
`opts.parents=true`.
• |vim.fs.slug()| generates a filesystem-safe file name from an arbitrary
identity string, with an optional length bound.
• |vim.filetype.inspect()| returns a copy of the internal tables used for
filetype detection.
• Added `__eq` metamethod to |vim.VersionRange|. 2 distinct but representing
the same range instances now compare equal.
• Documentation for |vim.fn| now points to preferred Lua alternatives when
available.
• |vim.list.unique()| and |vim.list.bisect()| now support passing a string
as a shorthand of a `key`
• |vim.isnil()| tests if a value is `nil` or |vim.NIL|.
• |vim.nonnil()| returns the first argument which is not nil.
• |vim.npcall()| calls the function `fn` in protected-mode like |pcall()|,
but returns `nil` on error.
• |vim.pos| can now convert between positions and buffer offsets.
• |vim.pos| and |vim.range| can now convert between mark positions.
• |vim.pos.cursor()| without arguments returns the cursor position of the
current window.
• |vim.ui.input()| now allows setting input scope.
• |vim.log| provides a logging interface.
• |vim.pack.get()| output includes revision of a pending update.
• |vim.pack.get()| can fetch new updates before computing the output.
• |vim.pack| supports |vim.pack-manifest| of plugins.
• |vim.o| now accepts table style values for assignment.
• |vim.keycode()| returns structured info as return value 2.
• |Iter:count()| counts items in the iterator.
OPTIONS
• Lua functions/closures can be assigned to "func" and "expr" options:
|option-value-function| (e.g. `vim.o.operatorfunc`), |expr-option-function|
(e.g. `vim.wo.foldexpr`, `vim.bo.indentexpr`). Reading such an option:
• ...from Lua, gets the function itself.
• ...from Vimscript/RPC, gets a human-readable `"<Lua …>"` hint string.
• 'ttyfast' can be disabled during startup by setting |$NVIM_NOTTYFAST|.
• 'scrolloffpad' allows vertically centering cursor at the end of file.
• 'shortmess' flag |shm-u| silences undo/redo messages.
• 'statusline' supports |stl-%0{| to insert the expression result verbatim.
The `%=` item is supported within item groups to separate alignment sections
within the containing group until its `minwid` is reached. The truncation
of an item group to its `maxwid` can be controlled with the `%<` item.
The new %#(...%#) item denotes a highlight scope.
The same applies to 'rulerformat', 'statuscolumn', 'tabline', 'winbar',
'titlestring', and 'iconstring'.
• 'winpinned' prevents window from closing unless specifically targeted.
• 'packlockfile' sets the path used for |vim.pack-lockfile|.
• 'previewpopup' decides how the preview window is displayed.
• 'messagesopt' items "pager" and "timeout" configure the |ui2| message pager
key and how long a message stays in the message window.
PERFORMANCE
• LSP shares identical file watcher registrations, reducing startup work in
large workspaces.
• |treesitter-highlight| performance on large injection-heavy files improves
by 50% to 100% by reusing edited child-tree ranges.
• Nvim architecture allows pure-Lua implementations of some `vim.fn`
functions, which skips the Vimscript <=> Lua "bridge" (no data
conversion/marshalling) entirely, if the `vim.fn` function is called from
Lua.
• Internal LSP data is cleared using `table.clear`, which reduces GC and
memory reallocation during each data reset.
• RPC client avoids string allocations when parsing Content-Length messages.
• LSP: "overscan" semantic_token range requests to avoid flicker.
• |vim.hl.range()| and |vim.hl.hl_op()| are faster for large characterwise and
linewise regions.
• The display of multibyte text with grapheme clusters has been optimized,
by calculating byte length and cell width of clusters in a single loop.
PLUGINS
• The zip plugin is now |zip|, a read-only archive browser built on |dir|.
To use the legacy plugin instead: >
:packadd old-zip
<
• provider: add bun support for Node.js plugins
STARTUP
• |--embed| with |--listen| waits for a UI on the listen address if stdin is
not a pipe (e.g. tty or /dev/null), instead of exiting.
TERMINAL
• todo
TREESITTER
• |vim.treesitter.get_captures()| returns highlight captures at a given position,
on a whole line, or overlapping a range. It replaces
|vim.treesitter.get_captures_at_pos()|.
• |v_]N| |v_[N| expand selection to sibling treesitter node.
• |treesitter-highlight-conceal| can be removed by adding a `@noconceal`
capture.
• |vim.treesitter.select()| starts or adjusts a visual selection at cursor,
based on tree nodes.
• The `diff` treesitter parser is bundled.
TUI
• The TUI will re-query the terminal's background color when resuming from
a suspended state, and Nvim will update 'background' accordingly.
• User can override the builtin "terminfo" via |$NVIM_TERMDEFS|. This is
similar to Vim's |t_xx| options.
UI
• |:checkhealth| shows filewatcher info in the Performance section.
• Floating window border highlights (|hl-FloatBorder|, |hl-FloatTitle|,
|hl-FloatFooter|) combine with the window-local |hl-Normal| background
instead of falling back to the global background.
• These builtin "picker" menus delegate to |vim.ui.select()|:
• :browse oldfiles
• |:recover|
• |:tselect|
• |z=| (spell suggest)
• The |ui2| dialog window scrolls with the mouse wheel, by 'mousescroll'
lines.
• The |ui2| `[+x]` "spill" indicator is highlighted with |hl-MoreMsg|.
VIMSCRIPT
• `fnamemodify(':h')` preserves logical roots for more path formats.
• |v:exitreason| is set before |QuitPre|.
• |v:startreason| indicates whether Nvim started normally or by |:restart|.
• |v:starttime| is the process start time (nanoseconds since UNIX epoch).
• |v:useractive| indicates user activity.
• |serverlist()| with `info=true` returns details for each server (own + peers).
• These Vimscript functions may be called from |api-fast| context (e.g.
|vim.uv| timer/handle callbacks): |keytrans()|, |char2nr()|, |nr2char()|,
|str2list()|, |strpart()|, |strcharpart()|, |strgetchar()|, |strchars()|,
|strcharlen()|, |strlen()|, |strdisplaywidth()|, |byteidx()|, |charidx()|,
|utf16idx()|, |tr()|, |trim()|.
==============================================================================
CHANGED FEATURES *news-changed*
These existing features changed their behavior.
• Environment variable name (`$NAME`) validity is no longer controlled by
'isident'.
• `nvim_exec_autocmds({buf=…})` runs in the context of the target buffer.
• |SessionLoadPost| is no longer included in views saved by |:mkview|.
• |OptionSet| is no longer triggered during startup by automatic
|'background'| detection.
• |SessionWritePre| and |SessionWritePost| are no longer triggered by
|:mkview|, |:mkvimrc|, or |:mkexrc|.
• Editing a local directory now shows its contents in a `filetype=directory`
buffer. See |dir|.
• |:Open| with no arguments uses the current file.
• The "buffer" key was renamed to "buf" in these functions (but the old name
"buffer" is still accepted, for backwards compatibility):
• |nvim_clear_autocmds()|
• |nvim_create_autocmd()|
• |nvim_exec_autocmds()|
• |nvim_get_autocmds()|
• |vim.keymap.set()| and |vim.keymap.del()| accept a list of strings for `lhs`.
• 'statuscolumn' click function labels can be different across rows.
|v:virtnum| and |v:lnum| are available during the click function callback.
• Markdown inline highlighting now conceals the backslash in backslash escapes.
• Markdown inline backslash escapes and hard line breaks no longer use the
`@string.escape` capture.
• |vim.lsp.util.open_floating_preview()| windows (e.g. |vim.lsp.buf.hover()|)
converted to normal windows (e.g. with |CTRL-W_H|) are no longer closed
automatically.
• |vim.fs.normalize()| `opts.expand_env=false` key was renamed to
`opts.plain=true` and now does not expand leading tildes ("~") in addition
to environment variables ("expand_env" is still accepted, for backwards
compatibility).
• |:helptags| finds help tags with the "vimdoc" |treesitter| parser (and thus
requires it to be installed).
• `:helptags ALL` reports |E152| for "doc" directories it cannot write,
instead of silently skipping them.
• The highlighting groups |hl-CursorLineFold| and |hl-CursorLineSign| are
always used when 'cursorline' is set.
• |vim.lsp.util.apply_text_edits()| accepts `opts.keep_cursor`, to hold the
cursor on the text it is on while edits move around it.
• 'tagfunc' is now also used for :tag completion.
• Some character clusters are restored to occupy two cells like they
did prior to Nvim 0.11. These include Thai syllables like สำ and
half-width Katakana with voicing marks ガ. The TUI renders these in
a safe way which also supports terminals which consider these to be
single-width.
• in script mode |-l|, |print()| now behaves more similar to standalone
lua. Printing is done to stdout, and empty lines are not stripped.
No translation of special characters is done, so escape sequences
can be used when printing to a terminal.
• It is no longer allowed to change the window layout during a |DiffUpdated|
autocommand.
==============================================================================
REMOVED FEATURES *news-removed*
These deprecated features were removed.
• Vimscript functions ctxget(), ctxpop(), ctxpush(), ctxset(), ctxsize()
and the "context stack". Use |nvim_get_context()| and |nvim_load_context()|
with a script-owned list instead.
• |vim.lsp.buf.declaration()|, |vim.lsp.buf.definition()|,
|vim.lsp.buf.type_definition()|, and |vim.lsp.buf.implementation()|
no longer accept the `reuse_win` option.
==============================================================================
DEPRECATIONS *news-deprecations*
See |deprecated-0.13|.
vim:tw=78:ts=8:sw=2:et:ft=help:norl: