ํฌ์ŠคํŠธ

๐Ÿงท tmux ์œ ์šฉํ•œ ์„ค์ • ์ •๋ฆฌ (.tmux.conf ๊ธฐ์ค€)

๋‚ด tmux ์„ค์ •์—์„œ ๋ฐ”๋กœ ์ฒด๊ฐ๋˜๋Š” ์˜ต์…˜๋งŒ ๋ฝ‘์•„ ํ•ต์‹ฌ ๋™์ž‘, ํŒจ๋„, ์„ธ์…˜ ํŠธ๋ฆฌ, ํ”Œ๋Ÿฌ๊ทธ์ธ๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์ •๋ฆฌ.

๐Ÿงท tmux ์œ ์šฉํ•œ ์„ค์ • ์ •๋ฆฌ (.tmux.conf ๊ธฐ์ค€)

์‹ค์ œ๋กœ ์“ฐ๋Š” .tmux.conf์—์„œ ์ฒด๊ฐ์ด ํฐ ์˜ต์…˜๋งŒ ๋”ฐ๋กœ ๋ชจ์•˜๋‹ค. ๋ชฉ์ ์€ โ€œ์™œ ์ด ์˜ต์…˜์„ ๋‘๋Š”์ง€โ€๋ฅผ ์žŠ์ง€ ์•Š๊ฒŒ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๊ธ€์€ tmux ๋กœ๋“œ๋งต์˜ 1๋‹จ๊ณ„(์„ค์ • ๋‹ค๋“ฌ๊ธฐ) ๋‹ค.

1. ๊ธฐ๋ณธ ๋™์ž‘

ESC ์ง€์—ฐ ์ค„์ด๊ธฐ

set -sg escape-time 0

Vim/Neovim์—์„œ ESC์™€ Alt ๊ณ„์—ด ์ž…๋ ฅ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด tmux๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์—†์•ค๋‹ค. ๋ฐ˜์‘์€ ๋นจ๋ผ์ง€์ง€๋งŒ ์ผ๋ถ€ ํ„ฐ๋ฏธ๋„ยทํ‚ค ์กฐํ•ฉ์—์„œ Alt/Meta ์ž…๋ ฅ ํŒ๋ณ„์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ž‘์€ ๊ฐ’์œผ๋กœ ์กฐ์ •ํ•œ๋‹ค.

True Color

๋จผ์ € tmux ์•ˆ์—์„œ ์‚ฌ์šฉํ•  terminal description์„ ์ •ํ•œ๋‹ค.

set -g default-terminal "tmux-256color"

tmux-256color terminfo๊ฐ€ ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š”์ง€๋Š” ํ™•์ธํ•œ๋‹ค.

1
infocmp -x tmux-256color

tmux 3.2+์—์„œ๋Š” ๋ฐ”๊นฅ terminal emulator๊ฐ€ RGB color๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ terminal-features๋กœ ์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ์‹์ด ์šฐ์„ ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Ghosttyยทxterm ๊ณ„์—ด TERM ๊ฐ’์— ๋งž์ถฐ ๋‹ค์Œ์ฒ˜๋Ÿผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

set -as terminal-features ",xterm*:RGB"

ํ™˜๊ฒฝ์— ๋”ฐ๋ผ TERM ํŒจํ„ด์€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ tmux ๋ฐ–์—์„œ ๋‹ค์Œ์„ ๋จผ์ € ํ™•์ธํ•œ๋‹ค.

1
echo "$TERM"

๊ตฌ๋ฒ„์ „ tmux๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋ฉด terminal-overrides์˜ Tc ํ™•์žฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

set -as terminal-overrides ",xterm*:Tc"
1
2
3
4
5
RGB
โ†’ ๊ณต์‹ terminfo capability ์ด๋ฆ„

Tc
โ†’ tmux๊ฐ€ ์ œ๊ณตํ•ด ์˜จ ํ™•์žฅ capability

