Tags: wookayin/neovim
Tags
NVIM v0.8.0 BREAKING CHANGES - Remove 'insertmode' 'remap' and 'terse' options - highlight: Rename attributes to match Vim (neovim#19159) - highlight: Error on invalid names and allow '.' and '@' - terminal: Drop winpty, require Windows 10 neovim#18253 - treesitter: Use @foo.bar style highlight groups - treesitter: Do not merge queries by default (neovim#20105) FEATURES - runtime: Enable filetype.lua by default (neovim#19216) - Add `undo!` - Add "prerelease" to version dict - Click support for 'statusline', 'winbar' neovim#18650 - Add preview functionality to user commands - allow cmdheight=0 (EXPERIMENTAL) neovim#16251 - Stdpath('run'), /tmp/nvim.user/ neovim#18993 - Add 'mousescroll' option (neovim#12355) - Allow :wincmd to accept a count (neovim#19815) - Multibuffer preview support for inccommand - Man: Port to Lua (neovim#19912) - api: Ui options relevant for remote TUI - api: Add `nvim_parse_cmd` And `nvim_cmd` - api: Support handling stdin stream in remote ui - api: Add `group_name` to `nvim_get_autocmds` - api: Enable nvim_exec_autocmds to pass arbitrary data (neovim#18613) - api: Support pattern array for exec_autocmds - api: Add `unsilent` to command APIs - api: Add replace_keycodes to nvim_set_keymap (neovim#19598) - api: Add support for :horizontal modifier - api: Add "move" to nvim_input_mouse - api/ui: "ui_watched" option for ui-side extmarks - build: Add_glob_target runs only on changed files neovim#19070 - checkhealth: Check for slow shell neovim#17829 - defaults: Session data in $XDG_STATE_HOME neovim#15583 - defaults: Search selection by * and # in visual mode (neovim#18538) - defaults: Nnoremap & :&&<CR> neovim#19365 - defaults: enable mouse by default (set mouse=nvi) neovim#19290 - diagnostic: Pass diagnostics as data to DiagnosticChanged autocmd (neovim#20173) - docs: Gen_help_html.lua - edit: Insert an unsimplified key using CTRL-SHIFT-V - treesitter: Full support for spelling - filetype: Convert more patterns to filetype.lua - filetype: Remove side effects from vim.filetype.match (neovim#18894) - filetype: Expand environment variables in filetype patterns (neovim#20145) - fs: Add vim.fs functions: parents() dirname() basename() dir() find() normalize() - highlight: Implement CurSearch highlight - highlight: Support scoped @spam.eggs.baked_beans groups - input: Delay all simplifications - l10n: Turkish translations neovim#19441 - l10n: Improve zh_CN translations (neovim#19483) - lsp: Remove capabilities sanitization (neovim#17814) - lsp: Show feedback on empty hover response (neovim#18308) - lsp: Options to filter and auto-apply code actions (neovim#18221) - lsp: Add vim.lsp.buf.format (neovim#18193) - lsp: Add logging level "OFF" (neovim#18379) - lsp: Add LspAttach and LspDetach autocommands - lsp: Add filter to vim.lsp.get_active_clients() - lsp: Option to reuse_win for jump actions (neovim#18577) - lsp: Add a start function (neovim#18631) - lsp: Send didChangeConfiguration after init (neovim#18847) - lsp: Defaults: tagfunc, omnifunc, formatexpr (neovim#19003, neovim#19677) - lsp: Allow passing custom list handler to LSP functions that return lists (neovim#19213) - lsp: Provide feedback if server can't compute rename result (neovim#19546) - lsp: Add range option to code_action; deprecate range_code_action (neovim#19551) - lsp: Disable exit_timeout by default (neovim#19672) - lsp: Add tcp support - lua: Vim.deprecate() neovim#18320 - lua: Vim.cmd() with kwargs acts like nvim_cmd() neovim#18523 - lua: Allow some vim script functions to run in fast callbacks - lua: Measure require in --startuptime - lua: Allow vim.cmd to be indexed (neovim#19238) - lua: Print source locations of lua callbacks (neovim#19597) - lua: Add vim.iconv (neovim#18286) - lua: Vim.ui_attach to get ui events from lua (EXPERIMENTAL) - man.vim: List command flags in "gO" outline neovim#17558 - mappings: Do not replace existing mapping for simplified form - mappings: Allow special keys and modifiers in <Cmd> mapping - mapset: Support restoring "replace_keycodes" and "desc" - mapset: Support restoring Lua callback (neovim#20024) - marks: Restore viewport on jump neovim#15831 - nvim_create_user_command: Pass structured modifiers to commands - pum: Pretend 'mousemoveevent' is set when showing right-click menu - server: Set $NVIM, unset $NVIM_LISTEN_ADDRESS neovim#11009 - server: Instance "name", store pipes in stdpath(state) - term: Add support for libvterm >= 0.2 - terminal: Implement <c-\><c-o> for terminal mode - terminal: Recognize underdouble and undercurl - terminfo: Bump built-in terminfo entries (neovim#18570) - treesitter: Allow customizing language symbol name - treesitter: Add ability to retreive a tree/node given a range - treesitter: Upstream node methods from nvim-treesitter - treesitter: Include language in invalid query error (neovim#14053) - treesitter: Bundle Lua parser and queries - treesitter: Add viml parser and queries - treesitter: Add injections - treesitter: Add vim.treesitter.start(), enable for Lua - treesitter: Bundle :help parser and queries - tui: Query terminal for CSI u support (neovim#18181) - tui: Recognize keypad keys when using kitty keyboard protocol - tui: Try terminfo for [re]set_cursor_color OSC neovim#19255 - tui: Allow grid and host to disagree on ambiguous-width chars (neovim#19686) - tui: Recognize sidescroll events (neovim#19992) - tui: Support 'mousemoveevent' - ui: Add `'winbar'` - ui: Clear message history explicitly with msg_history_clear event - ui: Make right-click menu work properly with ext_multigrid - ui: Allow to set the highlight namespace per window - ui: Use msg_grid based implementation for cmdheight=0 - ui-ext: Make 'mousemoveevent' a ui_option - eval: Make Lua Funcref work as method and in substitute() (neovim#20217) - eval: Input() support any type for "cancelreturn" in a dict (neovim#19357) BUG FIXES - Show autocmd output when F is in shortmess (neovim#18251) - Has() should preserve v:shell_error neovim#18280 - Suppress "is a directory" messages with shortmess 'F' (neovim#18296) - Display global statusline correctly with ext_messages - Correct nlua_wait error message neovim#18867 - Right-click in clickable statusline neovim#19252 - Remote UI may get invalid 'pumblend' value neovim#19379 - Assertion failure when requiring missing module in autocmd - api: Nvim_eval_statusline should validate input neovim#18347 - api: Check error after getting win/buf handle (neovim#19052) - api: Check for inclusive buffer line index out of bounds correctly (neovim#19056) - api: Change default value of 'pattern' in nvim_exec_autocmds (neovim#19115) - api: Do not switch win/buf if getting option in current win/buf (neovim#19383) - api: Make nvim_set_hl(ns=0, ...) redraw screen properly - api: Nvim_set_hl bail out on invalid group name (neovim#20021) - api: Notify dict watchers on nvim_set_var and vim.g setter - api/command: Fargs behavior when no arguments are passed (neovim#19862) - autocmds: Separate command from desc (neovim#18617) - buffer: Disable buffer-updates before removing from window neovim#18933 - build: Missing definitions for sizeof macros neovim#16393 - build: Only pass -municode if MINGW neovim#19049 - build: Strip trailing newline from variable (neovim#19084) - build: Don't disable byte precompilation on debug builds - build: Fails if git is missing neovim#19366 - charclass: Make behavior with empty str match latest Vim (neovim#19749) - checkhealth: Skip vim.health neovim#18816 - ci: Remove 2000ms blocking wait in many plugin/lsp_spec.lua tests - cmd: Make :-tabmove work with modifiers (neovim#18447) - cmdheight=0: Various issues part3 neovim#19816 - cmdline: Fix passing -1 as char - cmdline: Trigger CmdlineEnter and ModeChanged earlier (neovim#19474) - cmdline: Do not trigger completion at wrong time (neovim#19920) - cmdline: Don't send invalid cursor with incsearch and cmdheight=0 - column: Move sign sentinel after inserting/deleting lines (neovim#20400) - completion: Remove wrong FUNC_ATTR_NONNULL_ALL (neovim#19627) - diagnostic: Use nvim_exec_autocmds to trigger DiagnosticChanged (neovim#18188) - diagnostic: Check for negative column value (neovim#18868) - diagnostic: Remove buf from cache on `BufWipeout` (neovim#20099) - diagnostic: Populate data key in DiagnosticChanged autocmd in reset (neovim#20207) - docs: Correct obsolete note about 'writedelay' in dev docs - docs: Remove internal function from docs - edit.c: Indentkeys double indent after "!" neovim#12894 - eval: Check for v:lua when calling callback (neovim#19855) - eval/f_getmatches: Return empty list for invalid win argument (neovim#18893) - events: Make CursorHold behave as documented - ex_cmds: Correct flags for :const (neovim#19387) - exceptions: Restore `did_throw` (neovim#20000) - exmode: Do not throttle messages when pressing enter to print line - extmarks: Make virt_lines always start at 0 virtcol - filetype: Fix and improve filetype patterns - fillchars: Change fallback after setcellwidths() - float: Make `screen*()` functions respect floating windows - float: Fix glitch when making float window with border a split - float: Fix mouse drag position if float window turned to a split - folds: Fix fold regression with :move (neovim#18685) - folds: Fix fold remains when :delete makes buffer empty (neovim#19673) - ftdetect: Source plugins in autogroup (neovim#18237) - gen_vimdoc.py: Handle missing luajit - getchar: Flush screen before doing a blocking wait - handlers: More specific error messages (neovim#16772) - health: Correct shada file path neovim#18603 - health: Handle non-existent log file neovim#18610 - highlight: Use ctermbg/fg instead of bg/fg when use_rgb=false neovim#18982 - highlight: Add missing 'nocombine' to nvim_get_hl apis (neovim#19586) - highlight: Set the window namespace when redrawing statusline - hl: Set Normal hl group sg_attr value neovim#18820 - hl: Return cterm fg/bg even if they match Normal neovim#18981 - inccommand: Do not try to preview an ambiguous command (neovim#18827) - inccommand: Avoid crash if callback changes inccommand option (neovim#18830) - inccommand: Clear cmdpreview state if preview is not shown (neovim#18923) - inccommand: Skip split window if not enough room neovim#18937 - inccommand: Never preview if parsing command failed (neovim#18944) - inccommand: Parse the command to check if it is previewable - inccommand: Deal with unsynced undo (neovim#20041) - input: Allow Ctrl-C to interrupt a recursive mapping even if mapped (neovim#18885) - input: Fix macro recording with ALT and special key (neovim#18917) - input: Use correct grid when restoring cursor for <expr> mapping (neovim#19047) - input: Do no reinterpret mouse keys with ALT modifiers - input: Use click number of last click for mouse drag (neovim#20300) - inspect: Escape identifiers that are lua keywords (neovim#19898) - keywordprg: Default to :help if set to empty string (neovim#19983) - l10n: Improve zh_CN and zh_TW translations (neovim#19969) - log: Back even again - logging: Skip recursion, fix crash neovim#18764 - logging: Make logmsg() thread-safe again - logging: Try harder to resolve Nvim "name" neovim#19016 - lsp: Unify progress message handling (neovim#18040) - lsp: Fix unnecessary buffers being added on empty diagnostics (neovim#18275) - lsp: Fix infinite loop in resolved_capabilities deprecation message (neovim#18333) - lsp: Add missing bufnr argument (neovim#18382) - lsp: Fix rename capability checks and multi client support (neovim#18441) - lsp: Detach spawned LSP server processes (neovim#18477) - lsp: Perform client side filtering of code actions (neovim#18392) - lsp: Only send diagnostics from current buffer in code_action() (neovim#18639) - lsp: Respect global syntax setting in open float preview (neovim#15225) - lsp: Include cancellable in progress message table (neovim#18809) - lsp: Adjust offset encoding in lsp.buf.rename() (neovim#18829) - lsp: Set buflisted before switching to buffer (neovim#18854) - lsp: Fix multi client handling in code action (neovim#18869) - lsp: Small bugs in snippet-parser neovim#18998 - lsp: Pcall nvim_del_augroup_by_name (neovim#19302) - lsp: Abort pending changes after flush when debouncing (neovim#19314) - lsp: Don't attach a client in lsp.start() if there is none (neovim#19328) - lsp: Account for initializing servers in vim.lsp.start (neovim#19329) - lsp: Move augroup define to if statement (neovim#19406) - lsp: Set workspace.configuration capability (neovim#19548) - lsp: Send didOpen if name changes on write (neovim#19583) - lsp: Prevent unexpected position jumps (neovim#19370) - lsp: Avoid ^M character in hover window on Windows (neovim#19640) - lsp: Set end_col in formatexpr (neovim#19676) - lsp: Handle multiple clients with incremental sync (neovim#19658) - lsp: Fix some type annotations in lsp.rpc (neovim#19714) - lsp: Avoid pipe leaks if lsp cmd isn't executable (neovim#19717) - lsp: Handle nil client in onexit callback (neovim#19722) - lsp: Fix nil value error in get_group (neovim#19735) - lsp: Clean the diagnostic cache when buffer delete (neovim#19449) - lsp: When buffer detach remove buffer from client attached buffers (neovim#20081) - lsp: Schedule removal of client object (neovim#20148) - lsp: Support `false` result in handlers (neovim#20252) - lsp: Out of bounds error in lsp.util.apply_text_edits (neovim#20137) - lsp: Use correct function name in deprecated message (neovim#20308) - lsp: Create missing directory before creating file (neovim#19835) - lua: Don't mutate opts parameter of vim.keymap.del (neovim#18227) - lua: Stop pending highlight.on_yank timer, if any (neovim#18824) - lua: Highlight.on_yank can close timer in twice neovim#18976 - lua: Clear got_int when calling vim.on_key() callback (neovim#18979) - lua: Don't leak memory on error - lua: Double entries in :lua completion neovim#19410 - lua: Make it possible to cancel vim.wait() with Ctrl-C (neovim#19217) - lua: Make ui_attach()/ui_detach() take effect immediately (neovim#20037) - lua: Make vim.str_utfindex and vim.str_byteindex handle NUL bytes - lua: Free vim.ui_attach callback before lua close (neovim#20205) - lua: Fix architecture-dependent behavior in usercmd "reg" (neovim#20384) - mac: Use same $LANG fallback mechanism as Vim - mac: Add CoreServices to flake.nix neovim#18358 - man.vim: Q in "$MANPAGER mode" does not quit neovim#18443 - maparg: Remove double allocation (neovim#20033) - mappings: Fix double-free when unmapping simplifiable Lua mapping - mapset: Remove existing abbreviation of same lhs (neovim#20320) - mark: Set mark fnum from buffer (neovim#19195) - mark: Mark without a view restores at topline neovim#19224 - mark: Fix unexpected cursor movements (neovim#19253) - mark: Give correct error message when mark is in another buffer (neovim#19454) - menu: Make :menu still print header when there are no menus - messages: Add color when showing nvim_echo in :messages history - messages: Do not crash on cmdheight=0 and g< redisplay - messages: Validate msg_grid before silent! message with cmdheight=0 - mksession: Don't store floats in session neovim#18635 - mouse: Click on global statusline with splits (neovim#19390) - mouse: Fix using uninitialized memory with K_MOUSEMOVE (neovim#19480) - mpack: Make sure a `bool` always is a `bool` - normal: Fix segfault with bracket command jumping to a mark - options: Properly free string options (neovim#19510) - options: Mark `winhighlight` as list style (neovim#19477) - packaging: Remove excess forward slash in Wix Patch (neovim#18121) - paste: Ignore mappings in Cmdline mode (neovim#18114) - path: Path_is_url returns false for "foo:/" neovim#19797 - powershell: Filter ":!" commands with args neovim#19268 - pum: Make right drag in anchor grid to select work in multigrid UI (neovim#19382) - query: Fix unnatural order for inherits in treesitter queries (neovim#20298) - redraw: Make sure :redraw! redraws command line - redraw: Handle switching to a tabpage with larger p_ch value - redraw: Avoid unnecessary redraws and glitches with floats+messages - redraw: Make redrawdebug=nodelta handle all the cases - rpc: Break nvim_error_event feedback loop between two nvim instances - runtime/genvimvim: Omit s[ubstitute] from vimCommand neovim#18480 - screen: Restart win_update() if a decor provider changes signcols (neovim#18768) - screen: Check for col instead of vcol when drawing fold (neovim#19572) - session: Respect sessionoptions=terminal neovim#19497 - shared: Avoid indexing unindexable values in vim.tbl_get() (neovim#18337) - signs: Priority of extmark signs (neovim#19718) - source: Make changing 'shellslash' change expand() result - source: Fix expand('<sfile>') no longer works for Lua - spell: Make setting 'encoding' clear word list - spell: Correct spell move behavior without "noplainbuffer" (neovim#20386) - startup: Nvim with --clean should not load user rplugins - substitute: Subtract number of backslashes later - tabpage: Check if ROWS_AVAIL changed for resize (neovim#19620) - terminal: Invalid pointer comparison neovim#18453 - terminal: Do not trim whitespace that is actually in the terminal (neovim#16423) - terminal: Scrollback delete lines immediately neovim#18832 - terminal: Coverity USE_AFTER_FREE neovim#18978 - terminal: Crash if TermClose deletes own buffer neovim#19222 - terminal: Avoid reading over the end of cell.chars (neovim#19580) - terminal: Skip aucmd_win when checking terminal size (neovim#19668) - terminal: Adopt altscreen test for libvterm 0.2 changes - terminfo: Disable smglr for vtpcon and conemu (neovim#18855) - termopen: Avoid ambiguity in URI when CWD is root dir (neovim#16988) - tests: Fix some screen.lua warnings - tests: Fix some issues with ui/inccommand_spec.lua causing slowness - tests: Unreliable parser_spec neovim#18911 - tests: Check for EOF on exit of nvim properly - tests: Missing clear() neovim#18927 - tests: Remove misleading $TEST_PATH segment neovim#19050 - tests: Remove irrelevant usage of display-=msgsep - tests: Use pending_c_parser when needed - tests: Indicate in test logs when nvim exit times out - tmpdir: Invalid tempname() if username has slashes neovim#19323 - treesitter: Create new parser if language is not the same as cached parser (neovim#18149) - treesitter: Bump match limit up - treesitter: Offset directive associates range with capture (neovim#18276) - treesitter: Correct region for string parser (neovim#18794) - treesitter: New iter if folded - treesitter: Don't error when node argument of predicate is nil (neovim#19355) - treesitter: Free memory on removing parser (neovim#19933) - treesitter: More efficient node:root() - treesitter: Make it get_captures_at_position - treesitter: Do not link @error by default - treesitter: Don't support legacy syntax in start() - treesitter: Use the right loading order for base queries (neovim#20117) - treesitter: Prevent endless loop on self-inheritence - treesitter: Return full metadata for get_captures_at_position (neovim#20203) - ts: Do not clobber spelloptions (neovim#20095) - tui: Update modifyOtherKeys reporting (neovim#18158) - tui: Disable extended keys before exiting alternate screen (neovim#18318) - tui: Piping nodejs to nvim breaks input handling neovim#18932 - tui: Resize at startup neovim#17795 - tui: Add fixups for hterm family neovim#19078 - tui: Handle padding requirements for visual bell (neovim#20238) - ui: Require window-local value to show winbar on floating windows (neovim#18773) - ui: Do not call showmode() when setting window height (neovim#18969) - ui: Set redraw_cmdline when setting window height (neovim#19630) - ui: Don't allow decor provider with ns_id==0 - ui: Ui compositor does not correctly free event callbacks - ui: Allow redrawing statusline when msgsep is used (neovim#20337) - ui: Redraw end of buffer if last line is modified (neovim#20354) - unittests: Coredump when running unit tests neovim#18663 - usercmd: Also check for whitespace after escaped character (neovim#19942) - version.c: Mark N/A vim patches neovim#18587 - vim.ui.input: Accept nil or empty "opts" neovim#19109 - window: Close floats first when closing buffer in other tab (neovim#20284) - window: Fix equalization with cmdheight=0 (neovim#20369) - windows: Stdpath("state") => "nvim-data" neovim#18546 - windows: Exepath, stdpath return wrong slashes neovim#19111 - winhl: Do not crash when unsetting winhl in just opened window - Make :undo! notify buffer update callbacks (neovim#20344) - eval: Make Vim functions return inner window width and height (neovim#19743) BUILD SYSTEM - Bump Doxyfile to minimum required version 1.9.0 neovim#18118 - Bump msgpack to 4.0.0 - Enable EXITFREE on Debug builds (neovim#17783) - Add formatting targets for c and lua files (neovim#19488) - clang-format: Align with project style neovim#18192 - clint: Remove all python2-isms with pyupgrade - clint: Remove "function size is too large" warning - clint: Remove rules for includes, whitespace, tabs neovim#18611 - cmake: Simplify and speed up the uninstall target - cmake: Simplify def_cmd_target function - cmake: Use glob_wrapper instead of file(GLOB in main CMakeLists - cmake: Fix static `libintl` test on macOS - deps: Bump LuaJIT, Luv and libuv - deps: Support universal builds on macOS - deps: Bump tree-sitter to v0.20.7 (neovim#20067) - deps: Bump tree-sitter parsers - deps: Bump required libvterm to v0.3 (neovim#20222) - deps: Require libtermkey version 0.22 - deps: update neovim-qt, win32tools.zip PERFORMANCE - Only redraw for CurSearch when it is currently in use - highlight: Allocate permanent names in an arena for fun and cache locality - highlight: Use binary search to lookup RGB color names - map: Visit only one hash bucket instead of all, like an actual hash table - memory: Get rid of extraneous heap allocations - memory: implement arena memory allocation with a shared freelist - memory: Use an arena for RPC decoding and some API return values - messages: Don't call ui_flush() per message line in various places - treesitter: Use a reuse list for query cursors - ui: Reduce allocations when encoding and decoding "redraw" events - ui: Avoid ui_flush() work in headless mode REFACTOR - checkhealth: Rename to vim.health, move logic to Lua neovim#18720 - Add pure attribute to pure functions - Replace char_u variables and functions with char - Enable -Wconversion warning for all Nvim source files - Add warnings for deprecated functions (neovim#18662) - Change type of linenr_T from long to int32_t - Use nvim_get/set_option_value for vim.{b,w}o - Remove functions marked for deprecation in 0.8 (neovim#19299) - Rename function prefix mb to the more accurate utf_cp (neovim#19590) - Remove some unused includes - Change remaining sourcing_name/sourcing_lnum to exestack - Change FALSE/TRUE to false/true - api: Use a hashy hash for looking up api method and event names - api: Use a unpacker based on libmpack instead of msgpack-c - api: restructure api/vim.c and api/private/helpers.c code in separate files - api: Remove redundant fields of CmdParseInfo - aucmd: Call define_autocmd() directly for default autocmds - ci: Cleanup release.yml neovim#19132 - cmd: Format do_one_cmd() - cmd: Hoist out some code into functions - cmd: Unify execute_cmd with do_one_cmd - decor: Use decor levels properly - drawline.c: Factor out utf8 multibyte check - eval: Use Hashy McHashFace instead of gperf - eval.c: Resolve all clint issues (neovim#19774) - eval/funcs.c: Resolve all clint errors - events: Remove unnecessary fudging of updating_screen - ex_cd: Add an early return to fix clint warning - ex_docmd.c: Resolve most clint errors (neovim#19775) - filetype: Allow vim.filetype.match to accept buf and filename (neovim#19114) - highlight: Make hlattrs2dict always use pre-allocated dict - log: Simplify log_path_init neovim#18898 - log: Use msg_schedule_semsg neovim#18950 - lsp: Remove redundant client cleanup (neovim#18744) - lsp: Make the use of local aliases more consistent - lsp: Use autocmd api (neovim#19407) - lsp: Factor out read_loop function - lsp: Encapsulate rpc uv handle - lsp: Extract rpc client from rpc.start - lua: Replace hard-coded gsub with vim.pesc() (neovim#18407) - lua: Reformat with stylua 0.14.0 (neovim#19264) - lua: Git-blame-ignore stylua update PR (neovim#19273) - lua: Replace vim.cmd use with API calls (neovim#19283) - map: Simplify free_all_mem handling - map: Statically initialize maphash array - map: Simplify add_map params - normal: Convert function comments to doxygen format - object: Get rid of redundant FIXED_TEMP_ARRAY - ops: Doxygen docstrings neovim#17743 - option: DRY get/set option value neovim#19038 - plines: Use a struct for chartabsize state - provider: Use list comprehension neovim#19027 - regexp_nfa.c: Match where Vim calls fopen() (neovim#18778) - runtime: Convert dist#ft functions to lua (neovim#18247) - runtime: Convert more dist#ft functions to lua (neovim#18430) - runtime: Convert the remaining dist#ft functions to lua (neovim#18623) - runtime: Port remaining patterns from filetype.vim to filetype.lua (neovim#18814) - runtime: Refactor filetype.lua (neovim#18813) - runtime: Port scripts.vim to lua (neovim#18710) - setcellwidths: Use TV_LIST_ITEM_NEXT properly - signs: Handle non-sign attrs separately (neovim#19784) - tests: Introduce testprg() - treesitter: Get_{nodes,captures}_at_{position,cursor} - typval: Change FC_CFUNC abstraction into FC_LUAREF - ui: Simplify stdin handling - uncrustify: Format all c code under /src/nvim/ - vim.opt: Remove del arg - vim.opt: Unify vim.bo/wo building - vim.opt: Optimize append/prepend/remove - Format runtime with stylua
NVIM 0.6.0 BREAKING CHANGES * 32-bit windows builds are no longer provided. * **build deps**: use libuv 1.42.0 upstream for WIN32 (neovim#15889) (f6c0a37), closes neovim#15889 * removes Windows 7 support * removes support for mouse and alternate buffers in TUI for Windows 8 and 8.1 * **lsp/diagnostic:** highlight groups and signs for LSP diagnostics renamed (e.g. `LspDiagnosticsDefaultWarning` to `DiagnosticWarn`) (a5bbb93) * **diagnostic:** make DiagnosticChanged a first class autocmd (neovim#16098) (150a592), closes neovim#16098 * `au User LspDiagnosticsChanged` autocommands are not supported. Use the new first-class DiagnosticChanged event instead. * **lua**: `register_keystroke_callback` => `on_key` (neovim#15460) (69fe427) * **note**: this breaking change was included in 0.5.1 FEATURES * **:source, nvim_exec:** defer script item creation until s:var access (da9b0ab) * **:source, nvim_exec:** support script-local variables (d4ed51e), closes neovim#13143 neovim#11507 * **lua:** add trimempty optional parameter to vim.split (5fa26e2) * **lua:** add vim.str_utf_{start,end} (neovim#16129) (2230b57) * **lua:** add vim.str_utf_pos function (d752cbc) * **lsp:** aggregate code actions from all clients (neovim#15121) (c36df20) * **api:** add lua C bindings for xdiff (neovim#14536) (3d3c0c6) * **api:** evaluate statusline string neovim#16020 (9086938) * **api:** named marks set, get, delete neovim#15346 (49fdc62) * **api:** nvim_get_chan_info: include "argv" for jobs neovim#15537 (0603eba), closes neovim#15440 * **api:** win_viewport also sends line_count neovim#15613 (086631c) * **api:** support :terminal input callback in lua (9e41e82) * **ci:** add backport PR action (neovim#14766) (6cc456d) * **decorations:** allow more than one stacked highlight in a virt_text (1495d36) * **decorations:** support virtual lines (392c658) (8d7816c) * **diagnostic:** move vim.lsp.diagnostic to vim.diagostic and support other sources (a5bbb93) * **diagnostic:** add 'prefix' option to open_float (neovim#16321) (3c74ba4) * **diagnostic:** add option to include diagnostic source (d43151e) * **diagnostic:** allow 'prefix' option to return highlight (cc48837) * **diagnostic:** allow customized diagnostic messages (neovim#15742) (d999c96) * **diagnostic:** match(), tolist(), fromlist() neovim#15704 (e61ea77) * **diagnostic:** update jumplist on goto_next/prev (neovim#15942) (b55944e) * **diagnostic:** use `scope = 'line'` by default for `open_float()` (neovim#16456) (217f9f8), closes neovim#16453 * **diagnostic:** support severity_sort (32c0631) * **checkhealth:** provide function for command line completion (8b43b07) * **f_chansend:** support Blob data argument (7e9ea08) * **job:** add parameter to close stdin (eb7f24b) * **keywordprg:** use :terminal for external commands neovim#15398 (a90513c), closes neovim#2995 neovim#2761 * **lsp:** add 'focus' option to open_floating_preview (neovim#16465) (fff8827) * **lsp:** add a registry for client side code action commands (6c03601) * **lsp:** add client command support to codelens (neovim#15820) (19a77cd) * **lsp:** add codeAction/resolve support (neovim#15818) (ec4731d) * **lsp:** add exit_timeout flag (neovim#16070) (80456cf) * **lsp:** add formatexpr (neovim#16186) (52fa1d2) * **lsp:** add lsp healthcheck (e268026) * **lsp:** add per-client commands (neovim#16101) (519d8de) * **lsp:** add tagfunc (neovim#16103) (f940e7a) * **lsp:** add warning message for large log size (e6777a7) * **lsp:** allow configuring zindex for floating windows (neovim#15086) (c487a73) * **lsp:** allow diagnostics to be disabled for a buffer (neovim#15134) (1aeb945) * **lsp:** allow root_dir to be nil (neovim#15430) (ff0833c) * **lsp:** highlight active parameter in signature help (neovim#15018) (af26371) * **lsp:** improve vim.lsp.util.apply_text_edits (neovim#15561) (41cfba6) * **lsp:** include original request params in handler ctx (187579f) * **lsp:** jump to diagnostics by position (neovim#14795) (ea39ff5) * **lsp:** Make line diagnostics display prettier (e43dbfd) * **lsp:** make list handlers configurable (neovim#15199) (3e00d4f) * **lsp:** support textDocument/prepareRename (neovim#15514) (c1f573f) * **lsp:** use uv_spawn to check if server executable (neovim#16430) (1a60580) * **lsp:** use vim.ui.select() in codelenses (neovim#16004) (e7ea54a) * **lsp:** utilize textEdit.range for startbyte in omnifunc (neovim#15957) (e9d6f7c) * **lua:** add lua-cjson as vendored dependency (8decc9f) * **lua:** add vim.mpack for msgpack support in lua (eaf661d) * **lua:** allow passing handles to vim.b/w/t (6c5e7bd) * **lua:** convert binary string with NULs to Blob (de9df82) * **lua:** document support of packages with v:lua syntax (9dd371b) * **lua:** enable stack traces in error output (neovim#16228) (03b805a) * **lua:** expose lua-cjson as vim.json (30fed27) * **lua:** make vim.mpack support vim.NIL and vim.empty_dict() (0f59666) * **match:** allow hl group to be defined after :match command (fca52f5) * **msgpack:** convert Blobs to BIN strings (af6f454) * **health:** support lua healthchecks (9249dcd), closes neovim#15632 * **shada:** restore Blob globals properly (ef729fb) * **terminal:** TermClose: set exit code in v:event.status neovim#15406 (50b30de), closes neovim#4713 * **treesitter:** add next, prev sibling method (1400841) * **treesitter:** allow to set highlight priority for queries (242608e) * **ui:** add `opt.kind` to `vim.ui.select` (neovim#15838) (7ae86c1) * **ui:** add vim.ui.input and use in lsp rename (neovim#15959) (16d4af6) * **ui:** add vim.ui.select and use in code actions (neovim#15771) (63fde08) * **vim script:** support calling v:lua as a method (b2994e3) CHANGES * **defaults:** auto-create backup dir (4600193) * **defaults:** inccommand=nosplit neovim#15395 (7215d35) * **defaults:** set undo points in <C-U> and <C-W> (neovim#15400) (2cb8db3) * **defaults:** limit syntax cost on CmdwinEnter neovim#15401 (622a36b), closes neovim#6289 neovim#6399 * **defaults:** map CTRL-L to search highlights, update diffs neovim#15385 (0aa8128) * **defaults:** map Y to y$ neovim#13268 (5a111c1), closes neovim#416 neovim#6289 * **defaults:** remove 'options' from viewoptions neovim#15397 (3954537), closes neovim#6289 * **defaults:** set hidden (f6c72b7) * **defaults:** set nojoinspaces (d417e67) * **defaults:** switchbuf=uselast neovim#15394 (4ba7495) * **runtime:** add packages as `"/pack/*/start/*"` patterns to &rtp (9df7e02) * **startup:** load builtin plugins with --clean neovim#15893 (c7a63f3), closes neovim#15605 * **terminal:** set cursorlineopt=number in terminal mode (neovim#15493) (c61a386) * **window:** skip non-focusable floats for :windo (neovim#15378) (e8631cb) PERFORMANCE IMPROVEMENTS * **api:** avoid spurious allocations when converting small objects (705e8f1) * **highlight:** use a hashtable for highlight group names (bb4b4d7) * **lua:** optimize vim.deep_equal neovim#15236 (4b452d4) * **lua:** don't use regexes inside lua require'mod' (ea2023f), closes neovim#15147 neovim#15497 * **lsp:** improve json deserialization performance (neovim#15854) (912a6e5) * **map:** reduce double pointer indirection to single pointer indirection (9e651a9) * **treesitter:** avoid string lookup of highlight name in hot loop (2460f0a) FIXES * **:source, nvim_exec:** handle Vimscript line continuations neovim#14809 (6188926), closes neovim#14807 * **:source:** copy curbuf lines to memory before sourcing neovim#15111 (afdc9e6) * allow str_utfindex second argument to be an explicit nil (neovim#16448) (512ec46) * **api:** fix crash after set_option_value_for() neovim#15390 (8b0e6cc), closes neovim#14097 neovim#13577 * **api:** fix nvim_buf_set_extmark (2338345) * **autocmd:** fix conditions in block_autocmds, unblock_autocmds neovim#15372 (29712ae), closes neovim#6279 * **buffer_updates:** cleanup test behavior (54b2c68) * **buffer_updates:** handle :delete of the very last line in buffer (8335e26) * **buffer_updates:** handle :sort of already sorted buffer (ef687d3) * **buffer_updates:** make `lockmarks` not affect extmarks and buffer updates. fixes neovim#12861 (7d171b1) * **bufupdates:** send correct updates for visual paste (1423146) * **build:** add an env var to re-enable the colors (5087347) * **build:** call find_package(Threads) before using its variables (f446ab3) * **build:** export symbols on Windows (aa644b7) * **build:** fix build failure in MinGW (0503e17) * **build:** make vendored libmpack and libmpack-lua build properly (2a08aef) * **channel:** throw error if sending to internal channel w/o terminal (3b89fee) * **checkhealth:** duplicate checks if module name has "-" neovim#15935 (a36c6e5) * **checkhealth:** mitigate issues with duplicate healthchecks neovim#15919 (acd5e83), closes neovim#15259 * **ci:** disable broken test on openbsd on all CI due to resource constraints (a3e2636) * **ci:** re-run GHA for ready_for_review events (neovim#15377) (c6ef956) * **decorations:** crash when :bdelete (extmark_free_all) after clear_namespace (cd353aa), closes neovim#15212 * **defaults:** "syntax sync maxlines=1" on CmdwinEnter neovim#15552 (5f8518b), closes neovim#15401 * **defaults:** do not map Y in visual-mode neovim#15387 (54726e8), closes neovim#13268 * **diagnostic:** allow floats to be focusable (neovim#16093) (427bac6) * **diagnostic:** change default severity_sort order (938ed45) * **diagnostic:** clamp line numbers in setqflist and setloclist (5b0d8f8) * **diagnostic:** correctly handle folder level diagnostics (f87779a) * **diagnostic:** deepcopy diagnostics before clamping line numbers (2abc799) * **diagnostic:** do not focus floats in goto functions (neovim#16433) (b5b025f) * **diagnostic:** don't clamp line numbers in setqflist (0341c68) * **diagnostic:** don't return nil when callers expect a table (neovim#15765) (057606e) * **diagnostic:** don't use nil col if missing from qflist (neovim#16357) (5e46f64) * **diagnostic:** error on invalid severity value (neovim#15965) (d5dd0aa) * **diagnostic:** fix navigation with diagnostics placed past end of line (34bb5fa) * **diagnostic:** fix option resolution in open_float (neovim#16229) (fd34784) * **diagnostic:** fix wrong data type in setqflist() (3fd1450) * **diagnostic:** get line count per buffer when clamping (c59f200) * **diagnostic:** handle an unknown or missing client (neovim#16242) (1fdbd29) * **diagnostic:** handle diagnostics placed past the end of line (neovim#16095) (a2994c8) * **diagnostic:** make set() go through cache when calling show() (d93f47d) * **diagnostic:** only update decorations for loaded buffers (neovim#15715) (924e8e4) * **diagnostic:** preserve fields from LSP diagnostics via user_data (neovim#15735) (17b7968) * **diagnostic:** remove useless highlight links (neovim#15683) (c13242c), closes neovim#15585 * disable clipboard when test registers (dd63d93) * **docgen:** add tagfunc.lua (0746f00) * **doc:** various fixes neovim#15604 (4eb1ebb) * **eval:** add the vimscript-1 feature to has() (18b32fc) * **eval:** checking for a non-empty string is too strict (neovim#15987) (1dbbaf8) * **eval:** fix has('wsl') neovim#16153 (16d06fa), closes neovim#12642 neovim#16143 * **eval:** fixup for empty modifier in fnamemodify (neovim#16368) (a7ad509), closes neovim#16367 * **extmark:** fix missing virt_lines when using id param of set_extmark (995dbd2) * **extmarks:** splice extmarks on nv_Undo neovim#15920 (e069361) * **fileio:** replace characters over INT_MAX with U+FFFD (neovim#16354) (a2e5c2f), closes neovim#11877 * **float:** fix potential heap corruption in win_redr_border (de670f3) * **float:** redraw if w_border_adj changed (7ff1bc1) * **heath/provider.vim:** using list as string neovim#16007 (5365f24), closes neovim#15988 * **highlight:** remove syncolor.vim, always include syntax colors (9afa0d2), closes neovim#15176 neovim#12573 neovim#15205 * **inccommand:** ignore trailing commands only for *previewed* command neovim#15638 (1f8c91b), closes neovim#8796 neovim#7494 * include ci/ in exported tarball (d6f03aa), closes neovim#15856 * **input:** never reinterpret unmapped ALT- chrods in Terminal mode (neovim#16222) (5ce35ab) * **input:** resolve isolated (non-ALT/META) mappings neovim#13109 (c4857b6), closes neovim#13042 neovim#13086 neovim#15869 * **jobwait:** always drain process event queues neovim#15402 (3c081d0), closes neovim#15349 * **lsp_spec:** tests depended on previous session (069d1de) * **lsp:** accept file URIs without a hostname (a2c2a08) * **lsp:** add done flag to messages returned in util.get_progress_messages() (neovim#15985) (45fa70a) * **lsp:** add placeholder cancel function (neovim#16189) (4da0351) * **lsp:** add textDocument/prepareRename to capability map (neovim#15961) (fcc11d5), closes neovim#15899 * **lsp:** adjust legacy show diagnostic functions to use correct scope (neovim#16106) (dc6c9fe) * **lsp:** allow diagnostic.clear to accept nil bufnr (neovim#15137) (4ed2d4f) * **lsp:** avoid duplicates in client attached buffers (neovim#16099) (c5525f2) * **lsp:** avoid serializing boolean as key (neovim#15810) (96614f8) * **lsp:** change rpc start notify level to warn (neovim#16467) (04c7b55) * **lsp:** change signature of buf_highlight_references (neovim#16345) (eb3d591) * **lsp:** correctly parse LSP snippets neovim#15579 (516775e), closes neovim#15522 * **lsp:** default to UTF-16 in make_position_params (2e3a474) * **lsp:** do not index nil client in progress (neovim#16262) (8f31b21) * **lsp:** do not invoke handlers for unsupported methods (neovim#15926) (d288daa) * **lsp:** don't update active_clients on exit_timeout (neovim#16192) (98f5782) * **lsp:** enable additional capabilities (neovim#15470) (5d63354) * **lsp:** ensure buffers are re-attached on rename (neovim#16266) (ee3a58d) * **lsp:** Ensure users get feedback on references/symbols errors or empty results (256570a) * **lsp:** expose ContentModified error code to callbacks (neovim#15262) (3f09732) * **lsp:** fix cursor row after textEdits (neovim#16038) (bd2f61c) * **lsp:** gracefully handle nil workspaceFolders (neovim#16284) (0ecc58c) * **lsp:** guard textDocument/codeAction command logic neovim#15769 (433bda4) * **lsp:** improve symbols_to_items performance (neovim#16197) (5ad15c9) * **lsp:** Include client name in handler error messages (neovim#15227) (24f2b9e) * **lsp:** pass bufnr for async formatting (neovim#15084) (c31bc6e) * **lsp:** persist diagnostic config for clients (bcc9ba5) * **lsp:** prevent double <text> for cached plaintext markup (910967e) * **lsp:** restore diagnostics extmarks on buffer changes (neovim#15011) (77b33e4) * **lsp:** rewrite incremental sync (neovim#16252) (2ecf0a4) * **lsp:** send buffer contents joined on fileformat-specific linebreak (neovim#16334) (134a638) * **lsp:** send textDocument/didChange for each buffer (neovim#16431) (3451121) * **lsp:** support duplicate params in signature help (neovim#15032) (9132b76) * **lsp:** update lsp-handler signature in call_hierarchy (neovim#15738) (8164adc) * **lsp:** update workspace/applyEdit handler signature (neovim#15573) (3f526fe) * **lua:** fix vim.deepcopy for metatables & cycled tables (neovim#16435) (eb876a0) * **lua:** preserve argument lists which are not lists (6896d22) * **man.vim:** ensure buftype=nofile after :tag or :stag neovim#15675 (29bc648), closes neovim#15650 * **man.vim:** filetype=man is too eager neovim#15488 (2548a9e), closes neovim#15487 neovim#15487 * **mouse:** fix mouse drag positions on multigrid neovim#12667 (0dcfd0e), closes neovim#15091 * **mouse:** correct dragged position in composed layout (810da1a) * **multigrid:** mouse events crash neovim (28ac6c0) * **nvim_open_win:** crash if autocmds delete buffer/window neovim#15549 (0c06da1), closes neovim#15548 * **options:** using :set fillchars should clear local value (7528bce) * prevent K_EVENT from stopping Select mode CTRL-O neovim#15688 (5f144ef) * **provider:** compare versions as number, not string (python 3.10 support) neovim#15937 (e16adbf), closes neovim#14586 * **screen:** make display_tick monotonic up to 2^64. fixes neovim#16152 (9e88c9c) * **screen:** missing search highlights when redrawing from timer neovim#15380 (db695cc), closes neovim#13074 neovim#14064 * **shared:** do not treat empty tables as list in deep extend (neovim#15094) (526fc60) * **sign:** reset auto sign column with minimum in float win minimal style (c8f57f6) * **startup:** init.lua: set $MYVIMRC to absolute path neovim#15748 (c76cddf) * **termdebug:** replace mapset with nvim_set_keymap (neovim#15699) (4d7dcbe) * **termdebug:** replace term_getline with getbufline neovim#15598 (11289ad) * **terminal:** close without ! if the job is stopped (55defa1), closes neovim#4683 * **terminal:** free terminal if close_buffer() closes a closed terminal (neovim#16264) (14def4d) * **test/dumplog:** tostring(rv) before formatting as string (ddaa0cc) * **tests:** use isolated XDG_DATA_HOME in startup tests (8e663e2) * **treesitter:** do not map hl_group when no mapping is set (f489d98) * **treesitter:** run predicates more often in iter_matches (458f2aa) * **tui:** extend smglr ignores to smglp and smgrp (neovim#16239) (3ba800f) * **tui:** remove obsolete $NVIM detection neovim#15791 (4414584), closes neovim#12937 neovim#11390 * **tutor:** formatting, layout neovim#15098 (c52ec8f), closes neovim#15088 * **ui:** use nowait for q mapping in floating window (neovim#16427) (c132144) * **v:lua:** fix emsg when calling v:lua directly (da9005a) * **vim-patch.sh:** run nvim with -u NONE -n neovim#16179 (97ae0ab) * **vim.opt:** vimL map string values not trimmed (neovim#14982) (4906156) * **window:** win_close from other tabpage neovim#15454 (90b2da1), closes neovim#15313 * **windowing:** positioning of relative floats (9065730)
PreviousNext