TMUX에서 마우스로 스크롤 셸 출력


256

tmux 없이 쉘을 실행할 때 (Gnome Terminal에서) tmux 에서 마우스 스크롤이 작동하지 않습니다 . tmux가 위 / 아래 키를 누른 것처럼 마우스 스크롤 이벤트를 보내는 것 같습니다. 그러나 쉘 출력 기록 을 통해 스크롤하고 싶습니다 . tmux를 이와 같이 작동시키는 방법이 있습니까?

참고 : 키보드로 스크롤하는 방법을 알고 있습니다 ( 여기 다른 질문 덕분에 ).

두 가지 버전의 tmux에서 마우스 스크롤을 시도했습니다.


1
bukzor의 대답은 tmux 1.5 이상에서 문제를 해결한다고 생각합니다.
kynan

답변:


252

출력 기록 내에서 스크롤하려면 ^b+ [ 를 사용합니다. 그런 다음 M + V를 사용하여 페이지를 올리거나 ^ V를 사용하여 페이지를 내릴 수 있습니다. 당신은 실제 사용할 수 있는지 모르겠어요 PgUpPgDown하지만. 터미널이이 키를 tmux에 보내지 않습니다. 대신 tmux 히스토리가 아닌 자체 스크롤됩니다.

복사 모드를 종료하려면 ESC를 누르십시오

이 모드 (복사 모드)에서 마우스를 사용하려면 ^b+ : 를 누르고 다음을 입력하십시오.

setw -g mouse on

참고 : tmux <2.1에서 옵션 이름 mode-mouse은이며mouse

이제 복사 모드로 변경하면 마우스를 사용하여 스크롤 할 수 있습니다. tmux를 실행할 때마다로드되도록이 명령을 ~ / .tmux.conf에 넣을 수 있습니다.

업데이트 : tmux 1.5부터이 옵션을 사용하면 스크롤 휠을 사용하여 자동으로 복사 모드로 전환하고 tmux 스크롤 백 버퍼를 다시 스크롤합니다. 먼저 Ctrl-B+ [더 이상 명중 할 필요가 없습니다 . 프롬프트로 다시 스크롤하면 복사 모드가 자동으로 종료됩니다.


1
이미 실행중인 tmux 서버가있는 경우 구성 파일을 다시로드해야 할 수도 있습니다. blog.sanctum.geek.nz/reloading-tmux-config tmux 소스 파일 ~ / .tmux.conf
Allan Nienhuis

7
OS X에서 작동하지 않습니다.
Ain

2
@Ain-현재 OS X에는 11 가지 주요 버전이 있습니다. 정확히 어떤 버전을 이야기하고 있습니까?
Ramhound

10
tmux> = 2.1의 경우 @DannyRe의 답변을 참조하십시오 (현재 매우 아래).
joelostblom

3
set -g mouse onmacOS tmux 2.1에서 나를 위해 일했다
Miguel Mota

123

Tmux 2.1의 일부 변경 사항이 있습니다.

  • 마우스 모드가 다시 작성되었습니다. 더 이상 다음 옵션이 없습니다.

    • 마우스 크기 조정 창
    • 마우스 선택 창
    • 마우스 선택 창
    • 모드 마우스

    대신 마우스 지원을 완전히 켜는 'mouse'옵션이 있습니다.

그건

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"

6
감사합니다. 창을 선택하는 등은 작동하지만 스크롤은 작동하지 않습니다. 스크롤 작업을 다시 수행하려면 다음을 사용하십시오. github.com/NHDaly/tmux-scroll-copy-mode
Mahdi

1
굉장-이것은 심지어 cygwin에서도 작동합니다-WINDOWS 7의 TMUX
GWD

@Mahdi 이것은 osx에서 작동하지 않는 것 같습니다. 힌트가 있습니까?
DiTTiD

2
bindTMUX 2.3에 더 이상 필요하지 않는 것
테론 Luhn

2
일에 대한 set -g mouse on. 이전 의견이 맞습니다. 바인드는 더 이상 필요하지 않습니다.
Dakusan 2019

63

tmux (1.5)의 현재 버전에서는 모드 마우스 옵션을 간단하게 설정하고 마우스 휠로 스크롤 할 수 있습니다.

         mode-mouse [on | off]
                 Mouse state in modes.  If on, the mouse may be used to
                 enter copy mode and copy a selection by dragging, to
                 enter copy mode and scroll with the mouse wheel, or to
                 select an option in choice mode.

내 .tmux.conf에서 :

set-window-option -g mode-mouse on

그것이 당신이 정말로 원하는 행동입니다! 쉘 대체 버퍼를 스크롤하는 것만이 아니라 복사 모드를 가능하게하는 마우스 스크롤. 그것은 마침내 화면 에서 tmux 로 전환하는 동기가되었습니다 . Shift + PgUp에서도 동일한 동작을 수행 할 수있는 옵션이 있습니까?
kynan

1
@ kynan : 개인적 C-A PgUp으로 그렇게하기 위해 누르십시오 . 페이지 업 키를로 직접 바인딩 할 수 있습니다 tmux bind-key -n PPage copy-mode -u. 로컬 터미널에서 바인딩을 해제하면 shift + pageup에도 비슷한 기능이 작동합니다.
bukzor

1
이로 인해 명령 행으로 다시 스크롤 할 때 CLI에 추가 문자가 삽입되어 일반적으로 첫 번째 명령이 잘못되는 이상한 동작이 발생합니다. 꽤 귀찮습니다.
Chris R

그러나 이것은 마우스로 스크롤을 트리거하는 데 잘 작동하므로 가운데 클릭으로 텍스트를 붙여 넣을 때 이상한 동작이 발생합니다. 트레이드 오프가 허용되지 않았기 때문에 Cb pg-up / down (기본값)을 선호했습니다.
h7r

@ChrisR 나는 이것도 꽤 얻었고 꽤 일관성이 없습니다. [M [M # [M [M # [M [M # [M [M # [M 유형의 문자열)입니까?)
Elijah Lynn

53

.tmux.conf에서 이것을 시도하십시오

# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY 에서 가져온


escape-time설정 +1
Dakusan

다른 궁금한 점이 있으시면 .tmux.conf 파일이 홈 디렉토리에 있습니다.
user2647513

15

누군가 (내가 잃어버린 출처에서) 다음에 다음을 추가 할 것을 제안했습니다 ~.tmux.conf.

set -g terminal-overrides 'xterm*:smcup@:rmcup@'

어떻게 작동하는지 또는 무엇을하는지 전혀 알지 못하지만 이제는 tmux의 복사 모드로 들어 가지 않고도 tmux 세션 내에서 마우스 휠로 스크롤 할 수 있습니다. 난 그냥 바퀴와 BAM을 스크롤! 효과가있다. 나는 terminal.app을 사용하고 있지만 OP가 특별히 사용하기위한 대답을했던 것을 기억합니다 gnome-terminal.


1
제드, 감사합니다! 당신의 조언은 그놈 터미널에서도 작동합니다. 이 설정을 얼마 동안 사용하려고합니다. 그러나 단점이 있습니다. 이제 마우스 스크롤이 예상대로 작동하지 않습니다 less. less내부 tmux에 로드 하면 마우스 스크롤이에서 열린 파일을 스크롤하지 않습니다 less. 터미널 전체를 스크롤합니다. 이상하게도 설정 vim내부 tmux에서 예상대로 작동 합니다.
user31494

2
tmux 1.5부터는 setw -g mode-mouse on마우스 휠을 사용하여 복사 모드 스크롤 백을 수행 하는 옵션으로 대체되었습니다 .
kynan

3
이 옵션은 터미널의 대체 화면에서 스크롤 잠금을 비활성화합니다. 대체 화면 버퍼 (vi, less, tmux 등)를 요청하는 응용 프로그램이 자체 스크롤 기능을 제공하기 때문에 대부분의 경우에 바람직합니다. tmux에서이 잠금을 재정의하면 몇 가지 경우를 제외하고 원하는 결과를 제공하지 않는 터미널의 대체 화면 버퍼 를 스크롤 할 수 있습니다. 대체 화면 을 설명 하는 인용문 은 이 답변 을 참조하십시오 man xterm.
kynan

아아, 이것은 iTerm에서 작동하지 않습니다
Suan

나는 iTerm 2에서 긍정적 인 결과를 얻었습니다
Keith Smiley

5

tmux 2.1에는 새로운 마우스 바인딩이 도입되었습니다.

나는 오늘이 묶음을 썼습니다. Vim은 생 마우스 휠 코드를 해석 할 수 있기 때문에 Vim에 있지 않을 때 마우스 휠을 화살표에 매끄럽게 바인딩합니다.

즉, 마우스를 사용하여 여러 매뉴얼 페이지 및 화살표 키를 허용하는 모든 것을 볼 수 있습니다. if애플리케이션에 더 많은 로직을 구현하기 위해 필요에 따라 로직을 확장하고 연결할 수 있습니다.

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"

이 새로운 휠 바인딩 기능을 사용하면 마우스 휠을 스크립팅하여 원하는 상황에 맞는 동작을 수행 할 수 있습니다.


나는 이제 창 테두리에 마우스 휠을 만드는 것이 흥미로운 일이라고 생각합니다. 아마도 내가 할 일은 테두리에 바퀴를 매핑하는 것이 아니라 상태 표시 줄을 완료하면 tmux 창을 순환하도록 매핑하는 것입니다.
Steven Lu

Github에 대한 링크는 무엇입니까? 나는 당신의 노력을 계속 지키고 싶습니다! 내가 찾고있는 또 다른 기능은 Tmux 외부와 마찬가지로 X 클립 보드에 단어를 두 번 클릭하여 복사하는 것입니다.
joeytwiddle

@joeytwiddle 나는 매우 추천 github.com/NHDaly/tmux-better-mouse-mode을 , 내 다른 대답을 참조
스티븐 루

3

그놈 터미널은 제한된 "일반"스크롤 조건에서 마우스 스크롤 이벤트를 위 / 아래 화살표 키로 변환하는 깔끔한 트릭을 수행합니다. 당신이 사용하는 텍스트를 볼 때 예를 들어, less(당신이 사람을 읽을 때이 특히 발생), 당신은 사용하여 콘텐츠를 스크롤 할 수 있습니다 j, k및 화살표 키를. 그러나 또한 , 함께 gnome-terminal, 당신은 할 수 마우스 스크롤로 그, 언급 트릭에 감사합니다.

따라서 tmux터미널의 "캡처 링" less과 같은 방식으로 작동합니다. 똑같은 메커니즘 gnome-terminal이 있습니다 : 마우스 스크롤은 위 / 아래 화살표 키 누름으로 변환됩니다.

프로필 설정에서이 기능을 끄고 어떤 상황에서도 정기적으로 스크롤 할 수 있습니다. "스크롤"탭에서 마지막 확인란의 표시를 해제하십시오 확인란.


설명 주셔서 감사합니다, uldtko! 그러나 마우스 스크롤 문제에는 도움이되지 않습니다. 예, 옵션이 꺼져 있으면 gnome-terminal트리플 ^[[A^[[B마우스 스크롤 전송이 중지됩니다 . 이 글은 좋네요 tmux(더 추한 ^[[A^[[A^[[A일부 프로그램에서, 아니 추악한 명령 역사 스크롤),하지만 지금은 less마우스 스크롤에 스크롤을 중지합니다.
user31494

1
우크라이나어? ( i캐릭터에 의해 추측 )
dotancohen

1

https://github.com/NHDaly/tmux-better-mouse-mode

최신 tmux를위한 구성 및 기능이 풍부한 마우스 제어 구현. 추천.

아마도 사용하고 싶을 것입니다

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"

그것도.


이것을 설치했지만 더 이상 마우스로 텍스트를 강조 표시하고 복사 할 수 없습니다. 당신은 이것을 할 수 있습니까?
jonathanking

예, 다른 마우스 관련 tmux 구성이있을 수 있습니다.
Steven Lu

0

다른 답변의 바인딩 아이디어를 결합하여 꽤 만족스러운 스크롤 동작을 얻을 수 있습니다. 터미널에서 vim 변경 사항을 복사 모드로 자동 변경하고 맨 아래에 도달하면 종료합니다.

내 코드 :

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"

grep -e 'man'부분에서 스크롤하기 위해 화살표 키가 필요한 다른 명령을 추가 할 수 있습니다

보내기 키를 여러 번 추가 했으므로 마우스 휠의 한 틱이 한 번에 4 줄씩 스크롤됩니다.


0

이미 tmux 세션에있는 경우 명령을 실행할 수 있습니다

set mouse on

알림 : 명령을 실행하려면 접두사를 사용한 다음을 사용하십시오 :.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.