- Socket 编程发展
- OpenResty 简介
- Lua 入门
- Nginx
- 子查询
- 不同阶段共享变量
- 防止 SQL 注入
- 如何发起新 HTTP 请求
- 访问有授权验证的 Redis
- select+set_keepalive 组合操作引起的数据读写错误
- redis 接口的二次封装(简化建连、拆连等细节)
- redis 接口的二次封装(发布订阅)
- pipeline 压缩请求数量
- script 压缩复杂请求
- 动态生成的 lua-resty-redis 模块方法
- LuaCjsonLibrary
- json解析的异常捕获
- 稀疏数组
- 空table编码为array还是object
- PostgresNginxModule
- 调用方式简介
- 不支持事务
- 超时
- 健康监测
- SQL注入
- LuaNginxModule
- 执行阶段概念
- 正确的记录日志
- 热装载代码
- 阻塞操作
- 缓存
- sleep
- 定时任务
- 禁止某些终端访问
- 请求返回后继续执行
- 调试
- 请求中断后的处理
- 我的 lua 代码需要调优么
- 变量的共享范围
- 动态限速
- shared.dict 非队列性质
- 正确使用长链接
- 如何引用第三方 resty 库
- 典型应用场景
- 怎样理解 cosocket
- 如何安全启动唯一实例的 timer
- 如何正确的解析域名
- LuaRestyDNSLibrary
- 使用动态 DNS 来完成 HTTP 请求
- LuaRestyLock
- 缓存失效风暴
- HTTPS 时代
- 动态加载证书和 OCSP stapling
- TLS session resumption
- 测试
- Web 服务
- 火焰图
- 如何定位问题
- module 是邪恶的
- FFI
- 什么是 JIT
Lua 编辑器选择
一个好用趁手的编辑器可以为我们带来极大的工作效率提升,lua 本身并不挑编辑器只是一个存文本,但是如果有代码提示,方便的 goto 跳转,在我们理解别人的代码效率上将会有极大的提升。
我从最初的记事本编辑、vi,到后来的UE自定义语法高亮和函数列表,以及 scite 等寻找和尝试过能找到的绝大部分的 lua 编辑器,我想在编辑器选择上面(linux 下的不熟)应该比较有发言权,这里我主要讲我的环境是如何的。
选择过程我就不详述了,这里只讲解如果在你自己的 windows 上配置好 ide。
下载 idea 并配置
idea 是一个 java 语言非常受好评的编辑器,但是并不是只支持java,目前通过开放的插件编写已经支持绝大部分语言且使用的非常好用顺手,相信使用过的都会深有感受的.下载地址
其中 Community 版本是免费的,下载完后双击安装即可,安装完成后打开 File->Settings->Plugins 在其中输入 emmylua 点击右边的 install 安装并重启 idea
新建一个 lua 项目,在 File->Project Structure 里面配置好 modules 和 lib,如下图。
至此一个包含 lua 语法提示和调整的编辑器环境就配置好了,有关 emmylua 的详细帮助文档看这里
插件基本用法
1.方法提示
你可以在Setting里面配置鼠标移动到方法上后一定时间自动弹出
也可以按 Ctrl+q 手动弹出,效果如下,目前我使用的版本文档中的换行显示还有问题
2.快速跳转
在任何已经被定义的方法上按住Ctrl+鼠标点击该方法就可以自动打开和跳转到方法定义上面,非常方便
3.方法提示
在你输入识别的全局或者局部变量上面按点会自动出现可选方法做提示,不用记住所有的方法.
进阶配置
由于 emmylua 并没有自带 openresty 的库函数,所以我们需要自己写函数提示,这里我提供我自己写的供你们下载和丰富,请丢到你的 lualib 根目录中,下面是一个简单的库函数定义示例
---语法: pid = ngx.worker.pid()
---
---语法: set_by_lua*, rewrite_by_lua*, access_by_lua*, content_by_lua*, header_filter_by_lua*, body_filter_by_lua*, log_by_lua*, ngx.timer.*, init_by_lua*, init_worker_by_lua*
---
---这个函数返回一个Lua数字,它是当前 Nginx 工作进程的进程 ID (PID)。这个 API 比 ngx.var.pid 更有效,ngx.var.VARIABLE API 不能使用的地方(例如 init_worker_by_lua),该 API 是可以的。
---@return number
function ngx.worker.pid()
end
方法提示不一定要使用独立的文件定义,可以直接在库里面定义:
至于里面的含义就要去这里看和理解拉,总之如果你的库都定义好了方法提示,在你理解源码的时候将会非常方便快速.相信我
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论