1 điểm bởi GN⁺ 2025-07-17 | 1 bình luận | Chia sẻ qua WhatsApp
  • Helix 25.07 bao gồm thay thế các thành phần cốt lõi và bổ sung nhiều tính năng mới
  • Khả năng sử dụng và quy trình làm việc được cải thiện đáng kể với trình khám phá tệp, hiển thị màu tài liệu LSP, cải tiến chế độ lệnh
  • Một crate mới là Tree-house được giới thiệu để tối ưu tô sáng cú pháp và truy vấn
  • Tree-house tăng cường mạnh mẽ khả năng xử lý injection và local, cùng hiệu năng và khả năng bảo trì
  • Đặt nền tảng cho trải nghiệm đa ngôn ngữ và cải thiện tốc độ rộng hơn trong tương lai

Những cập nhật chính trong Helix 25.07

Bản phát hành Helix 25.07 gồm việc thay thế các chức năng cốt lõi đã được chờ đợi từ lâu và bổ sung nhiều tính năng mới. Trong phiên bản này có 195 người đóng góp tham gia. Helix là một trình soạn thảo văn bản modal với nhiều lựa chọn, LSP, Tree-sitter và hỗ trợ DAP ở mức thử nghiệm.

Tính năng mới nổi bật

Trình khám phá tệp

  • 25.07 bổ sung tính năng trình khám phá tệp có thể dùng bằng <space>e
  • Trình khám phá này cung cấp giao diện tương tự telescope
  • Việc duyệt cấu trúc phân cấp trong thư mục trở nên dễ dàng hơn, đồng thời cho phép kiểm soát chính xác hơn khi duyệt các dự án lớn

Hiển thị màu tài liệu LSP

  • Giờ đây Helix có thể yêu cầu thông tin màu tài liệu từ máy chủ LSP để hiển thị các dải màu RGB inline
  • Ví dụ, có thể nhận màu từ tailwindcss-language-server, vscode-css-language-server và kiểm tra trực quan các ô màu ngay trong mã

Cải tiến chức năng chế độ lệnh (:)

  • Toàn bộ mã phân tích lệnh và tự động hoàn thành được viết lại, giúp sửa lỗi và tăng tính tiện dụng
  • Các lệnh họ :write nay được bổ sung hỗ trợ cờ như --no-format
  • Thêm tính năng mở rộng biến/giá trị trong lệnh (%{variable_name}, %sh{명령어} v.v.) cùng tự động hoàn thành
  • Để xử lý các giá trị nhập phức tạp, cấu trúc parser được đổi sang dạng có thể mở rộng, giúp việc mở rộng lệnh sau này dễ dàng hơn

Tree-house: kiến trúc mới cho tích hợp Tree-sitter

Tree-sitter là gì

  • Tree-sitter là một framework để tạo và sử dụng các parser nhanh, có khả năng chống lỗi tốt
  • Các quy tắc parser được viết bằng cú pháp DSL, sau đó cây cú pháp được tạo và sử dụng trong editor/công cụ
  • Ví dụ, nó được dùng trong duyệt mã và tô sáng của GitHub, spell-check trên code server, các công cụ diff, v.v.
  • Truy vấn Tree-sitter được dùng để khớp mẫu cây con và bắt các nút cú pháp

Cách Helix từng tích hợp Tree-sitter và các vấn đề

  • Ở giai đoạn đầu, Helix dùng Rust binding chính thức (tree-sitter crate) và bộ tô sáng tree-sitter-highlight
  • tree-sitter-highlightkhông tăng dần, nên luôn phải phân tích lại toàn bộ tài liệu, gây giảm hiệu năng và lãng phí tài nguyên
  • Helix đã fork bộ tô sáng này để cải thiện, nhưng theo thời gian nó trở nên phức tạp và khó bảo trì hơn

Việc đưa vào Tree-house và lợi ích

  • Tree-house tập trung vào cấu trúc parsing/truy vấn tách biệt, mã nguồn gọn gàng, chấm dứt các lỗi cố hữu trước đây, và một kiến trúc hướng tới tương lai (như parsing song song)
  • Điểm mạnh cốt lõi là khả năng xử lý injection rất vững chắc

Injection: hỗ trợ nhiều ngôn ngữ/lớp

  • Injection là cách, ví dụ khi có khối mã Rust trong Markdown, chỉ phạm vi đó được phân tích riêng như Rust
  • Các trường hợp phức tạp (ví dụ: Markdown trong comment Rust, rồi lại có khối mã Rust bên trong) cũng được hỗ trợ chính xác bằng cách quản lý các layer theo cấu trúc cây

