- Neovim biến việc chỉnh sửa mã không còn là gõ nhanh, mà là một vòng lặp lặp đi lặp lại gồm di chuyển, thay đổi, xóa, tái cấu trúc và kiểm tra test
- Ngữ pháp chỉnh sửa của Vim với các thao tác như
ci", dap, ., macro và text object giúp giảm ma sát trong những chỉnh sửa lặp lại bằng cách kết hợp các thao tác theo đơn vị ý nghĩa
- Neovim không ép buộc phải có explorer, terminal hay panel Git, mà để người dùng tự chọn dùng Telescope, Fugitive, LSP... xoay quanh buffer
- Cấu hình có thể được sở hữu dưới dạng file trong Git và tiếp tục là một phần của hệ thống hoạt động cùng shell, tmux, ripgrep, git và language server
- Dù đã được hiện đại hóa với Lua, LSP tích hợp, Treesitter và Lazy.nvim, giá trị cốt lõi vẫn nằm ở chỗ những thao tác đã học được tích lũy lâu dài để workflow tự tiến hóa
Cảm giác làm việc nối tiếp từ Vim sang Neovim
- Việc dùng Vim bắt đầu từ năm 2011, và thời gian đầu chỉ là sao chép
.vimrc, thậm chí còn không hiểu vì sao j lại di chuyển con trỏ thay vì nhập ký tự
- Tuần đầu rất vất vả, tháng đầu vẫn xa lạ, nhưng khi đã quen với mô hình của Vim thì các trình soạn thảo khác bắt đầu tạo cảm giác như có một lớp đệm nằm giữa mã và người dùng
- Đã từng dùng nhiều trình soạn thảo như VS Code, JetBrains IDE, Sublime, Atom, Zed; các công cụ của JetBrains rất mạnh, còn VS Code thành công vì gần như đủ tốt cho hầu hết mọi người và rất dễ mở rộng
- Dù vậy, lý do vẫn tiếp tục dùng Neovim là vì nó vận hành theo cách làm việc phù hợp và hỗ trợ trực tiếp cho vòng lặp lặp lại của việc chỉnh sửa mã
Cách coi chỉnh sửa như một ngôn ngữ thay vì tập hợp phím tắt
- Chỉnh sửa mã không phải là chuyện gõ thật nhanh, mà gần hơn với việc lặp lại liên tục các thao tác di chuyển, chỉnh sửa nhỏ, xóa abstraction sai, tái cấu trúc hàm, di chuyển file, rồi kiểm tra test và chẩn đoán
- Phần lớn trình soạn thảo coi văn bản là tài liệu và bàn phím là thiết bị nhập liệu, còn Vim coi việc chỉnh sửa như một ngữ pháp (grammar)
ci" thay đổi phần bên trong dấu ngoặc kép, dap xóa cả một đoạn văn, còn . lặp lại thay đổi gần nhất
- Macro cho phép dạy trình soạn thảo một quy trình nhỏ rồi lặp lại trên cả file, còn text object giúp thao tác theo đơn vị ý nghĩa thay vì đếm số ký tự
- Khi ngữ pháp của Vim đã ngấm vào tay, nhu cầu kéo mã bằng chuột, bấm sidebar hay mở command palette hàng chục lần mỗi ngày sẽ giảm đi
- Những việc làm thường xuyên trở thành các chuyển động nhỏ, trực tiếp, và tiếng ồn từ trình soạn thảo cũng ít hơn
Neovim không ép buộc workflow
- Các trình soạn thảo thiên về GUI thường có một quan điểm cố định về vị trí và hình dạng của explorer, terminal, panel Git hay debugger, và theo thời gian, trình soạn thảo biến thành một buồng lái
- Neovim bắt đầu từ buffer, còn việc đặt gì xung quanh là do người dùng quyết định
- Nếu cần cây thư mục thì có thể thêm vào; còn tìm kiếm mờ thì có thể chọn công cụ phù hợp như Telescope hoặc fzf-lua
- Tích hợp Git có thể dùng Fugitive, và LSP, chẩn đoán, formatting, snippet, Treesitter, test runner, autocomplete cũng có thể hoạt động mà không biến thành một dashboard Electron nặng nề và chậm chạp
- Tốc độ không chỉ là thời gian khởi động mà còn là vấn đề của độ tin cậy
- nhấn phím là phải phản hồi ngay
- mở file lớn không được làm toàn bộ UI khựng lại
- khi SSH vào máy khác, pair trong tmux hoặc chỉnh sửa trong cửa sổ terminal nhỏ, cảm giác về trình soạn thảo dùng hằng ngày vẫn phải được giữ nguyên
- Từ project local, server remote, thay đổi cấu hình nhanh, ứng dụng Rails lớn, script shell nhỏ cho đến viết bài Markdown, tất cả đều dùng cùng kiểu di chuyển, cùng lệnh và cùng trí nhớ cơ bắp
- Chính sự nhất quán này được tích lũy suốt cả sự nghiệp
Cấu hình có thể sở hữu và công cụ vẫn là một phần của hệ thống
- Cấu hình Neovim là các file nằm trong Git, nên có thể tự đọc, tự phá, và khi nhận ra một plugin không còn cần thiết thì có thể xóa đi một nửa cấu hình
- Không phải phụ thuộc vào một cơ sở dữ liệu cấu hình bí ẩn, trạng thái tài khoản đồng bộ chỉ hiểu lơ mơ, hay những extension chạy kỳ quặc ở nền chỉ vì một checkbox bị đổi từ vài bản phát hành trước
- Nhiều trình soạn thảo hiện đại muốn trở thành nơi mọi việc diễn ra, nhưng Neovim hài lòng khi vẫn là một phần sắc bén của một hệ thống lớn hơn
- Nó không cố thay thế shell mà hoạt động cùng tmux, ripgrep, git, language server, formatter, linter và test runner
- Việc không cần chiếm hữu toàn bộ bàn làm việc cũng là một trong những lý do Neovim tồn tại bền lâu
- Từ sau năm 2011, nhiều trình soạn thảo, hệ sinh thái extension, theme, marketplace và panel AI đã xuất hiện, nhưng Vim vốn đã là một công cụ lâu đời, còn Neovim hiện đại hóa những phần cần thiết mà không vứt bỏ lý do khiến mọi người coi trọng nó
Hiện đại hóa và phần thưởng học tập có giá trị lâu dài
- Lua giúp cấu hình tốt hơn, và hệ sinh thái plugin cũng được cải thiện đáng kể
- LSP tích hợp đưa các tính năng kiểu IDE vào trình soạn thảo mà không tạo cảm giác phình to
- Treesitter hiện đại hóa syntax highlighting và khả năng hiểu mã, còn Lazy.nvim làm cho việc quản lý plugin nhanh và đơn giản hơn
- Sức hút cốt lõi của Neovim nằm ở chỗ những gì đã học vẫn tiếp tục hữu ích theo thời gian
- học một motion là nó tiếp tục giúp ích mãi
- viết được macro là những chỉnh sửa nhàm chán biến mất
- khám phá ra text object là việc refactor phiền phức trở nên dễ hơn
- tinh chỉnh một lệnh là nó trở thành một phần của bàn tay
- Trình soạn thảo không trở nên tốt hơn vì một công ty tung ra sidebar mới, mà vì người dùng ngày càng sử dụng nó thành thạo hơn
- Năng suất khó đo chỉ bằng kiểu “tiết kiệm được 5 giây ở đây”, mà nằm ở việc giảm ma sát trong hàng nghìn chỉnh sửa nhỏ
- Khi di chuyển qua lại giữa mã, test,
git diff và kết quả tìm kiếm, có thể tập trung vào vấn đề mà không có cảm giác như đang bước sang một căn phòng khác
- Neovim có khả năng lập trình rất cao nên thay vì chấp nhận mặc định, người dùng có thể tự định hình workflow
- Nếu một điều bất tiện lặp lại hai lần, thường có thể sửa bằng mapping, command, một hàm Lua nhỏ, plugin tốt hơn, hoặc đơn giản là xóa plugin
- Cấu hình tiến hóa theo đúng cách làm việc thực tế, và khi đã rõ mình muốn thay đổi gì thì còn rất ít thứ nằm giữa suy nghĩ và thao tác chỉnh sửa
- Trong 15 năm, ngôn ngữ, framework, hiệu năng máy và xu hướng ngành đã thay đổi, nhưng Vim và Neovim vẫn luôn là trình soạn thảo trung tâm nơi công việc tốt nhất được thực hiện
1 bình luận
Ý kiến trên Lobste.rs
Tôi bắt đầu dùng vim từ 12~14 năm trước vì cần một trình soạn thảo nhẹ có thể hiển thị mã ngay trước mắt
Tôi bắt đầu học cách dùng mà không cần chuột, và sau đó cũng vui khi biết Mitchell Hashimoto đã học vim theo cách tương tự
Tôi biết đến neovim qua TJ DeVries(https://www.youtube.com/@teej_dv) và kênh YouTube của anh ấy, nơi tôi xem anh ấy hack vào nhiều dự án như neovim, telescope và các dự án khác
Việc chuyển sang Lua tạo cảm giác rất tự nhiên, và vì đó vốn là một ngôn ngữ nhỏ mà tôi đã thích sẵn nên càng thấy hợp
Những plugin đầu tiên tôi dùng là treesitter và telescope, và đến giờ tôi vẫn dùng neovim cùng với một vài plugin nhỏ khác
neovim chưa bao giờ hỏng với tôi, nó cứ thế hoạt động tốt. Tôi không dùng plugin LLM, và cho rằng hệ sinh thái đó có thể nằm ngoài trình soạn thảo
Tôi hy vọng đội ngũ sẽ tiếp tục chỉ cung cấp một trình soạn thảo mã nhẹ và tập trung
Vì thế việc neovim thêm Lua trông cực kỳ hấp dẫn
Khoảng 20 năm trước, tôi từng nghĩ xem ngoài chuyện năng suất ra thì điều gì khiến cuộc sống hằng ngày trở nên vui vẻ hơn
Ở đầu danh sách là linux và vim
Dù làm việc gì hay dùng stack công nghệ nào, hai thứ này luôn đảm bảo một môi trường làm việc vừa công thái học, vừa quen thuộc và ấm cúng
Năm 2009, khi đang phỏng vấn, tôi bắt đầu học vim vượt quá mức
:wq. Vì toàn bộ nhân viên đều dùng vim nên nếu muốn cộng tác thì không còn cách nào khácMột số người thậm chí còn vô hiệu hóa cả phím mũi tên
Trước đó, kinh nghiệm với trình soạn thảo terminal của tôi chỉ là từng dùng
picothời đại học, còn bình thường thì tôi dùng các trình soạn thảo GUI đang thịnh hành lúc bấy giờMay mắn là tôi được nhận, và từ đó tiếp tục dùng vim
Gần đây tôi nhận ra kiểu tư duy theo vim cũng đã thấm sang những phần khác trong đời sống phần mềm của mình
Có lẽ nó bắt đầu từ lúc tôi dùng Hammerspoon trên macOS để tạo một bàn phím ảo cho các submap quản lý cửa sổ, và đến cuối năm ngoái khi thử Arch Linux thì quản lý cửa sổ kiểu tiling trở nên cực kỳ dễ dàng
Tôi đã chuyển sang neovim từ khá lâu trước đó và thấy nó thật sự xuất sắc
Tôi biết có rất nhiều trò đùa và tranh cãi về trình soạn thảo, nhưng trừ một vài ngoại lệ, đến giờ tôi vẫn khó hiểu vì sao những người viết code để làm nghề lại không dùng vim, emacs hoặc một trình soạn thảo tương tự
Trong bất kỳ nghề nào, chọn công cụ tốt nhất cho công việc là điều quan trọng, và coi việc chỉnh sửa như một ngôn ngữ là một lợi thế lớn trong phần mềm
Còn về đoạn “khó hiểu” ở trên, thì cách hoạt động, phím tắt và plugin của các trình soạn thảo như VS Code cũng rất hữu ích
Rất đáng để đọc kỹ tài liệu của VS Code, vì nó thực sự làm được rất nhiều việc
Và với một số người, trong đó có tôi, việc dùng chuột để đưa con trỏ tới một vị trí bất kỳ trong buffer và chọn một vùng bất kỳ là đơn giản và đủ nhanh
KISS là phù hợp
Vì nhiều khi các trình soạn thảo khác là công cụ tốt hơn cho công việc đó
Với Python, thứ tôi dùng thường xuyên nhất hiện nay, tôi thấy PyCharm là công cụ tốt hơn chúng
May là có plugin IDEAVim rất tốt nên tôi vẫn giữ được trí nhớ cơ bắp
Trên Mac còn có ưu điểm là phím tắt hệ thống không đè lên phím tắt vi, nên có thể chọn cái phù hợp tùy tình huống
Khi dùng C++, tôi cho rằng CLion là công cụ tốt hơn, nhưng IDEAVim cũng chạy ở đó
Với các việc lặt vặt khó xếp loại, tôi thường dùng zed, và phần mô phỏng vim của nó cũng khá tốt
Rõ ràng là có một trình soạn thảo terminal tốt sẽ rất hữu ích khi truy cập hệ thống từ xa, nhưng khi có thể dùng GUI đầy đủ thì tôi không thích trình soạn thảo terminal lắm
Tôi thích việc chỉnh sửa theo chế độ, nhưng nếu không cần vứt bỏ trí nhớ cơ bắp thì cũng hoàn toàn có lý do để dùng trình soạn thảo GUI
VS Code, ngay cả ở trạng thái mặc định, cũng đã đủ tốt cho nhiều mục đích
Nó đã có sẵn tìm file bằng ctrl-p, chia cửa sổ, tô sáng cú pháp và hỗ trợ các ngôn ngữ phổ biến
Tôi từng hy vọng neovim ít nhất cũng cung cấp sẵn thứ như ctrl-p, và trở thành kiểu Linux Mint của các trình soạn thảo theo phong cách vim, với rào cản cấu hình thấp hơn và bớt lo ngại bảo mật hơn
Tôi đồng cảm với việc khi pair programming trong một phiên tmux trên máy truy cập qua SSH, hoặc khi sửa lỗi trong một cửa sổ terminal nhỏ, ta vẫn muốn có cảm giác dùng đúng trình soạn thảo mình dùng mỗi ngày
Tôi đã từng được trả tiền để viết rất nhiều code qua screen/vim trên SSH, và hồi đó, trước khi có kiểu bị làm phiền liên tục vì Slack reo bất cứ lúc nào, thực sự rất năng suất
Trình gỡ lỗi trực quan như trong Visual Studio hay các IDE Jetbrains như CLion, Rider là một thứ mà tôi chưa từng tìm được bản thay thế tốt trong bất kỳ trình soạn thảo vim nào
Nó có một mức sức mạnh dễ tiếp cận hơn so với những thứ như cgdb
Tốc độ không chỉ là vấn đề thời gian khởi động, và neovim cũng tốt ở điểm đó, nhưng việc thoát khỏi neovim mặc định thì chậm hơn rõ rệt so với vim
Không quá lâu, nhưng trong môi trường của tôi thì mất khoảng 1 giây
Tôi thích mô hình của vim. Chỉnh sửa theo chế độ chỉ là một phần nhỏ trong đó; điều tôi đánh giá vim cao hơn helix hay các IDE thông thường là có thể học dần từng bước
Ban đầu là hiểu key binding và thiết lập tùy chọn, rồi nếu có gì không chạy trên Windows thì thêm câu điều kiện vào cấu hình, sau đó viết autocmd và hàm, rồi mở rộng từ những gì đã học trước đó để làm các plugin nhỏ
Dù vậy tôi không thật sự yêu vim hay neovim
vim có những lỗi kỳ quặc tồn tại hàng chục năm vẫn chưa được sửa, còn neovim thì sửa được nhiều lỗi nhưng lại mang vào những lỗi khác
Tội lớn nhất của neovim là làm vỡ Lua API qua mỗi lần cập nhật
Tôi mệt mỏi với việc mỗi lần chạy lên lại thấy cảnh báo deprecated, rồi phải sửa cấu hình trước khi làm việc mình định làm
Nếu một số tính năng mới không chỉ dành riêng cho Lua thì có lẽ còn đỡ hơn
Nếu không như vậy, tôi đã có thể tiếp tục chỉ dùng vimscript và hài lòng với tính tương thích kéo dài hơn 20 năm