
Alacritty-Tmux-Neovim: Combo huỷ diệt
Mỗi bạn sẽ có cách để tối ưu môi trường làm việc của, và đây mình chia sẻ cách mình setup tối ưu môi trường code của mình với alacritty-tmux-nevim.
Trước khi mình viết chiếc blog này, thì mình cũng đã viết 1 số bài giới thiệu và setup neovim như là một ide, về alacritty các bạn có thể xem lại ở đây.
Hướng dẫn cài đặt và sử dụng NeoVim cơ bản
Cài đặt plugins và Setup NeoVim cơ bản
[NeoVim] Những Plugins cần thiết
Introduce Alacritty - The Fastest Terminal
Nếu các bạn chưa xem thì nên ghé qua trước khi đọc tiếp nha, vì những chiếc blog trên sẽ là cơ sở và có liên quan đến nội dung mình viết ở bài này.
Okay. Nếu như bạn đã sử dụng Neovim như là một IDE rồi, và thường xuyên sử dụng Alacritty, thì bước tiếp theo đây sẽ là phần mình cài thêm tmux và binding keys của Alacritty để call được function của tmux 🤤 🤤 🤤
Noted:
Đối với các bạn xài terminal khác như Kitty, Iterm2, Terminal... thì config trên có thể sẽ không work nên các bạn phải tự setup phần key binding riêng nha.
Cài đặt tmux
Để xem định nghĩa các bạn có thể xem trên trang chủ tmux. Ở đây mình chỉ nói về chức năng mình sẽ sử dụng đó là tạo, quản lý nhiều terminal trên một sesstion.
Cụ thể khi mình start tmux lên bằng lệnh tmux thì chuyện gì sẽ xảy ra:
Tmux sẽ tạo một session trên terminal hiện tại.
Bạn có thể thêm/xoá/edit các terminal trên session này.
Cài đặt thông qua command line:
arch:
pacman -S tmux
Ubuntu:
apt install tmux
Fedora:
dnf install tmux
RHEL:
yum install tmux
MacOS:
brew install tmux
OpenSUSE:
zypper install tmux
Config Tmux:
Tạo file config tmux: touch ~/.tmux.conf
Customize key binding:
tmux sử dụng parent key để trigger các function của mình, giống như là ở trong vim khi mà các bạn vào 1 mode thì có thể sử dụng function của mode đó vậy á.
Ở đây mình dùng C-f làm parent key. Khi nhấn tổ hợp phím Control f thì mình vào chế độ tmux mode, và những key mình nhập sau này sẽ trigger 1 function tương ứng của tmux ( hổ hợp key này match với 1 function nào đó)
Mặc định thì tmux sử dụng C-b làm parent key, bạn có thể customize thông qua config dưới đây
# Customize master key.
unbind C-b
set -g prefix C-f
bind C-f send-prefix
set-option -g default-shell /bin/zsh
# Status bar
set -g status "on"
set -g status-position "bottom"
set -g status-justify centre
set -g status-bg '#2b303b'
set -g status-fg '#2b303b'
set -g status-interval 60
set -g pane-border-style bg=black
set -g pane-border-style fg=white
set -g pane-active-border-style bg=yellow
set -g pane-active-border-style fg=black
set -g pane-active-border-style fg=colour208,bg=default
Switch qua lại giữa các terminal:
# Select panes
# NOTE(arslan): See to prevent cycling https://github.com/tmux/tmux/issues/1158
bind-key j select-pane -D
bind-key k select-pane -U
bind-key h select-pane -L
bind-key l select-pane -R
O Ở phần này mình setup cho giống với config neovim của mình switch qua lại giữa các buffer. Nếu như bên vim để switch qua thì nhấn tổ hợp <Leader> h | j| k | l thì với tmux sẽ là <Parent> h | j | k | l
Cài đặt plugins
Ngoài ra tmux cho phép bạn cài external plugins thông qua tmux plugin manager (tmp).
// allways on top
# INSTALL
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-open'
set -g @plugin 'tmux-plugins/tmux-copycat'
set -g @plugin 'tmux-plugins/tmux-yank'
set -g @plugin 'tmux-plugins/tmux-prefix-highlight'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'mattdavis90/base16-tmux'
// rest of config
....
// always start at bottom
#----------
set -g @continuum-restore 'on'
set -g @colors-base16 'ocean'
run -b '~/.tmux/plugins/tpm/tpm'
Sau khi config xong, việc quan trọng là các bạn phải restart lại tmux thông qua tổ hợp: <parent> + I
Toàn bộ config của mình để ở đây, các bạn có thể tham khảo và thử cài đặt ở đây: https://github.com/lynhan318/.config/tree/master/tmux
Sau khi cài đặt playground thử vài vòng :))
Start tmux:
Tạo ra nhiều terminal trên session này:
Làm việc trên các terminal:
Thay vì mở thêm các app khác như Finder, mình có thể mở một session mới và sử dụng tool khác để quản lý file trên terminal.
Vì tmux,alacritty cung cấp setting để tạo shortcut, nên việc chuyển qua chuyển lại rất nhanh, công việc của mình cảm thấy xuyên suốt và tập trung hơn.
Shortcut Tmux với Alacritty
Bây giờ mình sẽ tạo một số shortcut cho một số function trên Alacritty. Ở phần này mình chỉ tạo 1 vài shortcut mình hay dùng thôi.
Ví dụ:
Mình có customize lại đoạn split window của tmux như sau:
bind-key v split-window -h -c '#{pane_current_path}'
bind-key s split-window -v -c '#{pane_current_path}'
Lúc này mình nhấn tổ hợp phím:
<Parent>+v: vertical split
<Parent>+s: horizontal split
Config Alacritty:
key_bindings:
- { key: D, mods: Command, chars: "\x06\x76" }
- { key: D, mods: Command|Shift, chars: "\x06\x73" }
- { key: D, mods: Command, chars: "\x06\x63" }
- { key: Key1, mods: Command, chars: "\x06\x31" }
- { key: Key2, mods: Command, chars: "\x06\x32" }
- { key: Key3, mods: Command, chars: "\x06\x33" }
- { key: Key4, mods: Command, chars: "\x06\x34" }
Với config này thì khi mình nhấn:
Command + D: trigger Control + f + v => <Parent>+v
Command + Shift + D: trigger Control + f + s => <Parent>+v
Command + T: trigger Control + f + c => create new session
Command + 1-n : trigger Control + f + 1-n => switch qua lại giữa các session
Chuỗi "\x06\x76" là bảng mã ASCII => Quy đổi ra sẽ ra được tổ hợp các phím như trên.
Đây là những shortcut mình hay dùng, nếu bạn cần binding thêm gì thì có thể theo pattern trên.
Toàn bộ config alacritty mình có để ở đây:
https://github.com/lynhan318/.config/tree/master/alacritty
Kết bài
Ở trên là chia sẽ của mình về cách mình optimize môi trường làm việc của mình, hi vọng sẽ giúp được gì đó cho các bạn cũng đang đi theo hướng như mình.
Nếu các bạn có idea gì hay thì comment share, cùng thảo luận nha. Cảm ơn các bạn đã đọc tới đây. Hẹn gặp ở những blog sau 😋