Восстановление старого поведения копирования и вставки в tmux с помощью мыши


111

Это то, что я делал в tmux для копирования и вставки (используя мышь, клавиатура работает по-другому, и это не то, что меня интересует):

  1. Выделить текст мышью при нажатой левой кнопке
  2. Вставить текст средней кнопкой

Я обновил свою ОС и получил новую версию tmux. Я не менял свой .tmux.confконфигурационный файл.

Это то , что я должен сделать с текущей версией tmux, 1.6(который поставляется с предварительно упаковывают в последней CrunchBang Linux):

  1. Выделите текст с помощью мыши, левая кнопка нажата и shift клавиша
  2. Вставить текст средней кнопкой
  3. Терминал блокируется, небольшая информационная область показывает некоторые числа в правом верхнем углу текущей панели (то есть [0/24], вероятно, что-то связанное с тем, сколько символов было вставлено), которые мало что значат для меня, и я не нуждаюсь / не хочу (изменить: это кажется , copy-modeавтоматически вводится здесь)
  4. Мне нужно нажать qклавишу, чтобы снова получить работоспособный терминал.

Это слишком много хлопот для того, что я делаю десятки раз в день. Как заставить старый механизм снова заработать?


2
в моем терминале st, Shift+ MouseMiddleвставит Xselection как традиционное поведение. FWIW, MouseMiddleбез модификатора ничего не делает.
nabin-info

Ответы:


84

Чтобы восстановить конфигурацию копирования / вставки по умолчанию, вам нужно (по крайней мере временно) отключить поддержку мыши в tmux:

prefix : set -g mouse off

Где prefixнаходится ключ доступа к tmux ( Ctrl+ Bпо умолчанию, если вы его не переназначаете). :запускает командный режим и set -gустанавливает параметр глобально.

Когда режим мыши выключен, стандартные функции копирования / вставки, предоставляемые вашей операционной системой, работают должным образом.

Еще вы можете захотеть «развернуть» текущую панель, чтобы вы могли легко скопировать несколько строк.


Если вы работаете со старой (до 2.1) версией tmux, вместо этого вам нужно использовать следующее:

prefix : set -g mode-mouse off

Дополнительные сведения и несколько удобных привязок клавиш для автоматизации всего этого можно найти здесь:

http://tangledhelix.com/blog/2012/07/16/tmux-and-mouse-mode/

Основная идея статьи, ссылка на которую приведена выше, - это отрывок из .tmux.conf:

# disable mouse control by default - change 'off' to 'on' to enable by default.
setw -g mode-mouse off
set-option -g mouse-resize-pane off
set-option -g mouse-select-pane off
set-option -g mouse-select-window off
# toggle mouse mode to allow mouse copy/paste
# set mouse on with prefix m
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'
# set mouse off with prefix M
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'
# zoom this pane to full screen
bind + \
    new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \;\
    swap-pane -s tmux-zoom.0 \;\
    select-window -t tmux-zoom
# restore this pane
bind - \
    last-window \;\
    swap-pane -s tmux-zoom.0 \;\
    kill-window -t tmux-zoom

13
Если у вас tmux 1.8 или новее, есть встроенная команда Control-B z, которая переключает увеличенное состояние текущей панели. Итак, CB z для увеличения этой панели в полноэкранном режиме, та же команда снова для восстановления. Это устраняет необходимость определять последовательности клавиш CB + и CB - в конце приведенной выше конфигурации.
dr-jan

9
Если у вас tmux 2.1 или новее, все команды, связанные с мышью, устарели и заменены на «mouse», которая устанавливает все. Итак, чтобы отключить режим мыши по умолчанию, используйте setw -g mouse off. Удалите все ссылки на 'mode-mouse', 'mouse-resize-pane', 'mouse-select-pane' или 'mouse-select-window'.
dr-jan

50
Однако у режима мыши есть свои преимущества: он позволяет мне прокручивать. Есть ли комбинация настроек, которая позволяет мне использовать мой терминал как обычный чертовски терминал? Копирование / вставка и прокрутка включены?
Михай Данила

