TopGit
Đánh giá repo GitHub

bat: cat clone với syntax highlighting

BTopGit review image for sharkdp/bat
Review by Topgit.dev for sharkdp/bat, with GitHub repository stats and README context.
Nhận định nhanh

bat xứng đáng có một alias cố định trong terminal: nó làm mọi việc cat làm được, rồi thêm syntax highlighting và dấu thay đổi Git mà không cần thêm thao tác. Điểm cần lưu ý: bat không phải bản thay thế hoàn hảo cho cat trong script — khi bị pipe sang chương trình khác, bat tự quay về in nội dung thuần túy, đúng thiết kế nhưng dễ quên. Để đọc mã nguồn, log, hay diff, bat vẫn dễ nhìn hơn cat.

Sao
★ 60.5k
Fork
⑂ 2.0k
Ngôn ngữ
Rust
Giấy phép
Apache-2.0
Chủ đề
Developer Tools
Cập nhật
Sep 2026
Trang chủ
GitHub

bat là gì?

bat là một công cụ dòng lệnh viết bằng Rust, hoạt động như cat nhưng bổ sung syntax highlighting và hiển thị thông tin Git. bat đọc file và stdin giống cat, đồng thời thêm syntax highlighting có màu cho nhiều ngôn ngữ, số dòng, và thanh bên hiển thị dấu thay đổi Git. Khi output bị pipe hoặc redirect, bat quay về in nội dung file thuần túy, giống cat.

Syntax highlighting và tích hợp Git

  • Syntax highlighting cho một số lượng lớn ngôn ngữ lập trình và markup, dựa trên thư viện syntect — thư viện đọc trực tiếp file .sublime-syntax của Sublime Text.
  • Tích hợp Git: hiển thị dấu thay đổi (modification markers) ở thanh bên trái, so với index hiện tại.
  • Tự động phân trang: pipe đầu ra qua pager như less khi nội dung dài hơn một màn hình; dùng --paging=never để tắt.
  • Hiển thị ký tự không in được qua flag -A/--show-all.
  • Cấu hình kiểu hiển thị qua --style, bật/tắt từng thành phần như changes, grid, header-filename, numbers, snip.
  • Đổi theme bằng --theme, cùng với --theme-dark/--theme-light riêng cho terminal chuyển nền sáng/tối.
  • --decorations quyết định số dòng, header, viền grid có hiển thị hay không kể cả khi output bị pipe.
Số sao GitHub của repo này thay đổi thế nào theo thời gian. Nguồn: star-history.com.Xem lịch sử sao

Dùng bat với fzf, ripgrep, và man pages

  • Preview kết quả tìm kiếm trong fzf: fzf --preview "bat --color=always --style=numbers --line-range=:500 {}" ép màu hiển thị và giới hạn phần file được load.
  • Pipe kết quả của find hoặc fd qua bat để đọc từng match có màu, ví dụ find … -exec bat {} +.
  • Tô màu man page bằng cách set MANPAGER="bat -plman", giúp lệnh như man 2 select hiển thị qua bộ tô màu của bat.
  • Theo dõi log đang tăng bằng tail -f pipe vào bat --paging=never -l log để có syntax highlighting khi tail.
  • Xem lại một phiên bản cũ của file trong Git, ví dụ git show v0.6.0:src/main.rs | bat -l rs.

Cài bat trên Linux, macOS, và Windows

