[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80536":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":12,"contributorsCount":12,"subscribersCount":12,"size":12,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":12,"forks30d":12,"starsTrendScore":16,"compositeScore":17,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":9,"pushedAt":9,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":12,"starSnapshotCount":12,"syncStatus":15,"lastSyncTime":25,"discoverSource":26},80536,"scribe","isene\u002Fscribe","isene","Modal text editor for writers — vim-like core, single binary. Part of the Fe2O3 Rust terminal suite.",null,"Rust",63,0,60,1,2,3,40.3,false,"master",true,[],"2026-06-12 04:01:29","# Scribe — Modal Text Editor for Writers\n\n\u003Cimg src=\"img\u002Fscribe.svg\" align=\"left\" width=\"150\" height=\"150\">\n\n![Rust](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguage-Rust-f74c00) ![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Unlicense-green) ![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Linux%20%7C%20macOS-blue) ![Stay Amazing](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FStay-Amazing-important)\n\nVim-flavoured modal editor with the parts a writer actually needs and a few features vim never had. Single static binary, sub-10 ms startup, soft-wrap by default, **Claude Code in the editor**, syntax highlighting, hunspell spellcheck, Goyo-style reading mode, persistent registers shared across sessions.\n\nPart of the [Fe₂O₃ Rust terminal suite](https:\u002F\u002Fgithub.com\u002Fisene\u002Ffe2o3). Built on [crust](https:\u002F\u002Fgithub.com\u002Fisene\u002Fcrust) and [highlight](https:\u002F\u002Fgithub.com\u002Fisene\u002Fhighlight).\n\n\u003Cbr clear=\"left\"\u002F>\n\n## Why scribe (and not vim)\n\nVim has a thousand features. A writer needs about thirty of them. Scribe is \"vim minus 90 % minus the programming subsystem, plus a handful of writer-first niceties\":\n\n- **Modal core** — `hjkl`, motions, operators, text-objects, registers, marks, macros, dot-repeat, undo tree.\n- **Soft-wrap by default** — long prose lines wrap at the pane edge with a continuation indicator. Live resize via `SIGWINCH`.\n- **Claude integration in the prompt** — `:claude {prompt}` runs `claude -p` over your selection \u002F paragraph \u002F buffer and splices the response back. One `u` reverses an entire turn. `:chat` for full interactive sessions.\n- **Reading mode** — `:read` (or `zr`) for Goyo-style centered text, optional Limelight-style paragraph dim. Prose without chrome.\n- **Email-mode rendering** — `.eml` files and kastrup compose tempfiles get header \u002F quote-level \u002F signature colors that match kastrup's right pane 1-for-1. Inline email addresses + URLs highlighted everywhere.\n- **Syntax highlighting** for ~18 source languages plus dedicated HyperList \u002F Markdown \u002F LaTeX renderers via the shared `highlight` crate. Multi-line block comments and string literals keep their color across line breaks.\n- **Spellcheck** via hunspell — auto-on for email mode, opt-in elsewhere via `:set spell`. Configurable language and underline color. `]s` \u002F `[s` navigation, `z=` suggestions, `zg` to add to personal dict.\n- **Persistent registers** — yanks and macros live in `~\u002F.config\u002Fscribe\u002Fregisters.json` and update on every yank, so they survive restarts AND share live across concurrent scribe sessions.\n- **No LSP \u002F debugger \u002F quickfix \u002F `:make`** — writers don't compile.\n- **Block paste that actually pastes a block** — `Ctrl-v` selection lays each row at the same column on consecutive lines. One `u` reverses the whole thing.\n\n## Status\n\n**v0.1.28** — daily-driveable for prose AND HyperList. Full feature reference below.\n\n## Screenshots\n\n**HyperList editing** — full hyperlist.vim parity with the new `\\`-grouped keymap. Syntax highlighting tracks the spec: red Properties, blue Operators, green Qualifiers, magenta References, teal Comments \u002F Quotes, yellow Hashtags, multi-line `+` markers, underlined State\u002FTransition items.\n\n![HyperList in scribe](img\u002Fscribe-hyperlist.png)\n\n**Reading mode + Limelight** — `:read` (or `zr`) for distraction-free prose, `:set pdim` to dim every paragraph except the cursor's. Header collapses, gutter hides, focus follows you.\n\n![Reading mode with paragraph dim](img\u002Fscribe-reading.png)\n\n**Long-form Markdown** — soft-wrap by default, syntax highlighting, sub-10 ms startup. The same modal core that powers HyperList editing handles prose, code, email, and source.\n\n![Markdown editing](img\u002Fscribe-prose.png)\n\n\n## Reference\n\n### Motion\n\n| Keys | Action |\n|---|---|\n| `h j k l` (also arrows) | left \u002F down \u002F up \u002F right; arrows wrap across line boundaries in Insert |\n| `0` `^` `$` (`HOME` `END`) | line start \u002F first non-blank \u002F line end |\n| `gg` `G` (with count: `12G`) | first \u002F last line \u002F line N |\n| `w b e W B` | next\u002Fprev word, end of word; capital = WORD (whitespace-delimited) |\n| `f{c}` `F{c}` `t{c}` `T{c}` | jump on\u002Fbefore next\u002Fprev `c` on the current line |\n| `Ctrl-D` `Ctrl-U` (`PgUp\u002FPgDn`) | half-page \u002F full-page scroll |\n| `n` `N` | next \u002F prev search match |\n| `*` `#` | search forward \u002F backward for word under cursor |\n| Counts | prefix any motion: `5j`, `12G`, `3w` |\n\n### Insert\n\n| Keys | Action |\n|---|---|\n| `i` `a` | insert before \u002F after cursor |\n| `I` `A` | insert at line start \u002F end |\n| `o` `O` | open new line below \u002F above |\n| `s` `S` | substitute char (`s`) or line (`S`) and enter Insert |\n| Arrows + HOME\u002FEND | work in Insert too |\n| `Ctrl-Y` | insert character from the same column on the line above |\n| `Ctrl-E` | insert character from the same column on the line below |\n| Bracketed paste | the entire pasted blob is a single undo node — instant on big pastes |\n\n### Operators + motion\n\n`d c y > \u003C gq` over any motion or text-object. Examples: `5dw`, `d3w`, `cgg`, `yG`, `c$`, `>ap`, `gqap`. Linewise doubling: `dd cc yy >> \u003C\u003C gqq`. Linewise shortcuts: `D C Y` (delete \u002F change \u002F yank to end of line). All record `last_change` for `.` repeat.\n\n### Text objects\n\n`iw aw` `i\" a\"` `i' a'` `` i` a` `` `i( a(` `i[ a[` `i{ a{` `i\u003C a\u003C` `ip ap`. Aliases: `ib`\u002F`iB` for `()` \u002F `{}`. Use after any operator: `ci\"`, `dap`, `>i{`.\n\n### Edit primitives\n\n| Keys | Action |\n|---|---|\n| `x` `X` | delete char forward \u002F backward |\n| `r{c}` | replace char under cursor with `c` |\n| `J` | join with line below |\n| `~` | toggle case under cursor |\n| `p` `P` | paste after \u002F before |\n| `Ctrl-A` `Ctrl-X` | increment \u002F decrement number under cursor — supports ISO 8601 dates `YYYY-MM-DD` with month-end \u002F leap-year rollover (`2024-02-28` + 1 = `2024-02-29`; `2025-02-28` + 1 = `2025-03-01`). Counts work (`30 Ctrl-A`). Zero-padding preserved on integers. |\n| `Ctrl-Up` `Ctrl-Down` | swap current line with the one above \u002F below. Counts work (`5 Ctrl-Down`). One compound undo node per swap. |\n| `.` | dot-repeat — replays the last change (operator + motion + inserted text, replace, paste, increment, line move) |\n\n### Visual modes\n\n`v` charwise, `V` linewise, `Ctrl-v` block. Operate with any operator. **Live selection stats** in the status line: `sel: 3l 47w 230c` updates as you extend.\n\n### Registers\n\n| Slot | Use |\n|---|---|\n| `\"a` … `\"z`, `\"0`-`\"9` | named slots; `\"ay$` yanks into `a` |\n| `\"\"` | unnamed (last yank\u002Fdelete; default for `p`\u002F`P`) |\n| `\"0` | last yank only (delete doesn't touch it) |\n| `\"+` `\"*` | system clipboard via OSC 52 |\n\n**Persistent.** Named slots are written to `~\u002F.config\u002Fscribe\u002Fregisters.json` on every yank \u002F cut. They survive restarts AND share live across concurrent scribe sessions: yank in scribe A, `\"ap` in scribe B without going through the OS clipboard. The system-clipboard slots (`\"+`, `\"*`) are not persisted.\n\n**Yank\u002Fcut feedback.** Status line confirms every register write: `5 lines yanked`, `23 chars yanked into \"a`, `3 lines deleted`. Yank green, cut\u002Fchange orange.\n\n**Inspector.** `:reg` (also `:registers`) opens a popup showing every set register with kind tag (c\u002Fl\u002Fb) and a 60-char preview. `\\n` rendered literally so multiline yanks and macros stay one row. ESC closes.\n\n### Search + substitute\n\n| Pattern | Action |\n|---|---|\n| `\u002Fpat` `?pat` | regex forward \u002F backward |\n| `n` `N` | next \u002F prev |\n| `* #` | jump on word under cursor |\n| `:s\u002Fpat\u002Frep\u002F[gi]` | substitute on current line |\n| `:%s\u002Fpat\u002Frep\u002F[gi]` | substitute on whole buffer (one undo node) |\n\n### Undo\n\n`u` undo, `Ctrl-R` redo. The buffer keeps an undo **tree** in memory (not a linear stack), and the cursor follows the edit site so you can see what changed.\n\n### Macros\n\n`M{reg}` starts recording into register `reg`; `M` again stops. `@{reg}` replays. `@@` replays the last-played macro. Macros and yanks **share the same registers**, so:\n\n- `Ma`, type some keys, `M` — recorded.\n- `\"ap` pastes the captured key sequence as readable text (`\u003CEsc>`, `\u003CC-Up>`, `\u003CCR>`, …).\n- Edit the pasted text, select it, yank it back into a register: `\"ay$` (or any yank).\n- `@a` now replays the edited sequence.\n\n`m` is left free for marks. Recursion is bounded at depth 4.\n\n### Marks\n\n`m{a-z}` sets a mark at the cursor's byte offset. Jump back with:\n\n- `'a` — first non-blank of the line containing mark `a`.\n- `` `a `` — exact column.\n\nMarks are session-local (not persisted).\n\n### Spellcheck\n\n| Command \u002F key | Action |\n|---|---|\n| `:set spell` \u002F `:set nospell` | toggle |\n| `:set spelllang=NAME` (or `:set lang=NAME`) | switch dictionary (`en_US`, `nb_NO`, `nn_NO`, `de_DE`, …); drops + re-spawns hunspell |\n| `:set spellcolor=N` (rcfile only) | xterm-256 palette index for the underline \u002F text color |\n| `]s` \u002F `zn` | next misspelling |\n| `[s` \u002F `zp` | previous misspelling |\n| `z=` | suggestions (numbered list, type number to pick) |\n| `zg` | add word at cursor to personal dict (`~\u002F.config\u002Fscribe\u002Fspell.add`) |\n\nAuto-on for `.eml` and kastrup compose tempfiles. Visual: misspelled words rendered in the spell color (default 196 \u002F red) with a curly underline where supported (kitty, wezterm); on terminals that don't support extended-SGR underline color, the colored text alone makes the spelling signal clear.\n\n### Reading mode\n\nFor long-form prose. Distraction-free rendering, optionally Goyo-style.\n\n| Command \u002F key | Action |\n|---|---|\n| `:read` \u002F `zr` | toggle reading mode |\n| `:noread` | exit |\n| `:set readingwidth=80` (or `rw=80`) | centered text column width; 0 = full pane |\n| `:set paragraphdim` (or `pdim`) | Limelight-style dim of every paragraph except the cursor's |\n| `:set nopdim` | turn dim off |\n\nHeader collapses to a thin dim divider, footer hides except for transient status, line numbers force-off. With `paragraphdim`, source-mode syntax colors are dropped on dimmed lines so the dim is uniform.\n\nSuggested rcfile combo:\n\n```\nread = true\nreadingwidth = 80\nparagraphdim = true\n```\n\n### Auto-wrap\n\n`:set textwidth=72` (or `:set tw=72`) — typing a space past column 72 breaks the line at the last preceding whitespace. `:set tw=0` disables. Preserves leading indent. No-ops when no break point exists (one giant word).\n\n### Themes + syntax\n\n| Command | Action |\n|---|---|\n| `:set theme=NAME` | `monokai` \u002F `solarized` \u002F `nord` \u002F `dracula` \u002F `gruvbox` \u002F `plain` |\n| `--theme=NAME` (CLI) | one-session override |\n| `:set syntax=NAME` | force the buffer's filetype: `plain` \u002F `email` \u002F `rust` \u002F `md` \u002F `py` \u002F `sh` \u002F `js` \u002F `ts` \u002F `c` \u002F `cpp` \u002F `go` \u002F `rb` \u002F `lua` \u002F `tex` \u002F `hl` (HyperList) \u002F … |\n\nSource highlight handles **multi-line state**: block comments and string literals keep their color across line breaks. Email mode mirrors kastrup's right-pane palette 1-for-1.\n\n### Line numbers + gutter\n\n| Command | Action |\n|---|---|\n| `:set number` (`:set nu`) | absolute line numbers |\n| `:set relativenumber` (`:set rnu`) | distance from cursor (cursor line stays absolute) |\n| `:set nonumber` (`:set nonu`) | gutter off |\n\n### Configuration popup\n\n`:config` opens a modal popup for on-the-fly preferences:\n\n- `t` cycle theme\n- `n` toggle line numbers\n- `r` toggle relative numbers\n- `s` toggle spell on\u002Foff\n- `l` prompt for spell language\n- `c` prompt for spell color (0–255)\n- `W` save current settings to `~\u002F.config\u002Fscribe\u002Fscriberc` (preserves comments and unknown keys)\n- `ESC` close\n\n### Help\n\n`:help` (or `:h`) opens the bundled README in the current buffer as a Markdown source — search with `\u002F`, navigate with normal motions. Refuses if the current buffer is dirty (save or `Q` first). `:e \u003Cfile>` returns to your work.\n\n### Sessions\n\nCursor position + scroll for every file you edit are saved to `~\u002F.config\u002Fscribe\u002Fsessions.json` on quit and restored next time you open the same path. CLI `+N` overrides the saved position. The store is capped at 200 entries.\n\n### Custom keymaps\n\nDrop a `[keymap]` section into scriberc to define your own bindings. Format per line: `MODE LHS RHS`.\n\n```\n[keymap]\nnormal  zr  :read\nnormal  zz  :wq\ninsert  jk  \u003CEsc>\nnormal  qq  :q!\n```\n\n- `MODE` is `normal`, `insert`, or `visual`.\n- `LHS` is 1- or 2-key — single chars or vim-style escapes (`\u003CEsc>`, `\u003CC-Space>`, `\u003CCR>`, `\u003CC-Up>`).\n- `RHS` starting with `:` runs as an ex command. Anything else is fed back through the input layer as if you typed it.\n\nUser maps take precedence over scribe's built-in `zr`\u002F`zz`\u002F`zn`\u002F`zp` shortcuts (which stay as defaults if you don't define your own).\n\n### Quick keys (Z prefix)\n\n| Keys | Action |\n|---|---|\n| `zr` | toggle reading mode |\n| `zz` | save + quit (= `:wq`) |\n| `zn` | next misspelling |\n| `zp` | previous misspelling |\n| `z=` | spell suggestions |\n| `zg` | add word to dict |\n\n### Command history\n\nUp \u002F Down at the `:` prompt recalls past commands. Persisted in `~\u002F.config\u002Fscribe\u002Fcmdhistory` (capped at 100).\n\n### Status line\n\nAlways shows:\n\n- Mode badge (NORMAL \u002F INSERT \u002F VISUAL \u002F …)\n- Transient status messages or `:` cmdline\n- Word + char count (full buffer normally, **selection live in Visual**)\n- `spell:LANG` (green when on) \u002F `spell:off` (grey)\n- `line:col` position\n- `scribe vN.N.N`\n\n### Quit semantics\n\n| Key \u002F command | Behavior |\n|---|---|\n| `q` | quit when buffer is clean; refuses + warns if dirty |\n| `Q` | quit, **discard** unsaved changes |\n| `zz` \u002F `:wq` \u002F `:x` | save + quit |\n| `:q!` | quit without saving |\n\nEvery save first writes `\u003Cpath>.scribe-bak` so an accidental `:wq` after a destructive `:claude` is recoverable.\n\n### Error log\n\nOn a panic, scribe restores the terminal, writes a timestamped backtrace to `~\u002F.config\u002Fscribe\u002Fscribe.log`, and prints a one-line summary to stderr. `RUST_BACKTRACE=1` is set automatically (unless you've set `=0` yourself).\n\n## Claude Code integration\n\n`:claude` runs `claude -p` with your text on stdin and splices the response back. The scoping is deliberately conservative — whole-buffer replacement requires an explicit selection so a stray prompt can't silently destroy your file:\n\n```\n:claude rewrite this paragraph in plainer English\n   → with a Visual selection: replace the selection with the response\n   → without selection:        replace the CURRENT PARAGRAPH (text-object `ap`)\n\n:claude what's a tighter version of this?\n   → same scoping rules: selection > current paragraph\n\n:claude grammar\n   → shorthand: \"Fix grammar, spelling, punctuation. Preserve meaning + tone.\"\n\n:claude tighten\n   → shorthand: \"Rewrite to be more concise.\"\n\n:claude plain\n   → shorthand: \"Rewrite in plainer English.\"\n\n:claude continue\n   → input = buffer up to cursor; INSERT response at cursor (no replace)\n```\n\nTo rewrite the **whole buffer**, select it first: `ggVG:claude …`.\n\nThe whole turn is one compound undo node, so `u` reverses the change in one step. The status line shows ` claude: NNN chars  (u to undo)` after a successful turn.\n\nIf Claude has rewritten code into prose (or vice versa) and the highlighter looks wrong, swap it with `:set syntax=plain` \u002F `:set syntax=markdown` \u002F `:set syntax=rust`.\n\n### Full Claude Code session — `:chat`\n\nFor multi-turn discussion, `:chat` suspends scribe and opens a regular interactive Claude Code session in the same terminal. The current buffer (including unsaved edits) is snapshotted to `\u002Ftmp\u002Fscribe-chat-\u003Cpid>.txt`:\n\n```\n:chat\n   → scribe yields the terminal; you're in `claude` interactively.\n   → ask anything, paste excerpts, iterate. The buffer's tempfile path\n     is in claude's first message — read it via \u002Ffile or just ask claude\n     to read it.\n   → \u002Fexit (or claude's normal quit) returns you to scribe, buffer\n     untouched.\n```\n\nUse `:claude {prompt}` for surgical one-shot edits where you want the response spliced back; use `:chat` when you want a real conversation.\n\nRequires `claude` on `PATH` (both commands).\n\n## Configuration\n\n`~\u002F.config\u002Fscribe\u002Fscriberc` — simple `key = value` per line, `#` comments. Full key reference:\n\n```\n# Appearance\ntheme = dracula              # monokai | solarized | nord | dracula | gruvbox | plain\nnumber = false               # absolute line numbers in the gutter\nrelativenumber = false       # relative line numbers (forces number=true)\n\n# Spell\nspell = false                # auto-on (email is always on regardless)\nlang = en_US                 # hunspell dict tag (en_US, nb_NO, nn_NO, de_DE, …)\nspellcolor = 196             # xterm-256 palette index for the spell color\n\n# Reading\nread = false                 # enter reading mode at startup\nreadingwidth = 80            # centered column width (0 = full pane)\nparagraphdim = true          # Limelight-style dim of non-current paragraphs\n```\n\n`--theme NAME` overrides the rcfile for one session. Runtime `:set` commands stay in-session — the rcfile is the hand-edited source of truth, except for the `W` key in `:config` which writes managed keys back while preserving comments.\n\n## Files \u002F locations\n\n| Path | Contents |\n|---|---|\n| `~\u002F.config\u002Fscribe\u002Fscriberc` | persistent settings |\n| `~\u002F.config\u002Fscribe\u002Fcmdhistory` | `:` command history (capped at 100) |\n| `~\u002F.config\u002Fscribe\u002Fregisters.json` | persisted yank\u002Fmacro registers |\n| `~\u002F.config\u002Fscribe\u002Fsessions.json` | per-file cursor + scroll positions |\n| `~\u002F.config\u002Fscribe\u002Fspell.add` | personal dictionary for `zg` |\n| `~\u002F.config\u002Fscribe\u002Fscribe.log` | error log (panics + backtraces) |\n| `\u003Cfile>.scribe-bak` | one-step backup written before every save |\n| `\u002Ftmp\u002Fscribe-chat-\u003Cpid>.txt` | buffer snapshot during `:chat` |\n\n## Install\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fisene\u002Fscribe\ncd scribe\nPATH=\"\u002Fusr\u002Fbin:$PATH\" cargo build --release\nln -sf \"$PWD\u002Ftarget\u002Frelease\u002Fscribe\" ~\u002Fbin\u002Fscribe\n```\n\nOr grab the binary from the [latest release](https:\u002F\u002Fgithub.com\u002Fisene\u002Fscribe\u002Freleases\u002Flatest).\n\n## Use as `$EDITOR`\n\n```bash\nexport EDITOR=scribe\n```\n\nScribe accepts `+N` for line-jump (vim convention), so kastrup's compose flow drops the cursor straight on the body.\n\n## HyperList\n\nScribe ships with full `hyperlist.vim` parity for `.hl` and `.woim` files: indent folding, autonumbering, encryption (incl. dotfile auto-encrypt, byte-for-byte compatible with the Ruby `hyperlist` app's `ENC:` format), references, presentation mode, calendar export, HTML \u002F LaTeX \u002F Markdown export, and more.\n\nAll HyperList commands live behind the `\\` leader. Highlights:\n\n| Group | Keys |\n|---|---|\n| Folding | `\\0`..`\\9` level · `\\a` open all · `\u003CSPACE>` \u002F `\u003CC-SPACE>` toggle |\n| Items   | `\\v` checkbox · `\\V` +stamp · `\\o` in-progress · `\\n` autonumber |\n| Nav     | `\\r` reference jump (in-buffer \u002F file \u002F URL) · `\\p` presentation toggle |\n| Filter  | `\\S` \u002F `\\H` \u002F `\\N` show \u002F hide \u002F reset (also `zs` \u002F `zh` \u002F `z0`) |\n| Look    | `\\h` limelight · `\\u` state\u002Ftransition underline |\n| Export  | `\\xh` HTML · `\\xl` LaTeX · `\\xm` Markdown |\n| Crypto  | `\\ee` encrypt · `\\ed` decrypt · `\\ek` rekey |\n| Other   | `\\s` sort · `\\c` complexity · `\\g` calendar add |\n| Help    | `\\?` cheatsheet popup (ESC dismisses) |\n\nRun scribe on the bundled [`HyperListTestSuite.hl`](HyperListTestSuite.hl) to learn (and verify) every feature interactively. Full reference: [HYPERLIST.md](HYPERLIST.md) or `:h hl` inside scribe.\n\n## Roadmap\n\n- HyperList Tab fold\u002Funfold via Tab key (currently SPACE) — minor ergonomics tweak.\n- **General `:map` system** — user-defined keymaps in scriberc instead of hardcoded built-ins.\n- **`:earlier 5m`** — time-based undo navigation.\n\n## Philosophy\n\nA writer's editor. Not a programmer's editor. Not an \"everything\" editor. Built specifically because every other editor is bloated with features for a job the user doesn't have — and is missing the one feature a writer in 2026 actually wants: AI in the loop without leaving the buffer.\n\n## License\n\nPublic domain ([Unlicense](https:\u002F\u002Funlicense.org\u002F)).\n","Scribe 是一个专为作家设计的模态文本编辑器，具有类似 Vim 的核心功能，并以单个二进制文件的形式提供。其核心技术特点包括快速启动（低于10毫秒）、默认软换行、Claude代码集成、语法高亮、拼写检查、阅读模式和持久化的寄存器等。Scribe特别适合需要高效写作环境且偏好轻量级工具的用户，在Linux或macOS平台上尤为适用。它剔除了Vim中大量与编程相关的特性，专注于提升写作体验，比如通过Claude直接在编辑器内获取AI辅助、优化了长文本的阅读与编辑体验等功能，使得Scribe成为追求简洁高效写作工具的理想选择。","2026-06-11 04:01:08","CREATED_QUERY"]