Injection tăng dần

  • Chỉ các layer thực sự thay đổi mới được phân tích và chạy truy vấn lại nhanh chóng, nên chỉ dùng đơn vị công việc tối thiểu
  • Điều này tối đa hóa hiệu quả trong các tài liệu Markdown có danh sách rất lớn hoặc cấu trúc lồng nhau

Tô sáng biến cục bộ (lcals)

  • Tô sáng chính xác các biến cục bộ như tham số trong hàm theo phạm vi khai báo và tham chiếu (scope)
  • Vấn đề cố hữu trước đây là khi định nghĩa nằm ngoài vùng nhìn thì tô sáng biến mất, nay đã được Tree-house giải quyết

Hỗ trợ injection toàn cục

  • Ở kiểu Syntax, việc tìm kiếm và truy xuất các layer injection có thể thực hiện trong thời gian logarit
  • Các API như TreeCursor, QueryIter nay có thể áp dụng cho toàn bộ layer injection
  • Đặt nền tảng để triển khai hành vi nhất quán giữa các ranh giới ngôn ngữ như mã trong HTML <script> hay khối mã Markdown

Kết luận

  • Helix 25.07 không chỉ tạo ra bước tiến lớn về tính tiện dụng với trình khám phá tệp, hiển thị màu inline, cải tiến chế độ lệnh/parser, mà còn nổi lên như ứng viên cho thế hệ trình soạn thảo văn bản tiếp theo nhờ kiến trúc mới dựa trên Tree-house
  • Có thể xem chi tiết cập nhật trong changelog
  • Có thể tham gia cộng đồng/đóng góp qua Matrix và kho lưu trữ GitHub

