11 điểm bởi GN⁺ 2025-10-11 | 2 bình luận | Chia sẻ qua WhatsApp
  • Một lập trình viên đã dùng Vim suốt 20 năm chia sẻ trải nghiệm sau 3 tháng chuyển sang trình soạn thảo Helix
  • Helix hấp dẫn ở chỗ hỗ trợ sẵn language server (LSP) mà không cần cấu hình phức tạp
  • Đặc biệt, so với Vim/Neovim, các tính năng như tìm kiếm mạnh mẽ và đa con trỏ được cải thiện rõ rệt, giúp việc nắm bắt ngữ cảnh trong nhiều tệp và chỉnh sửa hàng loạt thuận tiện hơn
  • Khi nhấn phím, cửa sổ tham chiếu nhanh (quick reference) giúp tận dụng phím tắt mà không bị quên
  • Dù còn một số điểm bất tiện như không hỗ trợ tự động tạo danh sách Markdown, thiếu undo vĩnh viễn, hay thỉnh thoảng crash khoảng 1 lần mỗi tuần, trải nghiệm tổng thể vẫn khá hài lòng
  • Quá trình học lại ký ức cơ bắp Vim tích lũy suốt 20 năm dễ hơn dự đoán, và việc học theo "cách của Helix" hiệu quả hơn nhiều so với cố ép dùng theo kiểu Vim

Lý do chuyển sang Helix

  • Lý do bắt đầu dùng Helix là để tận dụng dễ dàng khả năng tích hợp language server
    • Trên Vim/Neovim, việc cấu hình language server khá phức tạp, còn Helix cho phép dùng ngay các chức năng như đi tới định nghĩa hay đổi tên symbol mà không cần thiết lập thêm
    • Trước đây phải duy trì vô số plugin và tệp cấu hình, còn Helix giảm gánh nặng đó nhờ hỗ trợ sẵn

Những ưu điểm chính của Helix

  • Hệ thống tìm kiếm vượt trội
    • Khi tìm chuỗi trong toàn bộ repository, kết quả được hiển thị trong cửa sổ xem trước, cho phép cuộn qua các tệp khớp và xem cả đoạn mã xung quanh
    • Khác với plugin ripgrep trên Vim, kết quả có ngữ cảnh phong phú hơn nên có thể đánh giá nhanh hơn
  • Tính năng tham chiếu phím tắt nhanh
    • Khi nhấn phím g, danh sách lệnh có thể dùng để di chuyển sẽ hiện trong popup trợ giúp, khá trực quan
    • Ngay cả các phím tắt ít dùng cũng có thể kiểm tra dễ dàng, nên đường cong học tập không quá dốc

Khác biệt giữa Vim và Helix

  • Tính năng mark không dùng ma, 'a mà theo dõi lịch sử di chuyển con trỏ bằng Ctrl+O, Ctrl+I
  • Thay vì macro, tác giả chủ yếu dùng chỉnh sửa với đa con trỏ
    • Khi cần thay đổi hàng loạt trong tài liệu: chọn toàn bộ bằng % → chọn bằng regex với s → thực hiện chỉnh sửa đa điểm cần thiết
    • So với việc lúc nào cũng phải viết macro, đa con trỏ tiện hơn nhiều
  • Thay vì tab, có thể chuyển nhanh bằng buffer switcher với space + b

Những điểm bất tiện của Helix

  • Tính năng reflow văn bản kém hiệu quả hơn gq của Vim
    • Khả năng tương thích với danh sách còn kém
  • Không hỗ trợ tự động tạo danh sách Markdown
    • Dù nhấn "Enter" ở cuối một mục danh sách, danh sách cũng không được tiếp tục
    • Có cách khắc phục phần nào cho bullet list, nhưng không có cho numbered list
  • Undo vĩnh viễn vẫn chưa được triển khai
    • Trên Vim có thể dùng undofile để hoàn tác thay đổi cả sau khi đã thoát, nhưng Helix hiện chưa có tính năng này
  • Không hỗ trợ tự động nạp lại tệp
    • Sau khi tệp thay đổi trên đĩa, phải chạy thủ công :reload-all (:ra<tab>)
  • Thỉnh thoảng bị crash
    • Khoảng 1 lần mỗi tuần, có thể liên quan đến việc chỉnh sửa nhiều Markdown
    • Chỉ cần mở lại nên không phải vấn đề quá lớn
  • Dù vậy, tác giả vẫn tiếp tục dùng Helix