๋ฌด์กฐ๊ฑด *256col*์— True Color๋ฅผ ์„ ์–ธํ•˜๊ธฐ๋ณด๋‹ค ์‹ค์ œ ๋ฐ”๊นฅ terminal emulator์˜ TERM๊ณผ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•œ ๋’ค ์„ค์ •ํ•˜๋Š” ํŽธ์ด ์•ˆ์ „ํ•˜๋‹ค.

๋งˆ์šฐ์Šค

set -g mouse on

ํŒจ๋„ ์„ ํƒยทํฌ๊ธฐ ์กฐ์ ˆยท์Šคํฌ๋กค ๋“ฑ mouse integration์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค.

2. ํŒจ๋„๊ณผ ํ‚ค ๋ฐ”์ธ๋”ฉ

๋ถ„ํ•  ์‹œ ํ˜„์žฌ ๊ฒฝ๋กœ ์œ ์ง€

bind '"' split-window -v -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

์ƒˆ pane์„ ํ˜„์žฌ pane์˜ working directory์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.

ํŒจ๋„ ์ •๋ณด ํ‘œ์‹œ

set -g pane-border-status bottom
set -g pane-border-format " #P #{pane_current_command} "

pane ๋ฒˆํ˜ธ์™€ ํ˜„์žฌ command๋ฅผ border์— ํ‘œ์‹œํ•œ๋‹ค.

copy-mode์— vi ํ‚ค ์‚ฌ์šฉ

setw -g mode-keys vi

copy-mode์˜ key table์„ vi ์Šคํƒ€์ผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

3. ์„ธ์…˜ ํŠธ๋ฆฌ ์ •๋ ฌ

bind s choose-tree -Zs -O name

choose-tree๋ฅผ ์ด๋ฆ„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด ์—ฐ๋‹ค. tmux ๋ฒ„์ „์— ๋”ฐ๋ผ option ๋™์ž‘์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐ”์ธ๋”ฉ์ด ์‹คํŒจํ•˜๋ฉด ํ˜„์žฌ tmux list-commands์™€ man page๋ฅผ ํ™•์ธํ•œ๋‹ค.

4. TPM ํ”Œ๋Ÿฌ๊ทธ์ธ

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชฉ๋กยท์—ญํ• ๊ณผ ์„ค์ •์€ Tmux ์„ค์ • & ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค๋ช…์— ๋”ฐ๋กœ ๋‘”๋‹ค. ์ด ๊ธ€์—์„œ๋Š” tmux core option๋งŒ ๋‹ค๋ฃฌ๋‹ค.

5. ์ ์šฉ๊ณผ ๋ฆฌ๋กœ๋“œ

TPM์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ดˆ๊ธฐํ™”๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ ์–ธ ๋’ค์— ๋‘”๋‹ค.

run '~/.tmux/plugins/tpm/tpm'

ํ˜„์žฌ server์— ์„ค์ •์„ ๋‹ค์‹œ ์ฝํžˆ๋ ค๋ฉด:

1
tmux source-file ~/.tmux.conf

ํ™•์ธ ์ˆœ์„œ

์ƒ‰์ด๋‚˜ ํ‚ค ์ž…๋ ฅ์ด ์ด์ƒํ•  ๋•Œ๋Š” ์„ค์ •์„ ๋” ๋ถ™์ด๊ธฐ ์ „์— ๋‹ค์Œ ์ˆœ์„œ๋กœ ํ™•์ธํ•œ๋‹ค.

1
2
3
4
5
1. tmux ๋ฐ– TERM ํ™•์ธ
2. tmux ์•ˆ TERM ํ™•์ธ
3. tmux-256color terminfo ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธ
4. terminal-features / terminal-overrides ํ™•์ธ
5. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Neovim ๋“ฑ) ์„ค์ • ํ™•์ธ

ํ„ฐ๋ฏธ๋„ ๊ธฐ๋Šฅ ๋ฌธ์ œ๋Š” tmux ํ•œ ์ธต๋งŒ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐ– terminal โ†’ tmux โ†’ ์•ˆ์ชฝ application ์ˆœ์œผ๋กœ ๋ฒ”์œ„๋ฅผ ์ขํžŒ๋‹ค.

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.