Cú đổi $EDITOR hiếm

Và sử thi Bmap

Mình chưa bao giờ thực sự sử dụng 4chan, nhưng thấy cái style greentext khá hay. Vì vậy lần này mình sẽ thử viết blog theo phong cách này, hi vọng mọi người sẽ thích!

Emacs

> vừa chuyển từ windows 10 sang kde neon
> rất thích khả năng tùy chỉnh của nó
> khám phá ra xah blog về emacs
> mn review bảo emacs là editor có khả năng tùy chỉnh rộng nhất
> quá hợp với ước mong config mọi thứ của mình
> cài emacs

> emacs có thể dùng như một cái TUI phèn
> GUI mặc định khá chật
> sau khi đơn giản hóa giao diện
> emacs để mặc định ko tốt lắm
> nhưng config tí là nó ổn như editor có sẵn trong de r
> thử cài spacemacs
> ko thấy ưa nó lắm
> nó khá chậm và bloat
> quyết định tự độ emacs từ con số ko
> lao đầu vào nghiền ngẫm tất cả mọi thứ trong danh sách awesome emacs
> ko hiểu một phần ba những gì mình vừa đọc
> cài một đống packages vào emacs
> ko động tý gì vào một nửa trong số đấy
> dành hàng tháng config emacs
> đam mê nó

> emacs có rất nhiều tính năng
> quá nhiều là đằng khác
> rất cồng kềnh!
> ko chỉ công kềnh so với các ide
> mà nó đồ sộ như một hệ điều hành
> có tích hợp cả file manager
> và tetris :)

> dần dần bị choáng ngợp và kiệt quệ với việc config emacs
> xong vẫn cảm thấy chưa thỏa mãn với cái editor...

học về Emacs qua blog của XahLee, mình lần theo dõi Xah Keyboard Guide, rồi đương nhiên lan ra xem ErgoEmacs Keybinding của XahLeeErgoemacs-mode, nó gán các hành động thường dừng vào shortcut dễ nhấn và gán các hành động tương tự ở các phần mềm khác vào các vị trí tương tự (e.g: Ctrl + z để undo, Ctrl + s để lưu). Nhưng nó rất nặng và hay bị hỏng, một số thiết kế mình thấy còn thiếu hoặc có thể cải thiện. Vì thế nên mình quyết định tự tạo bindings cho riêng mình, không hề hay biết điều này vô tình bắt đầu một chuyến hành trình dài kỳ...

Bởi vì mình mong muốn một bộ keybinds tốt hơn cho Emacs thay vì chấp nhận keybinds cổ của nó, mình không thể chấp nhận keybinds mặc định và dành quá nhiều thời gian và năng lực vào việc học lisp và config... Đấy là lý do mình cảm thấy kiệt quệ và bất mãn với Emacs. Và cũng vì vào thời điểm đó, mình không biết đến Doom Emacs, một Emacs framework mà không bloat.

NeoVim

> xem các thứ về linux trên yt
> thấy một cái text editor trông rất hackerman
> nó là vim
> mn rất cuồng vim
> cụ thể là neovim
> cài nghịch thử
> so với các GUI editor
> con hàng này rất nhẹ và nhanh
> cảm giác như là một hackerman
> config nvim
> chỉ tầm tuần sau
> mình đã có thể config nvim trở thành editor lý tưởng hơn emacs đối với mình

Keybinds của Emacs rất lạ, nhưng Vi lại còn ảo ma hơn nữa! Rất nhiều nút được gán với hành động khá thừa thãi, một số hành động lại được gán vào các vị trí rất khó nhấn...

Vim giới thiệu mình với một khái niệm mới gọi là modal text editing, đơn giản thì nó chia việc viết và edit và select vân vân thành các chế độ riêng và nhờ thế mình chỉ cần nhấn nút để thử hiện hành động thay vì nhấn giữ tổ hợp phím. Phải mất vài ngày để quen, nhưng khi đã giác ngộ được nó, dùng vim rất nhanh và nhẹ nhàng, edit cứ như cho tay nhảy hiphop trên bàn phím ý.

Hệ sinh thái Vi bings cực kỳ lớn, hầu hết các công cụ lập trình đều hỗ trợ nó qua nhiều cách, học Vi sẽ rất là lợi vì có thể đem tốc độ đó đến mọi công cụ. minh đương nhiên cố thủ và tiếp tục sử thi keybinds của mình.

Lần này mình quyết định biến keybinds cá nhân của mình thành một dự án lớn, mình tạo Bkey nó là một hệ thống thiết kế keybinds phổ quát cho hầu hết các ứng dụng. Bằng cách gán ý nghĩa của từng phím trên bàn phím, các ứng dụng có thể liên kết bộ phím tắt vào để sao cho phù hợp với những ý nghĩa trong hệ thống này.

Kakoune