Quá trình chuyển đổi và trải nghiệm học tập

  • Ban đầu tác giả lo rằng việc học lại ký ức cơ bắp Vim sau 20 năm sẽ rất khó khăn
  • Trong kỳ nghỉ, tác giả bắt đầu dùng Helix cho một side project, và sau 1–2 tuần thì không còn thấy rối nữa
  • Lúc đầu có cố ép các key binding giống Vim nhưng không thành công, và việc học theo "cách của Helix" hóa ra dễ hơn nhiều
  • Vẫn còn một số chỗ gây nhầm lẫn
    • w của Vim và w của Helix có định nghĩa khác nhau về "từ" (Helix gồm cả khoảng trắng sau từ, còn Vim thì không)

Môi trường chỉnh sửa trên nền terminal

  • Vì nhiều năm chủ yếu dùng bản GUI của vim/neovim, nên việc dùng trình soạn thảo trong terminal cần chút thời gian thích nghi
  • Workflow cuối cùng được chọn
    • Mỗi project dùng một cửa sổ terminal riêng, và mọi tab trong cửa sổ đó đều dùng cùng một thư mục làm việc
    • Đặt tab Helix ở tab đầu tiên của cửa sổ terminal
  • Cách này thuận tiện hơn khi xử lý nhiều project song song, thậm chí có thể tốt hơn workflow cũ

Cấu hình

  • So với cấu hình Neovim dài hàng trăm dòng, tác giả giữ cấu hình rất đơn giản
    • Chủ yếu chỉ thiết lập 4 phím tắt
  • Nội dung cấu hình chính
    • Theme: solarized_light
    • Đặt thanh ghi yank mặc định thành + để đồng bộ với clipboard hệ thống
    • Đặt # làm phím tắt bật/tắt comment (vì không thích mặc định Ctrl+C)
    • Remap ^$ để di chuyển tới đầu/cuối dòng (vì không muốn học cách khác)
    • Đặt <space>l thành :reflow (vì thường xuyên viết văn bản nên hay cần reflow, và nhớ phím gq của vim)
  • Thiết lập thêm tùy chọn theo ngôn ngữ trong tệp languages.toml
    • Với Python: dùng formatter black, language server pyright, và tắt tự động format

Kết luận: Ấn tượng sau 3 tháng

  • 3 tháng chưa phải là quá dài, và vẫn có khả năng một ngày nào đó quay lại Vim
    • Trước đây tác giả từng chuyển sang nix rồi quay lại Homebrew sau 8 tháng (dù vẫn đang hài lòng khi dùng NixOS để quản trị một máy chủ)
  • Helix vẫn chưa phải sản phẩm hoàn thiện, nhưng định hướng "trình soạn thảo không cần cấu hình" rất rõ ràng
  • Nhờ sự đơn giản và các tính năng tích hợp sẵn, nó có tiềm năng thay thế Vim trong dài hạn
  • Tuy vậy, việc có tiếp tục gắn bó hay không vẫn sẽ phụ thuộc vào cải thiện độ ổn định và mở rộng tính năng trong tương lai

