๐งท tmux ์ค์ ๊ณผ TPM ํ๋ฌ๊ทธ์ธ โ .tmux.conf ์ค์ ๊ฐ์ด๋
TPM(Tmux Plugin Manager)์ผ๋ก ๊ด๋ฆฌํ๋ tmux ๋ํ ํ๋ฌ๊ทธ์ธ(sensibleยทresurrectยทcontinuumยทvim-tmux-navigator ๋ฑ)์ ์ญํ ๊ณผ ๋ณต๋ถ์ฉ .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-pluginsorg์ 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์ ํ์ธํ๋ค.