mirror of
https://github.com/neovim/neovim.git
synced 2025-12-15 19:05:40 +00:00
"nvim -es": disable shada #21723
Problem:
`nvim -es` (and `nvim -Es`) is the recommended way to non-interactively
run commands/vimscript. But it enables shada by default, which is
usually not wanted.
Solution:
- Disable shada by default for `nvim -es/-Es`. This can be overridden by
`-i foo` if needed.
- Do NOT change the 'loadplugins' default.
- User config + packages _should_ be enabled by default, for both `nvim
-es` and `nvim -l`. Else any Lua packages you have can't be accessed
without `-u path/to/config`, which is clumsy.
- Use-cases:
```
nvim --headless "+Lazy! sync" +qa
would become: nvim -es "+Lazy! sync"
nvim --headless +PlugInstall +qall
would become: nvim -es +PlugInstall
```
- Opt-out (`--clean` or `-u NONE`) is much easier than opt-in (`-u
path/to/config`).
- User config/packages are analogous to pip packages, which are
expected when doing `python -c ...`.
related: 7c94bcd2d7
related: ddd0eb6f51
This commit is contained in:
@@ -136,7 +136,11 @@ describe('startup', function()
|
||||
vim.list_extend(args, { '-l', (script or 'test/functional/fixtures/startup.lua') })
|
||||
vim.list_extend(args, lua_args or {})
|
||||
local out = fn.system(args, input):gsub('\r\n', '\n')
|
||||
return eq(dedent(expected), out)
|
||||
if type(expected) == 'function' then
|
||||
return expected(out)
|
||||
else
|
||||
return eq(dedent(expected), out)
|
||||
end
|
||||
end
|
||||
|
||||
it('failure modes', function()
|
||||
@@ -172,6 +176,7 @@ describe('startup', function()
|
||||
it('Lua-error sets Nvim exitcode', function()
|
||||
local proc = n.spawn_wait('-l', 'test/functional/fixtures/startup-fail.lua')
|
||||
matches('E5113: .* my pearls!!', proc:output())
|
||||
eq(0, proc.signal)
|
||||
eq(1, proc.status)
|
||||
|
||||
eq(0, eval('v:shell_error'))
|
||||
@@ -282,14 +287,30 @@ describe('startup', function()
|
||||
eq(0, eval('v:shell_error'))
|
||||
end)
|
||||
|
||||
it('disables swapfile/shada/config/plugins', function()
|
||||
it('disables swapfile/shada/config/plugins unless overridden', function()
|
||||
local script = [[print(('updatecount=%d shadafile=%s loadplugins=%s scripts=%d'):format(
|
||||
vim.o.updatecount, vim.o.shadafile, tostring(vim.o.loadplugins), math.max(1, #vim.fn.getscriptinfo())))]]
|
||||
finally(function()
|
||||
os.remove('Xtest_shada')
|
||||
end)
|
||||
|
||||
assert_l_out(
|
||||
'updatecount=0 shadafile=NONE loadplugins=false scripts=1\n',
|
||||
nil,
|
||||
nil,
|
||||
'-',
|
||||
[[print(('updatecount=%d shadafile=%s loadplugins=%s scripts=%d'):format(
|
||||
vim.o.updatecount, vim.o.shadafile, tostring(vim.o.loadplugins), math.max(1, #vim.fn.getscriptinfo())))]]
|
||||
script
|
||||
)
|
||||
|
||||
-- User can override.
|
||||
assert_l_out(
|
||||
function(out)
|
||||
return matches('updatecount=99 shadafile=Xtest_shada loadplugins=true scripts=2%d\n', out)
|
||||
end,
|
||||
{ '+set updatecount=99', '-i', 'Xtest_shada', '+set loadplugins', '-u', 'NORC' },
|
||||
nil,
|
||||
'-',
|
||||
script
|
||||
)
|
||||
end)
|
||||
end)
|
||||
@@ -572,19 +593,21 @@ describe('startup', function()
|
||||
eq(' encoding=utf-8\n', fn.system({ nvim_prog, '-n', '-es' }, { 'set encoding', '' }))
|
||||
end)
|
||||
|
||||
it('-es/-Es disables swapfile, user config #8540', function()
|
||||
it('-es/-Es disables swapfile/shada/config #8540', function()
|
||||
for _, arg in ipairs({ '-es', '-Es' }) do
|
||||
local out = fn.system({
|
||||
nvim_prog,
|
||||
arg,
|
||||
'+set swapfile? updatecount? shadafile?',
|
||||
'+set updatecount? shadafile? loadplugins?',
|
||||
'+put =map(getscriptinfo(), {-> v:val.name})',
|
||||
'+%print',
|
||||
})
|
||||
local line1 = string.match(out, '^.-\n')
|
||||
-- updatecount=0 means swapfile was disabled.
|
||||
eq(' swapfile updatecount=0 shadafile=\n', line1)
|
||||
-- Standard plugins were loaded, but not user config.
|
||||
eq(' updatecount=0 shadafile=NONE loadplugins\n', line1)
|
||||
-- Standard plugins were loaded, but not user config. #31878
|
||||
local nrlines = #vim.split(out, '\n')
|
||||
ok(nrlines > 20, '>20', nrlines)
|
||||
ok(string.find(out, 'man.lua') ~= nil)
|
||||
ok(string.find(out, 'init.vim') == nil)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user