2 bình luận

 
GN⁺ 2025-10-11
Ý kiến trên Hacker News
  • Thật lạ khi có cách tiếp cận với mất dữ liệu kiểu editor thỉnh thoảng bị crash do segfault khoảng mỗi tuần một lần, nhưng lại không quá bận tâm, chỉ cần mở lại là xong; Helix lại không có persistent undo nên mở lại cũng không quay về trạng thái trước đó được
    Tôi đã dùng Vim/Neovim rất lâu, từng tự tùy biến cấu hình và cũng đã dùng các cấu hình dựng sẵn, nhưng dù rất thích Vim, tôi vẫn thấy sức hấp dẫn lớn ở chỗ Helix có thể dùng ngay mà không cần cấu hình riêng
    Tuy vậy, bản thân config của Helix lại cho tôi cảm giác khá nguyên thủy, nên tôi nghĩ thực ra chỉ cần dùng Vim vài năm đầu là đã có thể tái tạo được môi trường như Helix, và muốn nói rằng làm vậy rồi thì cũng không còn địa ngục cấu hình nữa
    Tôi rất thích các popup trợ giúp chỉ đường hoặc keybind cần dùng; bình thường tôi không hay dùng những tính năng như "đi tới định nghĩa" hay "đi tới tham chiếu" nên rất dễ quên phím tắt, sẽ rất tuyệt nếu các popup ngữ cảnh như vậy được áp dụng rộng rãi hơn, và nếu chúng chỉ thông minh hiện ra khi mình ngập ngừng nhập thì lại càng hữu ích
    • Sẽ cực kỳ tiện nếu mọi ứng dụng có popup trợ giúp theo ngữ cảnh khi dùng các keybind phức tạp, nhất là nếu nó chỉ hiển thị một cách thông minh khi thao tác bị ngưng lại
      Tôi đã dùng Vim/Neovim suốt 20 năm, nhưng chỉ mới 6 tháng gần đây mới cài plugin which-key và đang thấy nó rất hữu ích
      which-key.nvim GitHub
    • Có vẻ bạn đã bỏ lỡ bối cảnh của vấn đề cấu hình trong Vim
      Tôi liên tục thử dựng cấu hình language server chính của mình cho ra hồn (ví dụ để có thể "đi tới định nghĩa"), nhưng cảm thấy quá khó để tạo được một môi trường dễ chịu trong Vim hay Neovim
    • Tôi đồng ý là có thể tái tạo cấu hình Vim, nhưng việc cài Helix trực tiếp trên server rồi dùng ngay rất tiện
      Không phải mất công mang theo cấu hình Vim và các dependency liên quan, nên môi trường phát triển có cảm giác portable hơn nhiều (dù không phức tạp bằng một cấu hình Vim cầu kỳ mà chỉ ở mức cơ bản hơn)
    • Tôi đồng ý 100% về tính năng popup trợ giúp, nếu được áp dụng ở nhiều nơi thì sẽ rất hữu ích
      Đặc biệt sau khi xem phần giải thích và ảnh chụp màn hình liên quan trong bài viết, tôi càng khao khát tính năng này hơn hẳn
      Nếu popup có thể hiện ra thông minh dựa trên timeout hay điều kiện tương tự, thì khi không cần sẽ không bị làm phiền, còn lúc do dự thì lại tự động được hướng dẫn, quá tuyệt
    • Tôi đã dùng Helix gần như mỗi ngày suốt 3 năm, nhưng việc nó sập do segfault là trải nghiệm cực kỳ hiếm, đếm trên đầu ngón tay, gần như không có
  • Tôi mê Helix đến mức dùng nó cho mọi công việc phát triển
    Trước đây tôi chủ yếu dùng neovim và VS Code, nhưng Helix đang lấp đúng một lợi thế đặc biệt
    • Thiết kế đẹp (chăm chút rất nhiều vào chi tiết)
    • Hiệu năng nhanh (chưa từng nghĩ nó chậm)
    • Keybind mặc định có thiết kế công thái học, rất hợp tay
    • Cài xong là dùng được ngay, không cần cấu hình
      Tôi ngại phải cấu hình neovim hoặc tiếp tục duy trì vim, nên cần một điểm ở giữa VS Code và nvim, và Helix đúng là thứ tôi cần
      Nếu tôi là bậc thầy vimscript thì có lẽ đã cân nhắc khác, nhưng tôi không phải vậy nên thế là quá hợp
      Tôi mong Helix cứ tiếp tục như hiện tại, không nhất thiết phải modular hơn hay vận hành kiểu UNIX
      Hệ sinh thái công cụ xung quanh đã có đủ rồi, và còn có thể tích hợp dùng với Claude Code nữa (làm mới buffer để áp dụng chỉnh sửa mới)
      Đây là một trong những editor tốt nhất nên tôi đã bắt đầu tài trợ dự án hằng tháng
      Nếu nói về điều tôi muốn nó cải thiện thêm, thì thiếu nhất là khả năng render hình ảnh hay công thức ngay trong editor; tôi hy vọng phần này sẽ được hiện thực qua plugin như giao thức terminal của Kitty hoặc sixel
      Tôi đặc biệt muốn dùng nó cho công việc ghi chú/blog bằng file Markdown
      Chúc Helix ngày càng phát triển
    • Những ứng dụng như Helix có thể dùng ngay sau khi cài khiến tôi yên tâm hơn rất nhiều vì bớt lo về supply chain attack
      VSCode hay (neo)vim phải kéo plugin từ nhiều nơi nên lúc nào tôi cũng thấy bất an
    • Nếu cần một thứ ở giữa nvim và vscode, vậy sao không cứ dùng plugin vim trong vscode?
    • Tôi cũng thích helix nhưng sẽ không từ bỏ nvim
      Tôi không phải lập trình viên Lua, nhưng LLM giúp ích rất nhiều trong việc thiết lập hoặc chỉnh sửa cấu hình nvim
      Động lực lớn nhất khiến tôi đến với helix là phần cấu hình LSP/lint của nó được làm quá tốt
    • Thay vì nói “bậc thầy vimscript”, thực ra ý là neovim bây giờ phải dùng Lua mới đúng chăng
  • Tôi đã thử chuyển từ neovim sang helix trong vài tuần, nhưng ghi lại vì vẫn còn thiếu những tính năng thiết yếu
    • Tự động code action khi lưu (ví dụ thêm Go import): PR #6486
    • Fuzzy search tích hợp file picker kiểu telescope+rg: PR #11285
    • Tự động cập nhật buffer khi file trên đĩa thay đổi: Issue #1125
    • Tính năng duyệt cây thư mục: bị từ chối đưa vào như một phần của hệ thống plugin, hiện vẫn chưa được triển khai PR #5768 Ngoài ra còn có vài thứ nhỏ nhỏ có thể chấp nhận được, tôi nghĩ 1–2 năm nữa sẽ thử lại
    • Tôi đang dùng Helix bằng cách thường xuyên build từ HEAD qua homebrew, nên khá ngạc nhiên khi Julia nói nó hay crash
      Chia sẻ vài thứ về những tính năng đã được merge trên HEAD —

      Code action khi lưu: có thể giải quyết bằng hook khi lưu (áp dụng cho Go), nhưng có thể khó áp dụng cho ngôn ngữ khác
      Fuzzy search: đã có sẵn từ rất lâu rồi, và gần đây được làm lại nên cải thiện đáng kể
      Tự động cập nhật buffer: là tính năng rất cần vì tôi thường xuyên để editor chạy nền
      Cây thư mục: trên HEAD có thể duyệt phân cấp bằng Space+e/E, được thêm khá gần đây

    • Trình duyệt file được link kia đã dừng lại, nhưng một trình duyệt kiểu vim-telescope đã được merge vào Helix từ đầu năm nay
      Vì đã có sẵn file picker dựa trên fuzzy search tích hợp rồi nên trình duyệt file thông thường cũng không đem lại thêm quá nhiều tiện ích
    • Tôi cũng từng muốn chuyển từ neovim sang helix, nhưng do trí nhớ cơ bắp với các lệnh vim đã thành thói quen hàng chục năm, những lỗi nhỏ cứ tích tụ khiến tôi sớm bỏ cuộc
      Tôi cũng thử plugin keybind vim cho Helix nhưng nó chỉ khớp một phần nên càng thấy thất vọng hơn
    • Tôi thấy tiếc ở chỗ Helix không tự phát hiện và reload file khi chương trình bên ngoài (templ, sqlc, v.v.) sửa file
      Không biết những người dùng Helix lâu năm giải quyết việc này thế nào
  • Động lực khiến tôi dùng Helix chủ yếu đến từ quá trình thiết lập language server (LSP)
    Việc thiết lập language server cho dễ chịu trên Vim/Neovim đã trở thành quá nhiều công sức nên tôi chuyển sang Helix
    Tuy nhiên trong 5 năm qua, Neovim đã xuất hiện các bản phân phối kiểu “kèm đủ pin”, nên giờ việc thiết lập đã rất dễ
    Tôi đồng ý là nhiều lập trình viên không muốn tốn thời gian debug editor của mình, và đó cũng là lý do tôi nghĩ JetBrains phổ biến
    Dù vậy, đoạn nói một người dùng Neovim 20 năm mà vẫn chưa từng dựng được môi trường LSP tử tế thì hơi khó tin, khiến tôi nghi ngờ đó có thật là trải nghiệm chân thành của tác giả hay không
    • Có những trường hợp dùng Vim hơn 10 năm mà chưa từng thiết lập LSP lần nào
      Cuối cùng thì ngay cả chuyện đó cũng khiến tôi do dự, vì dùng cả một IDE hoàn chỉnh vẫn thấy tiện hơn cho việc cài đặt và cấu hình
    • Tôi cũng đã dùng vim → neovim hơn 20 năm, nhưng nếu LSP bị hỏng và phím tắt cũng ngừng hoạt động thì có một rào cản tâm lý rất lớn khiến tôi không còn muốn tìm nguyên nhân nữa
      Tôi thấy trường hợp của tác giả rất đồng cảm được
    • Thật bất ngờ, tôi không hề thấy việc thiết lập LSP trên og hay neovim là khó
      Tôi cũng chỉ giữ cấu hình ở mức tối thiểu, dùng khá barebones, nhưng vẫn không khó, và Lua cho cảm giác công thái học hơn hẳn vimscript
      Đó cũng là lý do tôi vẫn tiếp tục dùng các công cụ như ALE
      Hy vọng bạn cũng sẽ vui vẻ với Helix
    • Nghe hoàn toàn kỳ lạ, chẳng phải Neovim đã tích hợp sẵn LSP hơn hai năm rồi sao?
    • Có thể thấy rõ xu hướng các công ty cỡ vừa chuẩn hóa tooling quanh vscode
      Vẫn có thể dùng editor khác, nhưng gần như mọi thứ từ debug đến cấu hình đều xoay quanh vscode nên bầu không khí chung là khuyến khích dùng nó
      Thiết lập Neovim+treesitter+LSP giờ cũng đã rất mượt, dù trước đây từng khó nhưng hiện tại không còn là vấn đề lớn
      Nếu động lực sang Helix là vì LSP thì tôi hơi thắc mắc, có khi tác giả đang không hài lòng với chính LSP chăng
  • Mô hình noun-verb (đối tượng-hành động) của Helix lúc đầu thấy mới mẻ, nhưng dùng rồi thì tôi thấy verb-noun (hành động-đối tượng) hợp hơn nhiều
    Một trong những nhược điểm của noun-verb là không thể lặp lệnh (.)
    Trong Vim có thể lặp thao tác như dd.., dap.., còn mô hình noun-verb thì điều này khó thực hiện
    Sâu xa hơn nữa là vấn đề thiếu phím
    Quá nhiều thao tác cơ bản phải dùng phím Alt, và không có các mode normal/visual/insert như vim mà chỉ có visual/insert
    Ngay cả phân biệt motion/đối tượng cũng không rõ ràng, khiến việc key mapping khó hơn và tình trạng thiếu phím càng nặng
    • Cách verb-noun còn thay đổi cả lối suy nghĩ
      Nó thật sự có cảm giác phù hợp hơn với tư duy cần có khi viết code
  • Thay đổi tuyệt nhất gần đây của nvim là mini.nvim
    Đây là bộ sưu tập plugin do echasnovski tạo ra, đáp ứng nhiều nhu cầu khác nhau với tính nhất quán và tài liệu tốt
    Từ nvim 0.12 (nightly), chỉ cần cài mini.nvim và lspconfig bằng trình quản lý plugin tích hợp sẵn (vim.pack) là đã đủ
  • Tôi không ngừng ngạc nhiên trước cảm giác tự do khi từ bỏ hẳn các công cụ editor “cao cấp” như lsp
    Tôi đang dùng neovim mà không có plugin, không autocomplete, thậm chí không cả syntax highlighting
    Tôi cảm thấy kiểu tự kỷ luật này giúp mình viết code tốt hơn
    Có thể không hợp với tất cả mọi người, nhưng tôi vẫn khuyên ai cũng nên thử một lần
    • Ý kiến là sống không plugin hay không autocomplete thì còn được, chứ tắt cả syntax highlighting thì có vẻ như tự làm khổ mình không cần thiết
    • Tôi cũng chưa chuyển hẳn, nhưng autocomplete trên Emacs của tôi đã hỏng suốt một năm mà cũng chẳng thấy nhớ nó lắm
      Tôi cũng không dùng code action hay goto definition, thỉnh thoảng có lỗi thời gian thực nhưng compiler quá nhanh nên không mấy ý nghĩa
      Tôi rất muốn tắt luôn LSP; tôi không nghĩ LSP đã thực sự nâng kỹ năng lập trình của mình lên đáng kể so với 20 năm trước
      Về syntax highlighting, tôi thấy các theme sặc sỡ chỉ làm phân tán sự tập trung và chẳng có ý nghĩa gì
      Tôi thích theme đơn sắc hoặc chủ yếu hai màu, thậm chí cảm thấy không cần phân màu riêng cho tên biến hay tên hàm
    • Tôi nghe nói Mitchell Hashimoto làm việc rất hiệu quả theo cách này, và điều đó khiến tôi tin rằng không cần tooling hiện đại vẫn có thể đủ năng suất
      Tuy vậy, tôi vẫn băn khoăn liệu việc phải nhớ mọi thứ có làm tích lũy mệt mỏi hay không, hoặc liệu cách này có thực sự tạo ra code tốt hơn không
    • Tôi cũng code mà không dùng bất kỳ công cụ hỗ trợ nào, nhưng luôn bật syntax highlighting
      Màu sắc đem lại thêm một lớp thông tin giúp dễ phát hiện lỗi sai hoặc lỗi trong code hơn, đồng thời điều hướng trong code cũng nhanh hơn
    • Trong các dự án cá nhân tôi áp dụng cấu hình tối giản kiểu này
      Không đến mức cực đoan, tôi vẫn giữ syntax highlighting và phản hồi lỗi cú pháp qua LSP
      Không dùng autocomplete hay tự động liên kết tài liệu
  • Nếu muốn học Helix, tôi khuyên dùng bản làm mới tài liệu Helix do nic-revs tạo
    helix-editor.vercel.app
    Nó dễ đọc hơn tài liệu chính thức rất nhiều, cũng có nhiều tip/trick nên giúp giảm bớt các nhược điểm của Helix như không có terminal tích hợp, đồng thời học được cách chỉnh sửa hiệu quả và keybind
    • Tôi lúc nào cũng thấy tài liệu chính thức khó đọc, đúng là thông tin rất đáng cảm ơn
  • Các bản phân phối Neovim quá nhiều tính năng phụ thật sự gây khó chịu
    Nếu là người dùng vim lâu năm thì tôi khuyên dùng kickstart (đặc biệt là bản fork modular kickstart-modular.nvim)
    kickstart.nvim
    Đây là một điểm khởi đầu rất tối giản nên rất tuyệt
    • Điểm hay của kickstart là toàn bộ cấu hình nằm trong một file
      Tuy vậy nó khá đồ sộ, nên tôi quản lý dễ hơn bằng cách dùng fold marker để gập các phần lại
 
qdr7h 2025-10-13

Đôi khi tôi cũng thấy hứng thú với helix vì sự tiện lợi của LSP, thiết lập plugin, v.v., nhưng tay đã quá quen với vi/vim nên không dễ chuyển sang.