mirror of
https://github.com/neovim/neovim.git
synced 2025-11-07 03:04:22 +00:00
feat(lua): allow vim.cmd to be indexed (#19238)
This commit is contained in:
@@ -1291,6 +1291,9 @@ Lua module: vim *lua-vim*
|
|||||||
cmd({command}) *vim.cmd()*
|
cmd({command}) *vim.cmd()*
|
||||||
Execute Vim script commands.
|
Execute Vim script commands.
|
||||||
|
|
||||||
|
Note that `vim.cmd` can be indexed with a command name to
|
||||||
|
return a callable function to the command.
|
||||||
|
|
||||||
Example: >
|
Example: >
|
||||||
|
|
||||||
vim.cmd('echo 42')
|
vim.cmd('echo 42')
|
||||||
@@ -1300,7 +1303,23 @@ cmd({command}) *vim.cmd()*
|
|||||||
autocmd FileType c setlocal cindent
|
autocmd FileType c setlocal cindent
|
||||||
augroup END
|
augroup END
|
||||||
]])
|
]])
|
||||||
vim.cmd({ cmd = 'echo', args = { '"foo"' } })
|
|
||||||
|
-- Ex command :echo "foo"
|
||||||
|
-- Note string literals need to be double quoted.
|
||||||
|
vim.cmd('echo "foo"')
|
||||||
|
vim.cmd { cmd = 'echo', args = { '"foo"' } }
|
||||||
|
vim.cmd.echo({ args = { '"foo"' } })
|
||||||
|
vim.cmd.echo('"foo"')
|
||||||
|
|
||||||
|
-- Ex command :write! myfile.txt
|
||||||
|
vim.cmd('write! myfile.txt')
|
||||||
|
vim.cmd { cmd = 'write', args = { "myfile.txt" }, bang = true }
|
||||||
|
vim.cmd.write { args = { "myfile.txt" }, bang = true }
|
||||||
|
vim.cmd.write {"myfile.txt", bang = true })
|
||||||
|
|
||||||
|
-- Ex command :colorscheme blue
|
||||||
|
vim.cmd('colorscheme blue')
|
||||||
|
vim.cmd.colorscheme('blue')
|
||||||
<
|
<
|
||||||
|
|
||||||
Parameters: ~
|
Parameters: ~
|
||||||
|
|||||||
@@ -288,6 +288,9 @@ end
|
|||||||
|
|
||||||
--- Execute Vim script commands.
|
--- Execute Vim script commands.
|
||||||
---
|
---
|
||||||
|
--- Note that `vim.cmd` can be indexed with a command name to return a callable function to the
|
||||||
|
--- command.
|
||||||
|
---
|
||||||
--- Example:
|
--- Example:
|
||||||
--- <pre>
|
--- <pre>
|
||||||
--- vim.cmd('echo 42')
|
--- vim.cmd('echo 42')
|
||||||
@@ -297,7 +300,23 @@ end
|
|||||||
--- autocmd FileType c setlocal cindent
|
--- autocmd FileType c setlocal cindent
|
||||||
--- augroup END
|
--- augroup END
|
||||||
--- ]])
|
--- ]])
|
||||||
--- vim.cmd({ cmd = 'echo', args = { '"foo"' } })
|
---
|
||||||
|
--- -- Ex command :echo "foo"
|
||||||
|
--- -- Note string literals need to be double quoted.
|
||||||
|
--- vim.cmd('echo "foo"')
|
||||||
|
--- vim.cmd { cmd = 'echo', args = { '"foo"' } }
|
||||||
|
--- vim.cmd.echo({ args = { '"foo"' } })
|
||||||
|
--- vim.cmd.echo('"foo"')
|
||||||
|
---
|
||||||
|
--- -- Ex command :write! myfile.txt
|
||||||
|
--- vim.cmd('write! myfile.txt')
|
||||||
|
--- vim.cmd { cmd = 'write', args = { "myfile.txt" }, bang = true }
|
||||||
|
--- vim.cmd.write { args = { "myfile.txt" }, bang = true }
|
||||||
|
--- vim.cmd.write {"myfile.txt", bang = true })
|
||||||
|
---
|
||||||
|
--- -- Ex command :colorscheme blue
|
||||||
|
--- vim.cmd('colorscheme blue')
|
||||||
|
--- vim.cmd.colorscheme('blue')
|
||||||
--- </pre>
|
--- </pre>
|
||||||
---
|
---
|
||||||
---@param command string|table Command(s) to execute.
|
---@param command string|table Command(s) to execute.
|
||||||
@@ -307,13 +326,46 @@ end
|
|||||||
--- If a table, executes a single command. In this case, it is an alias
|
--- If a table, executes a single command. In this case, it is an alias
|
||||||
--- to |nvim_cmd()| where `opts` is empty.
|
--- to |nvim_cmd()| where `opts` is empty.
|
||||||
---@see |ex-cmd-index|
|
---@see |ex-cmd-index|
|
||||||
function vim.cmd(command)
|
function vim.cmd(command) -- luacheck: no unused
|
||||||
|
error(command) -- Stub for gen_vimdoc.py
|
||||||
|
end
|
||||||
|
|
||||||
|
local VIM_CMD_ARG_MAX = 20
|
||||||
|
|
||||||
|
vim.cmd = setmetatable({}, {
|
||||||
|
__call = function(_, command)
|
||||||
if type(command) == 'table' then
|
if type(command) == 'table' then
|
||||||
return vim.api.nvim_cmd(command, {})
|
return vim.api.nvim_cmd(command, {})
|
||||||
else
|
else
|
||||||
return vim.api.nvim_exec(command, false)
|
return vim.api.nvim_exec(command, false)
|
||||||
end
|
end
|
||||||
end
|
end,
|
||||||
|
__index = function(t, command)
|
||||||
|
t[command] = function(...)
|
||||||
|
local opts
|
||||||
|
if select('#', ...) == 1 and type(select(1, ...)) == 'table' then
|
||||||
|
opts = select(1, ...)
|
||||||
|
|
||||||
|
-- Move indexed positions in opts to opt.args
|
||||||
|
if opts[1] and not opts.args then
|
||||||
|
opts.args = {}
|
||||||
|
for i = 1, VIM_CMD_ARG_MAX do
|
||||||
|
if not opts[i] then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
opts.args[i] = opts[i]
|
||||||
|
opts[i] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
opts = { args = { ... } }
|
||||||
|
end
|
||||||
|
opts.cmd = command
|
||||||
|
return vim.api.nvim_cmd(opts, {})
|
||||||
|
end
|
||||||
|
return t[command]
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
-- These are the vim.env/v/g/o/bo/wo variable magic accessors.
|
-- These are the vim.env/v/g/o/bo/wo variable magic accessors.
|
||||||
do
|
do
|
||||||
|
|||||||
@@ -2148,6 +2148,13 @@ describe('lua stdlib', function()
|
|||||||
]]
|
]]
|
||||||
eq('2', funcs.luaeval "BUF")
|
eq('2', funcs.luaeval "BUF")
|
||||||
eq(2, funcs.luaeval "#vim.api.nvim_list_bufs()")
|
eq(2, funcs.luaeval "#vim.api.nvim_list_bufs()")
|
||||||
|
|
||||||
|
-- vim.cmd can be indexed with a command name
|
||||||
|
exec_lua [[
|
||||||
|
vim.cmd.let 'g:var = 2'
|
||||||
|
]]
|
||||||
|
|
||||||
|
eq(2, funcs.luaeval "vim.g.var")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
it('vim.regex', function()
|
it('vim.regex', function()
|
||||||
|
|||||||
Reference in New Issue
Block a user