# 引言

最近学习 Lua,在解释器中运行代码很是不习惯,加上自己偏好使用 Sublime ,于是将 LuaSublime 中进行相关配置,将过程整理备忘并推荐相关插件。

# Lua 环境配置

# Lua 安装

下面给出两种安装方式,可执行程序安装源码编译安装,在很多人看来可能基于源码编译安装更加麻烦,事实也是如此。

但是基于源码版安装后续安装 luacheckluasocket 等常用库时可以利用 lua 源码用 luarocks 基于库源码编译安装,毕竟有些库,编译后的版本可能已经很久没有维护了而且对于 lua 有指定版本要求,关键还不一定好使,所以个人觉得通过源码安装虽然麻烦,但是相对靠谱和可控。

源码下载

源码下载链接,点击 Source 下载最新源码版或者指定版本
https://www.lua.org/download.html

Lua源码下载

编译环境

这儿通过 mingw32-make 进行编译,所以需要先到 https://nuwen.net/mingw.html 下载 MinGW 安装 mingw32-make 再将文件所在 bin 目录添加到环境变量即可

MinGW安装

编译版本

解压 lua 源码,根目录文件夹下新建批处理脚本 仅限 Windows, Mac下直接由于homebrew过于强大,直接安装就行了 ,运行编译完成后, \dist\bin 即为编译后 Lua 可执行程序目录

@echo off
:: ========================
:: build.bat
::
:: build lua to dist folder
:: tested with lua-5.3.5
:: based on:
:: https://medium.com/@CassiusBenard/lua-basics-windows-7-installation-and-running-lua-files-from-the-command-line-e8196e988d71
:: ========================
setlocal
:: you may change the following variable’s value
:: to suit the downloaded version
set work_dir=%~dp0
:: Removes trailing backslash
:: to enhance readability in the following steps
set work_dir=%work_dir:~0,-1%
set lua_install_dir=%work_dir%\dist
set compiler_bin_dir=%work_dir%\tdm-gcc\bin
set lua_build_dir=%work_dir%
set path=%compiler_bin_dir%;%path%
cd /D %lua_build_dir%
mingw32-make PLAT=mingw
echo.
echo **** COMPILATION TERMINATED ****
echo.
echo **** BUILDING BINARY DISTRIBUTION ****
echo.
:: create a clean “binary” installation
mkdir %lua_install_dir%
mkdir %lua_install_dir%\doc
mkdir %lua_install_dir%\bin
mkdir %lua_install_dir%\include
mkdir %lua_install_dir%\lib
copy %lua_build_dir%\doc\*.* %lua_install_dir%\doc\*.*
copy %lua_build_dir%\src\*.exe %lua_install_dir%\bin\*.*
copy %lua_build_dir%\src\*.dll %lua_install_dir%\bin\*.*
copy %lua_build_dir%\src\luaconf.h %lua_install_dir%\include\*.*
copy %lua_build_dir%\src\lua.h %lua_install_dir%\include\*.*
copy %lua_build_dir%\src\lualib.h %lua_install_dir%\include\*.*
copy %lua_build_dir%\src\lauxlib.h %lua_install_dir%\include\*.*
copy %lua_build_dir%\src\lua.hpp %lua_install_dir%\include\*.*
copy %lua_build_dir%\src\liblua.a %lua_install_dir%\lib\liblua.a
echo.
echo **** BINARY DISTRIBUTION BUILT ****
echo.
%lua_install_dir%\bin\lua.exe -e "print [[Hello!]];print[[Simple Lua test successful!!!]]"
echo.
:: configure environment variable
:: https://stackoverflow.com/a/21606502/4394850
:: http://lua-users.org/wiki/LuaRocksConfig
:: SETX - Set an environment variable permanently.
:: /m Set the variable in the system environment HKLM.
pause

可执行程序下载链接
http://www.lua.org/download.html

下载流程

将解压后的目录放在需要的位置即可,三个执行文件所在目录即为 Lua 可执行程序目录

# 添加环境变量

