Skip to content

Latest commit

ย 

History

History
835 lines (609 loc) ยท 28.9 KB

README-ko.md

File metadata and controls

835 lines (609 loc) ยท 28.9 KB

bat - a cat clone with wings
Build Status license Version info
๋ฌธ๋ฒ• ๊ฐ•์กฐ์™€ Git ํ†ตํ•ฉ ๊ธฐ๋Šฅ์˜ cat(1) ํด๋ก 

์ฃผ์š” ๊ธฐ๋Šฅ๋“ค โ€ข ์‚ฌ์šฉ๋ฒ• โ€ข ์„ค์น˜ โ€ข ์‚ฌ์šฉ์žํ™” โ€ข ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ์™€ ๋Œ€์•ˆ๋“ค
[English] [ไธญๆ–‡] [ๆ—ฅๆœฌ่ชž] [ํ•œ๊ตญ์–ด] [ะ ัƒััะบะธะน]

๋ฌธ๋ฒ• ๊ฐ•์กฐ

bat์€ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ๋งˆํฌ์—… ์–ธ์–ด์˜ ๋ฌธ๋ฒ• ๊ฐ•์กฐ(syntax highlighting) ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

Syntax highlighting example

Git ํ†ตํ•ฉ

bat์€ git์„ ํ†ตํ•ด ์ธ๋ฑ์Šค์™€ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋ถ„์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค (์™ผ์ชฝ ์‚ฌ์ด๋“œ๋ฐ”๋ฅผ ํ™•์ธํ•˜์„ธ์š”):

Git integration example

๋น„์ธ์‡„ ๋ฌธ์ž ์ฒ˜๋ฆฌ

-A/--show-all ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ธ์‡„ ๋ฌธ์ž๋ฅผ ํ‘œ์‹œ ๋ฐ ๊ฐ•์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Non-printable character example

์ž๋™ ํŽ˜์ด์ง•

bat์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•œ ํ™”๋ฉด์— ๋น„ํ•ด ์ถœ๋ ฅ์ด ํฐ ๊ฒฝ์šฐ less์™€ ๊ฐ™์€ ํŽ˜์ด์ €(pager)๋กœ ์ถœ๋ ฅ์„ ์—ฐ๊ฒฐ(pipe)ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ bat์„ ์–ธ์ œ๋‚˜ cat์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด (์ถœ๋ ฅ์„ ํŽ˜์ด์ง€ํ•˜์ง€ ์•Š๊ธฐ), --paging=never ์˜ต์…˜์„ ์ปค๋งจ๋“œ ๋ผ์ธ์ด๋‚˜ ์„ค์ • ํŒŒ์ผ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์…ธ(shell) ์„ค์ •์—์„œ cat์„ bat์˜ alias๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, alias cat='bat --paging=never'๋ฅผ ์จ์„œ ๊ธฐ๋ณธ ํ–‰๋™์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์—ฐ๊ฒฐ(concatenation)

