짜증
tmux copy-mode에서 로그를 위로 올려 y로 복사하면, 복사 직후 라이브 뷰(맨 밑)로 돌아가 버린다. 연속으로 몇 군데 복사하려고 하면 매번 다시 스크롤해야 한다.
고친 뒤
| 키 | 동작 |
|---|---|
y | 복사만, 스크롤 위치 유지 |
Enter | 복사 후 맨 밑으로 (기존 동작) |
| 마우스 드래그 | 복사만, 스크롤 위치 유지 |
Prefix + Ctrl-y | 위 동작 ON/OFF 토글 |
기본값 ON. 가끔 “복사 후 맨 밑으로"가 필요하면 토글하거나 그냥 Enter를 쓰면 된다.
설정
~/.tmux.conf 의 copy-mode 섹션:
setw -g mode-keys vi
# 복사 후 copy-mode 유지 토글 (기본 ON)
set -g @copy-stay "on"
# Prefix + Ctrl-y 로 ON/OFF
bind C-y if-shell -F '#{==:#{@copy-stay},on}' \
'set -g @copy-stay "off" ; display "copy-stay: OFF (y: 맨 밑으로)"' \
'set -g @copy-stay "on" ; display "copy-stay: ON (y: 스크롤 유지)"'
bind-key -T copy-mode-vi v send-keys -X begin-selection
# y: 스크롤 유지 / 맨 밑으로 분기
bind-key -T copy-mode-vi y if-shell -F '#{==:#{@copy-stay},on}' \
'send-keys -X copy-pipe-no-clear "pbcopy"' \
'send-keys -X copy-pipe-and-cancel "pbcopy"'
# Enter는 항상 기존 동작
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "pbcopy"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-no-clear "pbcopy"
리눅스면 pbcopy 자리를 xclip -selection clipboard로 바꾸면 된다.
적용
tmux source-file ~/.tmux.conf
또는 tmux 안에서 Prefix + r.
어떻게 되는 건지
필수는 아니지만 알아두면 좋은 부분.
@copy-stay는 tmux의 사용자 옵션. 이름이@로 시작하면 사용자 저장소로 쓴다.if-shell -F '#{==:A,B}'는 A와 B가 같으면 첫 번째 명령, 다르면 두 번째 명령을 실행한다.-F덕분에 외부 셸을 안 쓰고 tmux format만으로 분기가 끝난다.copy-pipe-no-clear— 복사하고 copy-mode 유지 (연속 복사용)copy-pipe-and-cancel— 복사하고 copy-mode 종료 (라이브 뷰로 복귀)set -g로 지정한 옵션은 서버 전역. 세션을 여러 개 띄워도 한 번만 토글하면 전체 반영되고,tmux kill-server전까지 값이 유지된다.
기본값을 off로 두고 싶다면
set -g @copy-stay "off"
한 줄만 바꾸면 된다. 토글 키는 그대로 동작.