将上一步的 Lua 可执行程序目录 添加到 环境变量 Path 下就好了,如下图,是我放在了 E 盘 的配置示例

Lua环境变量

cmd 中输入 lua 回车若显示版本号即配置正确(不行可以尝试重启或者注销电脑再在 cmd 中看看)

# 在 Sublime 中配置 Lua

# Lua 集成

打开 Sublime 选择 Tools --> Build System --> New Build System

在新出现的文件中输入如下内容

{
    "cmd": ["lua", "$file"],
    "file_regex": "^(?:lua:)?[\\t ](...*?):([0-9]*):?([0-9]*)",
    "selector": "source.lua"
}

Ctrl + S 到默认保存路径就好了,比如命名为 lua(lua.sublime-build)

这样以后新建 .lua 文件然后 Ctrl + Shift + B 或者 F7 运行就 ok 了

# 插件推荐

  • SublimeLinter
  • SublimeLinter-lua
  • SublimeLinter-luacheck
  • All Autocomplete
  • LuaSmartTips

Sublime 自带快捷键

  • Ctrl + Shift + R 工程内定义与实现跳转
  • Ctrl + R 文件内任意函数跳转~

# Lua 静态语法检测 & 辅助功能

# luacheck 静态检查

这儿同样提供 基于源码可执行程序 的两种安装方式,注:源码安装需要上一步也是源码安装的 Lua

本质上 luacheck 算是一个 lua 库,而对于 lua 的各种库通过 luarock 来进行安装管理是非常方便的,所以我们需要先做一下前置工作

Luarocks 安装

Luarocks 下载链接,页面选择最新版直接下载即可,这儿不想编译可以直接下载执行程序,安装 lua 库时使用源码版 lua 即可
http://luarocks.github.io/luarocks/releases/

这儿建议解压后放在和之前 lua 源码所在同级目录,便于方便管理

Luarock 解压后执行程序所在路径 添加到 环境变量 Path

cmd 执行 luarocks config 可以看到, luarock 依赖的 lua 二进制文件路径,以及安装的 bin 文件路径

LuarocksConfig

为了一劳永逸,避免命令行设置路径同时便于后续管理,以及 lua 环境的一键移植,可以定义一个 config.lua 文件重载全局的 config

lua_interpreter = "lua.exe"
--- 相关部署路径
deploy_bin_dir = "D:\\MyProfile\\Lua\\luarocks/bin"
deploy_lib_dir = "D:\\MyProfile\\Lua\\luarocks/lib/lua/5.3"
deploy_lua_dir = "D:\\MyProfile\\Lua\\luarocks/share/lua/5.3"
local_cache = "D:\\MyProfile\\Lua\\luarocks/Cache"
rocks_dir = "D:\\MyProfile\\Lua\\luarocks/lib/luarocks/rocks-5.3"
--- 指向 Luarocks 所在目录,建议 Lua 也放在这儿,可以直接 lua 整包进行环境移植
home = "D:\\MyProfile\\Lua"
home_tree = "D:\\MyProfile\\Lua\\luarocks"
variables = {
   ---lua 源码版执行文件,lib 文件,以及源码路径,用于源码安装库文件依赖编译
   LUA_BINDIR = "D:\\MyProfile\\Lua\\lua-5.3.6\\dist\\bin",
   LUA_DIR = "D:\\MyProfile\\Lua\\lua-5.3.6\\dist\\bin",
   LUA_INCDIR = "D:\\MyProfile\\Lua\\lua-5.3.6\\dist\\include",
   LUA_LIBDIR = "D:\\MyProfile\\Lua\\lua-5.3.6\\dist\\bin",
   ROCKS_TREE = "D:\\MyProfile\\Lua\\luarocks/lib/luarocks/rocks-5.3",
   SCRIPTS_DIR = "D:\\MyProfile\\Lua\\luarocks/bin",
}

新建环境变量

Luarocks环境变量

到此整个 luarocks 部署完成,很麻烦有没有 (不要慌,这叫工欲善其事,必先利其器,毕竟用 lua 开发不可能不用到其他库,这样后续就方便了呀,逃~~)

