原文:https://github.com/glepnir/nvim-lua-guide-zh
nvim-lua-guide 中文版简易教程 译者: Neovim Core Developer
- 在 neovim 中使用 Lua
- 简介
- 学习 Lua
- 现有的一些在 Neovim 中使用 Lua 的教程
- 相关插件
- Lua 文件位置
- 警告
- 提示
- 包说明
- 在 Vimscript 中使用 Lua
- :lua
- 警告
- :luado
- :luafile
- luafile 对比 require():
- luaeval()
- v:lua
- Caveats
- Vim 命名空间
- Tips
- 在 Lua 中使用 Vimscript
- vim.api.nvim_eval()
- Caveats
- vim.api.nvim_exec()
- vim.api.nvim_command()
- Tips
- 管理 vim 的设置选项
- 使用 api 函数
- 使用元访问器
- Caveats
- 管理 vim 的内部变量
- 使用 api 函数
- 使用元访问器
- Caveats
- 调用 Vimscript 函数
- vim.call()
- vim.fn.{function}()
- Tips
- Caveats
- 定义映射
- 定义用户命令
- 定义自动命令
- 定义语法高亮
- General tips and recommendations
- Miscellaneous
- vim.loop
- vim.lsp
- vim.treesitter
- Transpilers
nvim-lua-guide 中文版简易教程
译者: Neovim Core Developer
简介Lua 作为 Neovim 中的一等语言的集成正在成为它的杀手级特性之一。然而,学习如何用 Lua 编写插件的教程数量并不像用 Vimscript 编写插件那样多。这是一种尝试,试图提供一些基本信息,让人们可以使用 Lua 编写 Neovim 插件。
本指南假定您使用的是最新的 Neovim Nighly build。由于 Neovim 的 0.5 版本是开发版本,请记住,正在积极开发的一些 API 并不十分稳定,在发布之前可能会发生变化。
学习 Lua不同于原版教程,以下资源适用于国内用户:
- 在 Y 分钟内学习 X 关于 Lua 的页面
- Lua 菜鸟教程
- Lua 用户维基
- Lua 的官方参考手册
Lua 是一种非常干净和简单的语言。它很容易学习,特别是如果你有其他编程语言基础的例如 TypeScript / JavaScript 等,会更加容易上手 Lua。注意:Neovim 嵌入的 Lua 版本是 LuaJIT 2.1.0,它与 Lua 5.1 保持兼容(带有几个 5.2 扩展)
现有的一些在 Neovim 中使用 Lua 的教程已经编写了一些教程来帮助人们用 Lua 编写插件。他们中的一些人在写这本指南时提供了不少的帮助。非常感谢它们的作者。
- teukka.tech - 从 init.vim 转到 init.lua
- 2n.pl - 如何使用 Lua 编写 neovim 插件
- 2n.pl - 如何使用 Lua 制作 neovim UI
- ms-jpq - NeoVim 异步教程
- Vimpeccable - Plugin to help write your .vimrc in Lua
- plenary.nvim - All the lua functions I don’t want to write twice
- popup.nvim - An implementation of the Popup API from vim in Neovim
- nvim_utils
- nvim-luadev - REPL/debug console for nvim lua plugins
- nvim-luapad - Interactive real time neovim scratchpad for embedded lua engine
- nlua.nvim - Lua Development for Neovim
- galaxyline.nvim - neovim statusline plugin written in lua
- BetterLua.vim - Better Lua syntax highlighting in Vim/NeoVim
Lua 文件通常位于您的 runtimepath
中的 lua/
文件夹中(对于大多数用户来说,在 *nix 系统上为 ~/.config/nvim/lua
,在 Windows 系统上为 ~/appdata/Local/nvim/lua
)。Package.path
和 Package.cpath
全局变量会自动调整为包含该文件夹下的 Lua 文件。这意味着您可以 require()
这些文件作为 Lua 模块
我们以下面的文件夹结构为例:
📂 ~/.config/nvim
├── 📁 after
├── 📁 ftplugin
├── 📂 lua
│ ├── 🌑 myluamodule.lua
│ └── 📂 other_modules
│ ├── 🌑 anothermodule.lua
│ └── 🌑 init.lua
├── 📁 pack
├── 📁 plugin
├── 📁 syntax
└── 🇻 init.vim
下面的 Lua 代码将加载 myluamodule.lua
require('myluamodule')
注意没有 .lua
扩展名。
类似地,加载 other_modules/anothermodule.lua
的过程如下:
require('other_modules.anothermodule')
-- or
require('other_modules/anothermodule')
路径分隔符可以用点 .
表示,也可以用斜杠 /
表示。
文件夹如果包含 init.lua
文件,可以直接引用该文件夹而不必指定该文件的名称
require('other_modules') -- loads other_modules/init.lua
更多信息 :help lua-require
与 .vim 文件不同,.lua 文件不会自动从您的 runtimepath
目录中获取。相反,您必须从 Vimscript source/require 它们。计划增加 init.lua
文件加载选项,替代 init.vim
:
- Issue #7895
- Corresponding pull request
多个 Lua 插件在它们的 lua/
文件夹中可能有相同的文件名。这可能会导致命名空间冲突。如果两个不同的插件有一个 lua/main.lua
文件,那么执行 require('main')
是不明确的:我们想要加载哪个文件?最好将您的配置或插件命名为顶级文件夹, 例如这样的形式:lua/plugin_name/main.lua
。
如果您是 package
特性的用户或基于它的插件管理器例如 packer.nvim,minpac 或 vim-packager,那么在使用 Lua 插件时需要注意一些事情。start
文件夹中的包只有在源化您的 init.vim
之后才会加载。这意味着只有在 Neovim 处理完文件之后,才会将包添加到 runtimepath
中。如果插件期望 require
一个 Lua 模块或调用自动加载的函数,这可能会导致问题。假设包 start/foo
有一个 lua/bar.lua
文件,从您的 init.vim
执行此操作将引发错误,因为 runtimepath
尚未更新。
lua require('bar')
你需要使用 packadd! foo
命令在 require
这个模块之前
packadd! foo
lua require('bar')
在 Packadd
后附加 !
表示 Neovim 会将包放在 runtimepath
中,而不会在其 plugin
或 ftDetect
目录下寻找任何脚本。
See also:
:help :packadd
- Issue #11409
该命令执行一段 Lua 代码
:lua require('myluamodule')
可以使用以下语法编写多行脚本:
echo "Here's a bigger chunk of Lua code"
lua
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?