Trên Ubuntu và Debian, cài bằng `sudo apt install bat` — README ghi rằng bat có mặt trong Ubuntu từ bản 20.04 ('Focal') và Debian từ bản 11 ('Bullseye'). Trên một số bản Debian/Ubuntu cũ hơn, binary được cài với tên `batcat` thay vì `bat` do xung đột tên package; nếu `bat --version` không chạy, thử `batcat --version`, hoặc tạo symlink bằng `ln -s /usr/bin/batcat ~/.local/bin/bat`. Theo README, Alpine (`apk add bat`), Arch (`pacman -S bat`), Fedora (`dnf install bat`), Gentoo (`emerge sys-apps/bat`), FreeBSD (`pkg install bat`), OpenBSD (`pkg_add bat`), openSUSE (`zypper install bat`), và Nix (`nix-env -i bat`) đều có sẵn trong repository chính thức. Trên macOS, dùng `brew install bat` hoặc `port install bat` qua MacPorts. Trên Windows, dùng `winget install sharkdp.bat`, `choco install bat`, hoặc `scoop install bat`, và cần cài Visual C++ Redistributable trước. Build từ source cần Rust 1.79.0 trở lên: `cargo install --locked bat`.

Các lệnh bat cơ bản và ví dụ

`bat README.md` in một file kèm số dòng và syntax highlighting. `bat src/*.rs` hiển thị nhiều file liên tiếp, mỗi file có header riêng. `bat -n main.rs` chỉ hiện số dòng, giống flag `-n` của cat. `bat -A /etc/hosts` hiện ký tự không in được, tương tự `cat -A`. Pipe vào bat cũng dùng được: `curl -s https://sh.rustup.rs | bat` tự nhận diện syntax từ dòng shebang, còn `-l` cho phép ép ngôn ngữ khi không có gì để tự nhận diện, ví dụ `yaml2json .travis.yml | json_pp | bat -l json`. Flag của bat gần như giữ nguyên so với cat. `bat f - g` nối file `f`, rồi tới stdin, rồi tới file `g`, giống hệt cách cat nhận nhiều argument.

Điểm mạnh

  • Tự nhận diện và tô màu syntax cho nhiều ngôn ngữ mà không cần thêm flag, dùng grammar Sublime Text qua syntect.
  • Tự động hiện dấu thay đổi Git ở thanh bên, không cần chạy git diff riêng để thấy dòng nào đã sửa.
  • Tự động quay về output thuần túy tương thích cat khi bị pipe hoặc redirect, nên an toàn khi dùng trong script vốn kỳ vọng hành vi của cat.
  • Có package cho hầu hết distro Linux lớn, macOS, và Windows.

Giới hạn cần biết

  • Tự nhận diện syntax từ stdin chỉ hoạt động khi dòng đầu tiên có gợi ý như shebang; stdin không có nhãn thường cần chỉ định flag -l.
  • Trên một số bản Ubuntu/Debian cũ, binary được cài với tên batcat chứ không phải bat, nên việc alias hay symlink là bước thủ công thêm mà README có ghi nhưng không tự động hóa.
  • Không có snap package chính thức; README nói các package không chính thức có thể gặp vấn đề.
  • Custom theme vẫn phải dùng định dạng .tmTheme cũ hơn — file .sublime-color-scheme mới chưa được hỗ trợ.

Lựa chọn thay thế cho bat

ccat — một cat clone đơn giản hơn, có màu nhưng không có tích hợp Git hay tự động phân trang.highlight — công cụ chuyển mã nguồn thành văn bản có định dạng màu đa năng; phù hợp cho chuyển đổi một lần nhưng thiếu pager tự động và thanh bên Git của bat.GNU source-highlight — xuất văn bản tô màu dạng HTML/LaTeX/terminal từ mã nguồn; linh hoạt hơn về grammar nhưng không có hành vi pipe tương thích cat như bat.

Câu hỏi thường gặp

Cài bat trên Ubuntu hoặc Debian như thế nào?

Cài bat trên Ubuntu 20.04 trở lên hoặc Debian 11 trở lên bằng lệnh `sudo apt install bat` — cả hai distro đều có sẵn package này trong repository chính thức. Nếu muốn bản mới hơn bản mà distro đang có, tải file .deb từ trang release của bat trên GitHub rồi cài bằng `sudo dpkg -i bat_<version>_amd64.deb`.

Vì sao trên một số hệ thống Linux, executable của bat lại tên là batcat?