Luacheck 安装

cmd 执行如下命令完成安装,然后将 luacheck 所在 bat 文件添加到 环境变量 Path 下即可,按照上面的配置这个路径应该是 D:\\MyProfile\\Lua\\luarocks\\bin 其实安装了其他的 库文件 基本也都是在这个目录下了,后续就不再需要添加环境变量了

luarocks install luacheck

可执行程序下载链接
https://github.com/mpeterv/luacheck

通过上述链接下载后运行 cmd cdluacheck 的所在目录 输入如下命令运行

lua install.lua E:\\MyProfile\\Lua\\luacheck\\
# 其中E:\\MyProfile\\Lua\\luacheck\\为luacheck的目录
# 注:若lua未添加环境变量,可手动给出full path运行即
# E:\\MyProfile\\Lua\\lua-5.3.4_Win64_bin\\lua.exe install.lua E:\\MyProfile\\Lua\\luacheck\\

这一步的目的在于,根据使用者系统的相关目录重新生成 luacheck.bat 文件
然后将 luacheck 的 bin (即 luacheck.bat 所在) 目录添加到系统环境变量中的 path 目录,如上图 环境变量 最后一条记录

# luacheck 作用解释

比如你手贱的写了如下代码,在鼠标移动至第一个变量位置(点击),在下方的状态栏,当光标移动到第一行会提示你 该变量没有使用,移动到第二行就会提示 变量没有定义,这样就可以有效避免出现鬼畜的代码了

LuaCheck

# 语法检测自定义忽略规则

配置完成后会发现在 Lua 中输入多余空格空行会提示警告可谓烦人

打开 Sublime 菜单栏 -- package setting --> SublimeLinter -- setting userd

编辑打开文件复制下列代码替换即可

{
    "user": {
        "debug": false,
        "delay": 0.25,
        "error_color": "D02000",
        "gutter_theme": "Packages/SublimeLinter/gutter-themes/Default/Default.gutter-theme",
        "gutter_theme_excludes": [],
        "lint_mode": "background",
        "linters": {
            "lua": {
                "@disable": false,
                "args": [],
                "excludes": []
            },
            "luacheck": {
                "@disable": false,
                "args": [],
                "excludes": [],
                "ignore_match": [
                    ".*trailing whitespace.*",
                    ".*only whitespace",
                    ".*line is too long",
                    ".*inconsistent indentation"
                ]
            }
        },
        "mark_style": "outline",
        "no_column_highlights_line": false,
        "passive_warnings": false,
        "paths": {
            "linux": [],
            "osx": [],
            "windows": []
        },
        "python_paths": {
            "linux": [],
            "osx": [],
            "windows": []
        },
        "rc_search_limit": 3,
        "shell_timeout": 10,
        "show_errors_on_save": false,
        "show_marks_in_minimap": true,
        "syntax_map": {
            "html (django)": "html",
            "html (rails)": "html",
            "html 5": "html",
            "javascript (babel)": "javascript",
            "magicpython": "python",
            "php": "html",
            "python django": "python",
            "pythonimproved": "python"
        },
        "tooltip_fontsize": "1rem",
        "tooltip_theme": "Packages/SublimeLinter/tooltip-themes/Default/Default.tooltip-theme",
        "tooltip_theme_excludes": [],
        "tooltips": false,
        "warning_color": "DDB700",
        "wrap_find": true
    }
}

其实主要就是添加其中 luacheckignore_match 这样语法检测就会忽略这些无关紧要的警高了

# 结语

以上就是 LuaSublime 的一些集成和配置已经相关插件推荐,这样就可以在 Subllime 中书写 Lua 了。

另外这儿的的 Lua 代码在 Sublime 的控制台中运行,无法使用 io.read() 之类进行输入,如若可以更改配置文件调用终端输入,欢迎留言评论~

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

yx.zhang 微信支付

微信支付

yx.zhang 支付宝

支付宝