1
Есть некоторые другие настройки я , возможно, перепутались с, потому что на OSx (Sierra), optionне помогает. Вращение mode-mouse offпозволяет мне выбирать, как обычно, но тогда я не могу копировать в буфер обмена ( cmd+Cили cmd+shift+Cничего не делать, или звонить в колокольчик об ошибке, или поднимать селектор цвета)
dwanderson

3
Проверено с tmux v3, одна привязка для включения и выключения:bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Евгений

249
  1. Скопируйте текст: выделите текст и нажмите мышь left-buttonс shiftнажатием клавиши.
  2. Вставьте текст с помощью shiftклавиши +middle-button

30
Для пользователей OSX это ключ опции, как описано в этом сообщении в блоге: awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse
pangratz

3
Фактически, после выделения текста с помощью Shift + LMB вы можете использовать функциональные возможности ОС (Ctrl-Shift-C в моем случае) для копирования в буфер обмена, отличный от X11.
Евгений Панков

8
OP четко заявляет, что они хотят иметь возможность копировать и вставлять с помощью мыши без использования клавиатуры. Нажатие Shift(или клавиши выбора в OSX) - самый старый трюк в книге и работает на большинстве эмуляторов, но не отвечает на исходный вопрос.
Lqueryvg

1
@pangratz Использование ключа выбора может работать для пользователей iTerm, но не для пользователей собственного Терминала.
анишпател

Спасибо за обходной путь! Это все еще неоптимально - колесо мыши = прокрутка истории, а все другие функции мыши = нормальные были бы намного лучше.
Торстен Бронгер,

36

Если "установить -g mode-mouse on", вы можете сделать этот трюк:

На Mac нажмите кнопку «fn», затем выделите текст и скопируйте его, щелкнув правой кнопкой мыши или нажав на клавиатуре cmd + c.


4
для меня это работает, только если я не прокручиваю с помощью мыши. как только я прокручиваю мышью, это больше не работает
Пол

Также вы можете вставить с fn+Middle-Click
раскрутке

10

Изменено отсюда - я использую xclipвместо xselоригинала:

bind -T root MouseDown2Pane run -b "xclip -o | tmux load-buffer - && tmux paste-buffer -s ' '"

Это здорово работает для меня в tmux 2.5-rc2


это хорошо работает в терминале, но ведет себя странно, когда я пытаюсь вставить в vim
Tropilio

9

Используйте <prefix>+mпереключатель режима мыши включения или выключения

bind m run "if [[ `tmux show-option -w | grep mode-mouse.*on` ]]; then toggle=off; else toggle=on; fi; tmux display-message \"mouse tmux: \$toggle\"; tmux set-option -w mode-mouse \$toggle &> /dev/null; for cmd in mouse-select-pane mouse-resize-pane mouse-select-window; do tmux set-option -g \$cmd \$toggle &> /dev/null; done;"

Это сработало идеально для меня. Спасибо. Я хотел иметь возможность прокручивать в режиме мыши, но это мешало мне копировать текст. Это позволяет быстро переключаться, если вы хотите отключить режим мыши.
Биджан

6
Используюbind m set-option mouse\; display-message "Mouse is now #{?mouse,on,off}"
Максим Суслов

пользователь хочет иметь возможность копировать и вставлять, но не более .tmux.conf!
Джек Васи

6

У меня были проблемы с тем, чтобы пример Кристиана работал для Tmux 2, я думаю, некоторые опечатки. Я получил следующее, чтобы работать, и его немного легче читать, и он устанавливает как глобальный, так и оконный режим. кто-то. новый пользователь и tmux отличный!

bind m run "\
    tmux show-options -g | grep -q "mouse\\s*on"; \
    if [ \$? = 0 ]; \
    then  \
        toggle=off;  \
    else  \
        toggle=on;  \
    fi;  \
    tmux display-message \"mouse is now: \$toggle\";  \
    tmux set-option -w mouse \$toggle; \
    tmux set-option -g mouse \$toggle; \
    "

1
Работает для меня. Протестировано против tmux HEAD с github (по состоянию на вчерашний день).
Lqueryvg

