ํฌ์ŠคํŠธ

๐Ÿงท tmux ์„ค์ •๊ณผ TPM ํ”Œ๋Ÿฌ๊ทธ์ธ โ€” .tmux.conf ์‹ค์ „ ๊ฐ€์ด๋“œ

TPM(Tmux Plugin Manager)์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” tmux ๋Œ€ํ‘œ ํ”Œ๋Ÿฌ๊ทธ์ธ(sensibleยทresurrectยทcontinuumยทvim-tmux-navigator ๋“ฑ)์˜ ์—ญํ• ๊ณผ ๋ณต๋ถ™์šฉ .tmux.conf ์˜ˆ์‹œ.

๐Ÿงท tmux ์„ค์ •๊ณผ TPM ํ”Œ๋Ÿฌ๊ทธ์ธ โ€” .tmux.conf ์‹ค์ „ ๊ฐ€์ด๋“œ

์ด ๊ธ€์€ tmux ๋กœ๋“œ๋งต์˜ ์„ค์ • + Plugin ์‚ฌ์šฉ ๊ตฌ๊ฐ„์ด๋‹ค. TPM์œผ๋กœ ๊ธฐ๋ณธ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ผ์ƒ ์‚ฌ์šฉ์—์„œ ์ฒด๊ฐ๋˜๋Š” tmux ์ž์ฒด ์˜ต์…˜์„ ํ•จ๊ป˜ ์ •๋ฆฌํ•œ๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ง์ ‘ ๋งŒ๋“œ๋Š” ๋ฒ•์€ tmux ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋‚˜์—์„œ.

๐Ÿ“ฆ TPM (Tmux Plugin Manager)

1
set -g @plugin 'tmux-plugins/tpm'

๐Ÿ‘‰ ์—ญํ• 

tmux ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ยท์—…๋ฐ์ดํŠธยท์‚ญ์ œํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ์ž๋‹ค. ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ˆ˜๋™ ์„ค์น˜ํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ํ•„์ˆ˜ ๊ตฌ์„ฑ์š”์†Œ๋Š” ์•„๋‹ˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•  ๋•Œ ํŽธ๋ฆฌํ•˜๋‹ค.


โฌ‡ ์„ค์น˜

1
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

.tmux.conf ์ž‘์„ฑ ํ›„ tmux ์•ˆ์—์„œ prefix + I(Ctrl+b โ†’ I)๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•œ๋‹ค.


๐Ÿ“š TPM ๊ธฐ๋ฐ˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ

1. tmux-plugins/tmux-sensible

1
set -g @plugin 'tmux-plugins/tmux-sensible'

โœ” ์—ญํ• 

tmux์˜ ๊ธฐ๋ณธ๊ฐ’์„ ๋” ํ•ฉ๋ฆฌ์ ์ธ ์„ค์ •(sane defaults) ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ. ๊ธฐ๋ณธ ํ‚ค ์„ค์ •, ํŒจ๋„ ๋™์ž‘, ๊ธฐํƒ€ ๋น„์ง๊ด€์  ์„ค์ •๋“ค์„ ๊ฐœ์„ ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์ˆ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋จ.


2. tmux-plugins/tmux-resurrect

1
2
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @resurrect-capture-pane-contents 'on'

โœ” ์—ญํ• 

tmux ์„ธ์…˜์„ โ€œ๋ถ€ํ™œ(resurrect)โ€ ์‹œ์ผœ์ฃผ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ. ์ €์žฅ๋œ ์‹œ์ ์˜ ์„ธ์…˜, ์œˆ๋„์šฐ, ํŒจ๋„ ๋ ˆ์ด์•„์›ƒ, ์‹คํ–‰ ์ค‘ ๋ช…๋ น ๋“ฑ์„ ๋ณต์›ํ•ด์คŒ.

โœ” ๊ธฐ๋Šฅ

  • prefix + Ctrl-s โ†’ ์„ธ์…˜ ์ƒํƒœ ์ €์žฅ
  • prefix + Ctrl-r โ†’ ์„ธ์…˜ ๋ณต์›
  • ํŒจ๋„ ๋‚ด์šฉ๊นŒ์ง€ ์ €์žฅํ•˜๋ ค๋ฉด @resurrect-capture-pane-contents='on' ํ•„์š”

