~/blog/deep-dive-helix-editor-helix
kỹ thuật #design#architecture#oss Wakii team 8 phút đọc

Helix: editor modal không cần cấu hình

Helix: editor modal không cần cấu hình

Trong thời đại editor đua nhau nhúng trợ lý AI, Helix đi chiều ngược: một modal editor viết bằng Rust, không plugin system, không tính năng AI, và README chỉ liệt kê đúng bốn tính năng. Với 46.133 sao và license MPL-2.0 (theo GitHub API ngày 2026-09-08), đây là editor thuộc nhóm được tin dùng nhất trong lớp modal — và ba quyết định thiết kế của nó đáng gỡ ra xem hơn cả danh sách tính năng.

TL;DR

  • Helix kế thừa Kakoune một cách triệt để: selection → action — chọn đối tượng trước, hành động sau.
  • LSP, tree-sitter, debug adapter, git diff — tất cả nằm trong workspace làm các crate riêng, không phải plugin.
  • Cấu hình là một file config.toml nhỏ; tutor tương tác hx --tutor nằm ngay trong binary.
  • Release ổn định theo CalVer khoảng hai lần một năm (25.01, 25.07), master vẫn push liên tục (theo GitHub API ngày 2026-09-08).
  • Bài học cho Wakii: tutor chạy được mạnh hơn docs đọc; và feature agent không được làm chậm editing thuần.

Selection trước, action sau

Vim dạy mô hình action → object: muốn xóa trong một từ, bạn gõ verb trước rồi object sau. Kakoune đảo lại trật tự đó, và Helix kế thừa một cách công khai — README tự giới thiệu: “A Kakoune / Neovim inspired editor, written in Rust” (helix-editor/helix README, truy cập 2026-09-08).

Sách hướng dẫn của dự án gọi tên mô hình: “Helix follows the selection → action model” (book/src/usage.md @ commit 079a789). Bạn thấy đối tượng trước — selection được nêu bật trên màn hình — rồi mới gõ hành động. Và định nghĩa về cursor cũng theo hướng đó: “A cursor is simply a single width selection.”

vim:    [verb] → [object]      hành động trước, đối tượng sau
helix:  [object] → [verb]      thấy rõ đối tượng trước, hành động sau

Hệ quả thiết kế lớn nằm ở multiple selections. Thay nhiều vị trí của một từ trong Helix: chọn tất cả instance trước — mỗi instance thành một selection — rồi một hành động change áp lên tất cả cùng lúc. Selection không phải trạng thái phụ của cursor; nó là cấu trúc dữ liệu trung tâm mà mọi hành động nhận vào.

LSP và tree-sitter ở lõi, không ở plugin

Helix không có plugin runtime — và cách họ né được nhu cầu plugin là đưa capability vào lõi, mỗi capability một crate. Workspace tách thành hơn mười lăm crate:

cratevai trò
helix-coretext primitives + syntax
helix-viewtrạng thái document + editor
helix-termruntime TUI
helix-lspLSP client
helix-dapdebug adapter
helix-vcsdiff/git gutter

(nguồn: root directory @ commit 079a789, probe 2026-09-08 — còn helix-event, helix-loader, helix-tui, helix-parsec, helix-stdx)

Lớp syntax đáng đọc chi tiết. File helix-core/src/syntax.rs dựng trên tree_house — lớp tree-sitter của riêng dự án:

use tree_house::{
    highlighter,
    query_iter::QueryIter,
    tree_sitter::{
        query::{InvalidPredicateError, UserPredicate},
        Capture, Grammar, InactiveQueryCursor, InputEdit, Node, Pattern, Query, RopeInput, Tree,
    },
    Error, InjectionLanguageMarker, LanguageConfig as SyntaxConfig, Layer,
};

(nguồn: helix-core/src/syntax.rs @ commit 079a789, probe 2026-09-08)

