Harper 是什么?

Harper 是由 Automattic(WordPress 母公司)开源的离线英语语法检查器,使用 Rust 编写,目前 GitHub 上已有 12,000+ Stars,并且持续 trending。

它的诞生源于作者对现有语法检查工具的不满:

  • Grammarly:价格昂贵,隐私问题严重(你写的所有内容都要发送到他们的服务器),而且建议常常缺乏上下文
  • LanguageTool:虽然好用,但需要数 GB 内存和 ~16GB 的 n-gram 数据集,速度较慢

Harper 的定位是"just right"——快、轻、隐私优先。

为什么开发者需要 Harper?

特性 Grammarly LanguageTool Harper
运行方式 云端 本地/云端 纯本地
隐私 ❌ 数据发往服务器 ⚠️ 可选离线 ✅ 完全离线
内存占用 ~GB 级 ~几十 MB
速度 受网络延迟影响 中等 毫秒级
开源 ⚠️ 部分 ✅ MIT
编辑器集成 浏览器插件 插件 LSP + 多插件

对开发者来说,Harper 最大的吸引力在于:

  1. 隐私安全:代码、API 文档、技术博客草稿不会离开你的机器
  2. 毫秒级响应:基于规则引擎,不依赖网络请求
  3. LSP 原生支持:通过 harper-ls 可以集成到几乎所有支持 LSP 的编辑器
  4. Rust 性能:内存占用仅为 LanguageTool 的 1/50

安装 Harper

Harper 提供了多种使用方式,从浏览器到 IDE 全覆盖。

方式一:浏览器直接使用

最简单的体验方式——访问 writewithharper.com,页面通过 WebAssembly 在浏览器本地运行,无需注册、无需联网,粘贴文本即可检查。

方式二:安装 harper-ls(语言服务器)

harper-ls 是 Harper 的核心引擎,通过 LSP 协议为各种编辑器提供语法检查能力。

通过 cargo 安装(推荐)

cargo install harper-ls

安装完成后验证:

harper-ls --version

通过二进制下载

Harper 提供预编译的二进制文件,从 GitHub Releases 下载对应平台的可执行文件即可:

# Linux 示例
wget https://github.com/Automattic/harper/releases/latest/download/harper-ls-x86_64-unknown-linux-gnu.tar.gz
tar -xzf harper-ls-x86_64-unknown-linux-gnu.tar.gz
sudo mv harper-ls /usr/local/bin/

编辑器集成实战

VS Code

  1. 在 VS Code 扩展市场搜索 Harper
  2. 安装 harper-ls 插件
  3. 打开任意 Markdown 或纯文本文件,语法检查自动生效
// settings.json 可选配置
{
  "harper-ls.dialect": "American",
  "harper-ls.markdown.ignore": ["code", "inlineCode"]
}

Obsidian

Harper 对 Obsidian 有专门的插件支持:

  1. 在 Obsidian 的 Community Plugins 中搜索 Harper
  2. 启用插件
  3. 在笔记编辑过程中,语法错误会以红色波浪线标出

对于中文开发者写英文技术文档(如 README、API 文档),这是非常实用的组合。

Neovim

通过 lspconfig 配置:

-- 使用 Mason 安装后配置
require('lspconfig').harper_ls.setup({
  settings = {
    ["harper-ls"] = {
      dialect = "American",
      userDictPath = ""  -- 可选:自定义词典路径
    }
  }
})

Helix

Harper 原生支持 Helix 编辑器,在 ~/.config/helix/languages.toml 中添加:

[[language]]
name = "markdown"
language-servers = ["harper-ls"]

Emacs / Zed

同样支持 LSP,参考 官方文档


进阶用法

自定义方言

Harper 支持多种英语方言:

{
  "dialect": "British"   // American | British | Canadian | Australian | Indian
}

忽略特定区域

在 Markdown 文档中,你可以通过注释标记忽略某些段落:

<!-- harper: ignore -->
This is code-related text that shouldn't be checked.
<!-- harper: end -->

命令行检查(harper-cli)

如果你想在 CI/CD 流水线中集成语法检查,可以用 harper-cli

# 安装
cargo install harper-cli

# 检查单个文件
harper-cli check README.md

# 检查目录下所有 Markdown 文件
harper-cli check docs/

# 输出 JSON 格式(方便集成到 CI)
harper-cli check --format json docs/ > report.json

示例输出:

README.md:42:5 - "their" should be "there"
README.md:87:12 - Missing article before "documentation"

在 GitHub Actions 中使用

name: Grammar Check
on: [push, pull_request]

jobs:
  harper:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Harper
        run: cargo install harper-cli
      - name: Check docs
        run: harper-cli check docs/ --format json > report.json

Harper vs LanguageTool 性能对比

指标 Harper LanguageTool
启动时间 < 1 秒 数秒(需加载 n-gram 数据)
内存占用 ~20-50 MB ~1-4 GB
1000 字文档检查 < 10 ms 2-5 秒
安装体积 ~10 MB ~16 GB(含数据)
离线支持 ✅ 完全离线 ⚠️ 需额外配置

Harper 用 规则引擎 + 词典 的方式实现了极简架构,不依赖庞大的统计模型。这也意味着它的检查规则覆盖面不如 Grammarly 全面,但对于技术文档、博客、邮件等场景已经足够。


适合谁用?

✅ 推荐使用

  • 英文技术博客作者:写文档时不用担心代码片段被上传到云端
  • 非英语母语开发者:快速检查英文文档语法错误
  • 注重隐私的用户:所有处理完全在本地完成
  • CI/CD 流程:通过 harper-cli 自动检查文档质量

⚠️ 暂时不够

  • 需要中文语法检查(目前仅支持英文)
  • 需要深度语义分析和风格建议(Harper 基于规则,没有 AI 语义建议)
  • 团队协作场景(暂无共享词典功能)

小结

Harper 是一个定位精准的开源语法检查工具:轻量、快速、隐私优先。它不会取代 Grammarly 在专业写作领域的地位,但对于开发者日常写文档、博客、邮件来说,已经绰绰有余。

关键信息速览:

项目
GitHub Automattic/harper
Stars 12,000+
语言 Rust
许可证 MIT
支持语言 英语(多地区方言)
编辑器支持 VS Code / Obsidian / Neovim / Helix / Emacs / Zed
官网 writewithharper.com

如果你厌倦了 Grammarly 的隐私问题,又觉得 LanguageTool 太重,Harper 值得一试。