NeoVim - 检查 Lua 中是否存在 Vim 函数

问题描述 投票:0回答:2

我计划将 vim-plug 与 NeoVim 一起使用。因此,我的

init.lua
文件将包含函数调用,例如

vim.fn['plug#begin'](vim.fn.stdpath('data') .. '/plugged')    
vim.fn['plug#']('hoob3rt/lualine.nvim')    

但是,我不想假设 vim-plug 确实已安装。如果未安装 vim-plug,我希望我的

init.lua
文件能够正常降级,而不是抛出错误

E5113: Error while calling lua chunk: Vim:E117: Unknown function: plug#begin
stack traceback:
        [C]: in function 'plug#begin'
        /Users/andy/.config/nvim/init.lua:8: in main chunk

在尝试调用 vim-plug 函数之前如何检查它们是否存在?

我尝试了

print(vim.fn['plug#begin'])

,但由于某种原因打印了一个非空值:
function: 0x0104ba36f0
,即使该函数不存在。

lua neovim
2个回答
2
投票
我尝试了

print(vim.fn['plug#begin'])

,但由于某种原因打印了一个非空值:
function: 0x0104ba36f0
,即使该函数不存在。

大概它正在返回一个抛出您收到的错误的函数。因此我建议使用

pcall

:

local success, error = pcall(vim.fn['plug#begin'], vim.fn.stdpath('data') .. '/plugged') if not success then --[[fail gracefully]] end
警告:这将捕获 

any 错误,因此您可能需要执行一些检查,例如 if error:find"Unknown function" then ... end

 来仅捕获此特定错误。


0
投票
let data_dir = has('nvim') ? stdpath('config') : '~/.vim' if empty(glob(data_dir . '/autoload/plug.vim')) silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' autocmd VimEnter * PlugInstall --sync | source $MYVIMRC endif
    
© www.soinside.com 2019 - 2024. All rights reserved.