Highlighting chạy incremental trực trên rope (dữ liệu text là ropey::RopeSlice), và InjectionLanguageMarker cho thấy language injection — highlight SQL nhúng trong chuỗi Python, chẳng hạn — xử lý ở cùng một lớp. Không marketplace, không ABI plugin, không thêm bề mặt tấn công: mọi tính năng được review như code của lõi.

Một config.toml chống configuration sprawl

Trang cấu hình trong sách hướng dẫn mở đầu bằng đúng một file: config.toml trong thư mục config của hệ điều hành. Ví dụ trong docs gọn đến mức trích nguyên văn được:

theme = "onedark"

[editor]
line-number = "relative"
mouse = false

[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"

(nguồn: book/src/configuration.md @ commit 079a789, truy cập 2026-09-08)

Mặc định đã được chọn sẵn và chọn có chủ đích — bạn chỉ ghi đè phần muốn khác. Lệnh :config-open mở file cấu hình ngay trong editor, không phải đi tìm đường dẫn. Onboarding thì nằm trong binary: hx --tutor mở bài học tương tác chạy trong chính editor thật, offline, không cần mở docs trên tab bên cạnh. Đó là cách một công cụ opinionated đối xử với người mới: mặc định tốt + bài học chạy được, thay vì danh sách 40 tùy chọn bắt buộc đọc.

Một editor không nhúng AI, vì sao vẫn đáng học

Bốn tính năng trong README: modal editing, multiple selections, LSP built-in, tree-sitter — không dòng nào nhắc AI hay agent. Năm 2026, một editor 46.000 sao (theo GitHub API ngày 2026-09-08) đứng ngoài cuộc đua trợ lý AI là một lập trường có thể đọc được: editor là công cụ sắc và dự đoán được; agent sống ở ngoài, ghép vào bất kỳ editor nào qua terminal. Trong nhóm các editor, Helix là cực đối chứng có giá trị: không phải dự án nào cũng phải nhúng agent, và với dự án nhúng agent, cái giá phải trả là không làm hỏng trải nghiệm editing thuần.

Cadence release cũng nói cùng ngôn ngữ: ổn định phát theo CalVer khoảng hai lần một năm (25.01 tháng 01-2025, 25.07 tháng 07-2025, bản 25.07.1 ngày 18-07-2025), trong khi master có push mới ngày 01-09-2026 (theo GitHub API ngày 2026-09-08). Phát triển không dừng — nhưng release là snapshot ổn định, không phải kênh giao tính năng mới mỗi tuần.

Wakii chọn hướng ngược lại — agent-first IDE — nhưng cùng chung một nguyên tắc onboarding: cài xong là chạy, không phải dựng môi trường. Nguyên tắc đó nằm ở trang getting started, và cách đội agent có sẵn hoạt động ngay sau cài đặt được kể trong bài đội agent zero-setup.

Wakii học được gì

  • ADOPT — tutor tương tác kèm sản phẩm: hx --tutor cho người mới chạy bài học trong công cụ thật, offline, không đọc docs ngoài. Wakii chưa thấy surface tương đương — getting-started là tài liệu đọc, registry không có tutor. Đề xuất cụ thể: kit kèm một story mẫu sandbox chạy được end-to-end offline, người mới học bằng cách chạy một story thật trong môi trường an toàn.
  • WATCH — lập trường “editing thuần không được chậm hơn”: Helix không nhúng AI, nên nó không phải trả giá; Wakii có nhúng, nên cái phải theo dõi là độ phản hồi keyboard-first khi thêm từng feature agent. Điều kiện chuyển thành DIRECTION: khi có số đo regression trải nghiệm editing gắn với một feature agent.
  • N/A — cadence CalVer hai release một năm: hợp cho editor cá nhân đã trưởng thành; Wakii là agent platform, nhịp release nhanh là chủ đích sản phẩm (hai release cùng một ngày 09-05 đã verify). Không áp.

Nếu tò mò về phía ngược lại — một IDE mà agent là trung tâm — docs agents-and-kit mô tả đội chín agent chia việc trong mỗi story của Wakii.

Wakii là IDE agentic với đội AI agent superpowers đi kèm.

tải wakii ← tất cả bài viết