Як скопіювати та вставити мишкою з tmux


44

Я використовую tmuxі OSX. Під час копіювання та вставлення з терміналу tmuxя можу утримувати Optionта вибирати текст. Однак я не можу змусити текст залишитися всередині області. Отже, коли я хочу скопіювати текст, мені або потрібно обернути панель в крайній лівій частині, або збільшити масштаб області, як показано нижче.

Це крім того, що потрібно утримувати Optionклавішу - це біль. Я знаю, що можу входити у візуальний режим і використовувати рухи vim, щоб дістатися туди, але я вважаю за краще використовувати спосіб миші. Хтось знайшов рішення для цього?

введіть тут опис зображення введіть тут опис зображення


"Однак я не можу змусити текст залишитися всередині області." Що ви маєте на увазі під цим?
Blaszard

Відповіді:


36

Помістіть цей блок коду у своє ~/.tmux.conf. Це дозволить інтегрувати мишу, дозволяючи копіювати з панелі миші, не збільшуючи масштаб.

set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -t vi-copy    C-WheelUpPane   halfpage-up
bind -t vi-copy    C-WheelDownPane halfpage-down
bind -t emacs-copy C-WheelUpPane   halfpage-up
bind -t emacs-copy C-WheelDownPane halfpage-down

# To copy, drag to highlight text in yellow, press Enter and then release mouse
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "pbcopy"

Після цього перезапустіть свій tmux сеанс. Виділіть трохи тексту за допомогою миші, але не відпускайте мишку. Тепер, коли текст виділено в стилі і натискається миша, натисніть клавішу повернення. Виділений текст зникне і буде скопійований у буфер обміну. Тепер відпустіть мишку.

Крім цього, є також деякі цікаві речі, які ви можете зробити з мишею, наприклад, прокручування вгору та вниз, вибір активної панелі тощо.

Якщо ви використовуєте більш нову версію tmux на macOS, спробуйте наступну замість вищевказаної:

# macOS only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi 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-and-cancel "pbcopy"

Якщо ви використовуєте iTerm на macOS, перейдіть на iTerm2> Налаштування> вкладку «Загальне» та в розділі «Вибір» встановіть прапорець «Програми в терміналі можуть отримати доступ до буфера обміну».

І якщо ви використовуєте Linux та більш нову версію tmux, то

# Linux only
set -g mouse on
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'select-pane -t=; copy-mode -e; send-keys -M'"
bind -n WheelDownPane select-pane -t= \; send-keys -M
bind -n C-WheelUpPane select-pane -t= \; copy-mode -e \; send-keys -M
bind -T copy-mode-vi    C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-vi    C-WheelDownPane send-keys -X halfpage-down
bind -T copy-mode-emacs C-WheelUpPane   send-keys -X halfpage-up
bind -T copy-mode-emacs C-WheelDownPane send-keys -X halfpage-down

# To copy, left click and drag to highlight text in yellow, 
# once you release left click yellow text will disappear and will automatically be available in clibboard
# # Use vim keybindings in copy mode
setw -g mode-keys vi
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -selection c"
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

(Ви також можете перевірити https://github.com/gpakosz/.tmux для багатьох інших варіантів tmux.)


1
Нарешті щось, що насправді працює! Копіювання та вставлення - це найприємніша річ із спробою tmux, я раніше відмовився від цього, і фрагменти конфігурації, які я намагався випробувати, поводилися непослідовно, спасибі людині.
Брено Сальгадо

1
Я використовував iterm в mac і повинен був увімкнути iTerm2> Налаштування> вкладка «Загальне», а в розділі «Вибір» «Додатки в терміналі можуть отримати доступ до буфера обміну». Довідка: rushiagr.com/blog/2016/06/16/…
Rujoota Shah

@RujootaShah Так, це правильно. Вам потрібно це зробити. Дякую, що поділились.
GMaster

1
Дякую! Працює як шарм. Мені потрібно було встановити sudo apt-get install -y xclip(Ubuntu Linux).
Петро

працює чудово, дякую @GMaster
Luja Shrestha
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.