Прокрутите вывод оболочки с помощью мыши в tmux

122034
user31494

Прокрутка мышью не работает в tmux так, как она работает, когда я запускаю shell без tmux (в Gnome Terminal). Кажется, tmux отправляет события прокрутки мыши, как будто я нажимаю клавиши «Вверх / Вниз». Но я хочу, чтобы он прокручивал историю вывода оболочки . Есть ли способ заставить tmux работать так?

Примечание: я знаю, как прокручивать с помощью клавиатуры (спасибо еще один вопрос здесь).

Я пробовал прокрутку мышью в двух версиях tmux:

230
Я думаю, что ответ Букзора решит вашу проблему для Tmux 1.5 и новее. kynan 12 лет назад 1

9 ответов на вопрос

214
Pavlo

Для прокрутки истории выходных данных вы должны использовать ^b+. [ Затем вы можете использовать M + V для перехода вверх и ^ V для перехода вниз. Я не знаю, можно ли использовать реальное PgUpи PgDownхотя. Мой терминал не отправляет эти ключи в tmux. Вместо этого он прокручивает сам, а не историю Tmux.

Для выхода из режима копирования нажмите ESC

Чтобы использовать мышь в этом режиме (называемом режимом копирования), нажмите ^b+ : и введите следующее:

setw -g mouse on 

Примечание: в tmux <2.1 опция была названа mode-mouse, а неmouse

Теперь, когда вы переходите в режим копирования, вы можете использовать мышь для его прокрутки. Вы можете поместить эту команду в ваш ~ / .tmux.conf, если хотите, чтобы она загружалась каждый раз, когда вы запускаете tmux.

Обновление: Начиная с tmux 1.5, эта опция позволяет с помощью колеса прокрутки автоматически переключаться в режим копирования и прокручивать обратно буфер прокрутки tmux. Больше не нужно сначала нажимать Ctrl-B+ [. Прокрутка вниз до приглашения также автоматически завершает режим копирования.

Обратите внимание, что вам, возможно, придется перезагрузить файл конфигурации, если у вас уже есть работающий сервер tmux. http://blog.sanctum.geek.nz/reloading-tmux-config/ исходный файл tmux ~ / .tmux.conf Allan Nienhuis 10 лет назад 1
Не работает для меня на OS X. Ain 9 лет назад 7
@Ain - Сейчас существует 11 основных версий OS X. О какой версии мы говорим? Ramhound 9 лет назад 2
Последний, 10.10.4. Ain 9 лет назад 1
Для tmux> = 2.1 смотрите ответ @ DannyRe (в настоящее время довольно далеко внизу). joelostblom 8 лет назад 10
`set -g mouse on` работал для меня на macOS tmux 2.1 Miguel Mota 7 лет назад 3
114
DannyRe

Есть некоторые изменения для Tmux 2.1

  • Мышь-режим был переписан. Там больше нет вариантов для:

    • мыши изменить размер-панель
    • мыши выбрать-панель
    • мыши выбрать окна
    • Режим мыши

    Вместо этого есть только одна опция: «мышь», которая полностью включает поддержку мыши.

Это было бы

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 = "#" "send-keys -M" "if -Ft= '#' 'send-keys -M' 'copy-mode -e'" 
Спасибо, теперь выбор панелей и т. Д. Работает, а прокрутка - нет. Чтобы снова запустить прокрутку, используйте это: https://github.com/NHDaly/tmux-scroll-copy-mode Mahdi 9 лет назад 5
потрясающе - это работает даже на cygwin - tmux на WINDOWS 7 WD11 8 лет назад 1
@ Махди Это, кажется, не работает на OSX. Есть намеки? SolidSnake 8 лет назад 0
@SolidSnake: я не помню, чтобы когда-либо возникали проблемы с использованием этого плагина. Это работало гладко, я включил режим мыши, а затем установил его. Вы должны перезагрузить конфигурацию tmux, используя `tmux source-file ~ / .tmux.conf` Mahdi 8 лет назад 0
`bind` больше не нужен в tmux 2.3 Theron Luhn 7 лет назад 1
+1 для `set -g mouse on`. Предыдущий комментарий правильный. Связка больше не нужна. Dakusan 6 лет назад 0
61
bukzor

Текущая версия tmux (1.5) позволяет просто включить опцию mode-mouse и прокручивать колесико мыши.

 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 
Это поведение, которое вы действительно хотите! Прокрутка мышью, включающая режим копирования, а не просто прокрутка альтернативного буфера оболочки. Это был наконец стимул для меня перейти с _screen_ на _tmux_. Есть ли возможность получить такое же поведение с помощью Shift + PgUp? kynan 12 лет назад 0
@kynan: я лично просто нажимаю `CA PgUp`, чтобы сделать это. Вы можете связать ключ страницы вверх с помощью `tmux bind-key -n PPage copy-mode -u`. Подобный thign должен работать для shift + pageup, если вы отсоединяете его от локального терминала. bukzor 11 лет назад 1
Это приводит к странному поведению, когда при прокрутке назад к командной строке я получаю дополнительный символ, вставленный в CLI, что обычно приводит к искажению моей первой команды. Это довольно раздражает. Chris R 11 лет назад 1
Обратите внимание, что, хотя это прекрасно работает для запуска прокрутки с помощью мыши, это вызывает странное поведение при выделении текста, который будет вставлен с помощью среднего щелчка. Я закончил тем, что предпочел Cb pg-up / down (по умолчанию), поскольку компромисс не был приемлемым. h7r 9 лет назад 0
@ChrisR Я тоже это понимаю, и это не совсем соответствует. Это [M [M # [M [M # [M [M # [M [M # [M] тип строки? Elijah Lynn 8 лет назад 0
51
John L. Jegutanis

Попробуйте это в вашем .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

+1 для настройки `escape-time` Dakusan 6 лет назад 0
14
Jed Daniels

Кто-то (из источника, который я потерял) предложил добавить следующее ~.tmux.conf:

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

Я понятия не имею, как это работает или что делает, но теперь это позволяет мне прокручивать колесико мыши внутри сеанса tmux, не заходя в режим копирования tmux; Я просто прокручиваю колесо и БАМ! оно работает. Обратите внимание, что я использую Terminal.app, но я помню, что OP дал ответ специально для использования с gnome-terminal.

Джед, спасибо! Ваш совет работает и в гном-терминале. Я постараюсь использовать эту настройку в течение некоторого времени. Но у него есть недостаток: прокрутка мышью теперь не работает, как и ожидалось, в «less». Если я загружаю `less` внутри` tmux`, прокрутка мышью не прокручивает файл, открытый в `less`. Прокручивает весь терминал. Как ни странно, `vim` ведет себя как положено внутри` tmux` с вашей настройкой. user31494 13 лет назад 1
Обратите внимание, что в tmux 1.5 это заменяется опцией `setw -g mode-mouse on`, которая выполняет прокрутку в режиме копирования с помощью колесика мыши. kynan 12 лет назад 2
Объяснение заключается в том, что эта опция отключает блокировку прокрутки на альтернативном экране терминала, что желательно в большинстве случаев, поскольку приложения, запрашивающие буфер альтернативного экрана (vi, less, tmux и т. Д.), Предоставляют свои собственные возможности прокрутки. Переопределение этой блокировки в tmux позволяет прокручивать альтернативный экранный буфер терминала, который не дает желаемого результата во всех случаях, кроме нескольких. Смотрите [этот ответ] (http://superuser.com/a/321233/44469) цитату из `man xterm`, объясняющую альтернативный экран. kynan 12 лет назад 3
Увы, это не работает в iTerm Suan 12 лет назад 0
У меня были положительные результаты с этим в iTerm 2 Keith Smiley 11 лет назад 0
Это работало и для меня, используя Terminal.app. fiorix 10 лет назад 0
это портит экран, если у вас есть несколько панелей ... davidshen84 9 лет назад 0
Не работает с tmux на OS X (Yosemite), прокручивает все окно. Ain 9 лет назад 0
@Ain: Я думаю, что yosemite изменил значение по умолчанию, но вы можете переключить его обратно в настройках терминала-> Профили-> Клавиатура -> «Прокрутить альтернативный экран». Или вы можете удерживать клавишу Shift во время прокрутки. Jed Daniels 9 лет назад 0
5
Steven Lu

tmux 2.1 introduces new mouse binds.

I wrote these binds just now today. It seamlessly binds mouse wheel to arrows when not in Vim, because Vim is capable of interpreting the raw mouse wheel codes (for purposes such as choosing which Vim window to scroll for you depending on which one your mouse is over).

This means we can finally use the mouse only to view multiple man pages and whatever else accepts arrow keys. You may extend and chain the if logic as necessary to implement more logic for your applications.

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

With this new wheel binding capability it is possible to script the mouse wheel to do any context sensitive behavior that you like.

Сейчас я просто как бы играю над тем, чтобы заставить колесо мыши на границе панели сделать что-то интересное. Вероятно, я сделаю не карту колеса на границе, а карту для циклического перемещения окон tmux, когда это будет сделано по строке состояния. Steven Lu 8 лет назад 0
Какая ссылка на ваш Github? Я хотел бы быть в курсе ваших усилий! Еще одна особенность, которую я ищу, - дважды кликнуть слово в буфер обмена X, как это происходит вне Tmux. joeytwiddle 8 лет назад 0
@joeytwiddle Я настоятельно рекомендую https://github.com/NHDaly/tmux-better-mouse-mode, см. мой другой ответ Steven Lu 6 лет назад 0
3
ulidtko

Gnome-терминал выполняет некоторые хитрые трюки, переводя события прокрутки мыши в клавиши со стрелками вверх и вниз в условиях ограниченной «обычной» прокрутки. Например, при просмотре какого - нибудь текста, используя less(это происходит, в частности, когда вы читаете человек), вы можете прокручивать содержимое, используя j, k, ключи и стрелок. Но также, с помощью gnome-terminal, вы можете сделать это с помощью прокрутки мыши, благодаря упомянутому трюку.

Так что я думаю, tmuxчто некоторые "захват" терминала так же, как и less- и тот же механизм вgnome-terminal пинах: прокрутка мышью переводится в нажатия клавиш со стрелками вверх / вниз.

Вы можете отключить эту функцию в настройках профиля и получать регулярную прокрутку при любых обстоятельствах. Просто пометка последнего флажка на вкладке «прокрутки»: the checkbox.

Спасибо за объяснение, Ульдтко! Но это не помогает с проблемой прокрутки мыши. Да, если эта опция отключена, `gnome-Terminal` прекращает отправку тройных` ^ [[A` и `^ [[B` при прокрутке мыши. Это лучше в `tmux` (без уродливых` ^ [[A ^ [[A ^ [[A` в некоторых программах, без уродливой прокрутки истории команд), но теперь "less" перестает прокручиваться при прокрутке с помощью мыши. user31494 13 лет назад 0
Украинский? (угадывая по символам `i`) dotancohen 11 лет назад 1
0
Steven Lu

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

Конфигурируемая и многофункциональная реализация управления мышью для новых tmux. настоятельно рекомендуется.

Вы, вероятно, хотите использовать

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

с этим также.

0
stealz

Вы можете объединить идеи связывания из других ответов, чтобы получить довольно удовлетворительное поведение прокрутки: работает в vim, автоматически переключается в режим копирования в терминале и выходит из него, когда вы достигаете дна, все еще позволяет вам использовать колесико мыши в man, less и journalctl.

Мой код:

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

Вы можете добавить другие команды, требующие клавиш со стрелками для прокрутки в части grep -e 'man'

Я добавил несколько клавиш отправки, поэтому один тик на колесе мыши будет прокручивать 4 строки за раз

Похожие вопросы