
이번에 zellij에서 tmux 환경으로 전환을 하게 되었습니다. workmux라는 도구를 사용해보고 싶어서 였습니다. 사용경험이 너무 좋아 공유 드리고자 글을 작성하게 되었습니다.
터미널 멀티 플렉서의 종류로는 tmux, zellij 등이 있습니다.
터미널 멀티 플렉서에 대해서 간단하게 설명을 하자면 terminal을 끄더라도 해당 터미널 세션을 살아있도록 유지하는 도구라고 설명할 수 있습니다.
예를 들면, 하나의 단일 터미널에서 백그라운드 작업을 하거나 ssh로 연결했을 때 ssh 접속을 종료하더라도 해당 터미널 세션이 살아있게 유지하기 위합입니다.
작업 환경 보존에 아주 유용하며, 서버를 켜두고 실시간으로 쌓이는 로그를 보거나 아니면 터미널 단일 세션을 여러 pane으로 쪼개고 쉽게 모니터링, 가장 중요한 ai cli 도구 활용시 ai 작업이 지속되게 하기 위해서 사용합니다.
workmux란 tmux 세션에서 git worktree 별로 윈도우를 만들고 해당 윈도우를 전환해가면서 여러개의 작업을 병렬처리할 때 아주 유용합니다.
workmux로 새로운 브랜치를 파면 해당 브랜치 이름을 딴 worktree 폴더가 생기고 window 세션이 생겨 분리된 작업 환경에서 작업하는 것처럼 동작하고 각각을 pr해서 사용할 수 있습니다.
병합된 branch 자동 삭제 등의 기능이 포함되있어서 병렬된 작업을 처리할 때 많은 도움이 된다고 느꼈습니다.
공식문서가 아주 잘되있기 때문에 workmux와 tmux를 설치하는데 큰 어려움은 없다고 가정하고 제가 사용하면서 마음에 들었던 workflow를 설명드리려고 합니다.
alias wm=workmux
tm() {
case "$1" in
remove|rm)
tmux kill-session -t "$2"
;;
new-session|ns)
# 세션이 존재하는지 확인
if tmux has-session -t "$2" 2>/dev/null; then
# 이미 존재하면 attach 또는 switch
if [ -n "$TMUX" ]; then
tmux switch-client -t "$2"
else
tmux attach -t "$2"
fi
else
# 없으면 새로 생성
tmux new -s "$2"
fi
;;
*)
# 인자가 하나만 있고 tmux 세션 이름으로 사용 가능한 경우, 세션에 attach 또는 생성
if [ $# -eq 1 ] && [ -n "$1" ]; then
if tmux has-session -t "$1" 2>/dev/null; then
# 이미 존재하면 attach 또는 switch
if [ -n "$TMUX" ]; then
tmux switch-client -t "$1"
else
tmux attach -t "$1"
fi
else
tmux new -s "$1"
fi
else
# 그 외의 경우 tmux 명령어로 전달
tmux "$@"
fi
;;
esac
}
ts() {
local selected=$(tmux ls | cut -d: -f1 | fzf --height 40% --reverse)
[ -n "$selected" ] && tm "$selected"
}
ws() {
local selected=$(wm ls | awk 'NR>1 {print $1}' | fzf-tmux -p 55%,60% --reverse)
[ -n "$selected" ] && wm open "$selected"
}
wm add feat/post # feat-post worktree 생성
ai 작업
wm add feat/comment # feat-comment worktree 생성
ai 작업
# wm dashbaord로 작업 상태 확인
# ws fuzzing search로 윈도우간 전환
# ts fuzzing search로 session간 전환