1 bình luận

 
GN⁺ 2025-07-17
Ý kiến trên Hacker News
  • Helix thực sự rất tuyệt, trình chọn tệp, tô sáng cú pháp, linting và nhiều tính năng khác đều có sẵn ngay mà không cần cài plugin hay cấu hình phức tạp, trong khi vim hay neovim mặc định cần khá nhiều thiết lập, tôi muốn dùng lắm nhưng nhược điểm lớn nhất là key binding hoạt động khác vim, tôi đã quá quen với các thao tác của vim như x xóa ký tự dưới con trỏ hay d chờ thêm thao tác, nên khi không giống hệt những hành vi quen thuộc của vim mà tôi đã dùng suốt nhiều năm thì rất dễ bối rối và bực bội, có lẽ nhiều người dùng vim cũng thấy tương tự ở điểm này, và việc đổi thói quen là cực kỳ khó, nhất là vì vim mặc định có mặt ở khắp nơi nên rất khó thoát khỏi môi trường đó, may là có một soft fork của Helix tên là evil-helix bổ sung Vim key binding nên tôi muốn giới thiệu cho những ai gặp bất tiện giống mình, ngoài ra Helix và evil-helix trên Windows(cmd) cũng chạy tốt ngay chỉ với file .exe, không cần cài rust

    • Với tôi không phải là vì không muốn học cái mới, mà vấn đề là những key binding này không dùng được ở nơi khác, gần như mọi trình soạn thảo online và workstation đều cung cấp vim key binding, và khi ssh vào Linux thì lúc nào cũng có vim, điều đó rất quan trọng, giống như bàn phím QWERTY vậy, dù có bố cục tốt hơn đi nữa thì tôi vẫn không muốn từ bỏ sự linh hoạt có thể thích nghi ngay với gần như mọi môi trường

    • Tôi hoàn toàn không có vấn đề gì với việc học công cụ mới, tôi đã dùng Helix đủ nhiều nhưng mô hình danh từ-động từ lại có vẻ kém hơn, và phản hồi thị giác khi đọc code thậm chí còn gây xao nhãng, trong vim thì những thứ như lặp lại lệnh cuối cùng (. binding chẳng hạn) rất thuận tiện nhưng trong Helix thì phải từ bỏ, việc quản lý trạng thái cũng cần để tâm hơn vim, vim chỉ cần giữ vị trí hiện tại trong file, còn Helix thì còn phải nghĩ xem trước đó mình ở đâu, tôi muốn một editor có cấu hình mặc định, chỉnh sửa theo mode, và không ép buộc đồng bộ hóa thị giác quá mức cần thiết, nếu đồng bộ quá nhiều thì sẽ làm mất đi lợi thế của nó như một ngôn ngữ chỉnh sửa, tôi muốn tập trung vào lập trình, thứ thú vị hơn bản thân việc chỉnh sửa, một editor đòi hỏi nhiều sự tập trung hơn thì ngược lại lại là editor kém hơn

    • Tôi đã dùng vim(neovim) gần 20 năm rồi chuyển sang helix và thấy hoàn toàn không khó, giờ thì tôi thích nó hơn nhiều, tôi có chỉnh lại một vài hành vi theo mode nhưng vẫn dùng theo logic của helix, các tính năng như multi-selection hay LSP có sẵn mặc định, và phần trợ giúp mạnh mẽ hiển thị gợi ý về các thao tác có thể làm trong lúc nhập nhiều bước là một ưu điểm lớn, thỉnh thoảng tôi vẫn phải dùng vim thuần, và dù ánh xạ trong đầu có thay đổi đôi chút thì tôi vẫn nhớ các lệnh cơ bản nên sửa lại rất nhanh

    • Helix hiện đang bổ sung Scheme cho cấu hình có thể lập trình, khi có tính năng lập trình được thì có vẻ sẽ mở ra khả năng tinh chỉnh rất chi tiết như repeat/transient map của emacs, theo dõi theo từng trạng thái, v.v., tôi nghĩ trong một thế giới mà nhờ cuộc cách mạng LLMs người ta có thể dễ dàng chạm tới cả ngôn ngữ thứ 8, thứ 9, thì các công cụ cho phép cấu hình tinh vi sẽ ngày càng nổi lên trên thị trường

    • Vim key binding là lý do duy nhất khiến tôi không dùng Helix, nếu hỗ trợ vim có thể làm được qua một fork bên ngoài thì hẳn phía Helix chính thức cũng có thể hỗ trợ nếu muốn, nên tôi tự hỏi có phải họ cố tình không làm vậy không

  • Tôi rất thích Helix, cực kỳ khuyến nghị cho những ai không hợp vim hoặc thích ý tưởng của vim nhưng khó làm quen, nó dễ học và dễ dùng hơn hẳn các editor họ vim hiện có, và cấu hình mặc định đi kèm cũng rất thực tế

    • Tôi rất thích Helix, nói thật nếu nó bổ sung thêm một chút tiện ích GUI như trình duyệt tệp kiểu dùng chuột thì tôi nghĩ nó sẽ có sức cạnh tranh rất mạnh với vscode
  • Thật đáng mừng khi một editor giỏi như vậy vẫn giữ được sự tối giản và không tập trung vào các tính năng AI vô bổ

  • Xin chúc mừng, tôi mong Helix thành công nhưng cảm giác là nó không hợp với tôi, tôi đang dùng Neovim và gần như làm được mọi thứ mình muốn, dù không phải là hoàn toàn hài lòng, editor tôi muốn có những điều kiện sau:

    • Codebase hiện đại, được viết lại hoàn toàn từ đầu
    • Vim key binding, vì trí nhớ cơ bắp này quá mạnh nên tôi muốn giữ phong cách Vim, không bị dao động bởi chuyện cái khác tốt hơn, tôi muốn nó phải hoạt động đúng như Vim
    • Giá trị mặc định tốt, Neovim có quá nhiều cấu hình và mặc định không phải lúc nào cũng vừa ý
    • Dựa trên Treesitter, nếu chạy được trên WASM thì càng tốt hơn nữa (như Zed, Neovim mới)
    • Hệ thống mở rộng dùng Lua, không thích JS hay Scheme, lý tưởng nhất là dùng module WASM chỉ lộ ra các hàm thiết yếu, tôi muốn ngôn ngữ cấu hình plugin không Turing-complete
    • TUI và GUI tùy chọn
    • Tích hợp sẵn LSP, DAP, snippet, tự động hoàn thành, UI cho test/debug
    • Tích hợp sẵn chế độ xem hệ thống tệp như Oil.nvim
    • Tích hợp sẵn tìm kiếm kiểu Telescope/FZF-lua
    • Tích hợp git, có thêm git UI kiểu magit/neogit thì càng tốt
    • Tích hợp sẵn thao tác AST dựa trên Treesitter và label jump kiểu Flash.nvim
    • Macro và multi-cursor
    • Tích hợp AI theo con trỏ tùy chọn (Chat UI)
    • Tôi cũng thừa nhận trí nhớ cơ bắp với Vim, nhưng tôi nghĩ nhiều người quá ám ảnh với chuyện này, tôi đã đổi OS, editor và IDE nhiều lần, và trong vài ngày đầu sau khi đổi thì cực kỳ bí bách, bực bội, thậm chí muốn đi làm nông, nhưng qua khoảng thời gian đó thì lúc nào cũng hình thành được trí nhớ cơ bắp mới, tôi thấy thật đáng tiếc nếu chỉ vì vài ngày khó chịu mà bỏ qua vô số ưu điểm khác của phần mềm

    • Tôi không rõ Helix thiếu điểm nào trong những điều kiện được nêu, theo tôi thấy thì gần như Helix đáp ứng được hầu hết

    • Nhìn vào yêu cầu đó thì cuối cùng có vẻ bạn chỉ muốn Neovim nhưng thay Lua bằng một ngôn ngữ khác thôi

  • Tôi yêu Helix, xin chúc mừng, theme mặc định đẹp, cấu hình mặc định cũng xuất sắc, cài xong là dùng ngay, không cần thiết lập gì nhiều, nó chưa thay thế hoàn toàn IDE của tôi nhưng tôi đã alias vi và đặt cả $EDITOR thành Helix, mỗi khi cần chỉnh sửa nhanh hay debug từ CLI thì tôi luôn dùng Helix

  • Tôi thực sự thích và có thiện cảm với Helix, nhưng hành vi undo có gì đó không logic, nó hay hoàn tác quá nhiều nội dung cùng lúc nên khá gượng gạo, vì chuyện này mà tôi đã từng thực sự mất việc đang làm

    • Có hai điểm khiến tôi khó chịu liên quan đến undo:

      • Khi undo mà phần nội dung đã sửa không nằm trên màn hình thì nó nhảy rất tốt đến vùng đó, nhưng cùng một lần bấm phím cũng undo luôn nên gây rối, các editor khác nếu nội dung không hiển thị thì chỉ nhảy tới chứ chưa hoàn tác ngay, còn trong Helix thì bấm một lần là phải kiểm tra xem có gì vừa thay đổi chưa
      • Undo được gộp khối quá lớn, dù gõ trong insert mode suốt 30 phút thì đến lúc chuyển mode mới bị undo một lần, save point thì phải tự đăng ký, tôi đã gán nó vào phím cách để undo chi tiết hơn nhưng lại có tác dụng phụ như làm mất vùng chọn, tôi chưa tìm ra giải pháp gọn gàng, nhìn chung tôi hài lòng với Helix nhưng thật đáng tiếc khi độ sâu của undo lại đòi hỏi phải tự tay can thiệp
    • Undo và "lặp lại lệnh cuối cùng" có hơi lạ thật, nhưng các tính năng còn lại tốt đến mức tôi vẫn dùng Helix làm editor chính, mà ở đoạn bị mất việc đó thì chẳng lẽ bạn không redo lại được sao?

  • Tôi mong Helix có "chế độ Kakoune", vì ở công ty tôi dùng Windows nên Kakoune không phải lựa chọn tối ưu còn Helix có vẻ hoàn hảo, nhưng rất khó vượt qua được key binding, triết lý key binding của Helix dài dòng hơn sự súc tích của Kakoune nên điều đó làm tôi khó chịu, ngoài ra cấu hình key binding của Helix cũng chưa đủ mạnh để bắt chước Kakoune cho ra hồn, tôi đã chuyển sang Kakoune vì thất vọng với sự thiếu nhất quán và phi logic của vim, và Helix trong mảng này lại cho cảm giác lùi một bước

  • Cụm từ editor "hậu hiện đại" thật thú vị, có lẽ là trò đùa hay thứ hai kể từ câu "shell cho thập niên 90" của Fish, xem video thì ấn tượng vì nó dựa trên TUI và vẫn còn hơi hướng Emacs TUI

  • Thực sự đang cần một editor kiểu vim có mức độ hoàn chỉnh all-in-one như Helix, các bản phân phối Neovim gắn kết các thành phần quá lỏng lẻo nên lúc nào cũng có gì đó hơi khó chịu, tôi cũng nghĩ giao diện Vim nói chung cần được thiết kế lại toàn diện, nhưng vẫn mong giữ lại cách hoạt động theo mode dựa trên hành động-đối tượng

    • Evil-Helix có vẻ phù hợp với nhu cầu này, dù trông vẫn còn khá thô ráp nhưng đáng để thử https://github.com/usagi-flow/evil-helix

    • Tôi tò mò "cách làm việc theo mode hành động-đối tượng" là gì

  • Phần giải thích chi tiết về tô sáng cú pháp và khả năng hiểu mã của Helix cùng các editor tương tự rất ấn tượng, cấu trúc và tính năng dựa trên tree-sitter có vẻ cực kỳ hợp với ngôn ngữ truy vấn, và dường như có thể mở ra một DSL truy vấn đa dụng vượt xa việc tìm biểu tượng hay tìm tham chiếu, nên tôi tò mò không biết các tính năng như vậy đã tồn tại chưa