@lisp 扩展 - AutoLISP/Visual LISP 语言服务

📚 架构 · MCP 调试 · AI 模块 · 开发指南
为 AutoLISP / Visual LISP 提供完整的 VS Code 开发体验,支持 全部CAD 平台(AutoCAD、ZWCAD、GStarCAD、BricsCAD 等)。集成代码编辑、智能补全、实时诊断、调试器、REPL、AI 辅助、包管理等全方位功能。
📦 安装
在 VS Code 扩展市场搜索 @lisp 或 atlisp-funlib 即可安装。
在 CAD 中安装 @lisp 函数库
将以下代码复制到 CAD 命令行,回车即可:
(progn(vl-load-com)(setq s strcat h "http" o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://atlisp.""org/@"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
提示:用 Ctrl+C 复制,到 CAD 命令行 Ctrl+V 粘贴。
📖 使用说明
📝 代码编辑与智能补全
自动补全
输入代码时自动弹出补全建议,支持:
| 补全类型 |
说明 |
示例 |
| AutoLISP 基本函数 |
所有内置函数 |
setq、entmake、ssget |
| VLA 属性/方法 |
ActiveX 交互 |
vla-get-color、vla-addline |
| 反应器函数 |
vlr-* 系列 |
vlr-object-reactor |
| 系统变量 |
CAD 系统变量 |
clayer、osmode |
| DXF 组码 |
输入 dxf 开头 |
dxf0(图元类型)、dxf10(起点) |
| 图元名查组码 |
输入 dxf+图元名 |
dxfcircle(圆的所有组码) |
| @lisp 函数 |
已安装的 @lisp 包函数 |
string:format、block:make |
| DCL 控件与属性 |
DCL 文件中的补全 |
:dialog、:edit_box |
悬停提示
鼠标悬停在函数、变量、系统变量上时,显示详细的说明文档和用法示例。
代码片段
输入前缀后按 Tab 触发预定义的代码模板:
- 函数定义:
defun + Tab → 生成函数框架
- 循环结构:
repeat、while、foreach
- 条件判断:
if、cond、progn
- 实体操作:
entmake、entmod
vla- 系列方法补全
自定义片段配置文件:.vscode/atlisp.code-snippets。
🔍 代码分析与诊断
本扩展内置 @atlisp/lint 静态分析引擎,提供 70+ 条检查规则。
运行方式
| 方式 |
操作 |
| 实时诊断 |
编辑时自动在问题面板显示错误/警告 |
| 手动审查 |
alt+shift+i 或命令面板 → @lisp: 代码审查 |
| 一键修复 |
诊断结果中点击 💡 或 alt+shift+f |
| 项目分析 |
命令面板 → @lisp: 项目分析(跨文件) |
检查规则
涵盖括号匹配、setq 变量参数校验、defun 结构完整性、函数参数个数校验、未使用变量、重复定义检测(跨文件)、多余括号、覆盖内建函数、危险函数(quit/exit/startapp)等。
配置
在 settings.json 中配置:
{
"atlisp.staticDiagnostics.enable": true,
"atlisp.staticDiagnostics.checks": {
"parens": "error",
"unused_variable": "warn",
"dangerous_function": "error"
}
}
括号辅助
- 括号配对高亮:光标置于
( 或 ) 时自动高亮匹配的另一半
- 按括号层级扩缩选区:
Shift+Alt+→ / ← 在嵌套的 S 表达式间逐层扩缩选区
- 彩虹括号:不同层级的括号显示不同颜色,便于区分嵌套层次
- 括号自动闭合:输入
( 自动补全 ),且光标位于括号内
🎨 语义着色与主题
内置两套专业配色主题:
- Atlisp Light — 浅色主题
- Atlisp Dark — 深色主题
在命令面板选择 首选项:颜色主题 切换。
基本函数、对象属性/方法、系统变量、只读变量、@lisp 函数使用不同的颜色区分显示。着色引擎基于 AST(抽象语法树)驱动,准确识别 defun/defmacro 定义的函数、setq 变量、关键字、字符串和数字,比传统正则方案更精确。
💡 内联提示
编辑时自动显示参数名称和变量值提示:
- 参数名提示:函数调用时在参数位置显示形参名(如
arg1:)
- 变量值提示:
setq 赋值语句后显示变量值预览
- 配置:
atlisp.enableInlayHints(默认 false)
📐 代码格式化
格式化方式
| 方式 |
操作 |
| 格式化当前文件 |
alt+shift+f 或右键 → 格式化文档 |
| 格式化选中区域 |
选中代码 → 右键 → 格式化选定内容 |
| 保存时自动格式化 |
开启设置 atlisp.format.formatOnSave |
| DCL 格式化 |
同样支持 .dcl 文件的格式化 |
格式化器
默认使用 atlisp-lint 引擎(推荐),旧版内置格式化器已弃用。
{
"atlisp.format.provider": "atlisp-lint",
"atlisp.format.indentWidth": 2,
"atlisp.format.formatOnSave": true
}
🐞 调试器(DAP)
支持附加到已运行的 CAD 进程或自动启动 CAD 进行断点调试。
附加到 CAD
- 启动 CAD 并打开要调试的 LSP 文件
- VS Code 按
F5 或点击运行侧边栏
- 选择 @Lisp-Attach 配置
- 在编辑器行号左侧点击设置断点
- 在 CAD 中执行你的 LSP 代码,VS Code 会在断点处暂停
启动 CAD 调试
- VS Code 按
F5 选择 @Lisp-Launch 配置
- 扩展自动启动 CAD 并加载当前文件
- 设置断点,在 CAD 中触发代码执行
注意事项
- DAP 调试器仅支持 Windows 平台
- 支持 AutoCAD 2021+ 和 GStarCAD 2021+
- CAD 需设置
LISPSYS = 1 或 2(建议 2)
- 文件编码推荐 UTF-8(GB2312/ANSI 可能导致调试异常)
💻 REPL(交互式求值)
REPL 面板提供交互式 Lisp 执行环境。
打开 REPL
- 点击 VS Code 底部状态栏的 @lisp 按钮
- 或命令面板 →
@lisp: 打开 REPL
使用方法
| 操作 |
说明 |
| 直接输入 |
在 REPL 输入框输入 Lisp 表达式,回车执行 |
| 内联求值 |
编辑器中选中代码,按 alt+shift+e,结果显示在代码行内 |
| 清除结果 |
alt+shift+c 清除所有内联结果 |
| 发送到 REPL |
选中代码,alt+shift+enter 发送到 REPL 执行 |
| 历史记录 |
alt+shift+r 查看执行历史,可重新执行 |
| 宏展开 |
在 REPL 中使用 (macroexpand '(your-code)) |
| 代码审查 |
使用 (inspect 'symbol) 查看符号详情 |
🔌 MCP 调试(atlisp-mcp)
跨平台的 CAD 交互调试方案,通过 MCP(Model Context Protocol)协议连接 CAD。
安装前提
npm install -g @atlisp/mcp
CAD 需已运行。
连接与使用
- 点击左侧活动栏的 MCP Debug 图标打开面板
- 点击 Connect 连接 CAD
- 连接后在
.lsp 文件中选中代码
- 按
alt+e 发送到 CAD 求值
- 结果在面板和输出通道中显示
快捷键
| 快捷键 |
功能 |
alt+e |
在 CAD 中求值选中代码 |
alt+r |
加载当前 .lsp 文件到 CAD |
alt+i |
检查变量/表达式 |
断点调试
- 在编辑器行号左侧点击设置断点
- 在
defun 上方点击 Debug with Breakpoints
- 使用面板的 Step Over / Step Into / Continue 控制执行
- 在 Watch 标签页添加变量名,自动在 CAD 中求值刷新
多会话管理
可连接多个 CAD 实例(AutoCAD + ZWCAD 同时),在面板下拉框切换。
配置项
| 设置 |
说明 |
atlisp.mcp.command |
MCP 服务器可执行文件路径(默认 atlisp-mcp) |
atlisp.mcp.args |
启动参数(默认 ["--stdio"]) |
atlisp.mcp.fileEncoding |
文件编码(默认 auto) |
🤖 AI 辅助
内置 AI 功能支持多个 AI 提供商,可辅助编码、审查代码、生成代码。
配置 AI 提供商
选择一个提供商并配置对应的 API Key:
@lisp(默认):
{
"atlisp.ai.provider": "atlisp"
}
Gemini:
{
"atlisp.ai.provider": "gemini",
"atlisp.ai.geminiApiKey": "your-key",
"atlisp.ai.geminiModel": "gemini-2.0-flash"
}
OpenAI 兼容(含 DeepSeek):
{
"atlisp.ai.provider": "openai",
"atlisp.ai.openaiApiKey": "your-key",
"atlisp.ai.openaiBaseUrl": "https://api.openai.com/v1",
"atlisp.ai.openaiModel": "gpt-4o"
}
DeepSeek:
{
"atlisp.ai.provider": "deepseek",
"atlisp.ai.deepseekApiKey": "your-key",
"atlisp.ai.deepseekBaseUrl": "https://api.deepseek.com",
"atlisp.ai.deepseekModel": "deepseek-chat"
}
功能
| 功能 |
快捷键 |
说明 |
| AI 聊天 |
ctrl+shift+a |
在侧边栏与 AI 对话,可引用当前代码上下文 |
| 从注释生成代码 |
ctrl+shift+g |
在代码中写注释描述功能,AI 自动生成实现代码 |
| 代码审查 |
右键 → AI → 审查代码 |
AI 审查选中代码,指出问题并给出改进建议 |
| 代码解释 |
右键 → AI → 解释代码 |
AI 解释选中代码的功能和逻辑 |
| 生成代码片段 |
ctrl+shift+r |
选中代码,AI 生成类似功能的代码片段 |
温度设置
{
"atlisp.ai.temperature": 0.1
}
范围 0.0(精确)到 2.0(创意),默认 0.1。
📂 @lisp 包管理
浏览包
- 点击左侧活动栏的 @lisp 图标
- 在包浏览器中浏览注册表中的所有可用包
- 点击包查看详情(版本、描述、依赖)
安装 / 卸载包
| 操作 |
方法 |
| 安装 |
在包浏览器中点击包 → 安装按钮 |
| 卸载 |
在已安装列表中点击包 → 卸载按钮 |
| 更新 |
在已安装列表中点击有更新的包 → 更新按钮 |
编译应用包
将 .lsp 源码编译为 .fas(Fast-Load AutoLISP)格式:
命令面板 → @lisp: 编译应用包
发布应用包
将应用包发布到 @lisp 注册表:
命令面板 → @lisp: 发布应用包
🔧 @lisp CLI 集成
通过命令面板执行以下操作:
| 命令 |
功能 |
@lisp: 安装包 |
按名称安装 @lisp 包 |
@lisp: 搜索包 |
搜索远程注册表中的包 |
@lisp: 拉取包 |
更新本地包到最新版本 |
@lisp: 诊断 |
运行 doctor 检查环境健康状态 |
@lisp: 文档查询 |
查询 @lisp 函数的在线文档 |
@lisp: 项目初始化 |
初始化新的 @lisp 项目结构 |
🌐 简繁互转
自动识别并转换文件中简体/繁体中文字符。
| 操作 |
方法 |
| 全文转换 |
右键 → 简繁互转 → 全文转换 |
| 选中区域转换 |
选中代码 → 右键 → 简繁互转 → 转换选中区域 |
支持 .lsp 和 .dcl 文件格式。
📋 大纲与导航
文档符号
在 VS Code 的大纲视图中按函数定义结构展示当前文件:
defun 定义的函数
setq 定义的全局变量
vl-load-com 等初始化调用
定义跳转
- 按住
Ctrl 点击函数名跳转到定义
- 右键 → 转到定义
F12 跳转到定义
引用查找
- 右键 → 查找所有引用
Shift+F12 查找引用
工作区符号
Ctrl+T 在整个工作区中搜索函数和变量定义。
⚙️ 开发环境要求
| 项目 |
要求 |
| VS Code |
≥ 1.82.0 |
| CAD |
全部CAD(AutoCAD、ZWCAD、GStarCAD、BricsCAD 等) |
| CAD 版本 |
AutoCAD ≥ 2021,其他 CAD 最新版 |
| LISPSYS |
1 或 2(建议 2,兼容性更好) |
| 文件编码 |
推荐 UTF-8(GB2312/ANSI 可能导致调试异常) |
| MCP 调试 |
Node.js ≥ 18,npm install -g @atlisp/mcp |
建议 LISPSYS = 2,编译的 .fas 可向下兼容低版本 CAD。
🔑 快捷键
| 快捷键 |
功能 |
alt+shift+e |
内联求值 |
alt+shift+c |
清除内联结果 |
alt+shift+l |
加载文件到 CAD |
alt+shift+enter |
发送到 REPL |
alt+shift+up |
选择 S 表达式 |
shift+alt+right |
按括号层级扩大选区 |
shift+alt+left |
按括号层级缩小选区 |
alt+shift+r |
REPL 历史 |
alt+shift+i |
代码审查 |
alt+shift+f |
自动修复 |
ctrl+shift+a |
AI 聊天 |
ctrl+shift+g |
从注释生成代码 |
ctrl+shift+r |
生成代码片段 |
alt+shift+m+e |
MCP 在 CAD 中求值 |
alt+shift+m+r |
MCP 加载文件到 CAD |
alt+shift+m+i |
MCP 检查变量/表达式 |
alt+e |
执行选区表达式 |
alt+r |
MCP Debug 运行当前文件 |
alt+i |
MCP Debug 检查选中变量 |
⚙️ 设置参考
| 设置项 |
说明 |
默认值 |
atlisp.lsp.enabled |
启用 LSP(需重启) |
false |
atlisp.enableDiagnostics |
启用实时诊断 |
true |
atlisp.enableRainbowBrackets |
启用彩虹括号 |
true |
atlisp.enableInlayHints |
启用内联提示 |
false |
atlisp.format.provider |
格式化引擎 |
atlisp-lint |
atlisp.format.indentWidth |
缩进宽度 |
2 |
atlisp.format.formatOnSave |
保存时自动格式化 |
false |
atlisp.staticAnalysis.enabled |
启用静态分析与符号索引 |
true |
atlisp.ai.provider |
AI 提供商 |
atlisp |
atlisp.ai.temperature |
AI 温度参数 |
0.1 |
atlisp.ai.maxIterations |
AI Agent 最大迭代次数 |
5 |
atlisp.ai.requestTimeout |
AI 请求超时(毫秒) |
30000 |
atlisp.mcp.command |
MCP 可执行文件路径 |
atlisp-mcp |
atlisp.mcp.fileEncoding |
文件编码 |
auto |
atlisp.project.exclude |
项目排除模式 |
["**/.git/**", ...] |
🌍 社区与支持
📄 许可证
MIT License © @lisp-CAD应用云