Featured image of post [Tmux] 04. 윈도우와 패널 기초 - 분할·전환·닫기·zoom

[Tmux] 04. 윈도우와 패널 기초 - 분할·전환·닫기·zoom

한 세션 안에서 윈도우를 만들고 전환·닫는 법과, 화면을 좌우·상하로 나누는 패널 분할·이동·zoom을 다룹니다. new-window·split-window·select-pane·resize-pane -Z 옵션을 실전 예제로 확인합니다.

03장까지는 세션을 만들고 오가는 법만 다뤘다. 이 장은 그 세션 안에서 한 단계 더 들어가, 윈도우를 여러 개 만들어 전환하고, 한 윈도우의 화면을 패널로 쪼개 동시에 여러 셸을 보는 법을 다룬다. 00장에서 소개한 세션→윈도우→패널 계층을 실제로 손으로 조작하는 첫 장이다.

이 장을 읽기 전에

선행 챕터: 이 장은 03장: 세션 다루기에서 세션을 만들고 오가는 법을 익혔다는 전제로 서술한다. 01장에서 다룬 세션·윈도우·패널 계층 구조도 이미 알고 있다고 가정한다.

이 장의 깊이: 입문에서 중급(패널 분할 방향을 헷갈리지 않고, zoom과 kill의 차이를 설명할 수 있는 수준) 사이를 오간다. 다루지 않는 것: prefix 키 자체를 다른 키로 바꾸는 법은 05장에서, 지금 다루는 기본 키바인딩을 자신에게 맞게 재정의하는 법은 07장에서, 여러 패널을 미리 정의된 레이아웃으로 한 번에 배치하는 법은 09장에서, 패널을 다른 윈도우로 옮기거나 합치는 고급 재배치는 11장에서 각각 다룬다. 이 장은 기본 prefix 키(Ctrl+b)로 할 수 있는 최소 조작에 집중한다.

당신의 수준에 맞는 경로

수준읽을 부분핵심 목표
세션 하나만 만들어 본 초보자정신 모델, 명령과 옵션, 예시윈도우를 여러 개 만들고 화면을 패널로 나눠 동시에 작업할 수 있다
에디터·테스트·로그를 한 화면에서 보고 싶은 개발자예시(분할·이동·zoom), 비교/트레이드오프윈도우와 패널 중 무엇을 쓸지 상황에 맞게 선택할 수 있다
GUI 터미널의 탭·분할 기능에 익숙한 사람정신 모델, 흔한 오개념GUI 탭과 달리 tmux 윈도우·패널이 왜 서버에 귀속되는지 이해한다
발표·페어 프로그래밍에서 화면을 넓게 써야 하는 사람명령과 옵션(zoom), 예시(zoom)필요할 때만 패널 하나를 전체 화면처럼 키웠다가 되돌릴 수 있다

정신 모델: 윈도우는 탭, 패널은 그 탭 안의 분할

윈도우(Window)는 브라우저의 탭과 비슷하게 동작한다 — 한 세션 안에 여러 윈도우를 만들 수 있지만, 화면에는 한 번에 하나의 윈도우만 보이고 번호나 이름으로 전환한다. 패널(Pane)은 그 윈도우 하나의 화면을 가로·세로로 쪼갠 영역이며, 한 윈도우 안의 모든 패널은 동시에 화면에 보인다. 즉 “동시에 봐야 하는가"가 패널로 나눌지 결정하는 기준이고, “지금 당장은 안 보여도 되지만 빠르게 오갈 수 있어야 하는가"가 윈도우로 나눌지 결정하는 기준이다.

방향키 기반 조작에 익숙한 vim 사용자라면 패널 사이를 이동하는 방식이 낯설지 않다. 기본 키바인딩은 방향키(←↑↓→)를 쓰지만, 07장에서 다루는 커스터마이징을 거치면 vim처럼 h/j/k/l로 패널을 옮겨 다니도록 재배치하는 것이 이 생태계에서 흔한 관례다.

이 윈도우·패널 계층은 운영체제와 무관하게 동일하게 동작한다는 점도 GUI 터미널의 탭·분할 기능과 결정적으로 다른 부분이다. macOS 터미널 앱의 탭이나 Windows Terminal의 분할 창은 각 OS·애플리케이션이 자체적으로 구현한 기능이라 서로 다르게 동작하지만, tmux의 윈도우·패널은 어느 운영체제에서 접속하든 tmux 서버 자체가 관리하는 동일한 구조다.