3. tmux-plugins/tmux-continuum

1
2
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'

โœ” ์—ญํ• 

tmux-resurrect๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ ๋ฐฑ์—… + ์ž๋™ ๋ณต์› ๊ธฐ๋Šฅ์„ ์ œ๊ณต.

โœ” ๊ธฐ๋Šฅ

  • ์ž๋™ ์ €์žฅ (๊ธฐ๋ณธ 15๋ถ„ ๊ฐ„๊ฒฉ)
  • ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ… ํ›„ tmux ์ž๋™ ๋ณต์›
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ทธ๋Œ€๋กœ ๋ณต๊ตฌ ๊ฐ€๋Šฅ

๐Ÿ‘‰ tmux-resurrect์˜ ์ƒ์œ„ ํ™•์žฅ ํ”Œ๋Ÿฌ๊ทธ์ธ

์„ธ์…˜ ๋งค๋‹ˆ์ €(tmuxinatorยทsmug)๋Š” ์—ฌ๊ธฐ ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋‹ค๋ฅธ ์ถ•์ด๋‹ค. resurrect๋Š” ๋–  ์žˆ๋˜ ์„ธ์…˜์„ ์ €์žฅโ†’๋ณต์›ํ•˜๊ณ , ์„ธ์…˜ ๋งค๋‹ˆ์ €๋Š” tmux ๋ฐ–์˜ ์™ธ๋ถ€ CLI๋กœ ๋ ˆ์ด์•„์›ƒ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ ์–ธโ†’์ƒ์„ฑํ•œ๋‹ค. TPM ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์•„๋‹ˆ๋ผ ๋ณ„๋„ ๋„๊ตฌ์ด๋ฉฐ, 3๋‹จ๊ณ„ ์„ธ์…˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์—์„œ ๋‹ค๋ฃฌ๋‹ค.


4. jimeh/tmux-themepack

1
2
set -g @plugin 'jimeh/tmux-themepack'
set -g @themepack 'powerline/default/cyan'

โœ” ์—ญํ• 

๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฐ”(theme) ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ…Œ๋งˆ ํ”Œ๋Ÿฌ๊ทธ์ธ.

โœ” ํšจ๊ณผ

  • Powerline ์Šคํƒ€์ผ ์ ์šฉ ๊ฐ€๋Šฅ
  • ์ƒ‰์ƒ ์กฐํ•ฉ์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝ
  • ํ…Œ๋งˆ ํŒŒ์ผ์„ ์ง์ ‘ ์ˆ˜์ •ํ•  ํ•„์š” ์—†์Œ

5. christoomey/vim-tmux-navigator

1
set -g @plugin 'christoomey/vim-tmux-navigator'

โœ” ์—ญํ• 

Vim/Neovim ํŒจ๋„๊ณผ Tmux ํŒจ๋„ ์‚ฌ์ด๋ฅผ Ctrl+h/j/k/l ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ.

โœ” ํšจ๊ณผ

  • Vim ์ฐฝ โ†” tmux pane ์ด๋™์ด ์ง๊ด€์ 
  • Vim ์‚ฌ์šฉ์ž์˜ ํ•„์ˆ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ

๐Ÿ“Ž ๋” ์ฐพ๊ธฐ ยท awesome-tmux (10.1kโญ, ์œ ์ง€ ์ค‘) โ€” ์œ„ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค ๋„ˆ๋จธ์˜ ํ”Œ๋Ÿฌ๊ทธ์ธยท์„ค์ •ยท์•„ํ‹ฐํด์„ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๋ชจ์•„๋‘” ์ปค๋ฎค๋‹ˆํ‹ฐ ์ธ๋ฑ์Šค. ํ”Œ๋Ÿฌ๊ทธ์ธ ๋Œ€๋ถ€๋ถ„์€ tmux-plugins org์— semi-๊ณต์‹์œผ๋กœ ๋ชจ์—ฌ ์žˆ๋‹ค(TPM 14.9kโญยทresurrect 12.9kโญ).


โš™ ๊ธฐํƒ€ tmux ์„ค์ •

๊ธฐ๋ณธ ํ„ฐ๋ฏธ๋„ ๋ฐ ๋งˆ์šฐ์Šค ํ™œ์„ฑํ™”

