Hurl 编辑器语法高亮指南:从 Sublime Text 到 bat,深入解析 Hurl.sublime-syntax

发布时间:2026/9/13 16:09:48
Hurl 编辑器语法高亮指南:从 Sublime Text 到 bat,深入解析 Hurl.sublime-syntax
Hurl 编辑器语法高亮指南从 Sublime Text 到 bat深入解析 Hurl.sublime-syntax【免费下载链接】hurlHurl, run and test HTTP requests with plain text.项目地址: https://gitcode.com/GitHub_Trending/hu/hurl导读本文围绕 Hurl 仓库中的 Sublime Text 语法高亮支持展开讲解如何为.hurl文件配置语法着色覆盖 Sublime Text 与基于同一语法定义复用的 bat 终端分页工具。读完本文你将掌握 Hurl.sublime-syntax 的完整安装步骤、语法定义对 Hurl 文件各要素请求行、响应行、Section、查询、断言、过滤器、模板、JSON/XML 请求体等的着色规则并能借助仓库内的测试样例与语法文件快速验证效果、排查高亮异常。一、Hurl 语法高亮是什么为什么需要它Hurl 是一个用纯文本格式定义并运行 HTTP 请求的命令行工具.hurl文件本身兼具脚本与测试用例双重身份。一个典型的 Hurl 文件混合了多种语义# 注释 GET https://example.org/api/items?q{{search}} User-Agent: hurl/1.0 Accept: application/json HTTP 200 [Captures] item_id: jsonpath $.items[0].id csrf: header X-CSRF split , nth 0这样的文件里有 HTTP 方法、URL、请求头、状态码、Section 名、查询表达式、模板占位符、字符串等十多种不同语素。没有语法高亮时肉眼很难快速分辨哪段是注释、哪段是断言、哪个是变量占位符而 Hurl 文件的官方规范见 docs/hurl-file.md又特别鼓励把 Hurl 文件当作 HTTP 工作流的文档来写可读性对团队协作尤为重要。仓库在 contrib/sublime-text/Hurl.sublime-syntax 中提供了一份完整的 Sublime Text 语法定义它是用 YAML 编写的%YAML 1.2头遵循 Sublime Text 官方 syntax 定义格式并声明了name: Hurl file_extensions: - hurl scope: source.hurl由于 bat以及 syntect 家族工具会直接复用 Sublime Text 语法定义这份文件一份两用既服务 Sublime Text 用户也服务在终端用 bat 阅读.hurl文件的用户。二、Sublime Text 安装步骤语法定义内置了.hurl文件扩展名关联file_extensions因此只需要一个文件即可完成全部配置无需额外设置 file type 映射。在 Sublime Text 中打开Preferences Browse Packages…进入Packages目录将 Hurl.sublime-syntax 复制到User子目录# Linux cp Hurl.sublime-syntax ~/.config/sublime-text/Packages/User/ # macOS cp Hurl.sublime-syntax ~/Library/Application Support/Sublime Text/Packages/User/ # Windows copy Hurl.sublime-syntax %APPDATA%\Sublime Text\Packages\User\打开任意.hurl文件Hurl语法会自动套用。说明Packages/User是 Sublime Text 的用户级目录放入其中的语法文件优先级高于内置/插件提供的同名定义因此即使日后有其他插件也声明了.hurl关联这里的行为依然可控。三、bat 终端集成让命令行阅读同样着色bat 是支持语法高亮的cat替代品它复用 Sublime Text 语法定义。将同一份Hurl.sublime-syntax安装到 bat 的语法目录并重建缓存即可mkdir -p $(bat --config-dir)/syntaxes cp Hurl.sublime-syntax $(bat --config-dir)/syntaxes/ bat cache --build随后在终端直接阅读任意 Hurl 文件bat test.hurlbat --config-dir会输出 bat 的配置目录通常为~/.config/batbat cache --build用于重新生成语法缓存是让自定义 syntax 生效的关键一步——如果执行后仍无着色多半是漏了这一步或语法文件没有放在syntaxes子目录下。四、深入语法定义Hurl.sublime-syntax 覆盖了哪些元素Sublime Text 官方 README 中明确列出语法定义覆盖的要素对照 Hurl.sublime-syntax 的实现可以一一印证Hurl 文件要素语法定义中的 context典型高亮对象HTTP 方法request-lineGET、POST、PUT、DELETE等大写方法令牌keyword.control.method.hurlURLurl请求行中的 URLmarkup.underline.link.hurl其中可内嵌模板HTTP 版本与状态码response-lineHTTP、HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/*与数字状态码constant.numeric.status.hurlSection 名sections[Query]、[FormParams]、[MultipartFormData]、[Cookies]、[Captures]、[Asserts]、[Options]、[BasicAuth]等头部/参数/捕获键keysname:形式的键entity.name.tag.hurl模板占位符templates{{ expr }}整体meta.template.hurl内部内建函数getEnv/newDate/newUuid单独着色双引号字符串quoted-strings...及转义序列constant.character.escape.hurl反引号单行字符串oneline-strings...三反引号多行字符串multiline-stringsjson、xml、graphql等带类型标签的块内联编码值encoded-valuesbase64,...;、hex,...;、file,...;JSON 请求体json-body/json-value对象、数组、字符串、数字、true/false/nullXML 请求体xml-body标签、注释、属性字符串比较运算符operators、!、、、、查询关键字query-keywordsstatus、version、url、ip、header、certificate、cookie、body、xpath、jsonpath、regex、variable、duration、bytes、sha256、md5、redirects断言谓词predicate-keywordsnot、startsWith、endsWith、matches、contains、exists、isBoolean、isFloat、isInteger、isNumber、isIpv4、isIpv6、isIsoDate、isList、isObject、isString、isUuid等过滤器filter-keywordsbase64Decode、jsonpath、regex、split、nth、toInt、urlDecode、xpath等三十余个证书字段certificate-fieldsSubject、Issuer、Start-Date、Expire-Date、Serial-Number字面量literals布尔值、null、数字注释comments#开头的行注释comment.line.number-sign.hurl4.1 语法定义如何与官方文法对应这份 syntax 文件并非凭空编写其规则与 Hurl 的官方语法文法高度对应。以方法匹配为例语法中定义method: [A-Z]注释里直接写明对应文法method [A-Z]这与 docs/spec/grammar/hurl.grammar 中的method: [A-Z]一致并且请求行正则^\s*({{method}})(?\s)(?![A-Za-z0-9])还通过负向断言避免把GETX之类的词误判为方法。又如keys中键名允许的字符集合key_char: [A-Za-z0-9_.\-\[\]$]对应文法中的key-string-text: (alphanum | _ | - | . | [ | ] | | $) 。Section 名、谓词、过滤器、证书字段的枚举也都能在文法文件的request-section、predicate-func、filter、certificate-query等规则中找到依据。因此语法定义的高亮边界与 Hurl 语言本身的词法边界保持一致而不是一个粗略的关键词涂色。4.2 JSON 请求体的嵌套高亮JSON 是高亮实现中最细致的部分json-value/json-object/json-array/json-string四个 context 递归协作顶层以(?^\s*[{\[])前瞻触发即行首为{或[时进入 JSON 高亮对象内属性名、冒号分隔符、逗号、嵌套数组、转义字符、数字、布尔与null各有独立 scopeJSON 字符串内同样支持{{ ... }}模板方便把变量写进 JSON 请求体时仍能识别占位符对应文法中json-value: placeholder | json-object | ...。4.3 模板与内建函数模板 context 匹配{{开始、}}结束内容整体以variable.other.template.hurl着色并对getEnv、newDate、newUuid三个内建函数文法中的env-function、now-function、uuid-function单独标记同时复用过滤器关键字集合与双引号字符串规则使{{ user_id }}、{{ getEnv(HOME) }}、{{ newDate YYYY-MM-DD }}这类表达式都能获得合理着色。五、使用官方测试样例验证高亮效果仓库在 contrib/sublime-text/test.hurl 提供了一个覆盖度极高的测试文件几乎包含了语法定义支持的全部结构可作为安装后的验收样例# This is a comment GET https://example.org/api/items?q{{search}} User-Agent: hurl/1.0 Accept: application/json HTTP 200 [Captures] item_id: jsonpath $.items[0].id csrf: header X-CSRF split , nth 0 # Create a new item, with options POST https://example.org/api/items Content-Type: application/json [Options] retry: 3 insecure: true delay: 500ms { name: widget, price: 9.99, active: true, tags: [a, b], owner: {{user_id}}, meta: null } HTTP 201 [Asserts] status 201 jsonpath $.name startsWith wid jsonpath $.price 5 jsonpath $.count isNumber header Location matches /items/[0-9] jsonpath $.tags count 2 variable token exists body contains widget redirects count 0 duration 1000安装完成后用 Sublime Text 或bat打开该文件应能看到#注释与正文色调区分GET/POST与 URL 分离着色HTTP 200中的版本与状态码分开标记[Captures]、[Asserts]、[Options]等 Section 名高亮retry/insecure/delay等选项键与3/true/500ms等值着色JSON 请求体内字符串、数字、true、null、{{user_id}}各有明确语义色startsWith、matches、isNumber、count、contains、exists等谓词/过滤器/查询关键字高亮比较运算符、着色。该文件还覆盖了多行字符串graphql、xml、单行反引号字符串inline oneline body {{x}}、内联编码体hex,deadbeef;、[FormParams]、[MultipartFormData]、[BasicAuth]等结构是验证语法定义完整度的最佳基准。另外contrib/vim/test.hurl 提供了 Vim 语法对应的验证样例其中包含Header3: GET这类值恰巧与关键词同名的边界情形可用于确认高亮不会把请求头值误判为方法——Vim 版语法contrib/vim/syntax/hurl.vim通过nextgroupurl skipwhite的上下文限定来避免这类误判Sublime Text 版则依靠请求行的行首锚定与负向断言达到同样的效果。六、与其他编辑器高亮的横向参照Hurl 仓库同时维护了 Vim/Neovim 与 Emacs 的语法支持可作对照Vim/Neovim见 contrib/vim/README.md由ftdetect/hurl.vimautocmd BufRead,BufNewFile *.hurl set filetypehurl自动识别.hurl文件syntax/hurl.vim负责着色ftplugin/hurl.vim额外设置了注释格式# %s。与 Sublime Text 版相比Vim 版通过syntax keyword method、syntax region template start{{ end}}、syntax include jsonSyntax syntax/json.vim实现方法、模板与 JSON 区域高亮并在文件末尾用highlight def link将自定义 scope 映射到 Vim 内置高亮组Emacs见 contrib/emacs/README.md提供hurl-mode主要模式含关键字高亮可通过 Doom Emacs 或 straight.el 安装核心文件为 contrib/emacs/hurl-mode.el。三份实现共享同一套 Hurl 语言词汇表方法、Section、查询、谓词、过滤器但机制各不相同Sublime Text 版是声明式 YAML context 栈天然可被 bat/syntect 复用Vim 版是命令式脚本 区域/关键字匹配Emacs 版则是 Lisp 模式的 keyword highlight。若团队中不同成员使用不同编辑器语法高亮的语义边界哪些 token 算关键字、哪些算查询在三个文件间保持了一致。七、常见问题与排查建议安装后 Sublime Text 未生效确认语法文件名为Hurl.sublime-syntaxSublime 以文件名识别语法且位于Packages/User下若已打开过.hurl文件可执行View Syntax Hurl手动切换验证。bat 无着色检查 syntax 文件是否落在$(bat --config-dir)/syntaxes/并务必执行bat cache --build仍无效可先bat --list-languages | grep -i hurl确认语法已注册。注释与值冲突Hurl 中#会开启注释若请求头值本身需要#字符需按 docs/hurl-file.md 的规范写作BEEF \#STEAK。对应地syntax 定义在url与comments等 context 中对转义\#做了单独处理constant.character.escape.hurl确保转义后的#不会被误判为注释起点。文件编码Hurl 文件规范要求 UTF-8 编码见 docs/hurl-file.md非 UTF-8 内容可能导致高亮与解析异常请确保编辑器以 UTF-8 打开.hurl文件。结语Hurl.sublime-syntax 是一份与 Hurl 官方文法docs/spec/grammar/hurl.grammar严格对齐、覆盖请求/响应/断言全要素的声明式语法定义。无论你是 Sublime Text 用户、终端bat爱好者还是想理解 Hurl 语言词法结构的开发者都可以从 Hurl.sublime-syntax 与 test.hurl 入手几分钟内获得完整可用的高亮体验并借此深入 Hurl 文件的语法骨架。【免费下载链接】hurlHurl, run and test HTTP requests with plain text.项目地址: https://gitcode.com/GitHub_Trending/hu/hurl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考