我一直在服务器模式下使用 mproc 在后台启动一堆项目依赖项
mproc 当前在后台运行,服务器在 127.0.0.1:4050 接收命令。它为我启动了四个服务:docker、red、blue、green。
我想在不离开 neovim 的情况下与服务器进行交互。我能够使用以下代码部分完成此操作
local ECP_SERVICE_CODE = {
DOCKER = 0,
RED = 1,
BLUE = 2,
GREEN = 3,
}
local MPROC_CMDS = {
RESTART = "restart",
KILL = "kill"
}
function EcpMproc(service, command)
return [[!mprocs --server 127.0.0.1:4050 --ctl '{c: batch, cmds:[{c: select-proc, index: ]] ..
tostring(service) .. [[}, {c: ]] .. tostring(command) .. [[-proc }, {c: select-proc, index: 0}]}'<cr>]]
end
vim.api.nvim_create_user_command("ColorsRedServiceKill", ColorsMproc(ECP_SERVICE_CODE.RED, MPROC_CMDS.KILL), {})
vim.api.nvim_create_user_command("ColorsRedServiceRestart", ColorsMproc(ECP_SERVICE_CODE.RED, MPROC_CMDS.RESTART), {})
vim.api.nvim_create_user_command("ColorsBlueServiceKill", ColorsMproc(ECP_SERVICE_CODE.BLUE, MPROC_CMDS.KILL), {})
vim.api.nvim_create_user_command("ColorsBlueServiceRestart", ColorsMproc(ECP_SERVICE_CODE.BLUE, MPROC_CMDS.RESTART), {})
vim.api.nvim_create_user_command("ColorsGreenServiceKill", ColorsMproc(ECP_SERVICE_CODE.GREEN, MPROC_CMDS.KILL), {})
vim.api.nvim_create_user_command("ColorsGreenServiceRestart", ColorsMproc(ECP_SERVICE_CODE.GREEN, MPROC_CMDS.RESTART), {})
我现在可以使用像
:ColorsRedServiceKill<CR>
或 :ColorsBlueServiceRestart<CR>
这样的命令与我正在运行的 mproc 实例交互。
不必太担心鲁棒性或极端情况,我希望能够利用传递给 neovim 命令的参数,而不是用
:Colors 1 restart
或更好的方式调用此函数 (:Colors blue restart
)
这是我最好的尝试。它没有达到预期的效果:(
vim.api.nvim_create_user_command(
"Colors",
function(opts)
local service = opts.fargs[1]
local command = opts.fargs[2]
return ColorsMproc(service, command)
end,
{nargs = "+", bang = true}
)
据我了解,您不需要使用
return
。
我还假设 ColorsMproc
已经在 .lua 文件的其他地方定义,否则您需要使用 vim.fn
访问它(我很确定)。那么它可能看起来像这样:
vim.api.nvim_create_user_command(
"Colors",
function()
local service = vim.fn.input "service: "
local command = vim.fn.input "command: "
ColorsMproc(service, command)
end,
{nargs = "+", bang = true}
)
我认为您可以通过执行以下操作将“服务”和“命令”放在同一行中:
local sc = vim.split(vim.fn.input "service/command: ", " ")
.