Как скопировать в системный буфер обмена из вывода tmux после выбора мыши?

82

Теперь для копирования в системный буфер обмена я должен выделить с помощью мыши текст в окне tmux с помощью Shiftклавиши. И тогда мне нужно запустить эту команду:

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

Есть ли возможность проще сохранить в системный буфер обмена? Привязка клавиш или лучше сделать это автоматически после отпускания Shift.

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

Tomekfranek
источник
Вот аналогичные вопросы и ответы на unix.stackexchange .
crw 05
2
Что-нибудь из этого работает на MacOS, особенно на Sierra? Вернее, никто из них не знает, кто знает, что бы? Этот вопрос помечен 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 07
6
Прямоугольное выделение не обеспечивает такой же функциональности для панелей, поскольку выделение может начинаться и заканчиваться в любом столбце. Это решение связано не с tmux, а с самим терминалом. Панели - это основная функция tmux.
Betamos
6
Префикс @JakS + Z увеличивает масштаб текущей панели. Тогда у вас не будет этой проблемы. Если только вы не
входите в
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подходы, основанные на -базах, не работают для меня, потому что я часто использую ssh на Linux-машинах. Однако это решение отлично работает! Спасибо!
jdg
Отличный ответ. Я все еще использую <kbd> Option </kbd>, когда нахожусь в vim, и не хочу, чтобы мышь активировала выделение vim.
Чад Скитерс,
Это прекрасно сработало. Нет необходимости изменять какую-либо конфигурацию. Благодарю.
muammar
это отлично работает только с tmux, но теперь как отправить vim yanks, работающие в этом tmux, в iterm и системные буферы обмена?
schlow 04
@schlow Это, вероятно, должен быть отдельный вопрос StackOverflow Vim + tmux, но я тоже использую Vim, и я добавил set clipboard=unnamedв свой vimrc для этой цели
Джером
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но он не работает на последней
версии
1
Еще лучше - объедините fn и возможность выбора в режиме столбца!
Флетч
Есть ли способ изменить клавишу fn? Использование внешней клавиатуры без клавиши fn!
CentAu
@CentAu Попробуйте вместо этого использовать клавишу "Окно"
Пиотрек Заторски
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вместо plain pbcopy.

Кайл Клёппер
источник
Также в Ubuntu 16.04 это больше не проблема tmux 2.1. Я могу просто использовать стандартные методы копирования и вставки терминала.
Чиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
Понятия не имею, почему это так мало в списке, это правильный ответ!
Shawkinaw
11

Помещение этого в мой файл ~ / .tmux.conf работает для меня:

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

Все другие возможные решения, которые я нашел, заключались в копировании какого-то пустого содержимого в буфер обмена OSX.

Единственная проблема заключается в том, что это, кажется, помещает возврат каретки в конец вставленного содержимого.

Crcastle
источник
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"
Bahnfrei
источник
+1 Наконец-то актуальное решение, которое работает. Благодарю. - Кажется, можно просто переопределить Enter без предварительного уведомления unbind.
ThomasH
Tmux версии 3 и выше использует, copy-mode-viтогда как более старая версия использует copy-mode.
MutantMahesh
5

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

user3023768
источник
Этот вопрос очень старый, и ваше решение не подходит для использования с iTerm. Текущий принятый ответ является правильным.
OGHaza
Это работает для Gnome Terminal, но этот вопрос касается 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 , используя как клавиши режима копирования, так и простой выбор мышью.

Если в сочетании с ( в настоящее время открыт) Майк Гулик по запросу тянуть все эти комбинации работают с Mosh , а также.

Пока решение Майка не будет объединено в mosh, вы можете вытащить его изменения и построить локально, используя:

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:

Я думаю, вам нужно сначала установить инструменты командной строки Apple Xcode / Developer (которые, 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. Выполнение некоторых gh pr checkout 1104изменений Майка больше не требуется, потому что они были объединены в mosh, или
  3. Сборка из исходного кода больше не требуется, потому что объединенные изменения были переданы менеджерам пакетов brew / apt / etc.
Джонатан Уиллер
источник