neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 7c6a9c55890f77fc7b571de649c232d70db3a01a
parent 6750d00fe96a04ab19cfc55fb406f6b40dbf970f
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Fri, 28 Feb 2025 14:00:30 +0800

vim-patch:8.2.4607: sourcing buffer lines may lead to errors for conflicts

Problem:    Sourcing buffer lines may lead to errors for conflicts.
Solution:   Add the ++clear argument. (Yegappan Lakshmanan, closes vim/vim#9991)

https://github.com/vim/vim/commit/35dc17634dd6da5b90bd1b0160c4ed9e394f4b87

Documentation changes only. Vim9script is N/A.
Cherry-pick another documentation change for :source from latest Vim.

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>

Diffstat:
Mruntime/doc/repeat.txt | 16+++++++++-------
Mtest/old/testdir/test_source.vim | 28++++++++++++++++++++++++++++
2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt @@ -197,13 +197,15 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. Triggers the |SourcePre| autocommand. :[range]so[urce] Read Ex commands or Lua code from the [range] of lines - in the current buffer. The buffer is treated as Lua - code if 'filetype' is "lua" or its filename ends with - ".lua". When sourcing commands or Lua code from the - current buffer, the same script-ID |<SID>| is used - even if the buffer is sourced multiple times. If a - buffer is sourced more than once, then the functions - in the buffer are redefined again. + in the current buffer. When [range] is omitted read + all lines. The buffer is treated as Lua code if its + 'filetype' is "lua" or its filename ends with ".lua". + + When sourcing commands or Lua code from the current + buffer, the same script-ID |<SID>| is used even if the + buffer is sourced multiple times. If a buffer is + sourced more than once, then the functions in the + buffer are defined again. *:source!* :so[urce]! {file} diff --git a/test/old/testdir/test_source.vim b/test/old/testdir/test_source.vim @@ -607,6 +607,34 @@ func Test_source_buffer_vim9() source call assert_equal('red', g:Color) + " test for ++clear argument to clear all the functions/variables + %d _ + let lines =<< trim END + g:ScriptVarFound = exists("color") + g:MyFuncFound = exists('*Myfunc') + if g:MyFuncFound + finish + endif + var color = 'blue' + def Myfunc() + enddef + END + call setline(1, lines) + vim9cmd source + call assert_false(g:MyFuncFound) + call assert_false(g:ScriptVarFound) + vim9cmd source + call assert_true(g:MyFuncFound) + call assert_true(g:ScriptVarFound) + vim9cmd source ++clear + call assert_false(g:MyFuncFound) + call assert_false(g:ScriptVarFound) + vim9cmd source ++clear + call assert_false(g:MyFuncFound) + call assert_false(g:ScriptVarFound) + call assert_fails('vim9cmd source ++clearx', 'E475:') + call assert_fails('vim9cmd source ++abcde', 'E484:') + %bw! endfunc