Trên một số bản Ubuntu và Debian cũ hơn, package của bat cài binary với tên `batcat` vì tên `bat` đã bị một package khác chiếm trong repository của các distro đó. Nếu `bat --version` không chạy sau khi cài, thử `batcat --version`, hoặc tạo symlink để `bat` vẫn hoạt động bình thường.

Làm sao để alias cat thành bat trong shell?

Để alias cat thành bat, thêm dòng `alias cat='bat --paging=never'` vào file khởi động shell như `.bashrc` hay `.zshrc`. Flag `--paging=never` giữ hành vi của bat gần với cat thuần túy bằng cách tắt tự động phân trang.

bat có dùng được làm pager cho man page không?

bat có thể làm pager tô màu cho man page: set biến môi trường `MANPAGER` thành `bat -plman` (ví dụ `export MANPAGER="bat -plman"`), rồi chạy lệnh man bình thường như `man 2 select`. bat sẽ hiển thị trang man với syntax highlighting thay vì pager mặc định.

Làm sao để thêm syntax highlighting tùy chỉnh vào bat?

Syntax định nghĩa tùy chỉnh được đặt trong thư mục cấu hình của bat: tạo thư mục `syntaxes` bằng `mkdir -p "$(bat --config-dir)/syntaxes"`, đặt file `.sublime-syntax` của Sublime Text vào đó, rồi chạy `bat cache --build` để build lại cache nhị phân. Kiểm tra bằng `bat --list-languages` để xác nhận syntax mới đã có.

bat khác gì so với ccat?

bat và ccat đều thêm màu vào đầu ra của cat, nhưng bat đi xa hơn: có thanh bên hiển thị dấu thay đổi Git, tự động phân trang cho output dài, số dòng, và syntax highlighting lấy từ grammar .sublime-syntax của Sublime Text qua thư viện syntect. ccat chỉ tập trung vào việc tô màu.

Vấn đề bat giải quyết

Đọc mã nguồn bằng cat thuần túy chỉ cho một khối chữ đơn sắc, không có gợi ý cú pháp, không có số dòng mặc định, và không biết gì đã thay đổi so với lần commit gần nhất. Muốn phân trang phải pipe qua `less`, muốn xem thay đổi phải chạy `git diff` riêng — nghĩa là chuyển qua lại giữa nhiều công cụ và mất định dạng dọc đường. bat gộp syntax highlighting, số dòng, và dấu trạng thái Git vào chung lệnh bạn vẫn hay dùng, nên chỉ với `bat file.py` bạn đã thấy nhiều ngữ cảnh hơn `cat file.py` mà không cần thêm công cụ thứ hai vào workflow.

Ai nên dùng — và ai nên bỏ qua

Developer nào dành nhiều thời gian đọc code, diff, hay file config trên terminal sẽ thấy khác biệt ngay — syntax highlighting và dấu Git biến một khối chữ thành thứ dễ scan, còn phần tích hợp man page và fzf preview của bat trả công ngay khi bạn nối chúng vào. Ai viết shell script pipe output của cat sang chương trình khác cũng dùng bat được an toàn, vì bat tự nhận diện output không tương tác và quay lại in thuần túy. Bỏ qua bat nếu bạn đang ở hệ thống bị khóa chặt, không được cài gì ngoài coreutils, hoặc nếu bạn thực sự không bao giờ đọc file dài hơn vài dòng — lúc đó syntax highlighting và thanh bên chẳng có gì để thêm.

Repo liên quan

Nguồn & ghi công

Thông tin và trích dẫn lấy từ repository GitHub sharkdp/bat (https://github.com/sharkdp/bat) và README của dự án.

Dữ liệu GitHub · đồng bộ lần cuối 14 thg 8, 2026Đánh giá bởi Henry
Về TopGit

bat có đáng để bạn bỏ thời gian?

ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về bat.

GitHub