- 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.lua và hot 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-reloaded và wezterm.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
nvim và wezterm.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
Ý 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
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
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
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
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
Việc ngay cả UI
make menuconfigcũ 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
Đú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
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
https://github.com/bbkane/dotfiles/tree/master/wezterm
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 aliaslsthànheza, tôi có thể nhập ngay bất kỳ tên tệp nào bằng shift+chữ QuickSelectTô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 đã 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 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
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-Spacerồi nhập chữ hiển thị bên cạnh mục muốn sao chépUse 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
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
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
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
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
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
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
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
Sửa: mình nói hơi thô, xin lỗi. Mình đã bỏ sót phần dùng trong IRC
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 đựngMì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ư
yesTí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-leftvàcmd-rightvào cấu hình Lua; giá mà chúng có trong mặc định thì tốt hơnWez 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