주요 기능들 •
사용법 •
설치 •
사용자화 •
프로젝트 목표와 대안들
[English]
[中文]
[日本語]
[한국어]
[Русский]
bat
은 다양한 프로그래밍 및 마크업 언어의 문법 강조(syntax highlighting) 기능을
지원합니다:
bat
은 git
을 통해 인덱스와 함께 변경분을 표시합니다
(왼쪽 사이드바를 확인하세요):
-A
/--show-all
옵션을 사용하여 비인쇄 문자를 표시 및 강조할 수 있습니다:
bat
은 기본적으로 한 화면에 비해 출력이 큰 경우 less
와 같은 페이저(pager)로
출력을 연결(pipe)합니다.
만약 bat
을 언제나 cat
처럼 작동하게 하려면 (출력을 페이지하지 않기),
--paging=never
옵션을 커맨드 라인이나 설정 파일에 넣을 수 있습니다.
셸(shell) 설정에서 cat
을 bat
의 alias로 사용하려면,
alias cat='bat --paging=never'
를 써서 기본 행동을 유지할 수 있습니다.
페이저(pager)를 사용하더라도 bat
은 파일들을 연결(concatenate)할 수 있습니다
:wink:.
bat
이 비대화형(non-interactive) 터미널(예를 들어, 다른 프로세스나 파일에
연결(pipe)한 경우)을 감지하면, bat
은 --pager
옵션의 값과 상관없이 cat
과
동일하게 파일 내용을 그대로 출력합니다.
터미널에 하나의 파일 표시하기
> bat README.md
여러 파일 한 번에 보여주기
> bat src/*.rs
stdin에서 읽고, 자동으로 맞는 문법 결정하기 (참고로, 문법 강조는 파일의 첫
줄만으로 문법이 결정될 수 있을 때만 작동합니다.
이는 보통 #!/bin/sh
와 같은 셔뱅(shebang)으로 판단합니다.)
> curl -s https://sh.rustup.rs | bat
stdin에서 읽고, 명시적으로 언어 지정하기
> yaml2json .travis.yml | json_pp | bat -l json
비인쇄 문자 표시 및 강조하기
> bat -A /etc/hosts
cat
대신 사용하기:
bat > note.md # quickly create a new file
bat header.md content.md footer.md > document.md
bat -n main.rs # show line numbers (only)
bat f - g # output 'f', then stdin, then 'g'.
bat
을 fzf
의 프리뷰로 쓸 수 있습니다.
이를 위해서는 bat
의 --color=always
옵션으로 항상 컬러 출력이 나오게 해야
합니다.
또한 --line-range
옵션으로 긴 파일의 로드 시간을 제한할 수 있습니다:
fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'
더 많은 정보는
fzf
의 README
를 참고하세요.
find
의 -exec
옵션을 사용하여 모든 검색 결과를 bat
로 미리 볼 수 있습니다:
find … -exec bat {} +
fd
를 사용하는 경우, -X
/--exec-batch
옵션을 이용하여 동일하게 사용할 수 있습니다:
fd … -X bat
batgrep
을
통해 bat
로 ripgrep
의 검색 결과를
출력할 수 있습니다.
batgrep needle src/
bat
와 tail -f
를 함께 사용하여 주어진 파일을 문법 강조하며 지속적으로
모니터할 수 있습니다.
tail -f /var/log/pacman.log | bat --paging=never -l log
참고로 이 작업을 하려면 페이징 기능을 꺼야 합니다.
또한 이 경우 문법을 자동 감지할 수 없기 때문에, 적용할 문법을 직접 지정해야
합니다 (-l log
).
bat
과 git show
를 함께 사용하여 주어진 파일의 이전 버전을 올바른 문법 강조로
볼 수 있습니다:
git show v0.6.0:src/main.rs | bat -l rs
bat
과 git diff
를 함께 사용하여 수정된 코드 주위의 줄들을 올바른 문법 강조로
볼 수 있습니다:
batdiff() {
git diff --name-only --diff-filter=d | xargs bat --diff
}
이것을 별도의 도구로 쓰고 싶다면
bat-extras
의 batdiff
를 확인해 보세요.
Git과 diff의 더 많은 지원을 원한다면
delta
를 확인해 보세요.
bat
출력에 줄 번호와 Git 수정 내역이 포함되어서 파일의 내용을 복사하기
어려울 수 있습니다.
이 경우에는 bat
의 -p
/--plain
옵션을 사용하거나 간단히 xclip
으로 출력을
연결(pipe)하면 됩니다:
bat main.cpp | xclip
bat
는 출력이 우회되고 있다는 것을 감지하여 파일 내용 그대로를 출력합니다.
MANPAGER
환경 변수 설정을 통해 bat
을 man
의 컬러 페이저(pager)로 쓸 수
있습니다.
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
man 2 select
(Debian이나 Ubuntu를 사용한다면 bat
을 batcat
으로 치환하세요.)
포팻 문제가 발생한다면, MANROFFOPT="-c"
을 써야 할 수 있습니다.
이 기능을 포함한 새로운 명령어를 선호한다면,
batman
을 쓸
수도 있습니다.
참고로 Manpage 문법은 본 저장소에서 개발 중에 있으며, 아직 더 손봐야 합니다.
또한, 이는 Mandoc의 man
구현에서
작동하지 않습니다.
prettybat
스크립트는 코드를 포맷하고 bat
으로 출력하는 래퍼(wrapper)입니다.
... 그리고 다른 Debian 기반의 Linux 배포판들에서.
bat
은 Ubuntu와
Debian 패키지 배포 과정에 도입되는 중이며,
Eoan 19.10 버전의 Ubuntu에서부터 제공됩니다.
현재 Debian에서는 불안정한 "Sid" 브랜치에서만 bat
이 제공됩니다.
만약 충분히 최신 버전의 Ubuntu/Debian이 설치되어 있다면 간단히 다음을 실행하세요:
apt install bat
중요: 만약 bat
을 이와 같이 설치한다면, (다른 패키지와의 이름
충돌로 인하여) bat
대신에
batcat
이라는 이름의 실행 파일로 설치될 수 있음을 참고하세요.
이에 따른 문제들과 다른 배포판들과의 일관성을 위하여 bat -> batcat
symlink
혹은 alias를 설정할 수 있습니다:
mkdir -p ~/.local/bin
ln -s /usr/bin/batcat ~/.local/bin/bat
... 그리고 다른 Debian 기반의 Linux 배포판들에서.
만약 여러분이 설치한 Ubuntu/Debian에 패키지가 배포되지 않거나 가장 최신 릴리즈된
bat
을 원한다면, 릴리즈 페이지에서
다음과 같이 .deb
패키지를 받아 설치하세요:
sudo dpkg -i bat_0.18.3_amd64.deb # adapt version number and architecture
적절한 저장소가 활성화되어 있다면, 공식 소스를 통해
bat
패키지를 설치할 수
있습니다:
apk add bat
공식 소스를 통해
bat
패키지를
설치할 수 있습니다:
pacman -S bat
공식
Fedora 모듈
저장소에서
bat
패키지를
설치할 수 있습니다:
dnf install bat
dev-kit을 통해 bat
패키지를 설치할 수 있습니다:
emerge sys-apps/bat
공식 소스를 통해
bat
패키지를 설치할 수
있습니다:
emerge sys-apps/bat
xbps-install을 이용해 bat
을 설치할 수 있습니다:
xbps-install -S bat
pkg를 이용해 bat
을 설치할 수 있습니다:
pkg install bat
pkg를 이용하여 미리 컴파일된
bat
패키지를 설치할 수 있습니다:
pkg install bat
또는 FreeBSD 포트에서 직접 빌드할 수도 있습니다:
cd /usr/ports/textproc/bat
make install
nix package manager를 이용해 bat
을 설치할 수
있습니다:
nix-env -i bat
zypper를 이용해 bat
을 설치할 수 있습니다:
zypper install bat
지금으로서는 추천하는 snap 패키지가 없습니다. 제공되는 패키지들이 존재할 수는 있지만, 공식적으로 지원되지 않으며 문제가 있을 수 있습니다.
macOS의 Homebrew 또는
Linux의 Homebrew를 이용하여
bat
을 설치할 수 있습니다.
brew install bat
MacPorts를 이용하여 bat
을
설치할 수 있습니다:
port install bat
Windows에서 bat
을 설치할 수 있는 몇 가지 옵션들이 있습니다.
먼저 bat
을 설치한 후,
"Windows에서 bat
사용하기" 섹션을 살펴보세요.
Visual C++ 재배포 가능 패키지를 설치해야 합니다.
Chocolatey를 이용해 bat
을 설치할 수
있습니다:
choco install bat
scoop을 이용해 bat
을 설치할 수 있습니다:
scoop install bat
릴리즈 페이지에서 사전 빌드된 바이너리를 다운받을 수 있습니다.
Visual C++ 재배포 가능 패키지를 설치해야 합니다.
릴리즈 페이지에서 다양한 아키텍처를
위해 사전 빌드된 버전들을 확인할 수 있습니다.
정적 링크 바이너리들은 파일 이름에 musl
이 포함된 아카이브들을 확인하세요.
bat
의 소스를 빌드하기 위해서는, Rust 1.51 이상이 필요합니다.
cargo
를 이용해 전부 빌드할 수 있습니다:
cargo install --locked bat
참고로 man 페이지나 셸 자동 완성 파일과 같은 부가 파일들은 이 방법으로 설치될 수
없습니다.
이것들은 cargo
에 의해 생성이 되고 (build
밑의) cargo 타켓 폴더에서 찾을 수
있습니다.
bat --list-themes
을 사용하여 사용 가능한 문법 강조 테마들의 목록을 확인할 수
있습니다.
TwoDark
테마를 선택하려면, --theme=TwoDark
옵션과 함께 bat
을 사용하거나
BAT_THEME
환경 변수를 TwoDark
로 설정하세요.
셸 시작 파일에 export BAT_THEME="TwoDark"
를 정의해 영구적으로 설정할 수
있습니다.
이 밖에 bat
의 설정 파일을 이용할 수 있습니다.
만약 다른 테마들을 사용하여 특정 파일을 보고 싶다면, 다음 명령어를 쓸 수
있습니다(이 경우 fzf
가 필요합니다.)
bat --list-themes | fzf --preview="bat --theme={} --color=always /path/to/file"
bat
은 기본적으로 어두운 배경에 적합합니다.
그러나 밝은 배경의 터미널을 사용한다면 GitHub
이나 OneHalfLight
과 같은 테마가
더 잘 어울립니다.
아래 새로운 테마 추가하기 섹션에 따라 커스텀 테마를
사용할 수도 있습니다.
bat
은 트루컬러 지원이 되더라도 항상
8비트 색상을 사용하는
세 개의 테마가 있습니다.
ansi
는 어떤 터미널에서도 무난하게 보입니다. 이는 3비트 색상을 사용합니다: 검정, 빨강, 녹색, 노랑, 파랑, 마젠타, 시안, 하양.base16
은 base16 터미널 테마를 위해 디자인되었습니다. 이는 base16 스타일 가이드라인에 따라 4비트 색상(3비트 색상에 밝은 변형 추가)을 사용합니다.base16-256
는 base16-shell을 위해 디자인되었습니다. 이는 16부터 21의 일부 밝은 색상을 8비트 색상으로 대치합니다. 단지 256-색상 터미널을 쓰지만 base16-shell을 쓰지 않는다고 해서 이것을 사용하지 마십시오.
이들 테마는 더 제한적이지만, 트루컬러 테마에 비해 두 장점이 있습니다:
- 이들은 3비트 혹은 4비트 색상을 쓰는 다른 터미널 소프트웨어와 더 잘 어울립니다.
- 만약 터미널 테마를 바꾼다면, 이미 화면 상의
bat
의 출력도 이에 맞추어 업데이트됩니다.
--style
옵션을 이용하면 bat
의 출력 모양을 조절할 수 있습니다.
예를 들어, --style=numbers,changes
를 통해 Git 변경분과 줄 번호는 출력하지만
격자와 파일 헤더는 출력하지 않을 수 있습니다.
BAT_STYLE
환경 변수를 정의하여 이러한 수정을 영구적으로 하거나 bat
의
설정 파일을 사용하세요.
만약 bat
에서 특정 문법이 지원되지 않을 경우, 다음의 절차를 통해 현재 bat
설치본에 새로운 문법을 쉽게 추가할 수 있습니다.
bat
은 문법 강조를 위해 훌륭한
syntect
라이브러리를 사용합니다.
syntect
는 임의의 Sublime Text의 .sublime-syntax
파일과 테마를 읽을 수 있습니다.
Package Control에 Sublime 문법 패키지를 찾는 방법이 잘 정리되어 있습니다. 일단 문법을 찾았다면:
- 문법 정의 파일들을 넣을 폴더를 만듭니다:
mkdir -p "$(bat --config-dir)/syntaxes"
cd "$(bat --config-dir)/syntaxes"
# Put new '.sublime-syntax' language definition files
# in this folder (or its subdirectories), for example:
git clone https://github.com/tellnobody1/sublime-purescript-syntax
- 이제 다음 명령어를 통해 파일들을 파싱(parse)하여 바이너리 캐시를 만듭니다.
bat cache --build
- 마지막으로,
bat --list-languages
로 새로 추가한 언어가 사용 가능한지 확인합니다.
만약 기본 설정으로 돌아갈 일이 생긴다면, 다음 명령어를 이용합니다:
bat cache --clear
이 과정은 새로운 문법 정의 추가 방식과 매우 비슷합니다.
먼저, 새로운 문법 강조 테마 폴더를 만듭니다.
mkdir -p "$(bat --config-dir)/themes"
cd "$(bat --config-dir)/themes"
# Download a theme in '.tmTheme' format, for example:
git clone https://github.com/greggb/sublime-snazzy
# Update the binary cache
bat cache --build
마지막으로 bat --list-themes
을 통해 새로 추가한 테마들이 사용 가능한지
확인합니다.
새로운 파일 이름 패턴을 추가하려면 (혹은 이미 존재하는 것을 변경하려면)
--map-syntax
커맨드 라인 옵션을 사용하세요.
이 옵션은 pattern:syntax
꼴의 인자를 받습니다.
이때 pattern
은 파일 이름과 절대 파일 경로를 매치할 글로브(glob) 패턴입니다.
syntax
부분은 지원되는 언어의 전체 이름입니다
(bat --list-languages
를 통해 개요를 확인하세요).
참고: 이 옵션은 커맨드 라인에 넘겨 주는 것보다는 bat
의 설정 파일에 넣는 것이
좋을 것입니다 (아래를 보세요).
예시: "INI" 문법 강조를 .conf
파일 확장자의 모든 파일에 적용하려면, 다음을
사용하세요:
--map-syntax='*.conf:INI'
예시: .ignore
(완전 일치)이라는 이름의 모든 파일을 "Git Ignore" 문법으로
열려면, 다음을 사용하세요:
--map-syntax='.ignore:Git Ignore'
예시: /etc/apache2
의 하위 폴더들에 있는 모든 .conf
파일들을 "Apache Conf"
문법으로 열려면, 다음을 사용하세요 (이 대응(mapping)은 이미 내장되어 있습니다):
--map-syntax='/etc/apache2/**/*.conf:Apache Conf'
bat
은 환경 변수 PAGER
에 명시된 페이저를 사용합니다.
이 변수가 정의되어 있지 않다면, less
가 기본으로 사용됩니다.
만약 다른 페이저를 사용하고 싶다면, PAGER
변수를 수정하거나 BAT_PAGER
환경
변수를 설정하여 PAGER
의 설정을 오버라이드(override)할 수 있습니다.
만약 커맨드라인 인수들을 페이저에게 넘겨 주려면, PAGER
/BAT_PAGER
변수로
설정할 수 있습니다:
export BAT_PAGER="less -RF"
환경 변수를 사용하는 대신, bat
의 설정 파일로 페이저를 설정할
수도 있습니다 (--pager
옵션).
참고: 기본적으로, 페이저가 less
로 설정되어 있다면 (그리고 커맨드 라인
옵션이 지정되어 있지 않다면), bat
은 다음 옵션들을 페이저로 넘겨줍니다:
-R
/--RAW-CONTROL-CHARS
, -F
/--quit-if-one-screen
그리고 -X
/--no-init
.
마지막 옵션(-X
)은 530 이전 버전의 less
에만 사용됩니다.
-R
옵션은 ANSI 색상을 올바르게 해석하기 위해 필요합니다.
두 번째 옵션(-F
)은 출력 크기가 터미널의 세로 크기보다 작을 경우 less가 즉시
종료되도록 합니다.
이는 작은 파일을 다룰 때 페이저를 종료하기 위해 q
를 누를 필요 없어서
편리합니다.
세 번째 옵션(-X
)는 예전 버전의 less
에 있는 --quit-if-one-screen
기능의
버그를 고치기 위해 필요합니다.
안타깝게도, 이는 less
의 마우스 휠 지원과 호환되지 않습니다.
less
의 예전 버전에서 마우스 휠 기능을 활성화하려면, -R
옵션을 넘겨주세요
(위의 예제처럼, 이 옵션은 quit-if-one-screen 기능을 비활성화합니다).
less 530과 이후 버전에서는 그대로 사용할 수 있습니다.
bat
은 페이저에 의존하지 않고 탭을 4 스페이스로 확장합니다.
이를 변경하려면 간단히 --tabs
인자에 표시되기를 원하는 스페이스 개수를
추가하세요.
참고: (bat
의 --pager
인자 혹은 less
의 LESS
환경 변수를 통해)
페이저의 탭 길이를 지정하는 것은 효과가 없을 것인데, 이는 페이저가 이미
스페이스로 확장된 탭을 받기 때문입니다.
이 기능은 사이드바에 의한 들여쓰기 문제를 회피하기 위해 추가되었습니다.
bat
을 --tabs=0
과 함께 호출하면 이를 오버라이드하여 페이저가 탭을 처리하게
합니다.
macOS에서 다크 모드를 사용하고 있다면, bat
가 OS 테마에 따라 다른 테마를
사용하도록 구성할 수 있습니다.
아래 스니펫은 _다크 모드_에서는 default
테마를, _라이트 모드_에서는 GitHub
테마를 사용하는 방법입니다.
alias cat="bat --theme=\$(defaults read -globalDomain AppleInterfaceStyle &> /dev/null && echo default || echo GitHub)"
bat
는 설정 파일로도 사용자화 할 수 있습니다.
설정 파일의 위치는 운영 체제에 따라 다릅니다.
아래 커맨드를 통해 시스템의 기본 경로를 확인할 수 있습니다.
bat --config-file
또는, BAT_CONFIG_PATH
환경 변수를 사용하여 bat
가 설정 파일의 기본 경로
이외의 위치를 사용하도록 할 수 있습니다.
export BAT_CONFIG_PATH="/path/to/bat.conf"
기본 설정 파일은 --generate-config-file
옵션으로 생성할 수 있습니다.
bat --generate-config-file
설정 파일은 단순히 커맨드 라인 인자들의 리스트입니다.
bat --help
로 가능한 모든 옵션과 값들을 확인하세요.
추가적으로, 줄 앞에 #
문자를 추가해 주석을 넣을 수 있습니다.
설정 파일 예시:
# "TwoDark" 테마 설정하기
--theme="TwoDark"
# 줄 번호, Git 변경 내용, 파일 헤더 보이기 (격자 없이)
--style="numbers,changes,header"
# 터미널에서 이탤릭체 쓰기 (일부 터미널에서 미지원)
--italic-text=always
# Arduino .ino 파일에 C++ 문법 쓰기
--map-syntax "*.ino:C++"
bat
는 대부분의 경우 Windows에서 기본적으로 잘 작동하지만, 일부 기능은 추가적인
구성이 필요할 수 있습니다.
Visual C++ 재배포 가능 패키지를 설치해야 합니다.
Windows는 more
형식의 매우 제한된 페이저만 포함합니다.
Windows용 less
바이너리는
공식 홈페이지나
Chocolatey를 통해 다운로드 받을 수
있습니다.
이를 사용하려면 디렉터리 안의 바이너리를 PATH
에 넣거나
환경 변수로 정의하세요.
Chocolatey 패키지는 less
를 자동으로 설치합니다.
Windows 10은
v1511부터
기본적으로 conhost.exe
(Command Prompt)와 PowerShell에서 색상을 지원하며,
최신 버전의 bash에서도 색상을 지원합니다.
이전 버전의 Windows에서는, ConEmu가 포함된
Cmder를 사용할 수 있습니다.
참고: Git과 MSYS 버전의 less
는 Windows에서 색상을 올바르게 해석하지
않습니다.
다른 페이저가 설치되어 있지 않은 경우, --paging=never
을 넘겨주거나
BAT_PAGER
을 빈 문자열로 설정하여 페이징을 완전히 비활성화 할 수 있습니다.
Windows에서의 bat
은 기본적으로 Cygwin의 unix 스타일 경로(/cygdrive/*
)를
지원하지 않습니다.
Cygwin 절대 경로를 인자로 받았을 때, bat
은 다음과 같은 오류를 반환합니다:
The system cannot find the path specified. (os error 3)
이는 wrapper를 만들거나 다음 함수를 .bash_profile
에 추가하여 해결할 수
있습니다:
bat() {
local index
local args=("$@")
for index in $(seq 0 ${#args[@]}) ; do
case "${args[index]}" in
-*) continue;;
*) [ -e "${args[index]}" ] && args[index]="$(cygpath --windows "${args[index]}")";;
esac
done
command bat "${args[@]}"
}
bat
은 터미널의 트루컬러 지원 여부와 상관 없이 동작합니다.
그러나 대부분 문법 강조 테마의 색상은 8비트 색상에 최적화되어 있지 않습니다.
따라서 24비트 트루컬러 지원이 되는 터미널(terminator
, konsole
, iTerm2
,
...)을 사용하는 것을 적극 권장합니다.
트루컬러를 지원하는 터미널들과 더 자세한 정보는
이 글에서 찾아보실 수 있습니다.
사용하고 있는 트루컬러 터미널에서 COLORTERM
변수를 truecolor
혹은
24bit
로 설정되어 있는지 확인하세요.
그렇지 않을 경우, bat
은 24비트 확장열(escape sequence)이 지원되는지 여부를
판단할 수 없습니다 (그리고 8비트 색상을 사용합니다).
다른 테마를 사용해 보세요 (bat --list-themes
에서 목록을 볼 수 있습니다).
OneHalfDark
와 OneHalfLight
테마는 더 밝은 눈금과 선의 색상을 사용합니다.
bat
은 기본적으로 UTF-8과 UTF-16을 지원합니다.
다른 모든 종류의 파일 인코딩에 대해서는, 일반적으로 인코딩을 자동으로 판별하는
방법이 없기 때문에 먼저 UTF-8으로 변환해야 할 수 있습니다.
이를 위해 iconv
를 사용할 수 있습니다.
예시: Latin-1(ISO-8859-1)로 인코딩된 PHP 파일은 다음과 같이 처리할 수 있습니다:
iconv -f ISO-8859-1 -t UTF-8 my-file.php | bat
참고: bat
으로 문법 자동 감지가 되지 않는 경우에는 -l
/--language
옵션을
사용할 수 있습니다.
# 모든 서브모듈을 받기 위해 재귀적으로 복제하기
git clone --recursive https://github.com/sharkdp/bat
# (디버그 버전) 빌드
cd bat
cargo build --bins
# 단위 테스트와 통합 테스트 실행
cargo test
# (배포 버전) 설치
cargo install --locked
# 수정된 문법과 테마가 적용된 bat 바이너리 빌드
bash assets/create.sh
cargo install --locked --force
bat
의 pretty-printing 기능을 라이브러리로 사용하는 애플리케이션을 만들고
싶다면, API 문서를 살펴보세요.
참고로 bat
에 라이브러리로써 의존한다면, regex-onig
나 regex-fancy
를
기능으로 사용해야 합니다.
CONTRIBUTING.md
가이드를 살펴보세요.
만약 bat
의 취약점을 발견하였다면, David Peter에게 메일로 연락주시기 바랍니다.
bat
은 다음과 같은 목표를 달성하려고 합니다:
- 아름답고 발전된 문법 강조 기능 제공
- Git과의 연동을 통한 파일 변경 내용 확인
- (POSIX)
cat
의 대체제 - 사용자 친화적인 커맨드 라인 인터페이스 제공
비슷한 프로그램들을 찾고 있다면 많은 대안들이 있습니다. 비교는 이 문서를 참조해 주세요.
Copyright (c) 2018-2021 bat-developers.
bat
는 여러분의 선택에 따라 MIT 라이센스 또는 Apache 라이센스 2.0의 조건에 따라
배포됩니다.
라이센스의 세부사항은 LICENSE-APACHE와 LICENSE-MIT를 참조하세요.