다른 터미널 앱을 쓰던 때랑 비교해서, tmux를 쓰면서 그 미묘한 불편함들이 해소되는게 좋아서 계속 써보고 있고, 이것저것 써보면서 메모 중인 글이다. (더 채워질 예정)
tmux (terminal multiplexer; since 2007-)
tmux 클라-서버 구조 덕분에 이미 19년이 되는 시간 동안 유명한 도구인데 ai 에이전트 시대에 생산성에서 특히 더 빛을 발하고 있다.
클로드 에이전트 팀 기능에 공식 지원된다고 문서에서 언급되어서 개발자들이 요즘 더 많이 사용한다고 한다. (물론 tmux 없이도 가능하지만 분할 화면 지원은 안됨)
터미널 앱 (터미널 애뮬레이터) 에서 tmux 클라이언트로 tmux 서버를 실행하고 tmux 서버에서 shell을 실행하므로 터미널 앱 애뮬레이터를 닫아도 shell은 그대로 남아있기 때문에 세션이 유지될 수 있는 형태이다.
$ tmux attach
3계층 구조로 이뤄짐
prefix ctrl b + 단축키
ctrl b 이후 https://tmuxcheatsheet.com/ 에서 단축키를 참고하여 쓸 수 있다.ctrl b cctrl b % : horizontalctrl b “ : vertical터미널 에뮬레이터 ghostty 와 터미널 멀티플렉서 tmux 조합이 좋은 것 같다.
탭 관리나 화면 분할은 멀티플렉서에서도 되므로 에뮬레이터는 가벼운 성능이 중요해서, 그 관점에서
ghostty는 gpu가속으로 빠른 동작 및 적은 cpu 저장 공간 차지에서 유리하다. 참고로 이 ghostty 개발자인 Mitchell Hashimoto라는 분이 하네스 엔지니어링을 처음 언급한 분이다 → 그 분의 블로그 글 My AI Adoption Journey에서 언급하심
tmux 기존 script를 조합하여 custom scripting 을 할 수 있는 것도 특장점이다.
예를 들어 tmux에선 send라는 스크립트가 있는데 pane간 명령어 전달이 가능하고,
capture-pane으로는 현재 pane이 속한 project가 아닌 다른 project로 로그나 히스토리 전달이 가능하다.
그래서 에이전트가 컨트롤할 수 있다는 면에서 궁합이 좋다.
| 명령 | 동작 |
|---|---|
tmux new -s 이름 | 이름 붙여서 새 세션 생성 |
tmux ls | 세션 목록 보기 |
tmux a | 마지막 세션에 다시 붙기 |
tmux a -t 이름 | 특정 세션에 붙기 |
tmux kill-session -t 이름 | 특정 세션 종료 |
tmux kill-server | 모든 tmux 종료 |
| 키 | 동작 |
|---|---|
<P> → d | Detach (작업 유지한 채 나가기) |
<P> → s | 세션 목록 보고 전환 |
<P> → $ | 세션 이름 바꾸기 |
<P> → ( | 이전 세션 |
<P> → ) | 다음 세션 |
| 키 | 동작 |
|---|---|
<P> → c | 새 윈도우 생성 |
<P> → n | 다음 윈도우 |
<P> → p | 이전 윈도우 |
<P> → 0 ~ 9 | 해당 번호 윈도우로 |
<P> → L | 직전 윈도우 (커스텀) |
<P> → , | 윈도우 이름 변경 |
<P> → w | 윈도우 목록 |
<P> → & | 현재 윈도우 닫기 |
<P> → f | 윈도우 검색 |
| 키 | 동작 |
|---|---|
<P> → % | 좌우로 분할 |
<P> → " | 위아래로 분할 |
<P> → Tab | 오른쪽에 yazi 열기 (커스텀) |
<P> → z | 현재 패널 확대 ↔ 복원 |
<P> → x | 현재 패널 닫기 |
<P> → ! | 현재 패널을 새 윈도우로 분리 |
<P> → q | 패널 번호 표시 |
<P> → q → 번호 | 해당 번호 패널로 이동 |
<P> → { | 현재 패널을 왼쪽으로 이동 |
<P> → } | 현재 패널을 오른쪽으로 이동 |
<P> → Space | 패널 레이아웃 순환 변경 |
| 키 | 동작 |
|---|---|
⌥ + h | 왼쪽 패널 |
⌥ + j | 아래 패널 |
⌥ + k | 위 패널 |
⌥ + l | 오른쪽 패널 |
| 키 | 동작 |
|---|---|
<P> → ↑ / ↓ / ← / → | 방향으로 크기 조절 |
| 마우스 드래그 | 패널 경계를 드래그로 조절 |
| 키 | 동작 |
|---|---|
<P> → [ | copy-mode 진입 |
q 또는 Esc | copy-mode 나가기 |
h / j / k / l | 좌/하/상/우 이동 |
Ctrl + u | 반 페이지 위 |
Ctrl + d | 반 페이지 아래 |
g | 맨 위 |
G | 맨 아래 |
/ | 앞으로 검색 |
? | 뒤로 검색 |
n / N | 다음 / 이전 검색 결과 |
v | 선택 시작 |
y | 복사 후 종료 (Mac 클립보드로) |
Enter | 복사 후 종료 |
| 동작 | 결과 |
|---|---|
| 패널 클릭 | 해당 패널로 포커스 이동 |
| 경계 드래그 | 패널 크기 조절 |
| 스크롤 휠 | copy-mode 자동 진입 + 스크롤 |
| 텍스트 드래그 | 자동 복사 (pbcopy) |
| 윈도우 탭 클릭 | 해당 윈도우로 이동 |
| 키 | 동작 |
|---|---|
<P> → r | .tmux.conf 리로드 (커스텀) |
<P> → Shift + I | 플러그인 설치 (TPM) |
<P> → Shift + U | 플러그인 업데이트 |
<P> → ⌥ + u | 사용 안 하는 플러그인 제거 |
<P> → Ctrl + s | 세션 저장 (resurrect) |
<P> → Ctrl + r | 세션 복원 (resurrect) |
| 키 | 동작 |
|---|---|
<P> → : | 명령 프롬프트 (tmux 명령 직접 입력) |
<P> → ? | 모든 단축키 목록 보기 |
<P> → t | 큰 시계 표시 |
<P> → <P> | 중첩 tmux에 Prefix 전달 |