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:
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