4 điểm bởi GN⁺ 2024-08-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • Một người dùng đã dùng iTerm 2 trong thời gian dài thử lại WezTerm để có cấu hình dạng văn bản và chia sẻ dotfiles; với API cấu hình Lua, họ có thể tùy biến chi tiết giao diện, keybinding, multiplexing và workspace
  • Cấu hình được đặt trong wezterm.luahot reload ngay khi lưu; có thể mở debug overlay bằng CTRL + SHIFT + L để xem log và Lua REPL ngay lập tức
  • Với cấu hình Lua, có thể thiết lập động hơn 1.000 color scheme tích hợp sẵn, đồng bộ chế độ tối/sáng của hệ thống, font, kiểu trang trí cửa sổ trên macOS và thanh trạng thái kiểu powerline
  • Có thể giữ nguyên hoặc tắt keybinding mặc định, tự định nghĩa di chuyển theo từ bằng Option + Arrow, mở cấu hình bằng CMD +,, cũng như thao tác pane dựa trên leader key và key table
  • Tính năng multiplexing tích hợp và workspaces giúp giữ trạng thái cửa sổ, pane, tab theo từng dự án như session của tmux, đồng thời có thể tự xây UI chọn dự án và luồng chuyển đổi bằng Lua

Vì sao tôi chuyển từ iTerm 2 sang WezTerm

  • Dù đã dùng iTerm 2 gần 10 năm, tôi muốn một terminal có thể quản lý toàn bộ cấu hình bằng văn bản để đưa vào dotfiles và chia sẻ giữa máy làm việc và máy cá nhân
  • Điểm mạnh của WezTerm là API mạnh mẽ và cấu hình bằng Lua; ở lần thử thứ hai, tôi đã có thể tạo ra một cấu hình terminal vừa đẹp hơn vừa nhiều chức năng hơn
  • Phạm vi bài viết gồm giao diện, keybinding, multiplexing, chuyển workspace, thanh trạng thái và thiết lập theme động
  • Cũng có những tính năng không được đề cập trong bài này
    • quy tắc highlight hyperlink tùy chỉnh
    • scrollback có thể tìm kiếm
    • quick copy mode
    • hỗ trợ hình ảnh
  • Cấu hình ví dụ được tối ưu theo trải nghiệm sử dụng macOS; tôi chưa thử trên hệ thống khác, nhưng bản thân WezTerm hoạt động trên nhiều môi trường
  • Ví dụ cấu hình hoàn chỉnh được cung cấp qua gist

Cài đặt và cấu trúc cơ bản của cấu hình Lua

brew install wezterm
  • Tác giả dùng cách đặt file cấu hình tại $XDG_CONFIG_HOME/wezterm/wezterm.lua
    • Trên hầu hết hệ thống, bao gồm macOS, đường dẫn này được hiểu là ~/.config/wezterm/wezterm.lua
    • Thay vì để mọi thứ trong một file ~/.wezterm.lua, dùng thư mục sẽ dễ tách cấu hình ra nhiều file để quản lý hơn
local wezterm = require 'wezterm'
local config = wezterm.config_builder()

return config
  • Vì cấu hình WezTerm được viết bằng Lua, nên dễ tạo các thiết lập động phức tạp hơn YAML hay TOML
  • Lua là một ngôn ngữ lập trình nên khó học hơn YAML/TOML, nhưng nếu đã quen với các ngôn ngữ động như Ruby, Python hay JavaScript thì sẽ dễ đọc code ví dụ hơn
  • Có thể tham khảo Getting Started guide để học Lua

Hot reload và debug overlay

  • WezTerm phát hiện thay đổi trong file cấu hình và tự động reload, nên có thể kiểm tra hiệu quả của thay đổi ngay mà không cần khởi động lại terminal
  • Nếu lưu cấu hình có lỗi, chẳng hạn tên hàm sai, popup lỗi runtime sẽ hiện ra ngay
