Vim / Neovim为什么要使用自动命令,当你可以使用Lua函数时?

我有一些vim的经验,但我大部分时间都在neovim中使用lua(尽管我仍然是一个初学者)。我错过了vimscript中的自动命令奇迹,我想知道为什么不只是写一个lua函数,例如...

function OpenTerm()
  vim.cmd("bel split")
  vim.cmd("terminal")
  vim.cmd("setlocal nonumber norelativenumber")
end

而不是编写一个自动命令?

原文链接 https://stackoverflow.com/questions/71225171

点赞
stackoverflow用户546861
stackoverflow用户546861

你把两件完全无关的事情混淆了。

你的代码段(假设它可用,我不使用 Neovim,所以我不会测试它):

function OpenTerm()
  vim.cmd("bel split")
  vim.cmd("terminal")
  vim.cmd("setlocal nonumber norelativenumber")
end

是一个 Lua 函数,等效于这个 Vimscript 函数:

function! OpenTerm()
  bel split
  terminal
  setlocal nonumber norelativenumber
endfunction

这两个函数与自动命令没有任何关系。 它们完全被动,定义它们只做了一些与内存相关的低级操作。 _你必须调用它们才能实现它们的作用。

自动命令是一件非常不同的事情,允许您告诉 Vim 在事件发生时执行某些操作,例如:

autocmd VimEnter * call OpenTerm()

它实际上告诉 Vim:

当你启动完成后,请调用 OpenTerm() 函数。

与函数不同,函数在被调用之前不做任何事情。 自动命令一旦定义就会对编辑器的状态产生实际影响。

您可以从一个函数添加自动命令,也可以从自动命令调用函数,但您不能期望一个起到另一个作用。

基本上,问题“我使用自动命令还是函数?” 毫无意义。

2022-02-22 17:36:16