| Commit message (Collapse) | Author | Age |
| | |
|
| |
|
|
| |
Now it shows something like `5 lines yanked into "~my.extreg`
|
| | |
|
| | |
|
| |
|
|
| |
Alias semantis are identical to using the full extreg name.
|
| |
|
|
| |
don't exist
|
| |
|
|
| |
Add tests for aliases.
|
| | |
|
| | |
|
| |
|
|
| |
Added a big test suite for extregs
|
| | |
|
| | |
|
| |
|
|
| |
This is the lower level operation used by delete and change.
|
| | |
|
| |
|
|
|
|
|
| |
- support for let syntax: let @~extreg_name = ...
- support for expressions: let x = @~extreg_name
- support for cmdline <C-r>
- support for ex commands: <cmd>put ~extreg_name
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implements "extended registers"
Extended registers provide access to a separate namespace of registers
backed by custom lua callback functions.
A new special register ("~) is introduced, which prompts the user for
the name of an extregistr to yank or paste from.
This enables file-backed or cloud-synced or other arbitrary register
behavior.
One can now use:
`"~file_extreg<cr>yy`
to yank into the "file_extreg" register.
AI-assisted: Qwen3-Coder
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Work towards enabling ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88)
in all `:help` files.
Problem:
The final boss of vimdoc pseudo-structure: Vim's quasi-headings on
function signatures and excmd docs is visually distinctive but too
inconsistent for a nice parse rule.
Solution:
- Define the quasi-heading format as an "h4" variant, specified at
`:help help-tag-heading`.
- For simplicity and predictability, it is defined as any line that
ends with a help tag(s) preceded by 2 or more spaces (or 1 tab).
- Update existing docs.
- This one-time update has a lot of changes, but is very unlikely to
conflict with ported Vim-patches because (1) Vim rarely adds new
*excmds* that we want, and (2) *function* docs are auto-generated.
ref https://github.com/neovim/tree-sitter-vimdoc/issues/110
|
| |
|
|
|
|
|
|
| |
Problem:
By default, 'termpastefilter' removes TAB chars when pasting to a :terminal.
Very annoying, and does not improve "security".
Solution:
Drop "HT" from the 'termpastefilter' default.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
vim-patch:9.2.1181: patch 9.2.1181: MS-Windows: compile warnings with clang 23
vim-patch:9.2.1188: patch 9.2.1188: prop_type_get() does not return the "override" item
vim-patch:ce7c78578 AGENTS.md does not explain how to write garbage collection tests
vim-patch:9.2.1192: patch 9.2.1192: Compile warning when FEAT_DIFF is disabled
vim-patch:9.2.1193: patch 9.2.1193: Vim9: dict type with type variable not checked in generic function
vim-patch:3f1281d50 CI: enable Linux coverage for string-valued action input
vim-patch:9.2.1202: patch 9.2.1202: Vim9: crash on error in a long "implements" list
vim-patch:9.2.1181: patch 9.2.1181: MS-Windows: compile warnings with clang 23
vim-patch:9.2.1084: Cannot check a script without executing it
vim-patch:9.2.1140: Vim9: :def in legacy script can create a script variable
vim-patch:9.2.1184: the dry run feature not well received
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Problem:
A number in 'iskeyword', 'isfname' or 'isident' that overflows (e.g. via
a modeline) hits abort() or an assert in getdigits_int().
Solution:
Parse the numbers non-strictly so an out-of-range value gives E474.
Fixes #42409
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
options (#42403)
Problem: gitrevlist's keywordprg "git show" doesn't realise that input
should never be interpreted as an option. (Note that it is in
practice impossible to pass a value that is interpreted as an
option, but this expresses intent and is defensive.)
Solution: pass --end-of-options to force input to be interpreted as
arguments.
related: vim/vim#20702
closes: vim/vim#21472
https://github.com/vim/vim/commit/4eae1d03e82c5b775a25c097509562efd350a8a3
Co-authored-by: Fionn Fitzmaurice <git@fionn.computer>
|
| |
|
|
|
|
|
|
|
|
| |
Problem:
TM_DIRECTORY expands to the directory's basename, losing its parent path.
Solution:
Remove the tail modifier when expanding the current file's directory.
Extend the existing known-variable test to check the full directory path.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Problem: watchdirs() keeps its state in large nested callbacks in
_watch.lua, which makes its directory tracking logic harder to change.
Solution: Move the backend into its own module and store its state in a
WatchDirs instance. Split setup, event handling and cleanup into
methods. Extend the existing test to cover cancellation while a
directory stat is pending.
AI-assisted
|
| |
|
|
|
|
|
|
|
| |
Problem:
No "spec" for various :help format (vimdoc) conventions, including the
new "table" support.
Solution:
Introduce `:help help-spec`.
Also, bump the vimdoc parser.
|
| |\
| |
| | |
docs: flow layout
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Work towards enabling "flow" layout in most `:help` files.
Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables),
it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88)
instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739),
flow layout will allow `:help` presentation-mode to un-hardwrap text
blocks.
|
| |/
|
|
|
|
|
|
|
|
| |
Work towards enabling "flow" layout in most `:help` files.
Since [tables are supported in help](https://github.com/neovim/tree-sitter-vimdoc#tables),
it's now possible to render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88)
instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739),
flow layout will allow `:help` presentation-mode to un-hardwrap text
blocks.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Problem: The list returned by 'quickfixtextfunc' is never
unreferenced, so it is not freed until garbage collection.
Solution: Unreference the list after filling the quickfix buffer
(Volodymyr Chernetskyi).
closes: vim/vim#21437
https://github.com/vim/vim/commit/84d86c65d3bc612320c3d38c2fc987c5cdd81ae9
Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
|
| |\
| |
| | |
vim-patch:9.2.{1196,1199}
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem: Case-folded regexp matches can end inside a UTF-8 character
when the input is longer than the literal pattern.
Solution: Return the input byte length after a successful comparison
even when it exceeds the pattern byte length, and test literal
replacements and backreferences (Volodymyr Chernetskyi).
related: vim/vim#14756
related: vim/vim#21212
closes: vim/vim#21439
https://github.com/vim/vim/commit/c9a9517ce8498256b50576e8291709083b607d70
Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
case-folded widths
Problem: NFA literal matches miss characters with different case-folded
widths, including when retrying after a failed suffix match.
Solution: Advance past the actual input character in both paths and test
string and buffer searches (Volodymyr Chernetskyi).
related: vim/vim#14294
closes: vim/vim#21438
https://github.com/vim/vim/commit/b3affdd29ea4b1017f5c870824a9e4576731fa95
Co-authored-by: Volodymyr Chernetskyi <19735328+chernetskyi@users.noreply.github.com>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem: [security]: code injection via cargo quickfix plugin
(Daniel Dalvelac)
Solution: Use chdir() instead of string executing a cd command
Github Security Advisory:
https://github.com/vim/vim/security/advisories/GHSA-x2w5-pj55-7hpc
fyi @gpanders
https://github.com/vim/vim/commit/b93c000ddfc27c6a1192bcba77204709536cf094
Co-authored-by: Christian Brabandt <cb@256bit.org>
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem:
After edits move diagnostic ranges, counted jumps resume searching from
their original positions. This can revisit the same diagnostic and hang
the default first/last diagnostic mappings.
Solution:
Advance the search origin using the diagnostic's current logical position.
Test forward and backward counted jumps after inserting or deleting a
line, including jumps to the last or first diagnostic without wrapping.
AI-assisted
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem:
Accepting an item from another completion source raises an error when its
user_data.nvim table does not contain LSP metadata.
Solution:
Retrieve and guard the nested LSP metadata before accessing its fields.
Cover acceptance of a foreign completion item without LSP metadata.
AI-assisted
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem:
An empty snippet insertText falls back to the label during selection, but
acceptance clears that label and expands an empty string.
Solution:
Require nonempty insertText before expanding a snippet without textEdit.
Extend the omnifunc acceptance fixture with an empty snippet insertion.
AI-assisted
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem:
A completion list default edit range can replace the explicit range of an
InsertReplaceEdit, filtering out valid items or changing their replacement.
Solution:
Only synthesize a default text edit when the completion item has none.
Extend the existing itemDefaults test for explicit edits with both range variants.
AI-assisted
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem:
Snippet completion words and previews prefer insertText even when textEdit
is present, although the actual expansion uses textEdit.newText.
Solution:
Use the text edit before the fallback insertion text in both selectors.
Extend the existing precedence test to check the snippet word and preview.
AI-assisted
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Work towards enabling "flow" layout in most `:help` files.
Since [tables are supported in
help](https://github.com/neovim/tree-sitter-vimdoc#tables), it's now possible to
render most help files as ["flow" layout](https://github.com/neovim/neovim/blob/9244da12e400ec0291450a5e9400d995e7a29b83/src/gen/gen_help_html.lua#L86-L88)
instead of the legacy fixed-width layout. Besides [improved HTML rendering](https://github.com/neovim/neovim/pull/42381#discussion_r4285705739),
flow layout will allow `:help` presentation-mode to un-hardwrap text blocks.
https://github.com/neovim/neovim/issues/31825
|
| |/
|
|
|
|
|
|
|
|
|
| |
Problem:
Active-feature report text is passed to string.format() without
arguments. Percent signs in buffer or client names can raise an error
or change the displayed text.
Solution:
Report the concatenated text without formatting it again.
AI-assisted
|
| |
|
|
|
|
|
|
| |
Problem: Custom ui2 window tracks 'fillchars' option to adjust to the
change of `msgsep` flag. However, 'fillchars' is `:h global-local`
window option. If it is set locally to the window, ui2 reacts to its
`msgsep` value and keeps using it afterwards even in other windows.
Solution: Use and react to only global value of 'fillchars'.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: Highlight inspection is limited to a single position, and its
result types do not document the fields shared by different highlight
sources.
Solution: Accept end_row/end_col in vim.inspect_pos to inspect a range.
Keep range ends exclusive and retain the existing single-position
behavior.
Support Ex line ranges in :Inspect, including Visual selections.
Document named result types, expose shared highlight fields, and keep
the existing extmark details and buffer field for compatibility.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
| |
Problem:
The timeout handler raises an error before jobstop(), leaving the
provider probe running after the healthcheck fails.
Solution:
Stop the job before raising the timeout error.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
When starting Nvim with both `--clean` and `--noplugin` (in either
order), `--noplugin` is silently ignored and built-in runtime plugins
are loaded anyway. `command_line_scan()` sets `p_lpl = false` for
`--noplugin`, and `--clean` sets `params.use_vimrc = "NONE"` and
`params.clean = true`, which later overwrites `p_lpl` back to `true` via
`p_lpl = vimrc_none ? params.clean : p_lpl`.
Solution:
Only reset `p_lpl = false` when `vimrc_none && !params.clean`,
preserving `p_lpl = false` if `--noplugin` was passed.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Problem:
Provider checks start and wait for a job, then execute the same command
again to obtain its output. The returned output can disagree with the
first process's exit status, and the second execution has no timeout.
Solution:
Return the first job's captured output. Bind the output callbacks to
their state and preserve line breaks between callback data entries.
Cover invocation count, multiline stdout, and merged stderr.
AI-assisted
|
| |
|
|
|
|
|
|
|
|
| |
Problem:
The configuration check compares the boolean 'paste' option to 1, so it
never reports that the option is enabled.
Solution:
Check the boolean value directly and cover enabled and disabled states.
AI-assisted
|
| |
|
| |
highlights.scm: `#match` is slow, prefer `#lua-match`.
|
| | |
|
| |
|
|
|
|
|
|
|
| |
Problem: Cannot complete the command after ++once or ++nested for
:autocmd.
Solution: Skip over these flags in set_context_in_autocmd() (glepnir).
closes: vim/vim#21429
https://github.com/vim/vim/commit/cf57ec0db8a9bc9926c7ede86a8586f057545723
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Problem: nvim_set_option_value() dry runs skip checks in did_set_*
callbacks. This logic also prepares values needed to apply the option,
such as tab widths or a compiled regexp. Moving the checks into
validation callbacks needs a way to save that work for did_set_*.
Solution: Store prepared values in optset_T so did_set_* can consume
them after the option is stored. Dry runs perform the same validation,
then free the prepared values without changing live state.
This extends dry-run validation for:
- 'cedit': reject invalid command-line window keys.
- 'completeitemalign': require each completion column exactly once.
- 'cursorlineopt': reject empty values and conflicting line modes.
- 'encoding': accept only UTF-8 and its aliases.
- 'fileencoding': reject lists and local changes with 'nomodifiable'.
- 'messagesopt': require mandatory fields and enforce numeric limits.
- 'spellcapcheck': return regexp errors, including under :silent!.
- 'spellsuggest': reject conflicting suggestion modes.
- 'varsofttabstop' and 'vartabstop': reject invalid tab widths.
- 'wildmode': reject more than four completion stages.
'makeencoding' also uses the shared encoding preparation.
Separating value preparation exposed a bug in 'vartabstop' and
'varsofttabstop': failed assignments could discard local tab widths, and
global assignments could overwrite them. Fix this by preparing new
widths separately and applying them only after a valid local assignment.
AI-assisted
|