wezterm.config_builderZ()
  • Có thể ghi log bằng wezterm.log_info()
wezterm.log_info("hello world! my name is " .. wezterm.hostname())
  • Mở debug overlay bằng CTRL + SHIFT + L để xem log và Lua REPL
    • Có thể chạy các biểu thức Lua như 1 + 1
    • Cũng có thể kiểm tra các giá trị của module wezterm như wezterm.home_dir
  • Khi kết hợp hot reload với debug overlay, vòng phản hồi giữa việc sửa cấu hình và kiểm tra kết quả trở nên rất ngắn

Cấu hình giao diện: màu sắc, theme hệ thống, font, kiểu cửa sổ

  • Color scheme và cấu hình động

    • WezTerm cung cấp hơn 1.000 color scheme tích hợp sẵn, được chọn bằng config.color_scheme
    config.color_scheme = 'Tokyo Night'
    
    • Có thể xem danh sách color scheme tại WezTerm colorschemes
    • Dùng sự kiện window-config-reloadedwezterm.color.get_builtin_schemes() còn có thể tạo cấu hình động để áp dụng color scheme ngẫu nhiên cho từng cửa sổ mới
    • Sau khi đặt config override theo cửa sổ rồi quay lại color scheme tĩnh, hot reload có thể không áp dụng ngay
    • Có thể xóa override bằng cách chạy window:set_config_overrides({}) trong terminal debug, hoặc đóng rồi mở lại cửa sổ
  • Đồng bộ chế độ tối/sáng của hệ thống

    • Có thể tách cấu hình sang module appearance.lua để đổi color scheme theo giao diện của hệ điều hành
    • Việc nhận biết dark mode dựa trên tìm chuỗi "Dark" trong wezterm.gui.get_appearance()
    • Trong môi trường không có wezterm.gui, mặc định sẽ coi như đang ở dark mode
    if appearance.is_dark() then
      config.color_scheme = 'Tokyo Night'
    else
      config.color_scheme = 'Tokyo Night Day'
    end
    
  • Font và trang trí cửa sổ

    • Mặc định WezTerm đi kèm JetBrains Mono và Nerd Font Symbols
    • Cấu hình ví dụ dùng Berkeley Mono 13pt
    config.font = wezterm.font({ family = 'Berkeley Mono' })
    config.font_size = 13
    
    • Ví dụ về kiểu cửa sổ trên macOS bao gồm nền bán trong suốt, blur, ẩn thanh tiêu đề và đặt font cho tab bar
    config.window_background_opacity = 0.9
    config.macos_window_background_blur = 30
    config.window_decorations = 'RESIZE'
    

Thanh trạng thái và API sự kiện của WezTerm

  • Dùng callback sự kiện update-status để thêm các segment dạng powerline vào thanh trạng thái bên phải
  • Ví dụ ban đầu hiển thị segment hostname bằng màu nền/màu chữ của color scheme hiện tại và wezterm.hostname()
  • wezterm.on dùng để gắn callback vào các sự kiện của terminal
    • update-status được gọi định kỳ khi đã sẵn sàng cập nhật trạng thái
    • WezTerm bảo đảm chỉ chạy một lần cập nhật tại một thời điểm, và nếu code chạy quá lâu thì handler sẽ bị dừng
  • window:effective_config().resolved_palette cho phép lấy palette hiện tại đã phản ánh cả override
  • wezterm.format được dùng để áp dụng style như màu sắc, in đậm, gạch chân lên chuỗi
  • Ở ví dụ phần sau, thanh trạng thái được mở rộng thêm các segment
    • workspace hiện tại
    • ngày và giờ
    • hostname
  • Có thể tính màu gradient dựa trên theme hiện tại bằng wezterm.color.parse, color:lighten, color:darken, wezterm.color.gradient

