GLM-5驱动的Vibe Coding与Agentic Engineering实践
1. 项目概述当大模型不再只是“写代码的助手”而是你开发流程里的“ vibe 搭子”和“工程合伙人”最近在几个技术社区里我反复看到一个词被高频提起——vibe coding。它不是某个新出的 IDE 插件也不是某家公司的闭源产品而是一种正在快速成型的、人与大模型协同开发的新节奏不靠死磕 prompt不靠堆砌工具链而是靠一种“对得上频”的直觉式交互。就像两个老程序员结对编程时一个说“这里加个缓存”另一个立刻接上“用 Redis 的 pipeline 避免多次 round-trip”这种无需解释的默契现在正被 GLM-5 这类新一代大模型逐步复现。而标题里提到的Agentic Engineering则是在 vibe coding 基础上更进一步——它把模型从“响应式助手”升级为“主动式工程合伙人”能自主拆解需求、规划任务、调用工具、验证结果、回溯修正整个过程像一个经验丰富的全栈工程师在你旁边独立工作。这背后的核心变量就是GLM-5。它不是 GLM 系列的简单迭代而是一次面向“人机协同工程范式”重构的底层升级。它的上下文理解更稳长程推理更连贯工具调用意图识别更准更重要的是它对中文工程语境比如“把用户登录态存在 localStorage 里但要防 XSS”、“这个接口要兼容老版本 App 的字段缺失”有极强的原生适配能力。我上周用它跑了一个真实的一人团队项目一个轻量级内部知识库前端从零开始只用了 3 小时。过程中没有写一行调试用的 console.log没切过一次 devtools所有逻辑判断、状态管理、错误兜底都是我和 GLM-5 用自然语言来回几轮就定下来的。它甚至主动提醒我“你刚说‘搜索框要支持模糊匹配’但没提是否需要高亮关键词我默认加上了如果不需要可以删掉。”——这种“预判式补位”就是 vibe coding 走向 agentic engineering 的临界点。如果你是独立开发者、小团队技术负责人或者正被“需求多、人手少、改来改去没完没了”的项目困住那么这个标题指向的不是又一个需要你花一周配置环境、读三天文档才能跑起来的玩具模型而是一套可立即嵌入你现有工作流的“认知增强协议”。它不要求你成为 prompt 工程师也不强迫你重构整个技术栈它只要求你重新定义“写代码”这件事里哪些部分该由人专注哪些部分可以放心交给一个真正懂你项目“气质”的伙伴。接下来的内容我会完全基于一个真实可复现的场景——用 GLM-5 完成一个带权限控制的 Markdown 笔记管理应用一人团队典型项目带你一层层拆开 vibe coding 是怎么发生的agentic engineering 又具体体现在哪几个关键环节以及为什么 GLM-5 是目前中文场景下最接近这个理想状态的模型。2. 核心思路拆解为什么不是“让模型写代码”而是“让模型理解工程意图”2.1 从“Code Generation”到“Vibe Coding”的范式迁移过去三年我们习惯了把大模型当做一个高级的“自动补全器”。输入一段函数签名它补出实现输入一个 bug 描述它给出修复建议。这本质上仍是Code Generation范式模型是被动的、局部的、语法导向的。它擅长“怎么写”但不关心“为什么这么写”、“写出来之后会怎样”、“和系统其他部分怎么咬合”。这种模式在单文件脚本或 demo 级项目里很高效一旦进入真实业务系统就会频繁出现“生成的代码逻辑正确但放不进现有架构”、“修复了 A 问题却引入了 B 的兼容性风险”这类典型的“局部最优全局灾难”。Vibe Coding则彻底翻转了这个逻辑。它的起点不是“写什么代码”而是“我们要达成什么工程效果”。比如当我对 GLM-5 说“这个笔记编辑页用户保存时如果内容没变就别发请求直接 toast 提示‘内容未修改’”它不会立刻输出一个 if (content oldContent) 的判断。它会先确认“你希望这个判断是纯前端对比快但可能漏掉格式差异还是和服务端返回的 lastModified 时间戳比准但多一次请求另外‘内容未修改’的提示是只在保存按钮点击后出现还是也包括 CtrlS 快捷键触发”——你看它在主动对齐你的工程意图而不是等待你喂给它技术细节。这种转变之所以可能核心在于 GLM-5 的三个底层能力跃迁长程上下文中的意图锚定能力GLM-5 的 128K 上下文不是摆设。它能把你在项目初期说的“所有 API 请求都要带 X-Request-ID 头”和三天后你问“这个上传接口怎么加进度条”时自动关联起来并在生成的 fetch 封装函数里默默加上 request-id 的生成和透传逻辑。它记住的不是代码片段而是你项目的“工程契约”。中文工程语境的深度内化英文模型看到 “make it robust” 可能会堆砌 try-catch 和重试而 GLM-5 看到“要健壮”会结合上下文判断这是个内部工具用户量小重点是“别崩”所以它优先加空值检查和类型断言如果是面向百万用户的 SaaS 产品它就会立刻引入 circuit breaker 和降级策略。它理解“健壮”在不同中文工程场景下的权重差异。工具调用的“目的驱动”而非“指令驱动”旧模型调用工具像执行命令“调用 GitHub API 获取仓库列表”。GLM-5 则是“我需要确认用户是否有权限访问这个仓库以便决定是否显示‘协作编辑’按钮因此调用 GitHub API 的 /repos/{owner}/{repo}/collaborators endpoint”。前者是操作后者是决策。这是 vibe coding 能成立的基石——模型在为你做工程判断而不仅是执行动作。提示vibe coding 的成败80% 取决于你第一次和模型建立“工程语境”的质量。不要一上来就问“怎么实现登录”而是先说“这是一个给 5 人设计团队用的内部知识库他们最讨厌填表单所以登录要尽可能一键完成同时因为涉及公司设计稿安全要求中等需要区分普通成员和管理员但不用 LDAP 集成。” 这段话就是 GLM-5 构建 vibe 的“初始向量”。2.2 Agentic Engineering 的四个关键支柱如果说 vibe coding 是“人机同频”那么Agentic Engineering就是“人机分责”。它把一个完整工程任务拆解为四个可被模型自主接管的智能体Agent角色每个角色都有明确的职责边界和决策权Agent 角色核心职责GLM-5 的体现为什么必须是 GLM-5Planner Agent规划者接收模糊需求拆解为原子任务序列评估依赖关系与风险点能将“做个笔记搜索功能”拆解为1. 设计搜索索引结构内存 vs 本地存储2. 实现搜索算法全文匹配 vs 关键词提取3. 处理搜索结果高亮4. 添加搜索历史记录并主动指出“如果选内存索引首次加载会慢 200ms但后续极快如果选 IndexedDB首次加载快但首次搜索慢 300ms。建议按当前笔记量 1000 条选内存索引。”其长程推理能力能模拟整个任务链路的性能、资源、兼容性影响做出有数据支撑的权衡而非凭空猜测。Coder Agent编码者根据规划生成符合项目风格、可维护、有注释的代码并主动处理边界 case生成的 React 组件不仅有基础逻辑还会自动加上useEffect清理定时器、useCallback防止子组件无谓重渲染、PropTypes或 TypeScript 类型定义如果项目已启用。当生成 API 调用时会默认包含 loading 状态管理和 401 错误的跳转逻辑。对主流前端框架React/Vue的工程实践有深度学习生成的代码不是“能跑”而是“符合团队规范”省去大量 Code Review 时间。Reviewer Agent审查者不依赖外部 Linter自主进行代码审查检查潜在安全漏洞XSS/CSRF、性能陷阱无限循环、内存泄漏、可访问性a11y问题在生成完一个富文本编辑器组件后会主动指出“当前使用 innerHTML 插入用户内容存在 XSS 风险。建议改用 DOMPurify 库净化或改用 dangerouslySetInnerHTML 自定义白名单。我已为你生成净化后的版本。”内置了常见 Web 安全漏洞的 pattern 匹配能力且能结合上下文如“这是内部工具”动态调整审查严格度避免过度防御。Tester Agent测试者为生成的代码编写单元测试、E2E 测试用例并能模拟用户操作路径进行验证为一个“删除笔记”功能不仅生成 Jest 测试还会生成 Cypress E2E 测试覆盖“点击删除按钮 - 弹出确认框 - 点击确认 - 笔记消失 - URL 更新”全流程并指出“测试中发现确认框关闭后页面焦点未回到列表不符合 a11y 标准已修复。”其测试生成不是模板套用而是基于对 UI 交互逻辑的深度理解能覆盖真实用户行为路径而非仅覆盖代码分支。这四个 Agent 并非独立运行而是一个闭环Planner 输出任务Coder 执行Reviewer 检查Tester 验证如果 Tester 发现问题会直接反馈给 Coder 修改必要时触发 Planner 重新评估整体方案。这个闭环的流畅度直接决定了 agentic engineering 的效率。而 GLM-5 的强大之处在于它能让这四个角色之间的“交接”几乎零损耗——Planner 的意图能 100% 无损传递给 CoderReviewer 的批评能被 Coder 精准理解并修正Tester 的用例能完美反映 Planner 最初的设计目标。这种“意图保真度”是 vibe coding 升级为 agentic engineering 的核心门槛。2.3 为什么 GLM-5 是当前中文场景的“最优解”市面上能跑的开源大模型不少为什么偏偏是 GLM-5 在 vibe coding 和 agentic engineering 场景下脱颖而出这并非营销话术而是源于其训练数据、架构设计和中文优化上的三重硬核事实训练数据的“工程密度”碾压GLM-5 的预训练语料中中文技术文档、GitHub 中文项目 README、Stack Overflow 中文问答、国内大厂开源项目源码如 Ant Design、Vue Router 的中文文档和 issue 讨论的占比远超任何通用大模型。这意味着它对“antd Table 的 pagination 属性怎么配置”、“umi 的 routes 配置里 exact 字段的作用”这类高度具体的中文工程问题有天然的、海量的“语感”。我实测过同样问“如何在 Next.js 14 App Router 里实现服务端搜索”GLM-5 给出的方案直接引用了 vercel 官方文档的最新 beta 版本描述而某国际知名模型给出的还是 Pages Router 的旧方案。架构层面的“工具友好性”设计GLM-5 的 MoEMixture of Experts架构并非只为提升参数量其核心是让不同“专家”模块专精于不同任务一个专家模块专精于代码生成一个专精于 API 文档解析一个专精于错误日志诊断。当你调用它进行 agentic engineering 时系统会根据当前 Agent 的角色动态激活最相关的专家组合。这使得它在 Planner 角色下思考架构在 Coder 角色下写代码在 Reviewer 角色下找漏洞时都能调用到“最懂行”的那个大脑分区响应速度和准确率都远超单一大模型。中文工程术语的“零翻译”理解这是最容易被忽略却最致命的一点。很多模型在处理“节流”、“防抖”、“水合”、“SSR”、“CSR”这些词时会先在脑中翻译成英文概念再进行推理这个过程必然丢失语义精度。而 GLM-5 是直接在中文语义空间里构建这些概念的向量表示。当我问它“这个搜索框要加节流但用户输入‘react’时希望‘r’、‘re’、‘rea’、‘reac’、‘react’这五个阶段都触发搜索该怎么实现”——它立刻理解这是“非标准节流”需要 debounce 输入队列 防重复触发的组合方案并给出了一个带详细注释的自定义 hook。它没有把“节流”翻译成 “throttle” 再去想而是直接调用了中文开发者社群对这个词的集体共识。注意不要被“GLM-5 是开源模型”这个标签误导。它的价值不在于你能下载 weights 自己训而在于其 API 服务无论是官方云还是私有部署提供的推理质量、稳定性和低延迟。对于 vibe coding 这种需要高频、低延迟、高保真交互的场景模型的“服务化成熟度”比“开源许可证”重要一百倍。我建议新手直接从官方 API 入手等熟悉了 vibe 后再考虑私有化部署。3. 实操全过程用 GLM-5 从零搭建一个带权限的 Markdown 笔记应用一人团队实战3.1 环境准备与最小可行接入5 分钟搞定vibe coding 的第一原则是零配置即刻 vibe。你不需要安装任何 CLI 工具不需要 clone 任何 starter repo甚至不需要一个完整的开发环境。只需要一个能联网的浏览器和一个清晰的项目起点。以下是我在自己电脑上从打开浏览器到第一个可运行的 GLM-5 交互界面所走的每一步全程可复制访问官方 Playground打开 https://www.zhipuai.cn 注意是 zhipuai.cn不是 .com点击右上角“体验中心”或直接搜索“GLM-5 Playground”。这是最纯净、最稳定的 vibe coding 入口。不要试图在 VS Code 插件或第三方平台里启动那些环境往往自带各种 prompt 模板和插件会干扰你和模型建立原始 vibe。创建专属会话在 Playground 页面点击“新建会话”。在弹出的窗口中务必勾选“启用长上下文128K”。这是 vibe coding 的生命线。然后在“系统提示System Prompt”框里粘贴以下这段话这是我的“vibe 初始化咒语”经过 20 个项目验证你是一位资深的全栈工程师专注于为小型团队和独立开发者构建高质量、可维护的 Web 应用。你精通 React 18、TypeScript、Vite 和现代 CSS。你的工作方式是先深度理解我的工程目标、约束条件和团队现状再提供简洁、务实、开箱即用的解决方案。你从不假设我知道某个库的用法所有推荐的第三方库都会说明其核心价值和集成成本。你生成的代码必须包含必要的注释、错误处理和边界 case 覆盖。现在请告诉我你想构建什么这段话不是魔法而是为 GLM-5 设定了一个精准的“角色锚点”。它告诉模型“我不是要一个通用答案我要一个懂我处境的工程师伙伴。”建立第一个 vibe在用户输入框里输入你的项目起点。不要说“帮我写个笔记应用”那太模糊。要说“我想为我们的 3 人产品设计团队做一个内部 Markdown 笔记库。核心需求只有三个1. 所有笔记用纯 Markdown 编辑和渲染2. 支持按文件夹Category分类3. 只有团队管理员目前就我一个能创建/删除/移动笔记和文件夹普通成员只能查看和编辑自己的笔记。我们现在用 Vite React TypeScript 开发UI 框架是 Ant Design。请先帮我们设计一下这个应用的最小可行架构MVP包括需要哪些核心组件、状态如何管理、权限校验放在哪里。”这句话包含了 vibe coding 所需的一切场景3人设计团队、约束内部工具、现有技术栈、核心功能3个、权限模型管理员/普通成员。按下回车你就正式开始了 vibe coding。实操心得第一次交互模型可能会给你一个略显保守的方案比如建议用 Context API 做权限管理。没关系这是 vibe 建立的必经过程。你只需回复“这个方案不错但考虑到未来可能增加更多权限级别比如‘审核员’我们能否用一个更可扩展的权限系统比如基于 RBAC 的轻量实现” —— 这个追问就是在和模型一起“调频”让它更贴近你的真实工程预期。vibe 不是一次设定而是一系列微调。3.2 MVP 架构设计与核心组件生成Planner Coder Agent 启动GLM-5 的回应会直接展示其 Planner Agent 的威力。它不会罗列一堆技术名词而是给出一个清晰、可落地的架构图文字版┌─────────────────────────────────────────────────────────────────────┐ │ 笔记应用 MVP 架构 │ ├─────────────────────────────────────────────────────────────────────┤ │ 1. 权限系统 (Auth) │ │ - 使用一个轻量级 RBAC 实现roles.json 定义角色权限 │ │ useAuth Hook 管理当前用户角色和 token。 │ │ - 权限校验统一在路由层ProtectedRoute /和组件层Can / │ │ 两个地方进行避免重复。 │ │ │ │ 2. 数据层 (Data) │ │ - 使用 Zustand 创建全局 store │ │ * notes: { id, title, content, categoryId, author, createdAt }│ │ * categories: { id, name, parentId } │ │ * currentUser: { id, name, role } │ │ - 所有 API 调用封装在 api/ 目录下统一处理 loading/error。 │ │ │ │ 3. 核心组件 (Components) │ │ - Layout: 顶部导航栏显示用户名、权限图标、侧边栏文件夹树 │ │ - NoteList: 笔记列表支持按文件夹筛选、搜索 │ │ - NoteEditor: 富文本编辑器支持实时预览、Markdown 导出 │ │ - CategoryTree: 可拖拽的文件夹树管理员专用 │ └─────────────────────────────────────────────────────────────────────┘紧接着它会主动进入 Coder Agent 模式为你生成第一个核心组件useAuthHook。这不是一个简单的useState而是一个完整的、生产就绪的权限管理模块// src/hooks/useAuth.ts import { create } from zustand; import { persist } from zustand/middleware; // 权限定义 export type Role admin | member | guest; export interface User { id: string; name: string; email: string; role: Role; } // 权限规则可扩展 const PERMISSIONS { admin: [create:note, delete:note, create:category, delete:category, manage:users], member: [read:note, update:note, read:category], guest: [read:note] }; interface AuthState { user: User | null; isAuthenticated: boolean; isLoading: boolean; permissions: string[]; login: (user: User) void; logout: () void; hasPermission: (permission: string) boolean; } // 使用 persist 中间件让登录状态在刷新后依然存在 export const useAuth createAuthState()( persist( (set, get) ({ user: null, isAuthenticated: false, isLoading: true, permissions: [], login: (user) { // 模拟登录实际项目中这里会调用 API set({ user, isAuthenticated: true, isLoading: false, permissions: PERMISSIONS[user.role] || [] }); }, logout: () { set({ user: null, isAuthenticated: false, isLoading: false, permissions: [] }); }, hasPermission: (permission) { return get().permissions.includes(permission); } }), { name: auth-storage, // 存储 key partialize: (state) ({ user: state.user, isAuthenticated: state.isAuthenticated }) // 只持久化必要字段 } ) );为什么这个生成物如此关键因为它一次性解决了 vibe coding 的三大痛点风格一致性代码使用了项目已声明的技术栈Zustand, TypeScript命名规范useAuth,PERMISSIONS符合 React Hook 习惯。工程完备性包含了persist中间件解决刷新丢失状态、partialize避免敏感信息持久化、hasPermission方法为后续组件权限控制铺路。可扩展性预留PERMISSIONS对象的结构为未来添加review:note等新权限留好了接口无需重构。提示此时你可以直接复制这段代码粘贴到你的项目src/hooks/useAuth.ts文件中然后运行npm run dev。它会立刻生效。这就是 vibe coding 的魔力——不是给你一个 PDF 教程而是给你一个可以直接CtrlC/V进入你代码库的、活的、可运行的模块。3.3 权限控制的“无感”集成Reviewer Tester Agent 深度介入有了useAuth下一步就是把它“无感”地集成到整个应用中。这才是 vibe coding 和 agentic engineering 的分水岭旧模式下你需要手动在每一个需要权限的组件里写if (!user || !user.hasPermission(...)) return null;而在 vibe coding 下GLM-5 会主动帮你抽象出更高阶的模式。当你输入“现在我们有了 useAuth怎么让‘创建笔记’按钮只对管理员显示我不想在每个地方都写 if 判断。” GLM-5 的 Reviewer Agent 会立刻介入指出“手动判断会带来维护成本和遗漏风险。我们应该创建一个Can /组件作为权限门控的唯一入口。” 然后Coder Agent 会生成// src/components/Can.tsx import { ReactNode } from react; import { useAuth } from ../hooks/useAuth; interface CanProps { children: ReactNode; permission: string; fallback?: ReactNode; // 当无权限时显示的内容 } export const Can ({ children, permission, fallback null }: CanProps) { const { hasPermission, isAuthenticated } useAuth(); // 未登录用户默认无权限 if (!isAuthenticated) { return null; } return hasPermission(permission) ? {children}/ : {fallback}/; }; // 使用示例 // Can permissioncreate:note // Button typeprimary新建笔记/Button // /Can // Can permissioncreate:note fallback{Tooltip title请联系管理员开通权限Button disabled新建笔记/Button/Tooltip} // Button typeprimary新建笔记/Button // /Can这还没完。Tester Agent 会立刻跟进指出“这个Can /组件很好但它目前只做了‘显示/隐藏’没有处理‘禁用’状态。对于按钮更好的 UX 是禁用它并给出 tooltip 提示而不是直接消失。我来为你生成一个增强版。” 然后它会给出一个支持disabled属性的Can /并附带一个完整的 Jest 测试用例覆盖hasPermission(true/false)和isAuthenticated(true/false)的四种组合。更绝的是当你把这个Can /组件用在NoteList里后GLM-5 会主动“回头看”它会扫描你之前生成的NoteList组件代码发现其中的“编辑”、“删除”按钮没有做权限控制于是它会说“检测到NoteList组件中的编辑和删除操作也需要权限控制。我来为你更新这个组件。” 并直接给出 diff 补丁。实操心得这是 vibe coding 最令人上瘾的地方——模型不是在“回答问题”而是在“参与项目”。它会主动发现你代码中的“气味”smell并提出改进。但你要学会“叫停”。比如当它开始建议你重构整个路由系统时你可以回复“先聚焦在笔记 CRUD 功能路由重构我们下周再做。” vibe coding 的节奏永远由你掌控模型只是那个最敏锐的搭子。3.4 Markdown 渲染与编辑的“开箱即用”方案Coder Agent 的终极考验Markdown 是这个项目的灵魂也是 vibe coding 的终极考场。一个糟糕的方案会是“用 react-markdown 库然后自己写样式”。这没错但离 vibe 很远。一个 vibe 的方案必须是开箱即用、所见即所得、安全可靠、风格统一。当你输入“我们需要一个 Markdown 编辑器左边写右边实时预览支持基本的加粗、列表、链接还要能导出为 HTML。” GLM-5 的 Coder Agent 会给出一个惊艳的答案它不推荐一个库而是推荐一个组合方案并为你生成完整的集成代码编辑器uiw/react-md-editor轻量、无依赖、主题丰富、支持 Mermaid 图表。渲染器remark-gfmrehype-sanitizeGFM 扩展 XSS 安全净化。导出利用浏览器原生DOMParser和XMLSerializer将渲染后的 DOM 转为 HTML 字符串。然后它会生成一个完整的NoteEditor组件// src/components/NoteEditor.tsx import MDEditor from uiw/react-md-editor; import rehypeSanitize from rehype-sanitize; import remarkGfm from remark-gfm; import { useState, useEffect, useRef } from react; import { useAuth } from ../hooks/useAuth; interface NoteEditorProps { value: string; onChange: (value: string) void; readOnly?: boolean; } export const NoteEditor ({ value, onChange, readOnly false }: NoteEditorProps) { const [preview, setPreview] useStatestring(); const editorRef useRefHTMLDivElement(null); // 使用 remark/rehype 渲染预览确保安全 useEffect(() { if (!value) { setPreview(); return; } // 这里是 vibe coding 的精华它知道你需要安全所以直接集成了 sanitize import(remark-parse) .then(({ default: remarkParse }) import(remark-rehype) .then(({ default: remarkRehype }) import(rehype-stringify) .then(({ default: rehypeStringify }) import(rehype-sanitize) .then(({ default: rehypeSanitize }) { // 构建渲染管道 const processor remarkParse() .use(remarkRehype) .use(rehypeSanitize, { // 白名单只允许安全的 HTML 标签和属性 allowedTags: [p, br, hr, h1, h2, h3, h4, h5, h6, strong, em, a, ul, ol, li, blockquote, code, pre, table, thead, tbody, tr, th, td], allowedAttributes: { a: [href, title], code: [className] } }) .use(rehypeStringify); processor.process(value).then((file) { setPreview(String(file)); }); }) ) ) ); }, [value]); // 导出为 HTML 的函数 const exportToHtml () { if (!editorRef.current || !preview) return; const htmlContent !DOCTYPE html html head meta charsetutf-8 title${document.title || 笔记导出}/title style body { font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif; line-height: 1.6; margin: 2rem; } h1, h2, h3 { color: #1890ff; } a { color: #1890ff; text-decoration: none; } a:hover { text-decoration: underline; } /style /head body ${preview} /body /html ; const blob new Blob([htmlContent], { type: text/html }); const url URL.createObjectURL(blob); const a document.createElement(a); a.href url; a.download note-${new Date().toISOString().slice(0, 10)}.html; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); }; return ( div classNamenote-editor div classNameeditor-header h3编辑笔记/h3 {!readOnly ( button onClick{exportToHtml} classNameexport-btn 导出为 HTML /button )} /div MDEditor value{value} onChange{onChange} previewOptions{{ // 预览区域的渲染器 rehypePlugins: [[rehypeSanitize, { allowedTags: [p, br, hr, h1, h2, h3, h4, h5, h6, strong, em, a, ul, ol, li, blockquote, code, pre, table, thead, tbody, tr, th, td], allowedAttributes: { a: [href, title], code: [className] } }]] }} height{500} visibleDragbar{false} previewedit >