Featured image of post [Tmux] 10. 카피 모드와 버퍼 - 클립보드 연동

[Tmux] 10. 카피 모드와 버퍼 - 클립보드 연동

tmux 카피 모드에서 텍스트를 선택·복사하고 내부 버퍼 스택에 쌓인 여러 복사본을 이름으로 골라 붙여넣는 법을 다룹니다. set-clipboard로 OS 클립보드와 연동하는 방법과 터미널 지원 여부까지 확인합니다.

지금까지 다룬 조작은 모두 패널의 배치와 입력에 관한 것이었다. 이 장은 패널 안의 텍스트를 다룬다 — 스크롤백을 거슬러 올라가 원하는 부분을 선택·복사하는 카피 모드와, 복사한 내용이 쌓이는 tmux 내부의 버퍼(paste buffer), 그리고 그것을 운영체제 클립보드와 연동하는 법이다.

이 장을 읽기 전에

선행 챕터: 이 장은 09장: 레이아웃과 패널 동기화에서 다룬 패널 조작 다음으로, 패널 화면의 텍스트 자체를 다루는 법을 배운다. 07장에서 예고했던 mode-keys 옵션(vi/emacs가 카피 모드 키를 결정한다)이 이 장에서 실제로 쓰인다.

이 장의 깊이: 입문에서 중급(여러 버퍼를 이름으로 구분해 쓰고, 클립보드 연동이 왜 안 되는지 진단할 수 있는 수준) 사이를 오간다. 다루지 않는 것: 여러 클라이언트가 같은 세션을 함께 보는 것은 12장에서, tmux-yank 같은 플러그인으로 클립보드 연동을 더 매끄럽게 만드는 법은 16장에서 각각 다룬다. 이 장은 tmux 자체 기능만으로 복사·붙여넣기·클립보드 연동을 다룬다.

당신의 수준에 맞는 경로

수준읽을 부분핵심 목표
스크롤백을 마우스로만 긁어 복사해 온 사람정신 모델, 카피 모드 키, 예시카피 모드로 스크롤·선택·복사를 키보드만으로 할 수 있다
여러 텍스트를 번갈아 붙여넣고 싶은 사람버퍼 명령, 예시(버퍼 목록에서 선택)여러 버퍼를 이름으로 구분해 관리하고 원하는 것을 골라 붙여넣을 수 있다
tmux에서 복사한 게 OS 클립보드에 안 들어가 답답한 사람클립보드 연동, 주의사항·함정set-clipboard와 터미널 지원 여부를 진단할 수 있다
SSH로 원격 서버에서 작업하며 로컬로 복사해 오고 싶은 사람클립보드 연동, 주의사항·함정원격 세션에서도 클립보드 연동이 어떻게 동작하는지 이해한다

정신 모델: 카피 모드는 별도의 입력 모드, 버퍼는 tmux 안의 클립보드

카피 모드는 평소의 입력 모드와 완전히 분리된 별도 상태다. 기본적으로 prefix 뒤 [를 누르면 진입하며, 이 순간부터 키 입력은 07장에서 다룬 copy-mode(emacs 스타일) 또는 copy-mode-vi(vi 스타일) 키 테이블로 넘어간다 — 어느 쪽을 쓸지는 mode-keys 옵션이 결정한다. 이 모드 안에서는 화면을 스크롤하고, 텍스트를 선택하고, 선택한 내용을 복사할 수 있다.

복사한 텍스트는 운영체제 클립보드가 아니라 tmux 자신이 관리하는 버퍼(paste buffer)에 쌓인다. 버퍼는 여러 개가 동시에 존재할 수 있는 스택에 가깝다 — 가장 최근에 복사한 것이 맨 위에 놓이고, 기본 바인딩 ]는 항상 그 맨 위 버퍼를 붙여넣는다. 이 tmux 자체 버퍼와 OS 클립보드는 원래 서로 다른 저장 공간이며, 이 둘을 연결하려면 뒤에서 다룰 set-clipboard가 필요하다.

카피 모드 키

카피 모드에 진입한 뒤 선택을 시작하고, 복사하고, 취소하는 데 쓰는 기본 키는 mode-keys 값에 따라 vi 스타일과 emacs 스타일로 갈린다. 아래 표는 이 대응 관계를 명령 이름과 함께 정리한 것이다.