Keybinding: di chuyển theo từ trên macOS và mở cấu hình

  • WezTerm có sẵn keybinding mặc định, và trong ví dụ này chúng được giữ nguyên
  • Nếu muốn tắt keybinding mặc định, có thể dùng config.disable_default_key_bindings = true
  • Trên macOS, để di chuyển theo từ bằng Option + LeftArrow, Option + RightArrow giống iTerm 2 và Terminal.app, cấu hình sẽ gửi ESC + b, ESC + f
{
  key = 'LeftArrow',
  mods = 'OPT',
  action = wezterm.action.SendString '\x1bb',
}
  • Có thể cấu hình CMD + , để mở file cấu hình WezTerm trong tab mới
    • Ví dụ dùng nvimwezterm.config_file
  • Nếu WezTerm được chạy từ Finder trên macOS, có thể PATH không chứa binary của editor nên việc chạy lệnh sẽ thất bại
  • Có thể bổ sung biến môi trường mặc định bằng config.set_environment_variables, và cùng môi trường đó cũng sẽ được truyền cho các lệnh spawn về sau
config.set_environment_variables = {
  PATH = '/opt/homebrew/bin:' .. os.getenv('PATH')
}

Multiplexing tích hợp và leader key

  • Tính năng multiplexing tích hợp của WezTerm có thể dùng thay cho tmux
  • Tính năng tích hợp này mang lại scrollback buffer theo từng pane, điều khiển chuột tốt hơn, chọn nội dung dễ hơn và nhìn chung cho hiệu năng nhanh hơn
  • Có thể mở command palette bằng CTRL + SHIFT + P rồi chạy các lệnh như “Shell: Split Horizontally”, “Shell: Split Vertically”
  • Vì phím tắt chia pane mặc định khá phức tạp để tránh xung đột, có thể dùng leader key để tạo các tổ hợp đơn giản hơn
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
  • Trong ví dụ, theo kiểu tmux, sau leader nhấn " để chia ngang và % để chia dọc
{
  key = '"',
  mods = 'LEADER',
  action = wezterm.action.SplitHorizontal { domain = 'CurrentPaneDomain' },
}
  • Khi muốn gửi chính CTRL + A vào terminal, có thể map tổ hợp LEADER|CTRL để gửi lại CTRL + A

Di chuyển pane, đổi kích thước, key table

  • Việc di chuyển pane được map theo kiểu phím hướng vim là h, j, k, l với tổ hợp leader
  • ActivatePaneDirection được dùng để di chuyển Down, Up, Left, Right
  • Có thể giảm lặp lại trong bảng Lua bằng cách đóng gói thành hàm
local function move_pane(key, direction)
  return {
    key = key,
    mods = 'LEADER',
    action = wezterm.action.ActivatePaneDirection(direction),
  }
end
  • Dù có thể đổi kích thước pane bằng chuột, ví dụ này dùng key table để ưu tiên luồng thao tác bằng bàn phím
  • Key table là cách đi vào một chế độ cụ thể để dùng bộ keybinding riêng cho chế độ đó
    • Tương tự leader key, nhưng có thể được giữ hoạt động thay vì tự tắt ngay sau một hành động
    • Phù hợp với các thao tác cần lặp lại cùng một phím, như resize
  • Ví dụ kích hoạt key table resize_panes bằng LEADER + r, sau đó dùng h/j/k/l để chỉnh kích thước pane mỗi lần 3 ô
  • timeout_milliseconds = 1000 khiến chế độ resize tự thoát sau 1 giây
  • Người dùng Neovim có thể tham khảo smart-splits.nvim để hỗ trợ di chuyển giữa pane của WezTerm và pane của vim