1
2
set -g default-terminal "tmux-256color"
set -g mouse on

์„ค๋ช…

  • tmux-256color: tmux ๋‚ด๋ถ€ terminfo๋กœ, 256์ƒ‰ยท์ดํƒค๋ฆญยทTrue Color๋ฅผ ์ œ๋Œ€๋กœ ์•Œ๋ฆฐ๋‹ค. ๊ณผ๊ฑฐ ํ”ํžˆ ์“ฐ๋˜ screen-256color๋Š” ๋” ๋ณด์ˆ˜์ ์ธ fallback์ผ ๋ฟ์ด๋ผ, terminfo๋งŒ ์žˆ์œผ๋ฉด tmux-256color๊ฐ€ ๊ถŒ์žฅ๊ฐ’์ด๋‹ค. (์•„๋ž˜ True Color ์„ค์ •๊ณผ ํ•œ ์Œ)
  • ๋งŒ์•ฝ tmux-256color ์ ์šฉ ํ›„ ์ƒ‰์ด ๊นจ์ง€๋ฉด ํ•ด๋‹น terminfo๊ฐ€ ์—†๋Š” ํ™˜๊ฒฝ์ด๋‹ค. screen-256color๋กœ ๋˜๋Œ๋ฆฌ๊ฑฐ๋‚˜ terminfo๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
  • mouse on: ๋งˆ์šฐ์Šค๋กœ ํŒจ๋„ ํฌ๊ธฐ ์กฐ์ ˆ, ์„ ํƒ, ์Šคํฌ๋กค ๊ฐ€๋Šฅ

๐Ÿ TPM ์ดˆ๊ธฐํ™”

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

tmux conf ๋งจ ๋งˆ์ง€๋ง‰ ์ค„์— ์œ„์น˜ํ•ด์•ผ ํ•จ.


๐Ÿงฉ ์ตœ์ข… .tmux.conf (ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค๋ช… ํฌํ•จ)

# --- TPM ---
set -g @plugin 'tmux-plugins/tpm'

# --- Plugin list ---
set -g @plugin 'tmux-plugins/tmux-sensible'       # sane tmux defaults
set -g @plugin 'tmux-plugins/tmux-resurrect'      # save & restore tmux sessions
set -g @plugin 'tmux-plugins/tmux-continuum'      # auto-save & auto-restore
set -g @plugin 'jimeh/tmux-themepack'             # tmux status bar themes
set -g @plugin 'christoomey/vim-tmux-navigator'   # navigate between vim <-> tmux with Ctrl-hjkl

# --- Theme config ---
set -g @themepack 'powerline/default/cyan'

# --- Resurrect settings ---
set -g @resurrect-capture-pane-contents 'on'
set -g @continuum-restore 'on'

# --- Tmux settings ---
set -g default-terminal "tmux-256color"   # ์ƒ‰ ๊นจ์ง€๋ฉด screen-256color๋กœ fallback
set -g mouse on

# --- Initialize TPM (must be last) ---
run '~/.tmux/plugins/tpm/tpm'

์ž์ฃผ ์“ฐ๋Š” .tmux.conf ์„ค์ •

TPM์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ๋ณ„๋„๋กœ, tmux ์ž์ฒด ์˜ต์…˜ ์ค‘ ์ผ์ƒ ์‚ฌ์šฉ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์„ค์ •์„ ๋ชจ์•˜๋‹ค. ์•„๋ž˜ ํ•ญ๋ชฉ์€ ์œ„ ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ ์ ˆ์ฐจ์™€ ๋…๋ฆฝ์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

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์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค.

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

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

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 ์Šคํƒ€์ผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

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

bind s choose-tree -Zs -O name

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

์ ์šฉยท๊ฒ€์ฆ

1
tmux source-file ~/.tmux.conf

์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด๋„ ์ด๋ฏธ ์‹คํ–‰ ์ค‘์ธ tmux server์—๋Š” ์ž๋™ ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค. True Color๋Š” infocmp -x tmux-256color์™€ tmux ๋ฐ–์˜ $TERM์„ ํ™•์ธํ•œ๋‹ค.

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

์ธ๊ธฐ ํƒœ๊ทธ