동작명령vi 키emacs 키
카피 모드 진입-prefix 뒤 [prefix 뒤 [
선택 시작begin-selectionSpaceCtrl+Space
선택 취소clear-selectionEscapeCtrl+g
복사하고 카피 모드 종료copy-selection-and-cancelEnterAlt+w
카피 모드 취소(복사 없이 종료)cancelqEscape
최근 버퍼 붙여넣기paste-bufferprefix 뒤 ](기본 바인딩)동일

버퍼 명령

붙여넣기(paste-buffer) 외에도, 버퍼 하나하나를 목록에서 확인하고, 파일로 저장하거나 파일에서 다시 읽어들이고, 내용을 화면에 그대로 띄워 보는 등의 조작이 모두 별도 명령으로 존재한다. 아래 표는 이런 버퍼 조작 명령을 정리한 것이다.

명령주요 옵션설명
list-buffers(lsb)-O 정렬기준지금 존재하는 모든 버퍼를 나열한다. 정렬 기준은 이름·크기·생성 시각 중 하나
paste-buffer(pasteb)-b 버퍼이름, -d지정한 버퍼(생략하면 최신)를 현재 패널에 붙여넣는다. -d를 주면 붙여넣은 뒤 그 버퍼를 삭제한다
save-buffer(saveb)-b 버퍼이름, -a버퍼 내용을 파일로 저장한다. -a는 덮어쓰지 않고 이어 붙인다
show-buffer(showb)-b 버퍼이름버퍼 내용을 화면에 그대로 보여준다
set-buffer(setb)-b 버퍼이름, -w, -n 새이름문자열을 직접 버퍼로 만든다. -w를 주면 그 내용을 OS 클립보드로도 보낸다
load-buffer(loadb)-b 버퍼이름, -w파일 내용을 버퍼로 읽어들인다. -wset-buffer와 마찬가지로 클립보드에도 반영한다

클립보드 연동: set-clipboard

set-clipboard 옵션(on/external/off)은 tmux 버퍼와 OS 클립보드를 연결하는 다리다. on으로 설정하면 tmux는 애플리케이션이 클립보드 설정을 요청하는 이스케이프 시퀀스를 받아들여 버퍼를 만들고, 동시에 터미널 클립보드에도 그 내용을 반영하려 시도한다. external은 터미널 클립보드에 반영은 시도하되 애플리케이션이 tmux 버퍼를 만들려는 시도는 무시한다. off는 이 둘을 모두 하지 않는다.

이 기능은 터미널 에뮬레이터가 해당 이스케이프 시퀀스(터미널 정보의 Ms 항목)를 실제로 지원해야 동작한다. 예를 들어 xterm에서는 disallowedWindowOps 리소스 설정을 따로 바꿔야 이 기능이 열린다. set-clipboard on으로 설정했는데도 클립보드에 아무것도 들어오지 않는다면, tmux 설정이 아니라 터미널 에뮬레이터의 지원 여부부터 의심해야 한다.

예시

카피 모드로 스크롤백 복사하기

1
2
3
4
5
6
7
prefix 뒤 [          → 카피 모드 진입
방향키/PageUp 등으로 원하는 위치까지 스크롤
Space                → 선택 시작 (vi 기준)
방향키로 선택 범위 이동
Enter                → 선택 복사하고 카피 모드 종료

prefix 뒤 ]          → 방금 복사한 내용 붙여넣기

여러 버퍼 중 원하는 것 골라 붙여넣기

1
2
3
4
5
6
7
8
# 지금 쌓여 있는 버퍼 목록 확인
tmux list-buffers

# 이름을 지정해 특정 버퍼를 붙여넣기
tmux paste-buffer -b buffer0001

# 버퍼 내용을 파일로 저장
tmux save-buffer -b buffer0001 ~/copied.txt

copy-pipe-and-cancel처럼 이름에 pipe가 들어간 카피 모드 명령을 쓰면, 선택한 텍스트를 버퍼에 남기는 대신 곧바로 외부 명령의 표준 입력으로 흘려보낼 수 있다. 예를 들어 선택한 텍스트를 저장 없이 바로 xargs나 자신이 만든 스크립트로 넘겨 처리하는 식으로, 복사·저장·실행을 사람이 손으로 잇는 대신 한 번의 키 입력으로 자동화할 수 있다.

OS 클립보드와 연동하기

1
2
# ~/.tmux.conf
set -g set-clipboard on

이렇게 설정한 뒤 카피 모드에서 Enter로 복사하면, 지원되는 터미널에서는 그 내용이 tmux 버퍼뿐 아니라 OS 클립보드에도 함께 들어간다. SSH로 원격 서버에 접속해 있는 상태에서도, 이 방식은 로컬 파일 시스템이나 별도의 클립보드 공유 도구 없이 원격 tmux 세션의 텍스트를 로컬 클립보드로 가져오는 몇 안 되는 방법 중 하나다.

비교/트레이드오프

tmux 버퍼와 OS 클립보드는 목적이 다르다.

구분tmux 버퍼OS 클립보드(set-clipboard 연동)
저장 위치tmux 서버 안(세션이 살아있는 한 유지)운영체제/터미널이 관리
여러 개 보관여러 버퍼를 스택처럼 동시에 유지대체로 마지막 것 하나만 유지
다른 프로그램과 공유tmux 안에서만 붙여넣기 가능브라우저·에디터 등 tmux 밖 프로그램에도 붙여넣기 가능
원격 세션에서의 동작항상 동작(터미널 지원 불필요)터미널의 이스케이프 시퀀스 지원 여부에 좌우됨

주의사항·함정

터미널 지원 없이는 set-clipboard가 무의미하다: 옵션을 on으로 켜도 접속에 쓰는 터미널 에뮬레이터가 관련 이스케이프 시퀀스를 지원하지 않으면 아무 일도 일어나지 않는다. 클립보드 연동이 안 될 때는 tmux 설정보다 먼저 터미널 앱의 지원 여부와 설정(운영체제·터미널 앱 조합마다 활성화 방법이 다르다)을 확인한다.

paste-buffer -d로 인한 실수 삭제: -d는 붙여넣기와 동시에 그 버퍼를 지운다. 같은 내용을 여러 번 붙여넣으려던 상황에서 무심코 -d를 쓰면 두 번째 붙여넣기부터 그 버퍼가 사라져 당황할 수 있다.

vi/emacs 키 차이로 인한 혼란: 다른 사람의 설정을 그대로 가져오면 mode-keys가 자신의 습관과 다를 수 있다. 선택 시작이 Space(vi)인지 Ctrl+Space(emacs)인지, 복사 후 종료가 Enter(vi)인지 Alt+w(emacs)인지부터 먼저 확인하는 것이 헷갈림을 줄이는 가장 빠른 방법이다.

흔한 오개념

“tmux에서 복사하면 자동으로 OS 클립보드에도 들어간다”는 생각은 틀렸다. set-clipboard를 명시적으로 켜고, 터미널이 그 기능을 지원해야만 OS 클립보드로 전달된다. 기본값이나 지원되지 않는 환경에서는 tmux 버퍼에만 남는다.

“붙여넣기는 항상 가장 최근 복사본만 가능하다”는 오해도 흔하다. 실제로는 여러 버퍼가 스택으로 쌓이고, list-buffers로 확인한 뒤 paste-buffer -b로 원하는 버퍼를 이름으로 골라 붙여넣을 수 있다.

“카피 모드의 키는 어디서나 똑같다”는 생각도 정확하지 않다. mode-keys 옵션이 vi인지 emacs인지에 따라 선택 시작·복사·취소에 쓰는 키가 서로 다르다.

다음 장에서는

11장: 윈도우/패널 재배치 - swap·move·break·join에서는 지금까지 한 윈도우 안에서만 다루던 패널을, 다른 윈도우로 옮기거나 서로 맞바꾸는 법을 다룬다.

평가 기준

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

  • 카피 모드로 진입해 텍스트를 선택·복사하고 다시 붙여넣을 수 있다.
  • tmux 버퍼가 여러 개 동시에 존재할 수 있다는 것과, 이름으로 특정 버퍼를 골라 쓰는 법을 설명할 수 있다.
  • set-clipboardon/external/off 차이를 설명할 수 있다.
  • 클립보드 연동이 안 될 때 tmux 설정과 터미널 지원 여부 중 무엇을 먼저 의심해야 하는지 진단할 수 있다.
  • mode-keys(vi/emacs)에 따라 카피 모드의 핵심 키가 어떻게 달라지는지 설명할 수 있다.

참고 및 출처

  1. tmux(1) - OpenBSD Manual — 카피 모드 명령과 vi/emacs 키 바인딩, 버퍼 명령(list-buffers·paste-buffer·save-buffer·set-buffer·show-buffer·load-buffer), set-clipboard 공식 설명.
  2. tmux/tmux — tmux 공식 소스 저장소.