> xem vid về kakoune trên kênh của dt
> ban đầu khá nghi ngờ
> xong giác ngộ được thiết kế đột phá của nó
> đổi editor lần thứ ba
> kakoune cực kỳ tối giản
> có cài đặt mặc định rất ổn
> đồng thời dễ config hơn hẳn so với các editor trước
> kakoune được xây dựng từ triết lý của riêng nó
> vd: bôi đen để khoanh vùng trước rồi mới làm hành động sau (điều mà vim làm ngược đời)
> multiple selections là cái đột phá nhất
> nó rất dễ hiểu, nhanh, tiện lợi, trực giao, linh hoạt và uy lực
> giờ khó mà edit khi thiếu multi selections

Khi đổi sang Kakoune, mình quyết định làm một cú lột xác cho dự án Bkey, rebrand nó thành Bmap và tạo Bmap.kak để dùng cho Kakoune.

Những TUI editor khác

> sau đấy mình đá qua một số editor khác:

Helix

> helix rất giống kakoune nhưng có tích hợp sẵn lsp và tree sitter
> viết bằng rust
> _blazingly fast_

Mình còn viết một đống yêu cầu tính năng và thay đổi vào issues trên Github của Helix, đương nhiên là nó bị từ chối.

Mình có thử làm Bmap-Helix (không hoàn thiện).

Pepper

> đây là TUI editor được thiết tốt nhất mà mình biết
> nó được xây dựng dựa trên triết lý thiết kế của Kakoune
> nhưng sử dụng con trỏ mỏng
> (con trỏ ko phải là một cục vuông nằm ở trong một ký tự mà là một đường thẳng mỏng nằm giữa hai ký tự)
> như con trỏ trong tất cả các ứng dụng GUI khác
> các hành động của keybinds được thiết kế rất tiện lợi
> pepper ko có bloat
> nó ko có tính năng nào mà có thẻ được sử dụng hoặc tích hợp từ các công cụ bên ngoài cả
> nó tối giản hơn nvim và helix
> xong vẫn đủ tính năng (như hỗ trợ lsp) ngay từ ban đầu, ko như kakoune
> điểm trừ là mặc dù pepper mở nguồn
> nó ko free
> và ở thời điểm nó rất buggy

Và đương nhiên mình có thử làm Bmap-Pepper (không hoàn thiện).

Vấn đề nho nhỏ với TUI editor

Bình thường đi lại quanh file system trong shell, khi mình edit file, mình muốn mở editor lên một cửa sổ mới và để shell ở lại để mình có thể làm các việc khác ngay tại vị trí hơn là thay thế shell hiện tại với editor. Mình có thể viết một cái script/alias/function để làm được điều đó, nhưng chả phải GUI editor như VScode đã mặc định mở lên như thế rồi hay sao.

VScode

> đang tính chuyển lại về dùng GUI editor
> rồi một suy nghĩ tuyệt vọng thoáng qua
> mình đã có nghiên cứu qua vscode
> và thấy vscode có nhưng thiết kế rất đúng đắn
> và lấy vscode làm mốc tiêu chuẩn để độ các editor khác đc như thế
> có lẽ mình nên thử chuyển hẳn sang vscode
> cái editor normie đó
> chính là câu trả lời
> ...
> cài vscode
> có lẽ đây là editor với cài đặt mặc định tốt nhất
> nó ko quá nặng hay châm như mọi người hay nói

> keybinds của nó đi theo tiêu chuẩn phổ thông
> multi selections trên vscode ko uy lực như kakoune nhưng vẫn rất tốt
> quay trở lại non modal editing cảm giác hơi chậm một chút
> nhưng mình ko cảm thấy nó thật sự giảm năng suất làm việc của mình một chút nào
> có thể là vì mình vẫn còn kĩ năng dùng nút mũi tên điêu luyện

> nó có hỗ trợ lps tốt nhất
> và một đống tính năng đi kèm khác
> nhưng ko có tính năng nào là cảm giác thừa thãi hay cồng kềnh cả
> vscode có số lượng plugins lớn nhất so với các editor
> vscode rất dễ tiếp cận và config
> mình bắt đầu dành nhiều thời gian để code hơn là tùy chỉnh editor
> ko phải tự dưng vscode lại nổi tiếng nhất

> trong khi cả thế giới chia sẻ hành trình chuyển giao từ vscode sang neovim hoặc emacs
> thì mình lại:
> emacs -> neovim -> kakoune -> helix -> pepper -> vscode
> quả là một cú đổi $EDITOR hiếm

Zed

Update! Sau khi viết blog này một thời gian thì Zed ra mắt.

Zed là GUI editor viết bằng Rust. So với VScode, nó nhanh, nhẹ, tối giản, xong đồng thời có nhiều tính năng buildin mà trong VScode phải cài qua extension. Không chỉ thế nó còn có Vim bindings đi kèm! Mình không quan tâm đến Vim, điều quan trọng là Zed có modal editing hạng nhất mà mình có thể cá nhân hóa, một lần nữa mở cánh cửa cho sử thi Bmap! Nói vậy thôi chứ mình khá kiệt quệ với việc làm một hệ thống đồ sộ như Bmap rồi, có lẽ mình sẽ làm một cái gì đấy đơn giản hơn...