您当前的位置: 首页 >  vim

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

在 neovim 中使用 Lua

ITKEY_ 发布时间:2021-09-15 08:11:50 ,浏览量:0

原文: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

在 neovim 中使用 Lua

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 文件位置

Lua 文件通常位于您的 runtimepath 中的 lua/ 文件夹中(对于大多数用户来说,在 *nix 系统上为 ~/.config/nvim/lua,在 Windows 系统上为 ~/appdata/Local/nvim/lua)。Package.pathPackage.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 中,而不会在其 pluginftDetect 目录下寻找任何脚本。

See also:

  • :help :packadd
  • Issue #11409
在 Vimscript 中使用 Lua :lua

该命令执行一段 Lua 代码

:lua require('myluamodule')

可以使用以下语法编写多行脚本:

echo "Here's a bigger chunk of Lua code"

lua             
关注
打赏
1665243900
查看更多评论
0.0420s