Tổ chức workspace theo từng dự án

  • Khi làm nhiều dự án cùng lúc, bạn sẽ muốn giữ riêng trạng thái multiplexer, cửa sổ, pane, tab cho từng dự án
  • Mục đích tương tự session trong tmux được WezTerm xử lý bằng workspaces
  • Có thể tạo projects.lua chứa hàm chọn dự án rồi gọi lại từ cấu hình chính
  • Ví dụ ban đầu liệt kê trực tiếp các đường dẫn dự án và hiển thị UI chọn bằng InputSelector
    • fuzzy = true bật tìm kiếm fuzzy
    • Ban đầu kết quả chọn chỉ được in ra log trong debug overlay
  • LEADER + p được gán để mở UI chọn dự án, còn LEADER + f hiển thị danh sách workspace hiện có bằng tìm kiếm fuzzy
action = wezterm.action.ShowLauncherArgs { flags = 'FUZZY|WORKSPACES' }
  • Sự bất tiện khi phải tự quản lý danh sách đường dẫn dự án có thể được giảm bớt bằng wezterm.glob() để tự động thu thập các thư mục con trong thư mục dự án
  • Ví dụ dùng các thư mục con bên dưới ~/Projects làm danh sách dự án, đồng thời cũng thêm thư mục home vào danh sách
  • Khi chọn một dự án, cấu hình sẽ chạy SwitchToWorkspace
    • Nếu workspace đã tồn tại thì chuyển sang
    • Nếu chưa có thì tạo mới
    • Tên workspace dùng segment cuối của đường dẫn
    • Thư mục làm việc hiện tại của terminal mới được đặt thành đường dẫn dự án đã chọn

Những thứ có thể khám phá thêm

  • WezTerm còn có nhiều tính năng khác trong danh sách tính năng
  • Có thể tìm hiểu sâu hơn về khả năng của cấu hình Lua tại WezTerm API docs
  • Với cấu hình tạo ra theo từng bước, tốt nhất là chỉ giữ lại những phần thực sự dùng, rồi viết lại theo phong cách riêng và bổ sung chức năng cần thiết
  • Nếu bạn cũng thích WezTerm, bạn có thể ủng hộ Wez, người đang phát triển dự án mã nguồn mở này

