CLI
shikiphp 附带一个小型命令行工具,位于 bin/shikiphp(在项目中安装为
vendor/bin/shikiphp)。它有三个命令:highlight
将单个文件渲染为 HTML,而 langs 和 themes 会列出捆绑内容。
highlight
高亮文件并将结果输出到 HTML,写入标准输出。
vendor/bin/shikiphp highlight <file> [--lang=<lang>] [--theme=<theme>]
<file>— 要读取的路径。必须是现有文件;不会读取标准输入。--lang— 语言 id 或别名。若省略,则按原样将文件扩展名用作 id(若没有扩展名,则回退到txt)。--theme— 主题 id。默认为github-dark。
vendor/bin/shikiphp highlight src/App.php --lang=php --theme=nord
输出与 codeToHtml 返回的单主题
<pre class="shiki …"> 代码块相同,末尾带一个换行符,因此可以直接重定向到文件:
vendor/bin/shikiphp highlight src/App.php --theme=github-light > app.html
该命令不接受其他选项。对于双主题、转换器或任何其他选项,请改用 PHP API。
选项和参数
选项必须采用 --name=value 格式。任何其他以 -- 开头的参数都会被忽略,而最后一个不以 -- 开头的参数会被视为文件。因此,--lang php file.rs 会将 file.rs 作为 Rust 高亮:--lang 会被忽略,php 会被 file.rs 替换,语言则根据 .rs 扩展名确定。
语言推断
如果没有 --lang,扩展名会原样成为语言 id。若扩展名本身是捆绑的 id 或别名(例如 php、js、ts、tsx、py、rs、go、md、yml、json、sh 等),这种方式就可行(参见 语言)。以下情况则不适用:
- 没有扩展名的文件,例如
Makefile或Dockerfile,会回退到txt; - 不是语言 id 的扩展名,例如
.txt。
txt 不是捆绑语言,因此这两种情况目前都会因 Unknown language "txt" 错误而停止(#3)。
对于这些文件,请传入 --lang:
vendor/bin/shikiphp highlight Dockerfile --lang=docker
vendor/bin/shikiphp highlight Makefile --lang=make
langs
逐行打印捆绑包接受的所有语言 id。
vendor/bin/shikiphp langs
列表共 350 行:先按捆绑顺序列出 253 个捆绑语法 id(非字母顺序),再列出它们的 97 个别名(js、cjs、mjs 等)。
语法 id 中包括 18 个供其他语法嵌入的辅助语法,例如 vue-directives 和 es-tag-css;名称和别名目录见 语言。通过 sort 可按字母顺序排列列表。
themes
按字母顺序逐行打印所有捆绑主题 id(共 65 个主题)。
vendor/bin/shikiphp themes
名称和亮色/暗色类型目录见 主题。
帮助和退出状态
不带命令运行,或使用 -h / --help / help,即可打印用法说明。
vendor/bin/shikiphp --help
| 情况 | 输出 | 退出状态 |
|---|---|---|
| 成功或帮助 | 标准输出 | 0 |
| 未知命令 | 标准错误上的 Unknown command: <name> |
1 |
highlight 未提供文件,或文件不存在 |
标准错误上的用法行 | 1 |
| 未知语言或主题 | 未捕获的 Shikiphp\Exceptions\Highlight(PHP 致命错误,附带堆栈跟踪) |
255 |