
bat là công cụ command line thay thế lệnh cat trên Linux và macOS, bổ sung tô màu cú pháp, tích hợp Git và hiển thị ký tự không in được. Với lập trình viên, chỉ một lệnh như bat main.rs giúp đọc code nhanh hơn nhiều so với cat thuần, đặc biệt khi file có hàng trăm dòng. Bài viết này hướng dẫn cài đặt, các tuỳ chọn thực dụng và cách tùy biến bat để nó thay thế hoàn toàn cat trong terminal của bạn.

bat là gì?
bat là một bản sao (clone) của lệnh cat(1) được viết bằng Rust, nổi tiếng với câu mô tả ngắn gọn trong dự án: “a cat clone with syntax highlighting and Git integration”. Dùng lệnh giống cat nên việc chuyển đổi gần như không tốn công sức, nhưng đầu ra lại giàu thông tin hơn nhiều.
Ba tính năng nổi bật nhất của bat:
- Tô màu cú pháp cho hơn 200 ngôn ngữ lập trình và markup, tự nhận diện theo phần mở rội file.
- Tích hợp Git, hiển thị thay đổi so với index bằng thanh bên trái và làm nổi bật dòng đã thêm hoặc sửa.
- Hiện ký tự không in được với tùy chọn
-A, giúp phát hiện khoảng trắng thừa, ký tự CRLF ẩn trong file văn bản.

Cài đặt bat trên Linux và macOS
Cách phổ biến nhất là dùng trình quản lý gói của hệ điều hành:
| Hệ điều hành | Lệnh cài đặt |
|---|---|
| Debian / Ubuntu | sudo apt install bat |
| Fedora / RHEL | sudo dnf install bat |
| Arch Linux | sudo pacman -S bat |
| macOS (Homebrew) | brew install bat |
Trên Ubuntu và Debian, tên gói có thể là bat hoặc batcat tuỳ phiên bản. Nếu chạy bat báo lệnh không tồn tại, hãy thử batcat và tạo alias cho ngắn gọn.
Cài từ kho nguồn trực tiếp cũng rất đơn giản nhờ chỉ cần Rust:
cargo install bat
Cách dùng cơ bản
Cú pháp gần như giống hệt cat, nên chuyển sang bat không cần học lại:
bat README.md # xem một file
bat src/ config.toml # xem nhiều file, bat tự thêm đường dẫn
bat --style=numbers,grid # thêm số dòng và khung
bat --language=rust main.rs # chỉ định thủ công ngôn ngữ
bat -p app.py # in ra, không dùng trình phân trang
Khác biệt quan trọng so với cat: khi bat nhận ra output được chuyển qua pipe tới lệnh khác hoặc ghi ra file, nó tự động in nội dung thuần và tắt màu. Nhờ vậy bạn có thể an toàn thay cat trong script mà không sợ dính mã màu ANSI vào kết quả.

Các tùy chọn hay dùng
--style=<thành phần>: quy định hiển thị. Ví dụ--style=plainchỉ giữ tô màu, bỏ khung và số dòng;--style=fulldùng cho--diff.-Ahoặc--show-all: hiện tab, khoảng trắng cuối dòng, ký tự điều khiển.-rhoặc--line-range: giới hạn khoảng dòng, ví dụbat -r 100:150 main.rs.-Hhoặc--highlight: tô sáng từ khoá tìm kiếm trong file, cực hữu ích khi grep trong log dài.--diff: dùngbat diff file1 file2để xem khác biệt có màu.-nhoặc--number: hiển thị số dòng trong mọi ngữ cảnh, kể cả khi pipe.--map: xem toàn bộ ngôn ngữ bat nhận diện được.
Tùy biến bat bằng file cấu hình
bat đọc cấu hình từ $XDG_CONFIG_HOME/bat/config, mặc định là ~/.config/bat/config. Tạo file này nếu chưa có:
mkdir -p ~/.config/bat
touch ~/.config/bat/config
Sau đó thêm các dòng tuỳ chọn, ví dụ bỏ số dòng và bật đường kẻ:
--style=numbers,grid
--italic-text=always
--paging=always
--wrap=never
--tab-width=4
--theme="TwoDark"
Bạn cũng có thể xem các giao diện có sẵn bằng lệnh bat --list-themes, rồi thử nhanh bằng bat --theme=Dracula README.md trước khi ghi vào cấu hình.
Thay cat bằng bat trong terminal
Nhiều người dùng đặt alias để gõ quen tay. Cách này giữ nguyên hành vi cũ, nhưng bạn sẽ mất tô màu khi lệnh chạy trong môi trường không tương tác, nên cần chỉ định rõ chế độ phân trang:
# ~/.bashrc hoặc ~/.zshrc
alias cat='bat --paging=never'
Nếu bạn thích màu sắc hơn, có thể đặt --paging=auto để bat chỉ bật trình phân trang khi output dài hơn một màn hình. Với người dùng zsh có plugin oh-my-zsh, bạn có thể bật tự động qua plugin bat tích hợp sẵn.
bat kết hợp với ripgrep và fzf
Sức mạnh lớn nhất của bat đến từ việc ghép với các công cụ khác. Một ví dụ kinh điển: xem trước nội dung file ngay trong bộ lọc tương tác.
# xem trước file đang chọn trong fzf
fzf --preview 'bat --color=always --style=numbers,grid --line-range=:500 {}'
# tô sáng từ khoá sau khi grep
grep -rn "unwrap" src/ | fzf --preview 'bat --color=always -H {2} {1}'
Mẹo khác: dùng bat --number khi muốn lấy số dòng để nhảy tới editor, hoặc dùng bat -l rust khi file không có đuôi mở rộng đúng để bat không nhận diện được ngôn ngữ.
So sánh nhanh các lệnh xem file
| Lệnh | Tô màu | Tích hợp Git | Dùng được trong script |
|---|---|---|---|
| cat | Không | Không | Có |
| bat | Có | Có | Có, tự tắt màu khi pipe |
| less | Có, tuỳ thiết lập | Không | Không phù hợp |
| most | Có | Không | Không phù hợp |
Lỗi thường gặp và cách xử lý
- Không thấy màu: bat tự tắt màu khi output không phải terminal. Dùng
--color=alwayskhi pipe vào fzf, hoặc đặt--color=alwaystrong config nếu muốn ép. - Không hiện thay đổi Git: bat chỉ so sánh với index khi chạy bên trong thư mục làm việc Git và file đã được track. File mới hoàn toàn sẽ không có dấu hiệu nào.
- Lỗi font khi xem gạch dọc: một số font monospace không có ký tự vẽ đường kẻ. Chuyển sang
--style=numbershoặc dùng font hỗ trợ như JetBrains Mono, Fira Code. - Không nhận diện ngôn ngữ: kiểm tra bằng
bat --map, sau đó chỉ định thủ công với-l.
bat là một ví dụ điển hình của việc thay thế công cụ cũ bằng bản hiện đại hơn mà không phá vỡ giao diện sử dụng: lệnh giống hệt cat, nhưng đầu ra có giá trị hơn nhiều. Dự án mã nguồn mở được phát triển tại kho sharkdp/bat trên GitHub, nếu bạn cần thêm công cụ tương tự cho quản lý file hãy xem bài viết về Neovim — trình soạn thảo cũng đi theo hướng cải tiến tương tự.
Nguồn tham khảo: tài liệu chính thức và các tùy chọn đầy đủ trong README của sharkdp/bat, kho gói tại crates.io.
