Як скопіювати в системний буфер обміну з виводу tmux після вибору миші?


82

Тепер для копіювання в системний буфер обміну мені потрібно вибрати за допомогою тексту миші у вікні tmux Shiftклавішу. І тоді я повинен виконати цю команду:

tmux save-buffer - | reattach-to-user-namespace pbcopy

Чи є простіший варіант збереження в системний буфер обміну? Прив'язка клавіш або краще зробити це автоматично після випуску Shift.

Моя конфігурація tmux: https://gist.github.com/3641580


Ось подібні запитання щодо unix.stackexchange .
crw

2
Будь-яка з цих робіт працює на MacOS, зокрема на Сьєррі? Вірніше, ніхто з них не знає, хтось знає, що б? Це запитання позначено тегами osx, але відповіді говорять про клацання лівою та середньою
клавішами

Відповіді:


192

Якщо ви використовуєте iTerm2, ви можете скопіювати текст у сеансі Tmux, утримуючи Optionклавішу, перетягуючи мишу, щоб зробити вибір.

Тоді має бути можливість вставити текст де завгодно з Cmd+ Vяк завжди. Знайшов тут: http://web.archive.org/web/20131226003700/http://ootput.wordpress.com/2013/08/02/copy-and-paste-in-tmux-with-mouse/


26
Не допомагає з панелями tmux
Jak S

41
Якщо у вас є панелі, можна зробити прямокутний виділення за допомогою <alt> + <cmd> + виділення миші.
jomuller

6
Прямокутний вибір не надає однакових функцій для панелей, оскільки виділення може починатися та закінчуватися в будь-якому стовпці. Це рішення стосується не tmux, а самого терміналу. Панелі - це основна особливість tmux.
Бетамос,

6
Префікс @JakS + Z збільшує поточну область. Тоді у вас не буде цієї проблеми. Якщо ви також не знаходитесь у розділі vim :)
dgmora

10
У терміналі ви можете вибрати текст, утримуючи клавішу "fn". Ви можете скопіювати виділений текст за допомогою "Cmd + C".
fbessho

58

Якщо ви використовуєте iTerm2 3.x, ви можете зробити копіювання / вставлення, увімкнувши Applications in terminal may access clipboard:

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

Просто виділіть текст мишкою, щоб скопіювати його в буфер обміну OS X! Не потрібно натискати, Optionяк запропоновано у відповіді на адаптера.

Ви також можете вставити з буфера обміну OS X у tmux за допомогою звичайного Cmd+ V.


1
Всі reattach-to-user-namespaceосновні підходи для мене не працюють, тому що я часто потрапляю в Linux-машини. Однак це рішення чудово працює! Дякую!
jdg

Чудова відповідь. Я все ще використовую <kbd> Option </kbd>, коли я перебуваю у vim і не хочу, щоб миша активувала виділення vim.
Chad Skeeters

Це працювало чудово. Не потрібно змінювати будь-яку конфігурацію. Дякую.
muammar

це чудово працює лише з tmux, але тепер як надіслати vim yanks, що працюють у межах цього tmux, до буфера обміну iterm та системи ??
slow

@schlow Це, мабуть, має бути окремим запитанням Vim + tmux StackOverflow, але випадково я теж використовую Vim, і для цього я додав set clipboard=unnamedу свій vimrc
Jerome Dalbert

28

Тут є відповідь на подібне запитання: /unix/15715/getting-tmux-to-copy-a-buffer-to-the-clipboard

Знайдене там рішення:

# move x clipboard into tmux paste buffer
bind C-p run "tmux set-buffer \"$(xclip -o)\"; tmux paste-buffer"
# move tmux copy buffer into x clipboard
bind C-y run "tmux show-buffer | xclip -i"

Перевірте також: http://awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/

якщо ви встановили такі параметри:

панель вибору миші

вікно вибору миші

Ви помітите, що Ви взагалі не можете виділити текст.

рішення полягає у використанні клавіші Shift.

hold down the shift key and then left click and drag across the target text. you must also hold down the shift key and then middle click in order to paste the text.

4
з iterm використовуйте клавішу опцій замість клавіші Shift. [як згадано тут: awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse ]
gatoatigrado

2
Для MacOS xclip -o=> pbpaste, xclip -i=> pbcopy.
Gingi

23

Для os x, якщо ви використовуєте додаток "Термінал". Ви можете вимкнути прокрутку миші та використовувати звичайні функції копіювання / вставлення (cmd + c / cmd + v):

set-option -g mouse-select-pane off
set-option -g mouse-resize-pane off
set-option -g mouse-select-window off
set-window-option -g mode-mouse off

або ви можете скористатися прокруткою миші та виділити текст за допомогою "клавіші fn":

set-window-option -g mode-mouse on

16
fnключ наконечник рятувальник життя! багато людей пропонують використовувати, ALTале це не працює на останньому Mac OS x
AK_

1
А ще краще - поєднайте fn та опцію для вибору за допомогою режиму стовпців!
Флетч,

Будь-який спосіб змінити клавішу fn? Використання зовнішньої клавіатури без клавіші fn!
CentAu

@CentAu Спробуйте натомість використовувати клавішу "Вікно"
Piotrek Zatorski

19

На OSX, що використовує tmux версії 2.2 або новішої, додайте у свій файл tmux.conf таке:

bind-key -t emacs-copy MouseDragEnd1Pane copy-pipe "pbcopy"
bind-key -t vi-copy MouseDragEnd1Pane copy-pipe "pbcopy"

Для версії tmux 2.4, оскільки вони люб'язно вирішили змінити синтаксис команди, вам слід використовувати:

