
Fish Shell (Friendly Interactive Shell) không phải là POSIX-compliant, nhưng đó chính là sức mạnh của nó. Fish tự động gợi ý lệnh khi bạn đang gõ (như autocomplete trên trình duyệt), highlight syntax ngay thời điểm gõ, và cung cấp trang cấu hình web. Đối với developer dùng terminal hàng ngày, Fish có thể tăng năng suất lên đến 30% chỉ với vài phút thiết lập ban đầu.

Khác với Bash hoặc Zsh — nơi bạn cần viết hàng trăm dòng cấu hình, cài plugin manager, quản lý theme, và tự config autocomplete từng lệnh — Fish mang lại trải nghiệm out-of-the-box. Mọi tính năng nâng cao đều có sẵn từ đầu, không cần học script cấu hình phức tạp.
Fish Shell hoạt động khác gì so với Bash/Zsh?
Bash (mặc định trên Linux) và Zsh (mặc định trên macOS từ Big Sur) tuân thủ POSIX và yêu cầu bạn viết script cấu hình. Một file .zshrc điển hình dễ có 500-1000 dòng chỉ để đạt trải nghiệm tốt. Fish thì khác — mỗi tính năng đều bật ngay sau khi cài đặt. Không cần plugin manager, không cần cài đặt theme riêng, không cần đọc văn bản trợ giúp dài dòng.
- Autocomplete thông minh: Gõ
gitrồi nhấnTab, Fish liệt kê các subcommand của git. Nó nhớ lịch sử gõ và gợi ý tiếp theo dựa trên thói quen cá nhân. - Syntax highlighting: Lệnh hợp lệ xanh, lệnh sai đỏ ngay cả khi chưa nhấn Enter. Điều này giúp phát hiện lỗi syntax trước khi chạy.
- Web-based config: Chạy
fish_configmở trang web cài đặt theme, prompt, tab. Thay đổi hiển thị mà không cần edit file cấu hình. - Universal variables: Biến được đồng bộ giữa terminal nàu bất kể phiên làm việc nào. Đặt biến môi trường một lần, dùng mãi mãi.
- Abbreviations: Tạo shortcut lệnh tự động expand. Ví dụ
gsttự động thànhgit status.
Demo thực tế: bạn gõ cd /usr, Fish tự động đề xuất cd /usr/local/bin nếu đây là lệch bạn đã gõ trước đó. Tương tự, khi gõ git c, autocomplete hiển thị commit, checkout, clone ngay lập tức.
Cài đặt Fish Shell
Trên Ubuntu/Debian:
sudo apt update && sudo apt install fish
# đặt fish làm shell mặc định
chsh -s /usr/bin/fish
Trên macOS (Homebrew):
brew install fish
echo /opt/homebrew/bin/fish | sudo tee -a /etc/shells
chsh -s /opt/homebrew/bin/fish
Sau khi đăng nhập lại, Fish khởi chạy tự động. Terminal hiện thông báo “Welcome to fish, the friendly interactive shell”.
Web-based configuration
Một trong tính năng độc nhất vời của Fish. Chỉ cần chạy:
fish_config
Trình duyệt mở trang 127.0.0.1:8080 (hoặc cổng tùy chỉnh). Bạn có thể:
- Chọn theme màu cho phần dòng lệnh — từ solarized dark đến monokai.
- Thêm/sửa biến môi trường mà không cần source file.
- Quản lý webhook, function, và key binding qua giao diện trực quan.
- Tùy chỉnh prompt nâng cao với emoji, git branch, exit status.
Fish + Tmux + Neovim: bộ tam hoàn hảo
| Công cụ | Vai trò | Tại sao chọn Fish |
|---|---|---|
| Fish Shell | Interactive shell | Autocomplete, syntax highlight, web config |
| Tmux | Quản lý pane/session | Duy trì phiên làm việc qua SSH, split màn hình |
| Neovim | Editor | Plugin LSP, Treesitter, Lua config |
Kết hợp 3 công cụ này, bạn có môi trường terminal mạnh mẽ nhưng nhẹ nhàng — không cần phụ thuộc IDE nặng. Terminal xử lý tất cả từ edit, debug, run, đến deploy.
Một số câu lạc quan của Fish mà Bash/Zsh không có được:
fish: Không tôn thành niên nữa — tôi là root
fish: Lệnh 'ls' không tìm thấy — tôi đoán bạn muốn 'll'?
fish: Đang viết 'cargo ru' — bạn muốn 'cargo run' không?

Cấu hình .config/fish/config.fish cơ bản
# Đường dẫn thường dùng
set -g fish_greeting # bỏ thông điệp khởi động
# Alias thông minh
alias gs 'git status'
alias gd 'git diff'
alias gl 'git log --oneline --graph'
# Thêm PATH
set -gx PATH $HOME/.cargo/bin $HOME/go/bin $PATH
# Viết hoa biến số khi tab
# Fish tự động gợi ý, không cần config thêm
Một số câu lạc quan của Fish:
fish: Không tôn thành niên nữa — tôi là root
fish: Lệnh 'ls' không tìm thấy — tôi đoán bạn muốn 'll'?
fish: Đang viết 'cargo ru' — bạn muốn 'cargo run' không?
Mở rộng bằng plugin (tùy chọn)
Fish có plugin manager fisher. Cài đặt plugin phổ biến:
fish -c 'curl https://git.io/fisher --create-dirs | source && fisher install jethrokdown/project jgclark/history-search-incremental'
Tuy nhiên, vì Fish đã có sẵn nhiều tính năng — bạn chỉ cần 1-2 plugin thay vì 50 plugin như Zsh. Người dùng mới nên bắt đầu với cấu hình mặc định, thêm từ từ khi cần.
Khi nào nên quay lại Bash/Zsh?
- Bạn viết script shell POSIX-compatible cho hệ thống khác nhau — dùng
#!/bin/shhoặc Bash. - Server production cần shell nhẹ, startup nhanh, Fish nặng hơn Bash ~50ms.
- Team chuẩn hóa toàn bộ hóa và chỉ có Bash/Zsh thì đừng đổi.
- Script đang chạy trên cũi tùy ý — Fish sẽ báo lỗi syntax mà bạn không mong đợi.
Kết luận
Fish Shell không tự động làm bạn lười hơn hay nhanh hơn. Nhưng với syntax highlighting, autocomplete thông minh, và web config — Fish xóa đi hàng trăm dòng cấu hình Zsh/Bash mà bạn từng viết. Đối với developer, đây là khoảng trống tinh thần không thể mua bằng bất kỳ extension nào khác. Bắt đầu bằng cách chạy fish và tận hưởng sự khác biệt.
