我对 vim 有一些经验,但我的大部分时间都花在 neovim 上玩 lua (尽管我仍然不是初学者)。我错过了 vimscript 自动命令的魔力,我看到很多人都在使用它,我想知道为什么不直接写一个 lua 函数,比如......
function OpenTerm()
vim.cmd("bel split")
vim.cmd("terminal")
vim.cmd("setlocal nonumber norelativenumber")
end
Run Code Online (Sandbox Code Playgroud)
而不是写一个 autocmd ?
rom*_*inl 12
你把两个完全不相关的事情混为一谈了。
你的代码片段(假设它有效,我不使用 Neovim,所以我不会测试它):
function OpenTerm()
vim.cmd("bel split")
vim.cmd("terminal")
vim.cmd("setlocal nonumber norelativenumber")
end
Run Code Online (Sandbox Code Playgroud)
是一个 Lua 函数,与此 Vimscript 函数完全相同:
function! OpenTerm()
bel split
terminal
setlocal nonumber norelativenumber
endfunction
Run Code Online (Sandbox Code Playgroud)
这两个函数实际上与自动命令无关。它们是完全被动的,定义它们只做了一些低级的与内存相关的事情。为了让他们做任何事情,你必须打电话给他们。
自动命令是一种非常不同的东西,它允许您告诉 Vim 在事件发生时执行某些操作,如下所示:
autocmd VimEnter * call OpenTerm()
Run Code Online (Sandbox Code Playgroud)
从本质上讲,它告诉 Vim:
启动完成后,调用该
OpenTerm()函数。
与在调用之前不执行任何操作的函数不同,自动命令一旦定义就会对编辑器的状态产生真正的影响。
您可以从函数添加自动命令,可以从自动命令调用函数,但不能指望一个函数充当另一个函数。
基本上,问题是“我使用自动命令还是函数?” 完全没有意义。