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


82

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

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

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

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


Вот аналогичные вопросы и ответы на 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.

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


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.
MutantMahesh

5

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


Этот вопрос очень старый, и ваше решение не подходит для использования с iTerm. Текущий принятый ответ является правильным.
OGHaza

Это работает для Gnome Terminal, но этот вопрос касается OSX
JKirchartz

3

Мне удалось решить эту проблему с помощью CMD+ Cпосле выбора текста с помощью FN+ mouse drag with left button downиз tmuxокна в Terminalприложении macOS High Sierra.



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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.