2
Чтобы это сработало, мне пришлось изменить show-optionsстроку на tmux show-options -g | grep -q "mouse\\s*on"; \ . Это связано с тем, что регулярное выражение mouse.*onсовпадает с @scroll-in-moused-over-pane "on"частью плагина nhdaly / tmux-better-mouse-mode
Мэнди Шоп 01

1
Более простая привязка, которая в основном делает то же самое -bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'
Евгений

6

Для пользователей Mac + iTerm2 + tmux (версия> 2.1) :

Убедитесь, что режим мыши установлен в конфигурации tmux (просто добавьте set -g mode-mouse on~ / .tmux.conf). Теперь, чтобы скопировать текст внутри панели:

  1. Нажмите option + commandи выделите текст, который хотите скопировать, с помощью курсора мыши. Это как обрезать картинку.
  2. Выделенный текст скопировался бы автоматически (нет необходимости command + c). Просто приклейте обычным способом.

5

Ив Блюссо помог мне понять, как это работает, но на моей машине (работающей под управлением Windows 10 ) поведение было немного другим.

tmux 2.6

С активированной мышью ( :set -g mouse on)

Копировать

  1. Удерживайте Shiftи выделите мышью текст, который хотите скопировать.
  2. Теперь щелкните правой кнопкой мыши, чтобы скопировать выделенный текст (без удерживания Shift)

Вставить

  1. Удерживайте Shiftи щелкните правой кнопкой мыши, чтобы вставить скопированный текст

Просто как тот. Наслаждайтесь!


Лучший. Просто и элегантно.
слабый

3

Это модифицированная версия ответа Kaixuan , совместимая с Tmux 2.1.

`bind m run "if [[ `tmux show-options -w | grep mouse.*on` ]]; then toggle=off; else toggle=on; fi; tmux display-message \"mouse tmux: \$toggle\"; tmux set-option -w mouse \$toggle &> /dev/null;`"

Все mode-mouseварианты были объединены в одну, mouseи их show-optionпришлось заменить наshow-options


1
это должно быть в tmux.conf? ??
Арнольд Роа,

1
куда это идет?
statquant

@ArnoldRoa @statquant: Да, это идет в ~/.tmux.confфайл. Он связывает <prefix>+mключ для запуска этого встроенного скрипта.
inblueswithu

0

в ~/.tmux.conf:

set -g mouse off

имеющий bind r source-file ~/.tmux.confможет быть полезно тоже , так что вы можете сделать , ctrl-d rчтобы перезагрузить конфигурации, например.


0

Основываясь на других ответах, опубликованных здесь, я создал краткое решение, которое работает (по крайней мере) с tmux 2.8 и tmux 3.1 .

Вы можете включать tmux mouse supportи выключать, нажимая prefix- M. .tmux.confВключите в файл эту строку:

bind-key -T prefix m run "m=$(tmux show -g mou|grep -q on;echo $?);tmux set -g mou $m;tmux display mouse:\$m"

Это будет отображаться mouse: 1при включении и mouse: 0отключении. Многократное нажатие prefix- Mбудет переключать режим мыши между включением и выключением .

См. Также: поддержка мыши tmux

РЕДАКТИРОВАТЬ: Если вы видите returned 1сообщение об ошибке команды, вам нужно будет использовать следующее для tmux 3.1 или tmux 3.2 :

bind-key -T prefix m set -g mouse\; display 'Mouse: #{?mouse,ON,OFF}'

(это решение упоминалось ранее)


0

Вот обновленная версия переключателя мыши, протестированная на tmux v3.1

Поскольку код однострочен, я просто использовал t для имени переменной и заменил оператор if условным поиском буквы n. Условное выражение позволяет вырезать из него много пробелов и точек с запятой, еще больше сокращая строку.

bind m run "[[ `tmux show -gv mou` = *n* ]]&&t=off||t=on;tmux set -g mou \$t;tmux display-message \"mouse mode: \$t\""

Вот фрагмент кода, расширенный в более читаемую форму

[[ `tmux show -gv mouse` = *n* ]] && t=off || t=on
tmux set -g mouse $t
tmux display-message "mouse mode: $t"

-1

Я использую следующую привязку для выделения текста с нажатой левой кнопкой мыши -

bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "/mnt/c/Windows/System32/clip.exe"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.