- 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
^ và $ để 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
Ý kiến trên Hacker News
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
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
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
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)
Đặ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
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
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
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
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
Chia sẻ vài thứ về những tính năng đã được merge trên HEAD —
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 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
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
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
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 thấy trường hợp của tác giả rất đồng cảm được
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
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ộ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ệnSâ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
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
Đâ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à đã đủ
Trang chính thức của mini.nvim
Kho lưu trữ GitHub của mini.nvim
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
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
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
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
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
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
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
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
Đô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.