명령과 옵션

윈도우 관련 명령은 03장에서 익힌 세션 명령과 동사가 거의 겹친다 — new-window/select-window/kill-window처럼 “세션"이 “윈도우"로 바뀔 뿐 만들기·선택하기·닫기라는 구조는 그대로다. 패널 명령만 split-window·select-pane·kill-pane처럼 별도 계열을 이루는데, 이는 패널이 세션·윈도우와 달리 “나누기"라는 고유한 동작을 필요로 하기 때문이다. 아래 표는 이 장에서 다루는 명령을 윈도우·패널 순서로 정리한 것이다.

명령주요 옵션설명
new-window-n 이름, -c 시작경로현재 세션에 새 윈도우를 만든다
next-window(n) / previous-window(p)-다음/이전 윈도우로 전환한다
select-window-t 대상번호나 이름으로 지정한 윈도우로 바로 전환한다
rename-window-t 대상 새이름윈도우 이름을 바꾼다
kill-window-t 대상지정한 윈도우와 그 안의 모든 패널을 닫는다
split-window-h, -v현재 패널을 분할한다. -h좌우로(수평 분할), -v위아래로(수직 분할) 나눈다. 둘 다 생략하면 -v가 기본값이다
select-pane-U/-D/-L/-R, -t위/아래/왼쪽/오른쪽 패널로 포커스를 옮긴다
resize-pane-Z활성 패널의 zoom 상태를 토글한다(전체 윈도우를 차지하는 상태 ↔ 원래 레이아웃 내 크기)
kill-pane-t 대상지정한 패널을 닫는다. 그 윈도우에 패널이 하나도 남지 않으면 윈도우 자체도 함께 사라진다

예시

윈도우 만들고 전환하기

이름을 붙인 윈도우를 여러 개 만들어 두면, 03장에서 세션에 이름을 붙였던 것과 같은 이유로 select-window나 번호 전환이 훨씬 명확해진다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 현재 세션에 이름을 붙인 새 윈도우를 만든다
tmux new-window -n editor
tmux new-window -n logs -c /var/log

# 다음/이전 윈도우로 전환 (prefix 키로는 Ctrl+b 뒤 n / p)
tmux next-window
tmux previous-window

# 이름으로 정확히 지정해 전환
tmux select-window -t editor

패널 분할과 이동

패널을 나누는 시점에는 지금 화면에 남을 두 영역이 “좌우로 나란히"인지 “위아래로 쌓인” 모양인지부터 먼저 그려 보는 것이 방향 실수를 줄이는 가장 쉬운 방법이다. -h-v는 이름이 결과와 직관적으로 안 맞아 보일 수 있으니, 아래 예시로 방향을 직접 확인해 둔다.

1
2
3
4
5
6
7
8
9
# 현재 패널을 좌우로 나눈다 (왼쪽·오른쪽 패널이 생긴다)
tmux split-window -h

# 현재 패널을 위아래로 나눈다 (위·아래 패널이 생긴다, -v는 기본값이라 생략 가능)
tmux split-window -v

# 방향키로 포커스를 옮긴다 (prefix 키로는 Ctrl+b 뒤 방향키)
tmux select-pane -L
tmux select-pane -R

zoom으로 패널을 임시로 키우기

여러 패널로 나눈 상태에서 잠깐 한 패널만 크게 보고 싶을 때, 패널을 새로 만들거나 배치를 바꾸는 대신 zoom을 쓴다.

1
2
# 활성 패널을 전체 화면처럼 확대(다시 실행하면 원래 크기로 복귀)
tmux resize-pane -Z

닫기

패널을 닫는 것과 윈도우를 닫는 것은 영향 범위가 다르므로, 정리할 때는 지금 없애려는 대상이 정확히 어느 수준인지 먼저 확인하는 습관을 들인다.

1
2
3
4
5
# 현재 패널만 닫는다 (다른 패널이 남아 있으면 윈도우는 유지된다)
tmux kill-pane

# 지정한 윈도우를 통째로 닫는다 (그 안의 모든 패널이 함께 사라진다)
tmux kill-window -t logs

비교/트레이드오프