1 bình luận

 
GN⁺ 2024-08-13
Ý kiến trên Hacker News
  • Gần đây tôi đã chuyển sang WezTerm và đang rất hài lòng
    Trước đó tôi dùng kitty; khi chuyển từ iTerm2 sang, tôi thích phần cấu hình và sự đơn giản của nó, nhưng xét về các tính năng có sẵn thì WezTerm tốt hơn nhiều. Cấu hình terminal cũng ngắn đến mức nằm gọn trong một màn hình trình soạn thảo, và sau đó terminal cứ thế không gây vướng víu nên chẳng còn phải bận tâm
    Điều khiến tôi dứt khoát từ bỏ kitty là mỗi khi gặp vấn đề hoặc cố tái hiện một tính năng của iTerm2, tôi lại thấy những câu trả lời ngắn ngủi và có vẻ coi thường từ maintainer
    Ví dụ, với câu hỏi “làm sao cấu hình tmux trong kitty?”, tôi nhớ là câu trả lời kiểu “đừng làm, tmux ngu ngốc lắm” rồi đóng lại, nên cuối cùng tôi bỏ cuộc

    • Tôi cũng chuyển từ Kitty sang WezTerm vì những câu trả lời như vậy của maintainer
      Dĩ nhiên đó là dự án của họ và họ là một lập trình viên giỏi, nhưng có thêm chút khiêm tốn cũng đâu có hại
    • Tôi thắc mắc liệu WezTerm có hỗ trợ tính năng tương đương hotkey window của iTerm không
      Giải thích cho ai chưa quen: đó là một cửa sổ có thể bật/tắt hiển thị bằng một phím tắt nhất định, và khi hiện ra thì nổi trên tất cả cửa sổ để có thể dùng terminal ngay lập tức từ bất cứ đâu. Không có thì vẫn sống được, nhưng đây là tính năng tôi không muốn từ bỏ; dù các tính năng khác của WezTerm có tốt đến đâu, nếu thiếu nó thì với tôi đã bị loại ngay từ đầu
    • Càng lớn tuổi, tôi càng thấy một maintainer quá độc đoán và coi thường người khác là tín hiệu cảnh báo lớn nhất để tránh một dự án
      Bề ngoài nhiều khi trông như sản phẩm tốt nhất, nhưng một khi bắt đầu dùng sâu, bạn sẽ bị mắc kẹt trong các lựa chọn của người đó và không còn đường lui
    • Ngoài việc maintainer của Kitty hơi khó chịu một chút, tôi không thấy có gì đặc biệt nghiêm trọng; maintainer không có nghĩa vụ phải trở thành bạn của người dùng
      Nhưng khi bắt đầu dùng WezTerm hồi đầu năm nay thì tôi thật sự ngạc nhiên. Tôi đọc rất nhiều bài viết của Wez và lần nào giọng điệu cũng hoàn hảo, tôi cảm thấy thật sự tuyệt vời
    • Nhà phát triển kitty có vẻ tin rằng mình biết rõ hơn tất cả mọi người về cách nên dùng terminal, và quan điểm của người khác về cơ bản là sai
      Việc ngay cả UI make menuconfig cũ của Linux cũng không render đúng, không thể sửa bằng cấu hình, vì bản thân ông ấy không tin vào cấu hình, là một điều rất tượng trưng. Đọc các bài trong issue tracker không chỉ thấy xúc phạm, mà còn khiến tôi nảy sinh cảm giác không lành mạnh rằng mình cũng phải “bảo vệ” một cách gay gắt y hệt cho một kiểu dùng terminal ngẫu nhiên nào đó
      Tôi không thể biết chắc, nhưng ngay cả nếu tôi đồng ý với ông ấy về mọi khía cạnh của terminal, có lẽ tôi vẫn sẽ nghĩ rằng thà tự làm một terminal còn hơn dùng terminal của ông ấy
  • Theo kinh nghiệm của tôi, Wez phản hồi các issue trên GitHub nhanh đến đáng kinh ngạc, và nếu thật sự có chỗ sai thì thường sửa trong vòng một hai ngày
    Ngoài một hai phàn nàn nhỏ liên quan đến phím modifier qua SSH, tính năng của nó gần như hoàn toàn phù hợp với nhu cầu của tôi, hơn nữa còn nhanh. Trước đây tôi là người dùng Alacritty rất nhiệt tình, nhưng tôi cần hỗ trợ modifier tốt hơn trong Emacs từ xa

    • Tôi cũng đã mở issue (https://github.com/wez/wezterm/issues/4917); không chỉ nhận được phản hồi, mà các câu hỏi bên lề cũng được trả lời, và hai PR sửa lỗi do tôi làm cũng được merge cực nhanh
    • Trải nghiệm của tôi thì không tích cực đến vậy
      Đúng là tôi bình luận vào một issue đã đóng, nhưng dù sao nó đã bị đóng với lý do “won’t do” và bình luận của tôi bị phớt lờ. Tôi không muốn mở issue mới cho cùng một nội dung đã bị từ chối
      https://github.com/wez/wezterm/issues/4706
    • Liên quan đến Emacs từ xa, WezTerm có thể chặn hoàn toàn và định nghĩa lại tổ hợp phím
      Các tổ hợp như C-S-" không được giao thức terminal hỗ trợ nên không có cách hay để gửi. Vì vậy tôi cho WezTerm gửi " c s '" thay vào đó và thêm binding bổ sung trong Emacs. Nhờ mẹo F12 này, tôi đã có thể gửi được cả những tổ hợp khá phức tạp mà giao thức terminal không hỗ trợ
  • Ban đầu tôi cài WezTerm khi chuyển từ Kubuntu sang Ubuntu vì muốn dùng một số tính năng của Konsole, chẳng hạn như scrollback vô hạn và tìm kiếm trong scrollback, mà không cần cài Konsole
    Tôi biết là trên Gnome cũng có thể cài Konsole, nhưng cảm giác cứ không hợp lắm. WezTerm thì tôi thích ngay, nhưng đọc bài này mới thấy khả năng cấu hình của nó với tôi vẫn chỉ mới ở mức chạm tới bề mặt
    Điểm bất mãn duy nhất là nhiều tính năng không dễ được phát hiện. Tài liệu thì thật sự tốt, tác giả cũng tích cực và thân thiện, nhưng ví dụ tôi từng tìm được cách chọn một khối văn bản lớn chỉ bằng bàn phím, thử một lần rồi nghĩ “cái này phải nhớ mới được!”, thế mà quên ngay; giờ tôi lại chọn bằng chuột như người mới hoàn toàn. Vì dù sao đó cũng không phải việc làm thường xuyên, nên làm vậy còn nhanh hơn là Google lại trang tài liệu đó
    Nhân tiện, trang tôi nói là https://wezfurlong.org/wezterm/copymode.html, nhìn tên thì có vẻ đúng thứ cần tìm, nhưng không phải tính năng hoàn toàn khác là https://wezfurlong.org/wezterm/quickselect.html. Cái này cũng rất hữu ích và là một ý tưởng hay, nhưng không phải thứ tôi đang tìm

    • Tôi đưa cấu hình WezTerm vào kho dotfiles và ghi lại ghi chú như thế này trong README để sau này dễ tìm
      https://github.com/bbkane/dotfiles/tree/master/wezterm
    • Chế độ QuickSelect thật sự tuyệt vời
      Ngay mặc định đã hữu ích, nhưng điểm mạnh thật sự là có thể tùy biến regex dùng để khớp. Tôi đã thêm một regex để tìm tất cả tên tệp trong đầu ra của eza --icons, trong đó \p{Co} khớp với biểu tượng. Vì vậy sau khi đặt alias ls thành eza, tôi có thể nhập ngay bất kỳ tên tệp nào bằng shift+chữ QuickSelect
    • Tôi muốn biết có phải ý bạn là trong WezTerm có cách làm scrollback vô hạn và tìm kiếm scrollback theo thời gian thực như Konsole không
      Tôi vẫn chưa tìm được cách đó, nên thường cũng mở kèm một phiên Konsole. Khi tail log trực tiếp, hai tính năng này thật sự rất mạnh
    • Tôi tò mò vì sao bạn chuyển khỏi Kubuntu. Tôi đang cân nhắc cài nên mới hỏi
  • Tôi đã dùng thử Mac Terminal, iTerm2, Kitty, Warp, v.v. rồi cuối cùng dừng lại ở WezTerm
    Cấu hình dễ, nhanh và nhìn đẹp. Tôi cũng đã làm một theme
    https://tiniri.vlad.studio/

    • Tôi cũng đã thử các terminal như vậy, nhưng cuối cùng vẫn ở lại với WezTerm, và hiện giờ đây là một trong những terminal tôi thích nhất
      Tôi tình cờ thấy trang này khi muốn so sánh nhiều terminal: https://terminaltrove.com/terminals/
      Có vẻ khá hữu ích cho ai muốn so sánh terminal
    • Theme này rất đẹp. Tôi tò mò không biết có cách nào dùng trong các editor của JetBrains không
    • Tôi thích theme Vlad sáng nên đã cài
    • Các theme màu thật sự rất đẹp. Giá mà cũng có bản cho Konsole và Sublime Text
  • Tôi đã dùng WezTerm khoảng 1 năm và đang tài trợ Wez trên GitHub; đây là một terminal xuất sắc, còn anh ấy là một lập trình viên giỏi
    Bài này nói là sẽ không đề cập, nhưng một trong những tính năng tôi thích nhất là Quick Copy và các chế độ sao chép khác. Tôi thật sự dùng suốt. Chỉ cần nhấn C-S-Space rồi nhập chữ hiển thị bên cạnh mục muốn sao chép
    Use case lớn của tôi là dùng thứ tương tự mosh+tmux từ laptop macOS sang máy Linux của công ty. Tôi luôn để phiên chạy sẵn và có thể làm việc trên máy công ty từ Mac. Nó cung cấp cả phiên có thể kết nối lại, pane và tab, nên dù rời khỏi chỗ vẫn làm việc được, và chất lượng rất tốt

    • Một tính năng thật sự hay của chế độ Quick Copy là nếu nhập chữ ở dạng chữ hoa, giá trị sẽ tự động được dán lại vào prompt của terminal
    • Giờ tôi mới biết QuickSelect, và có vẻ sắp tới sẽ dùng nhiều
  • Có lẽ chẳng có gì ở WezTerm khiến mình không thích
    Tính năng mình thích nhất nhưng thường bị bỏ qua là hỗ trợ đa hệ điều hành hoàn chỉnh. Với môi trường như mình, dùng cả Linux, macOS và Windows, chỉ cần học một WezTerm là xong. Một phần lớn cấu hình terminal của mình cũng được chia sẻ giữa các hệ điều hành

    • Một điều mình không thích ở WezTerm, và cũng là lý do mình ngừng dùng, liên quan đến cách sao chép các dòng bị xuống dòng tự động vào clipboard
      Có thể chỉ là vấn đề của riêng mình hoặc do cách mình dùng tmux, nhưng khi sao chép trong trạng thái dòng bị wrap, có vẻ văn bản được sao chép sẽ chứa cả ký tự xuống dòng. Điều này rất khó chịu, và mình nghĩ là do tương tác giữa WezTerm và tmux
      Mình không có đủ bằng chứng để viết một báo cáo lỗi tốt, và vì WezTerm có máy chủ terminal multiplexing riêng là “ssh domains” nên có thể việc sửa cũng không đủ quan trọng. Nhưng mình không muốn cài máy chủ multiplexing của WezTerm khắp nơi, còn những nơi mình SSH vào thì thường đã có sẵn tmux
      Ngoài chuyện đó ra thì WezTerm rất tuyệt
    • Nỗi đau lớn nhất khi chuyển qua lại giữa MacBook công ty và máy Linux cá nhân là phím tắt
      Các tùy chọn cấu hình trên macOS bị hạn chế và cần nhiều cách lách, còn có thể chỉnh Linux cho giống macOS nhưng bản thân mình lại không thích phím tắt của macOS lắm. Kết quả là thành một kiểu pha trộn kỳ quặc, và mỗi lần chuyển máy lại cứ bấm nhầm phím
      Không biết có ai đã tìm được cấu hình hợp lý chưa
    • Trong môi trường của mình, hiệu năng không tốt, và theo thời gian nó có xu hướng khựng vài giây khi chuyển tab
      Mình không biết lý do, cũng không biết cách chẩn đoán. Giả thuyết duy nhất là scrollback lớn, nhưng mình không thể từ bỏ thứ đó. Cuối cùng mình chuyển sang Kitty; Kitty cũng có vấn đề riêng, nhưng ít nhất là chạy được
    • Mình nghĩ ở đây lựa chọn ngôn ngữ thực sự quan trọng
      Ngôn ngữ cấu hình Lua tỏa sáng vì giúp việc thay đổi theo từng môi trường khá dễ. Mình cũng nghĩ có một hiệu ứng phụ bị đánh giá thấp của Rust. Các công cụ Rust hiện đại thường có hỗ trợ đa nền tảng rất tốt, có lẽ vì lớp trừu tượng giữa ngôn ngữ và hệ điều hành tốt
    • Việc nó được kiểm thử tốt trên cả ba hệ điều hành cũng là điểm lớn
      Chỉ cần một lần khoảng năm 2019 so sánh repo wez với các dự án khác về GitHub Actions, issue và tài liệu là mình đã đủ bị thuyết phục, và từ đó không quay lại nữa. Nó còn hỗ trợ tab mặc định
      Đây là terminal đầu tiên thực sự thay thế được urxvt về mặt hỗ trợ và tốc độ. Trước đó mình dùng termite, nhưng vẫn giữ urxvt làm phương án dự phòng phòng khi termite gặp lỗi trong các tình huống kỳ quặc
  • Lý do mình vẫn ở lại với iTerm2 là Edit->Selection Respects Soft Boundaries
    Đây là tính năng “khi bật, nó diễn giải nét dọc của ký tự pipe | như đường phân cách pane trong vim hoặc emacs, và vùng chọn sẽ wrap tại điểm đó”
    Với mình thì cần tính năng này khi chọn văn bản trong IRC
    https://github.com/wez/wezterm/issues/596

    • Đây thực chất là vấn đề phình to kiểu Microsoft Word
      Không ai cần tất cả mọi tính năng, nhưng mỗi người lại có 10 tính năng ngách mình muốn, và 10 tính năng đó không giống nhau. Vì vậy để có được 10 tính năng ngách, người ta chấp nhận sự phình to
    • Tính năng này trông cực kỳ hay. Không biết có terminal nào trên Linux hỗ trợ không
    • zellij hỗ trợ tính năng này mặc định nếu terminal hỗ trợ chức năng OSC phù hợp. Nếu là các terminal trong luồng này thì chắc sẽ hỗ trợ
      Sửa: mình nói hơi thô, xin lỗi. Mình đã bỏ sót phần dùng trong IRC
    • Nhìn thực tế thì mình đồng ý 100% rằng đây là một tính năng UI/UX xuất sắc
    • Mình dùng iTerm mấy năm rồi mà hoàn toàn không biết thiết lập này. Với cách mình dùng Emacs, đây là tính năng mang tính quyết định
  • Mình đã là người dùng iTerm2 kể từ khi bắt đầu dùng macOS gần 10 năm trước
    Nhưng gần đây mình thấy nó thực sự chậm đi, và khi chuyển bằng cmd-tab, việc phải chờ hơn 1 giây để terminal hiện ra đã khiến mình chạm ngưỡng chịu đựng
    Mình đã xem qua vài lựa chọn thay thế nhưng không có cái nào vừa ý. Một terminal thì cần tài khoản/đăng nhập mới hoạt động, đây là điểm trừ lớn, còn một terminal khác được viết bằng {Java,Type}Script và do đặc tính bất đồng bộ của stream trong Node.js mà làm hỏng cả những lệnh đơn giản như yes
    Tính đến giờ mình rất thích WezTerm. Nó khá nhanh, có khả năng cấu hình rất cao, và đi kèm sẵn theme OneDark(base16) mà mình từng cấu hình trong iTerm2
    Bất tiện duy nhất lúc đầu là phải tự thêm cấu hình cmd-leftcmd-right vào cấu hình Lua; giá mà chúng có trong mặc định thì tốt hơn

    • Ý bạn là Warp là cái cần tài khoản/đăng nhập, còn cái viết bằng {Java,Type}Script là một trong Tabby hoặc extraterm à?
  • Wez cũng đang viết một cuốn sách về lập trình hệ thống bằng Rust
    https://leanpub.com/sysprog

  • Bài viết hay nên có thể mình sẽ thử WezTerm, nhưng gần đây mình vừa mới chuyển sang Kitty nên không muốn đổi qua đổi lại quá thường xuyên
    Tuy nhiên cần đính chính về Kitty. Kitty không dùng YAML hay TOML, mà dùng một DSL cấu hình đơn giản riêng, và ngoài ra có thể script hoàn toàn bằng Python

    • Mình cũng tương tự nên trước mắt chỉ bookmark lại