bind-key -T copy-mode MouseDragEnd1Pane send -X copy-pipe-and-cancel "pbcopy"

Зверніть увагу, що вам може знадобитися використовувати reattach-to-user-namespace pbcopyзамість простого pbcopy.


Також на Ubuntu 16.04 це вже не проблема на tmux 2.1. Я можу просто використовувати методи копіювання вставки терміналу за замовчуванням.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Поняття не маю, чому це так низько у списку, це правильна відповідь!
shawkinaw

11

Поміщення цього у мій файл ~ / .tmux.conf мені підходить:

bind y run-shell "reattach-to-user-namespace -l zsh -c 'tmux show-buffer | pbcopy'"

Всі інші потенційні рішення, які я знайшов, - це копіювання якогось порожнього вмісту в буфер обміну OSX.

Єдина проблема полягає в тому, що це, здається, ставить повернення каретки в кінець вставленого вмісту.


3
Це працює, але все одно вимагає натискання PREFIX + y після вибору. Чи є спосіб скопіювати текст із сеансу tmux в OS X, просто вибравши його, як у терміналі Linux?
Рафаель Бугаєвський

6

натисніть ліву кнопку миші та утримуйте її, виділіть текст на панелі та все одно утримуйте кнопку натиснутою. потім натисніть "y", що зберігає виділення в буфері обміну та виходить із режиму виділення / копіювання.

тут працює з iTerm 3.1.beta.5, tmux 2.5 та наступною конфігурацією:

### copy & paste -------------------------------------------------------
# Use vim keybindings in copy mode
setw -g mode-keys vi
# Setup 'v' to begin selection as in Vim
bind-key -T copy-mode-vi v send -X begin-selection
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"
# Update default binding of `Enter` to also use copy-pipe
unbind -T copy-mode-vi Enter
bind-key -T copy-mode-vi Enter send -X copy-pipe-and-cancel "reattach-to-user-namespace pbcopy"

+1 Нарешті, сучасне рішення, яке працює. Дякую. - Здається, добре просто замінити Enter, без попереднього unbind.
ThomasH

Використовується версія Tmux версії 3 і вище, copy-mode-viтоді як використовується старіша версія copy-mode.
МутантМахеш,

5

натисніть клавішу Shift, а потім клацніть мишею !! Перевірте це посилання. http://awhan.wordpress.com/2012/04/18/tmux-copy-paste-with-mouse/


Це запитання дуже давнє, і ваше рішення неправильне для використання з iTerm. Поточна прийнята відповідь є правильною.
OGHaza

Це працює для терміналу Gnome, але це питання задає OSX
JKirchartz,

3

Я зміг вирішити цю проблему за допомогою CMD+ Cпісля виділення тексту за допомогою вікна FN+ mouse drag with left button downу tmuxвікні Terminalпрограми macOS High Sierra.


1

Сьогодні я зробив версію за допомогою netcat, яка досить мертва.

https://github.com/base698/tmux-copy-paste-mac-osx

Ось tmux.conf:

bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-pipe 'nc localhost 5682'
bind p run-shell 'nc localhost 5683; nc localhost 5683 | tmux load-buffer -' \; paste-buffer

Працює з мишею також у версії 1.8


1

Ось рішення, для якого я використовую tmux версії 2.8, macOS Mojave 10.14.1 та Terminal.app.

Після відпускання кнопки миші це вилучає виділення під час копіювання в системний буфер обміну (а також у tmuxбуфер):

bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"

0

Надійне рішення, яке працює з будь-якою комбінацією mosh + tmux + vim + вкладених сеансів

Провівши багато днів, вирішуючи це питання, на сьогоднішній день найнадійнішим рішенням, яке я виявив, є розміщене рішення Сураджа Н. Курапаті . Рішення працює локально з (і без) tmux v3.2 та / або vim, а також віддалено з (і без) tmux та / або vim , використовуючи як клавіші режиму копіювання, так і простий вибір миші.

У поєднанні з запитом Майка Гуліка (на даний момент відкритим) на витягування , всі ці комбінації працюють і з мошем .

Поки рішення Майка не буде об'єднано в мош, ви можете вносити його зміни та будувати локально, використовуючи:

Ubuntu:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0 \
&& sudo apt-add-repository https://cli.github.com/packages \
&& sudo apt update \
&& sudo apt install -y gh autoconf automake perl protobuf-compiler libprotobuf-dev libncurses-dev zlib1g-dev libutempter-dev libssl-dev pkg-config \
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

macOS:

Я думаю, вам спочатку потрібно встановити інструменти командного рядка Xcode / Developer від Apple (що, IIRC, тепер можна зробити простим запуском gccта виходом), а потім запустити:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" \
&& brew install gh autoconf automake
&& mkdir -p ~/tmp/mosh \
&& git clone https://github.com/mobile-shell/mosh ~/tmp/mosh \
&& cd ~/tmp/mosh \
&& gh pr checkout 1104 \
&& ./autogen.sh \
&& ./configure \
&& make \
&& sudo make install

Завдяки цим оновленням нарешті було досягнуто буфер обміну святого Грааля!

Однак це дуже нова інформація, тому цей мій пост досить мінливий. Тому:

Будь ласка, перегляньте мій пост, якщо:

  1. Мені не вистачає залежностей тощо, або
  2. Виконання a gh pr checkout 1104 змін Майка більше не потрібно, тому що вони були об’єднані в мош, або
  3. Побудова з вихідного коду більше не потрібна, оскільки об’єднані зміни було висунуто до менеджерів пакетів brew / apt / etc.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.