윈도우와 패널 중 무엇을 쓸지는 “지금 동시에 눈에 보여야 하는가"로 갈린다.

구분윈도우로 나눔패널로 나눔
화면 표시한 번에 하나만 보인다(전환 필요)같은 화면에 동시에 모두 보인다
적합한 상황서로 관련 없는 독립적인 작업(에디터 세션 vs 배포 스크립트)서로 참조해야 하는 작업(코드와 그 코드의 테스트 출력)
화면 공간각 윈도우가 화면 전체를 쓴다여러 패널이 화면을 나눠 쓰므로 패널이 늘수록 좁아진다
전환 비용번호·이름으로 빠르게 전환전환 없이 바로 시야에 있어 비용이 사실상 0

패널을 무한정 늘리면 각 패널이 너무 좁아져 오히려 가독성이 떨어진다. 화면이 좁아 보이기 시작하면 그 작업은 패널이 아니라 새 윈도우로 옮기는 편이 낫다.

주의사항·함정

-h/-v 방향 헷갈림: -h(horizontal)가 “가로로 긴 분할선"이 아니라 “좌우로 나눈다(분할선은 세로)“는 뜻이라는 점이 직관과 어긋나기 쉽다. 헷갈릴 때는 “h는 화면을 horizontal(가로) 방향으로 나란히 늘어놓는다"고 기억하면 방향을 맞히기 쉽다.

zoom 상태에서의 다른 조작: 패널이 zoom된 상태에서 select-pane으로 다른 패널로 이동하면 자동으로 zoom이 풀리는 구현이 일반적이므로, zoom을 유지한 채로는 다른 패널을 직접 조작하기 어렵다. 여러 패널을 동시에 보면서 조작해야 한다면 zoom을 끄고 원래 레이아웃으로 돌아가야 한다.

마지막 패널을 닫으면 윈도우도 사라진다: kill-pane으로 한 윈도우의 마지막 패널을 닫으면 그 윈도우 자체가 함께 사라진다. 여러 패널로 나눈 윈도우를 정리할 때 의도치 않게 윈도우까지 닫힐 수 있다는 점을 염두에 둔다.

흔한 오개념

"-h는 위아래로 나누는 옵션이다”는 흔한 착각이다. 실제로는 정반대로, -h는 좌우로 나누고 -v(또는 옵션 생략)가 위아래로 나눈다.

“zoom하면 다른 패널이 닫힌다”는 오해도 흔하다. resize-pane -Z는 다른 패널을 없애는 것이 아니라 화면에서 잠시 가릴 뿐이며, 다시 -Z를 실행하면(또는 zoom을 해제하면) 나머지 패널이 그대로 돌아온다.

“윈도우가 많아지면 세션이 여러 개 생긴 것과 같은 효과다”는 오해도 있다. 윈도우는 어디까지나 하나의 세션에 속한 하위 단위이므로, tmux kill-session으로 그 세션을 종료하면 안의 윈도우가 몇 개든 한꺼번에 사라진다. 서로 완전히 독립된 생애주기가 필요하다면 03장에서 다룬 것처럼 세션 자체를 분리해야 한다.

다음 장에서는

05장: Prefix 키와 커맨드 모드에서는 지금까지 당연하게 써 온 Ctrl+b prefix 키가 왜 그렇게 동작하는지, 그리고 이를 다른 키로 바꾸는 법을 다룬다.

평가 기준

이 장을 읽은 후 다음을 할 수 있어야 한다.

  • 윈도우와 패널 중 무엇을 쓸지 “동시에 봐야 하는가"를 기준으로 선택할 수 있다.
  • split-window -h-v가 각각 어느 방향으로 화면을 나누는지 헷갈리지 않고 설명할 수 있다.
  • select-pane의 방향 옵션으로 패널 사이를 이동할 수 있다.
  • resize-pane -Z(zoom)가 패널을 닫는 것이 아니라 화면 표시만 토글한다는 것을 설명할 수 있다.
  • kill-pane으로 마지막 패널을 닫았을 때 윈도우 전체가 함께 사라지는 이유를 설명할 수 있다.

참고 및 출처

  1. tmux(1) - OpenBSD Manualnew-window·split-window·select-pane·resize-pane·kill-pane 공식 옵션과 설명.
  2. tmux/tmux — tmux 공식 소스 저장소.