ํŽ˜์ด์ €(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'.

๋‹ค๋ฅธ ๋„๊ตฌ๋“ค๊ณผ ํ†ตํ•ฉํ•˜๊ธฐ

fzf

bat์„ fzf์˜ ํ”„๋ฆฌ๋ทฐ๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” bat์˜ --color=always ์˜ต์…˜์œผ๋กœ ํ•ญ์ƒ ์ปฌ๋Ÿฌ ์ถœ๋ ฅ์ด ๋‚˜์˜ค๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ --line-range ์˜ต์…˜์œผ๋กœ ๊ธด ํŒŒ์ผ์˜ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

fzf --preview 'bat --color=always --style=numbers --line-range=:500 {}'

๋” ๋งŽ์€ ์ •๋ณด๋Š” fzf์˜ README๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

find์™€ fd

find์˜ -exec ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ bat๋กœ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

find โ€ฆ -exec bat {} +

fd๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, -X/--exec-batch ์˜ต์…˜์„ ์ด์šฉํ•˜์—ฌ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

fd โ€ฆ -X bat

ripgrep

batgrep์„ ํ†ตํ•ด bat๋กœ ripgrep์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

batgrep needle src/

tail -f

bat์™€ tail -f๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ํŒŒ์ผ์„ ๋ฌธ๋ฒ• ๊ฐ•์กฐํ•˜๋ฉฐ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tail -f /var/log/pacman.log | bat --paging=never -l log

์ฐธ๊ณ ๋กœ ์ด ์ž‘์—…์„ ํ•˜๋ ค๋ฉด ํŽ˜์ด์ง• ๊ธฐ๋Šฅ์„ ๊บผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด ๊ฒฝ์šฐ ๋ฌธ๋ฒ•์„ ์ž๋™ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ ์šฉํ•  ๋ฌธ๋ฒ•์„ ์ง์ ‘ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (-l log).

git

bat๊ณผ git show๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ํŒŒ์ผ์˜ ์ด์ „ ๋ฒ„์ „์„ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ๋ฒ• ๊ฐ•์กฐ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

git show v0.6.0:src/main.rs | bat -l rs

git diff

bat๊ณผ git diff๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •๋œ ์ฝ”๋“œ ์ฃผ์œ„์˜ ์ค„๋“ค์„ ์˜ฌ๋ฐ”๋ฅธ ๋ฌธ๋ฒ• ๊ฐ•์กฐ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

batdiff() {
    git diff --name-only --diff-filter=d | xargs bat --diff
}

์ด๊ฒƒ์„ ๋ณ„๋„์˜ ๋„๊ตฌ๋กœ ์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด bat-extras์˜ batdiff๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

Git๊ณผ diff์˜ ๋” ๋งŽ์€ ์ง€์›์„ ์›ํ•œ๋‹ค๋ฉด delta๋ฅผ ํ™•์ธํ•ด ๋ณด์„ธ์š”.

xclip

bat ์ถœ๋ ฅ์— ์ค„ ๋ฒˆํ˜ธ์™€ Git ์ˆ˜์ • ๋‚ด์—ญ์ด ํฌํ•จ๋˜์–ด์„œ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” bat์˜ -p/--plain ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐ„๋‹จํžˆ xclip์œผ๋กœ ์ถœ๋ ฅ์„ ์—ฐ๊ฒฐ(pipe)ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค:

bat main.cpp | xclip

bat๋Š” ์ถœ๋ ฅ์ด ์šฐํšŒ๋˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ฐ์ง€ํ•˜์—ฌ ํŒŒ์ผ ๋‚ด์šฉ ๊ทธ๋Œ€๋กœ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

man

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 ๊ตฌํ˜„์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

prettier / shfmt / rustfmt

prettybat ์Šคํฌ๋ฆฝํŠธ๋Š” ์ฝ”๋“œ๋ฅผ ํฌ๋งทํ•˜๊ณ  bat์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๋ž˜ํผ(wrapper)์ž…๋‹ˆ๋‹ค.

์„ค์น˜

Packaging status

Ubuntu์—์„œ (apt ์‚ฌ์šฉ)

... ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ 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

Ubuntu์—์„œ (๊ฐ€์žฅ ์ตœ์‹  .deb ํŒจํ‚ค์ง€๋“ค ์‚ฌ์šฉ)

... ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ Debian ๊ธฐ๋ฐ˜์˜ Linux ๋ฐฐํฌํŒ๋“ค์—์„œ.

๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์ด ์„ค์น˜ํ•œ Ubuntu/Debian์— ํŒจํ‚ค์ง€๊ฐ€ ๋ฐฐํฌ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฐ€์žฅ ์ตœ์‹  ๋ฆด๋ฆฌ์ฆˆ๋œ bat์„ ์›ํ•œ๋‹ค๋ฉด, ๋ฆด๋ฆฌ์ฆˆ ํŽ˜์ด์ง€์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด .deb ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›์•„ ์„ค์น˜ํ•˜์„ธ์š”:

sudo dpkg -i bat_0.18.3_amd64.deb  # adapt version number and architecture

Alpine Linux์—์„œ

์ ์ ˆํ•œ ์ €์žฅ์†Œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋‹ค๋ฉด, ๊ณต์‹ ์†Œ์Šค๋ฅผ ํ†ตํ•ด bat ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

apk add bat

Arch Linux์—์„œ

๊ณต์‹ ์†Œ์Šค๋ฅผ ํ†ตํ•ด bat ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

pacman -S bat

Fedora์—์„œ

๊ณต์‹ Fedora ๋ชจ๋“ˆ ์ €์žฅ์†Œ์—์„œ bat ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

dnf install bat

Funtoo Linux์—์„œ

dev-kit์„ ํ†ตํ•ด bat ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

emerge sys-apps/bat

Gentoo Linux์—์„œ

๊ณต์‹ ์†Œ์Šค๋ฅผ ํ†ตํ•ด bat ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

emerge sys-apps/bat

Void Linux์—์„œ

xbps-install์„ ์ด์šฉํ•ด bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

xbps-install -S bat

Termux์—์„œ

pkg๋ฅผ ์ด์šฉํ•ด bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

pkg install bat

FreeBSD์—์„œ

pkg๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ bat ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

pkg install bat

๋˜๋Š” FreeBSD ํฌํŠธ์—์„œ ์ง์ ‘ ๋นŒ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค:

cd /usr/ports/textproc/bat
make install

nix๋ฅผ ์จ์„œ

nix package manager๋ฅผ ์ด์šฉํ•ด bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

nix-env -i bat

openSUSE์—์„œ

zypper๋ฅผ ์ด์šฉํ•ด bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

zypper install bat

snap ํŒจํ‚ค์ง€๋ฅผ ์จ์„œ

์ง€๊ธˆ์œผ๋กœ์„œ๋Š” ์ถ”์ฒœํ•˜๋Š” snap ํŒจํ‚ค์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ œ๊ณต๋˜๋Š” ํŒจํ‚ค์ง€๋“ค์ด ์กด์žฌํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

macOS (๋˜๋Š” Linux)์—์„œ Homebrew๋ฅผ ์จ์„œ

macOS์˜ Homebrew ๋˜๋Š” Linux์˜ Homebrew๋ฅผ ์ด์šฉํ•˜์—ฌ bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

brew install bat

macOS์—์„œ MacPorts๋ฅผ ์จ์„œ

MacPorts๋ฅผ ์ด์šฉํ•˜์—ฌ bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

port install bat

Windows์—์„œ

Windows์—์„œ bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋จผ์ € bat์„ ์„ค์น˜ํ•œ ํ›„, "Windows์—์„œ bat ์‚ฌ์šฉํ•˜๊ธฐ" ์„น์…˜์„ ์‚ดํŽด๋ณด์„ธ์š”.

์ „์ œ ์กฐ๊ฑด

Visual C++ ์žฌ๋ฐฐํฌ ๊ฐ€๋Šฅ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Chocolatey๋ฅผ ์จ์„œ

Chocolatey๋ฅผ ์ด์šฉํ•ด bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

choco install bat

Scoop์„ ์จ์„œ

scoop์„ ์ด์šฉํ•ด bat์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

scoop install bat

์‚ฌ์ „ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋“ค๋กœ

๋ฆด๋ฆฌ์ฆˆ ํŽ˜์ด์ง€์—์„œ ์‚ฌ์ „ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Visual C++ ์žฌ๋ฐฐํฌ ๊ฐ€๋Šฅ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ๋“ค๋กœ

๋ฆด๋ฆฌ์ฆˆ ํŽ˜์ด์ง€์—์„œ ๋‹ค์–‘ํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•ด ์‚ฌ์ „ ๋นŒ๋“œ๋œ ๋ฒ„์ „๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋งํฌ ๋ฐ”์ด๋„ˆ๋ฆฌ๋“ค์€ ํŒŒ์ผ ์ด๋ฆ„์— musl ์ด ํฌํ•จ๋œ ์•„์นด์ด๋ธŒ๋“ค์„ ํ™•์ธํ•˜์„ธ์š”.

์†Œ์Šค์—์„œ

bat์˜ ์†Œ์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, Rust 1.60.0 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 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๊ณผ ๊ฐ™์€ ํ…Œ๋งˆ๊ฐ€ ๋” ์ž˜ ์–ด์šธ๋ฆฝ๋‹ˆ๋‹ค. ์•„๋ž˜ ์ƒˆ๋กœ์šด ํ…Œ๋งˆ ์ถ”๊ฐ€ํ•˜๊ธฐ ์„น์…˜์— ๋”ฐ๋ผ ์ปค์Šคํ…€ ํ…Œ๋งˆ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

8๋น„ํŠธ ํ…Œ๋งˆ

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 ๋ฌธ๋ฒ• ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋‹จ ๋ฌธ๋ฒ•์„ ์ฐพ์•˜๋‹ค๋ฉด:

  1. ๋ฌธ๋ฒ• ์ •์˜ ํŒŒ์ผ๋“ค์„ ๋„ฃ์„ ํด๋”๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค:
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
  1. ์ด์ œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํŒŒ์ผ๋“ค์„ ํŒŒ์‹ฑ(parse)ํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ์บ์‹œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
bat cache --build
  1. ๋งˆ์ง€๋ง‰์œผ๋กœ, bat --list-languages๋กœ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ์–ธ์–ด๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ๋Œ์•„๊ฐˆ ์ผ์ด ์ƒ๊ธด๋‹ค๋ฉด, ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค:

bat cache --clear
  1. ๋งŒ์•ฝ ํŠน์ • ๋ฌธ๋ฒ•์ด bat์— ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด, ๋ฐฉ์นจ๊ณผ ์ ˆ์ฐจ๋ฅผ ์—ฌ๊ธฐ์„œ ์ฝ์€ ํ›„ "๋ฌธ๋ฒ• ์š”์ฒญ(syntax request)"์„ ์—ด์–ด ์ฃผ์„ธ์š”: ๋ฌธ๋ฒ• ์š”์ฒญํ•˜๊ธฐ.

์ƒˆ๋กœ์šด ํ…Œ๋งˆ ์ถ”๊ฐ€ํ•˜๊ธฐ

์ด ๊ณผ์ •์€ ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ• ์ •์˜ ์ถ”๊ฐ€ ๋ฐฉ์‹๊ณผ ๋งค์šฐ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ €, ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ• ๊ฐ•์กฐ ํ…Œ๋งˆ ํด๋”๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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++"

Windows์—์„œ bat ์‚ฌ์šฉํ•˜๊ธฐ

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์„ ๋นˆ ๋ฌธ์ž์—ด๋กœ ์„ค์ •ํ•˜์—ฌ ํŽ˜์ด์ง•์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cygwin

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๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.