aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/edit.c
Commit message (Collapse)AuthorAge
* refactor(insert): rename edit.c => insert.c #40705Justin M. Keyes2026-07-12
| | | | | | | | | | Problem: - `edit.c` is an unnecessarily misleading and less-discoverable name than `insert.c`. - Numerous insert-mode related things are named with a `ins_` prefix. - There is already a `insexpand.c` module... Solution: Rename `edit.c` => `insert.c`.
* refactor(input): rename getchar.c => input.c #40698Justin M. Keyes2026-07-12
| | | | | | | | | | | | Problem: `getchar.c` is a quirky name and doesn't align with our existing `os/input.c` and `tui/input.c` modules, which encompass the same topic at different layers. Solution: Rename `getchar.c` => `input.c` for discoverability. Introduce `dialog.c` for functionality related to showing confirm prompts, dialogs, etc.
* refactor(ctx): drop aucmd_prepbuf/aucmd_restbuf #40692Justin M. Keyes2026-07-11
|
* vim-patch:9.2.0750: completion: 'autocompletedelay' deferral leaks statezeertzjq2026-07-02
| | | | | | | | | | | | | | | | | | | | | | | | | Problem: After 'autocompletedelay' was made non-blocking, the deferred popup can misbehave: a pending autocomplete survives leaving Insert mode and then keeps waking the editor in Normal mode, the deferral is recorded into registers while recording a macro, the popup appears an extra 'updatetime' late when 'autocompletedelay' is larger and a CursorHoldI autocommand exists, CursorHoldI can fire twice without an intervening keypress, and an open balloon is dismissed (after v9.2.0739) Solution: Treat the deferral like CursorHold: only keep it pending in Insert mode and not while recording, with pending typeahead, or when completion is already active; drop it when Insert mode ends; measure the delay from when the user typed so a CursorHold in between does not push the popup back; and do not let the deferral re-enable CursorHoldI or dismiss the balloon. (Hirohito Higashi). closes: vim/vim#20669 https://github.com/vim/vim/commit/1f0f14bc2fbe278690c2b1510c9d0f3b5061020c Co-authored-by: Hirohito Higashi <h.east.727@gmail.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* vim-patch:9.2.0749: 'autocompletedelay' interferes with i_CTRL-Kzeertzjq2026-07-02
| | | | | | | | | | Problem: 'autocompletedelay' interferes with i_CTRL-K (after 9.2.0739). Solution: Clear the pending autocompltion from the previous key when a new key is typed. closes: vim/vim#20666 https://github.com/vim/vim/commit/0d292e20676cb399fa6bee8300d7ae3bebe97a8f
* vim-patch:9.2.0748: 'autocompletedelay' interferes with CTRL-G Uzeertzjq2026-07-02
| | | | | | | | | | Problem: 'autocompletedelay' interferes with CTRL-G U (after 9.2.0739). Solution: Restore the flag for CTRL-G U. related: vim/vim#8937 related: vim/vim#20666 https://github.com/vim/vim/commit/9fb5b5d8765e39dafc88f178ad9fd1879c683daf
* vim-patch:9.2.0739: completion: 'autocompletedelay' blocks the main loop and ↵zeertzjq2026-07-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | drops autocommands Problem: With a non-zero 'autocompletedelay', Insert-mode autocommands (TextChangedI, TextChangedP, CursorMovedI) are delayed, and while typing faster than the delay they are dropped entirely, because the delay blocks the main loop. Solution: Make 'autocompletedelay' non-blocking: instead of busy-waiting before showing the popup menu, defer it with an input-wait timeout (K_COMPLETE_DELAY) modeled on CursorHoldI, so typing stays responsive and the Insert-mode autocommands fire normally. The delay timer coexists with 'updatetime': the main loop waits for the sooner of the two and triggers the event whose deadline was reached, so 'autocompletedelay' no longer shadows CursorHold timing. Changing the completion leader, for example with Backspace, updates the visible popup immediately like a zero delay; only the first popup is deferred. Update the 'autocompletedelay' screendumps for the non-blocking display. One test opened the menu with CTRL-N right after the delay expired and could race with the deferred popup, so it now waits a little longer than the delay before sending the key. fixes: vim/vim#20591 closes: vim/vim#20598 https://github.com/vim/vim/commit/8ce43ea4e3cb315f566bcd9048c254ba58042964 Also include some insexpand.c and ui.c changes from patch 9.2.0750. Co-authored-by: Hirohito Higashi <h.east.727@gmail.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix(cmdwin): implement Enter/Ctrl-C as builtinsJustin M. Keyes2026-06-26
| | | | What echasnovski wants, echasnovski gets.
* feat(cmdwin): implement cmdwin as a normal buf+winJustin M. Keyes2026-06-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: cmdwin (the `:q` cmdline buffer) has various limitations which require special-casing all over the codebase. Besides complicating the code, it also breaks async plugins if they try to create buffers/windows after some work is done, if the user happens to open cmdwin at the wrong the moment: Lua callback: …/guh.nvim/lua/guh/util.lua:531: E11: Invalid in command-line window; <CR> executes, CTRL-C quits stack traceback: [C]: in function 'nvim_buf_delete' …/guh.nvim/lua/guh/util.lua:531: in function <…/guh.nvim/lua/guh/util.lua:526> Solution: Just say no to "inception". Reimplement cmdwin as a normal buffer+window. All of the cmdwin contortions (in both core, and innocent plugins) exist literally only to support "inception": recursive cmdwin-in-cmdline-things, like `<c-r>=`, `/`, search-during-substitute, `:input()`, etc. So we just won't support that (though I have a potential plan for that later, which I call "modal parking lot"). The benefit is that plugins, and core, no longer have to care about cmdwin. BONUS: - mouse-drag on vertical separators works (it only worked for horizontal/statusline before) - inccommand-in-cmdwin now works correctly, for free (thus don't need #40077). POTENTIAL FOLLOWUPS - Drop `CHECK_CMDWIN` ("E11: Invalid in command-line window"), allow chaos. - Unify `BUFLOCK_OK` / `LOCK_OK` ? DESIGN: - Eliminate lots of C globals, `EX_CMDWIN`, etc. - `text_locked()` no longer reports true for cmdwin. - cmdwin = a normal window with 'winfixbuf', 'bufhidden=wipe', 'buftype=nofile'. Invariants come from those options rather than special cases throughout the codebase. - `nv_record` for q:/q//q? calls Lua `nlua_call_vimfn("vim._core.cmdwin", …)`. No `K_CMDWIN` / cmdline-reader detour. - `cedit_key` (`c_CTRL-F`) schedules a deferred event that calls `vim._core.cmdwin.open(type, content, pos)` and returns `Ctrl_C` so the in-flight cmdline cancels. Reader state is not serialized; instead the captured `(type, line, col)` is replayed via `nvim_feedkeys(type..line.."<CR>", "nt", …)` after user confirms. - On confirm/cancel: `<CR>` / `<C-C>` calls into Lua which closes the window and re-feeds the cmdline. BREAKING CHANGES: - Expression-register cmdline (`<C-R>=` from insert-mode) no longer supports cmdwin. Same applies to `input()` / `inputlist()` (already covered by `text_locked`). - Usage of cmdwin in macros/mappings will probably break (assuming they ever worked).
* vim-patch:9.2.0621: 'autoindent' not stripped with virtualedit=onemore (#40203)zeertzjq2026-06-12
| | | | | | | | | | Problem: 'autoindent' not stripped with virtualedit=onemore (after 9.2.0510). Solution: Restore the decrement of cursor column when it's on NUL. fixes: neovim/neovim#40183 closes: vim/vim#20476 https://github.com/vim/vim/commit/4b13277edd935b78a20a0d679802a1cb789abfcf
* vim-patch:9.2.0549: Cursor wrong after autoindent strip is skipped (#40041)zeertzjq2026-05-29
| | | | | | | | | | | | | | Problem: cursor lands on the wrong line when a <Cmd> mapping or autocmd modifies lines during insert and the strip is skipped (after v9.2.0510) Solution: Restore cursor to tpos when skipwhite skips the strip, instead of leaving it at end_insert_pos (glepnir). related: vim/vim#20290 closes: vim/vim#20332 https://github.com/vim/vim/commit/179f9efc7ec49f7fb9965d86734973bdac135870 Co-authored-by: glepnir <glephunter@gmail.com>
* vim-patch:9.2.0533: '[ mark moved to end of inserted text after CTRL-R ↵zeertzjq2026-05-26
| | | | | | | | | | | | | | | | | | | | | | | | CTRL-P paste Problem: After CTRL-R CTRL-P (or CTRL-R CTRL-O) pastes a register into Insert mode, a follow-up edit such as backspace makes stop_arrow() rewrite Insstart with the post-paste cursor position. As a result the '[ mark points at the end of the inserted text instead of its start (agguser, after 9.2.0384) Solution: In stop_arrow(), only pull Insstart back when the cursor moved above the previous Insstart, so a line-start backspace can still save the joined range (vim/vim#20031) without disturbing the start position for inserts that advance the cursor (Hirohito Higashi). related: vim/vim#20031 fixes: vim/vim#20130 closes: vim/vim#20322 https://github.com/vim/vim/commit/bc7805323f54405e2e746efde3901b0b6aefe6ff Co-authored-by: Hirohito Higashi <h.east.727@gmail.com> Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* vim-patch:9.2.0510: setline() mapping may trigger autoindent (#39961)zeertzjq2026-05-23
| | | | | | | | | | | | | Problem: setline() insert mode mapping may trigger autoindent, corrupting the newly inserted line content (Evgeni Chasnovski) Solution: Only strip autoindent whitespace when the rest of the line is all whitespace (glepnir). fixes: vim/vim#19363 closes: vim/vim#20290 https://github.com/vim/vim/commit/e3dedac77b2076210e7027b14a5927622434f014 Co-authored-by: glepnir <glephunter@gmail.com>
* refactor: simplify aucmd_restbuf usage #39879Justin M. Keyes2026-05-19
| | | | | | | | Problem: `aucmd_restbuf` must be guarded in case `aucmd_prepbuf` wasn't called. Solution: Update `aucmd_restbuf` to be a no-op if `aucmd_prepbuf` wasn't called. This requires `aco` to be zero-initialized.
* fix(style): some clang-tidy 22 fixesbfredl2026-05-11
| | | | | | | | | | | | | | | | | | | | | | CI currently uses clang-tidy 20, but this affects local builds and CI is going to be upgraded sooner or later. Some remaining systematic issues: - clang-tidy warns agains any atoi() or atol() usage (because of no error handling) - functions which takes (char *fmt, char *only_string_arg) and expect fmt to contain exactly one "%s" usage. - error: initializing non-local variable with non-const expression depending on uninitialized non-local variable (cppcoreguidelines-interfaces-global-init) This is a much worse problem in C++ (hence C++ core guidelines) where initialization is intermingled with arbitrary code execution. I "think" in plain C, the linker will either resolve all these deterministically or barf an error. But with some restructuring we could make all static initialization actually static..
* vim-patch:9.2.0408: Insert-mode <Cmd> edits can corrupt undo (#39492)zeertzjq2026-04-29
| | | | | | | | | | | | | | | | | | | | | | Problem: A <Cmd> command in Insert mode can edit the current buffer, e.g., with setline(). That edit appends to the current undo block, but Insert mode does not know that the cursor line may need to be saved again before the next typed edit. If the next typed edit is a <BS> at the start of a line, it can join away the line that was changed by the <Cmd> command before Insert mode saves that updated line. The newest undo entry can then still refer to the joined-away line, so undo sees a range past the end of the buffer and fails with E438. Solution: If a <Cmd> command in Insert mode changes the buffer, set ins_need_undo so stop_arrow() refreshes Insstart. This lets the next edit properly decide whether a new undo entry is needed (Jaehwang Jung) closes: vim/vim#20087 AI-assisted: Codex https://github.com/vim/vim/commit/e47daed4423182968f64b80c3d7613f0a98a50d4 Co-authored-by: Jaehwang Jung <tomtomjhj@gmail.com>
* feat(events)!: support `Optionset modified`, drop BufModifiedSet #35610glepnir2026-04-27
| | | | | | | | | Problem: BufModifiedSet autocmd only triggered for current buffer during redraw, causing delayed events when :wa writes non-current buffers. Solution: - Use the aucmd_defer approach to implement `Optionset modified`. - Drop BufModifiedSet.
* vim-patch:9.2.0384: stale Insstart after cursor move breaks undo (#39290)zeertzjq2026-04-22
| | | | | | | | | | | | | | | | | | | | | | vim-patch:9.2.0384: stale Insstart after <Cmd> cursor move breaks undo Problem: A <Cmd> command executed from Insert mode can sync undo and move the cursor before the next edit. stop_arrow() saved the new cursor line for undo, but left Insstart at the previous insertion point. A line-start backspace could then delete lines above the saved line without saving the joined range, leaving a pending undo entry whose bottom resolved above its top and raising E340. Solution: Update Insstart and Insstart_textlen after the pending undo save so the next edit starts from the command-updated cursor position (Jaehwang Jung). closes: vim/vim#20031 AI-assisted: Codex https://github.com/vim/vim/commit/d4fb31762ea0b9de6fffb529c4ffee509621f74c Co-authored-by: Jaehwang Jung <tomtomjhj@gmail.com>
* build: update clang v21, fix warningsdundargoc2026-04-14
| | | | | - `src/nvim/ex_cmds_defs.h`: use "U" instead of "u" per `readability-uppercase-literal-suffix`
* vim-patch:9.2.0289: 'linebreak' may lead to wrong Visual block highlighting ↵zeertzjq2026-04-04
| | | | | | | | | | | | | (#38749) Problem: 'linebreak' may lead to wrong Visual block highlighting when end char occupies multiple cells (after 7.4.467). Solution: Exclude 'linebreak' from the ending column instead of setting 'virtualedit' temporarily (zeertzjq). fixes: vim/vim#19898 closes: vim/vim#19900 https://github.com/vim/vim/commit/23be1889d1a1212445ca8bb9cd378484d3755f79
* feat(prompt): prompt_appendbuf() appends to prompt buffer #37763Shadman2026-03-27
| | | | | | | | | | | Problem: Currently, we recommend always inserting text above prompt-line in prompt-buffer. This can be done using the `:` mark. However, although we recommend it this way it can sometimes get confusing how to do it best. Solution: Provide an api to append text to prompt buffer. This is a common use-case for things using prompt-buffer.
* fix(marks): make jumpoptions=view work with 'smoothscroll' (#38339)zeertzjq2026-03-17
| | | | | | Problem: 'jumpoptions' "view" doesn't remember skipcol and may lead to glitched display with 'smoothscroll'. Solution: Save skipcol in the mark view. Also make sure skipcol doesn't exceed line size.
* fix(prompt): clear undo when changing/appending promptSean Dewar2026-02-17
| | | | | | | | | | | | | | | Problem: undoing after the prompt is changed breaks it (and causes init_prompt to abort it and append a new one), as the undo history contains the old prompt. Solution: like submitting, clear the undo buffer. Don't do it in init_prompt if the line was empty; that may not result in a new prompt, and causes commands like "S" to lose the history. As u_save, etc. wasn't being called by prompt_setprompt, undoing after it fixes the prompt usually gave undesirable results anyway. Remove the added undo_spec.lua test, as its approach no longer works as a repro, and finding a new one seems fiddly.
* fix(prompt): prompt_setprompt with unloaded buffer, ': with lnum 0Sean Dewar2026-02-17
| | | | | | | Problem: prompt_setprompt memory leak/other issues when fixing prompt line for unloaded buffer, or when ': line number is zero. Solution: don't fix prompt line for unloaded buffer. Clamp ': lnum above zero.
* fix(prompt): wrong changed lnum in init_promptSean Dewar2026-02-15
| | | | | | | | Problem: if init_prompt replaces the prompt line at the ': mark, it calls inserted_bytes with the wrong lnum. Solution: use the correct lnum. Call appended_lines_mark instead when appending the prompt at the end.
* fix(prompt): ml_get error with invalid ': lnumSean Dewar2026-02-15
| | | | | | Problem: internal error E315 in init_prompt if ': has an invalid line number. Solution: clamp the line number.
* fix(prompt): heap-buffer-overflows with invalid ': colSean Dewar2026-02-15
| | | | | | | | | Problem: heap-buffer-overflow in init_prompt and prompt_setprompt if ': mark has an invalid column number. Solution: consider an out-of-bounds column number as a missing prompt. Remove the check for NULL for old_line, as ml_get_buf can't return NULL.
* feat(prompt): plugins can update prompt during user input #37743Shadman2026-02-14
| | | | | | | | | | | Problem: Currently, if prompt gets changed during user-input with prompt_setprompt() it only gets reflected in next prompt. And that behavior is not also consistent. If user re-enters insert mode then the user input gets discarded and a new prompt gets created with the new prompt. Solution: Handle prompt_setprompt eagerly. Update the prompt display, preserve user input.
* fix(prompt): also store column info in ': mark #36194Shadman2026-01-30
| | | | | | | | Problem: Currently, : mark is set in start of prompt-line. But more relevant location is where the user text starts. Solution: Store and update column info on ': just like the line info
* vim-patch:9.1.0151: ml_get_buf_len() does not consider text properties (#37094)Jan Edmund Lazo2025-12-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: ml_get_buf_len() does not consider text properties (zeertzj) Solution: Store text length excluding text properties length in addition in the memline related vim/vim#14123 closes: vim/vim#14133 https://github.com/vim/vim/commit/a72d1be5a9984709fc66f460b443ad4a38506113 -------- Replace ml_line_len with ml_line_textlen to be explicit that Nvim doesn't currently support Vim's text properties and Nvim doesn't support lines with "ambiguous" length. -------- vim-patch:9.1.0153: Text properties corrupted with fo+=aw and backspace Problem: Text properties corrupted with fo+=aw and backspace Solution: Allocate line and move text properties (zeertzjq) closes: vim/vim#14147 https://github.com/vim/vim/commit/7ac1145fbebb66dfee325dc5265309877d941c4e vim-patch:9.1.0163: Calling STRLEN() to compute ml_line_textlen when not needed Problem: Calling STRLEN() to compute ml_line_textlen when not needed. Solution: Use 0 when STRLEN() will be required and call STRLEN() later. (zeertzjq) closes: vim/vim#14155 https://github.com/vim/vim/commit/82e079df814f7372e9579450730062b205449efa Co-authored-by: Christian Brabandt <cb@256bit.org> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
* fix(edit): handle cindent properly with completion (#36711)zeertzjq2025-11-27
| | | | | Don't handle cindent in insert_check(). Instead, do that just before returning from insert_execute() if required. This also makes the in_cinkeys() change from #12894 unnecessary.
* fix(input): discard following keys when discarding <Cmd>/K_LUA (#36498)zeertzjq2025-11-20
| | | | | | | | | | | Technically the current behavior does match documentation. However, the keys following <Cmd>/K_LUA aren't normally received by vim.on_key() callbacks either, so it does makes sense to discard them along with the preceding key. One may also argue that vim.on_key() callbacks should instead receive the following keys together with the <Cmd>/K_LUA, but doing that may cause some performance problems, and even in that case the keys should still be discarded together.
* fix(prompt): wrong cursor position with cursor keys (#36196)Shadman2025-11-08
| | | | | | | | | | | | | | | **Problem**: Currently, whenever user get's on prompt-text area we move the user to end of user-input area. As a result when left/c-left,home keys are triggered at start of user-input the cursor get's placed at end of user-input. But this behavior can be jarring and unintuitive also it's different from previous behavior where it'd just stay at start of input-area. Also, previously when insert-mode was triggered in prompt-text with n_a for example then cursor was placed at start of user-input area not at the end. So, that behavior was also broken. **Solution:** Restore previous behavior. Don't force user to end of user-input when entering insert-mode from readonly section.
* vim-patch:9.1.1850: completion: not triggered after i_Ctrl-W/i_Ctrl-U (#36156)zeertzjq2025-10-13
| | | | | | | | | | | | Problem: completion: not triggered after i_Ctrl-W/i_Ctrl-U Solution: Trigger autocomplete when entering Insert mode (Girish Palya). fixes: vim/vim#18535 closes: vim/vim#18543 https://github.com/vim/vim/commit/da2dabc6f740b1ed3397797af8a8b0b2ec02bc31 Co-authored-by: Girish Palya <girishji@gmail.com>
* fix(conceal): check for concealed lines on invalid row (#36084)luukvbaal2025-10-09
| | | | Problem: May check for concealed lines on invalid line numbers. Solution: Move checks after line number validation.
* vim-patch:9.1.1827: completion: v9.1.1797 broke Ctrl-Y behaviour (#36040)zeertzjq2025-10-05
| | | | | | | | | | | Problem: completion: v9.1.1797 broke Ctrl-Y behaviour (ddad431, after v9.1.1797) Solution: Restore correct behaviour (Girish Palya). closes: vim/vim#18494 https://github.com/vim/vim/commit/f3d0d089074c4517b26ea3d2253eaae36c6212eb Co-authored-by: Girish Palya <girishji@gmail.com>
* vim-patch:partial:8.1.1939: code for handling v: variables in generic eval ↵Jan Edmund Lazo2025-10-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | file (#35968) Problem: Code for handling v: variables in generic eval file. Solution: Move v: variables to evalvars.c. (Yegappan Lakshmanan, closes vim/vim#4872) https://github.com/vim/vim/commit/e5cdf153bcb348c68011b308c8988cea42d6ddeb Remove direct reference to "vimvars" for following functions: - assert_error() - get_vim_var_nr() - get_vim_var_list() - get_vim_var_dict() - get_vim_var_str() - set_cmdarg() - set_reg_var() - set_vcount() - set_vexception() - set_vthrowpoint() - set_vim_var_bool() - set_vim_var_dict() - set_vim_var_list() - set_vim_var_nr() - set_vim_var_special() - set_vim_var_string() - set_vim_var_type() Reorder functions based on v8.2.4930 for eval_one_expr_in_str() and eval_all_expr_in_str(). Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.1.1797: completion: autocompletion can be improvedzeertzjq2025-09-30
| | | | | | | | | | | | | | | | | | | | | Problem: completion: autocompletion can be improved Solution: Add support for "longest" and "preinsert" in 'autocomplete'; add preinserted() (Girish Palya) * Add support for "longest" in 'completeopt' when 'autocomplete' is enabled. (Note: the cursor position does not change automatically when 'autocomplete' is enabled.) * Add support for "preinsert" when 'autocomplete' is enabled. Ensure "preinsert" works the same with and without 'autocomplete' * introduce the preinserted() Vim script function, useful for defining custom key mappings. fixes: vim/vim#18314 closes: vim/vim#18387 https://github.com/vim/vim/commit/c05335082adb21d99d96374779856444a3a0688f Co-authored-by: Girish Palya <girishji@gmail.com>
* vim-patch:8.1.2077: the ops.c file is too bigJan Edmund Lazo2025-09-26
| | | | | | | | | | Problem: The ops.c file is too big. Solution: Move code for dealing with registers to a new file. (Yegappan Lakshmanan, closes vim/vim#4982) https://github.com/vim/vim/commit/4aea03eb875613e3eae2125b84f02b7cd898b2f8 Co-authored-by: Bram Moolenaar <Bram@vim.org>
* vim-patch:9.1.1779: completion: 'autocomplete' cannot be enabled per buffer ↵zeertzjq2025-09-21
| | | | | | | | | | | | | | (#35853) Problem: completion: 'autocomplete' cannot be enabled per buffer (Tomasz N) Solution: Make 'autocomplete' global or local to buffer (Girish Palya) fixes: vim/vim#18320 closes: vim/vim#18333 https://github.com/vim/vim/commit/0208b3e80a080740ff77a5661d0f65090e317d90 Co-authored-by: Girish Palya <girishji@gmail.com>
* vim-patch:9.1.1742: complete: preinsert does not work well with ↵zeertzjq2025-09-09
| | | | | | | | | | | | | | | | | | | | 'autocomplete' (#35692) Problem: complete: preinsert does not work well with preinsert Solution: Make "preinsert" completeopt value work with autocompletion (Girish Palya) This change extends Insert mode autocompletion so that 'preinsert' also works when 'autocomplete' is enabled. Try: `:set ac cot=preinsert` See `:help 'cot'` for more details. closes: vim/vim#18213 https://github.com/vim/vim/commit/fa6fd41a943e6442c1a2ce6b0a237298b00ecca0 Co-authored-by: Girish Palya <girishji@gmail.com>
* feat(editor)!: insert-mode ctrl-r should work like paste #35477Shadman2025-09-01
| | | | | | | | | | | | | | | | Problem: insert-mode ctrl-r input is treated like raw user input, which is almost never useful. This means any newlines in the input are affected by autoindent, etc., which is: - slow - usually breaks the formatting of the input Solution: - ctrl-r should be treated like a paste, not user-input. - does not affect `<c-r>=`, so `<c-r>=@x` can still be used to get the old behavior. Co-authored-by: Justin M. Keyes <justinkz@gmail.com> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
* vim-patch:9.1.1670: completion: autocomplete breaks second completionzeertzjq2025-08-23
| | | | | | | | | | | | | Problem: completion: autocomplete breaks second completion (gravndal) Solution: Fix the autocomplete bug (Girish Palya) fixes: vim/vim#18044 closes: vim/vim#18068 https://github.com/vim/vim/commit/b4e0bd93a9c09377b684c5bdf12c5c2eeb46aada Co-authored-by: Girish Palya <girishji@gmail.com>
* vim-patch:9.1.1657: Autocompletion adds delayzeertzjq2025-08-23
| |