Скопируйте / вставьте текстовые выделения между tmux и буфером обмена

Я запускаю последнюю версию tmux (из репозитория git) и xclip (0.12), и я хотел бы иметь возможность использовать привязки клавиш, подобные Emacs, для перемещения текста в copy-mode копирования, копирования ( Mw ) в буфер обмена и вставить ( Cy ) из буфера копирования в буфер обмена.

До сих пор я мог вставлять текст с помощью Cy и перемещаться в copy-mode с помощью сочетаний клавиш Emacs, но я все еще не могу скопировать текст из буфера tmux (например, в copy-mode )

Я нашел этот поток для копирования всего буфера в буфер обмена (и наоборот), но он, похоже, не работает для меня.

Кроме того, в списке почтовых tmux-users мне сказали, что последние версии tmux (только в git repo) предоставляют команду под названием copy-pipe . На этой странице написано следующее:

Одна команда принимает аргумент, copy-pipe, который копирует выделение и передает его команде. Например, следующее будет связывать «C-q», чтобы скопировать выделение в / tmp, а также в буфер вставки:

  bind-key -temacs-copy Cq copy-pipe "cat >/tmp/out" 

Похоже, что copy-pipe предназначена для частичного соединения выбора с другой командой. В этом описании и в команде также есть некоторые опечатки (что такое temacs-copy ?)

В любом случае, я бы хотел:

Копирование:

  1. Введите режим копирования
  2. Переместитесь к тексту, который я хочу скопировать, используя команды навигации Emacs (например, Cf , Cb , Mf , Mb , Ca , Ce и т. Д., Чтобы переместить курсор). Нет префикса для любого из них.
  3. Скопируйте выделенный текст в буфер обмена с помощью: Mw ( без префикса )

Склеивание:

  1. Я хотел бы иметь возможность ввести Cy ( без ввода copy-mode ) для вставки текста в терминал ( без префикса )

Я попробовал следующее для копирования без везения:

 bind-key -n Mw run "tmux save-buffer - | xclip -i -selection clipboard" 

Однако приклеивание отлично работает:

 bind-key -n Cy run "xclip -o | tmux load-buffer - ; tmux paste-buffer" 

Странно то, что я знаю, что часть команды « xclip -i -selection clipboard » выше приведенной выше команды копирования работает хорошо, поскольку я могу скопировать вещи в буфер обмена в командной строке, например:

 echo "Hello world. How are you?" | xclip -i -selection clipboard 

Со всем этим, как я могу скопировать выделение из режима копирования в буфер обмена?

3 Solutions collect form web for “Скопируйте / вставьте текстовые выделения между tmux и буфером обмена”

Используйте следующие tmux.conf с copy-pipe в новых версиях tmux (1.8+):

 set -g mouse on # To copy: bind-key -n -t emacs-copy Mw copy-pipe "xclip -i -sel p -f | xclip -i -sel c " # To paste: bind-key -n Cy run "xclip -o | tmux load-buffer - ; tmux paste-buffer" 
  1. prefix+[ в режиме копирования
  2. выберите контент с помощью мыши (удерживайте)
  3. Mw для копирования этой части в системный буфер обмена
  4. Cy вставьте его внутри tmux, Cv чтобы вставить его в другое обычное приложение, например, в веб-браузер.

-temacs-copy это не опечатка. Ведущая тире означает, что это опция для команды bind-keys (вместе с аргументом для опции). Это эквивалентно -t emacs-copy , если вам это нравится.

Режим копирования использует другой набор привязок и команд 1, чем «обычный режим». Команда copy-pipe доступна только в альтернативных «режимах» таблиц привязки. Когда mode-keys являются emacs , режим копирования будет использовать таблицу emacs-copy , поэтому вам нужно привязать Mw к copy-pipe в этой таблице.

 bind-key -temacs-copy Mw copy-pipe "xclip -i -selection clipboard" 

Будьте осторожны, делая слишком много привязок «без префикса». Они затруднят ввод этих связанных ключей программе, запущенной внутри tmux (например, когда вы хотите ввести Cy в экземпляр типа tty из Emacs, запущенного внутри tmux ). Вы всегда можете (префикс) связывать некоторый ключ, который выполняет send-keys Cy , но это может сделать его более громоздким для ввода, если вам это нужно достаточно часто.


1 Доступны только команды перемещения и редактирования. За исключением copy-pipe , эти команды не принимают никаких аргументов (это то, что означает справочная страница с ним, говорит: «Одна команда принимает аргумент», «in» – это, вероятно, опечатка или ошибка редактирования).

Обратите внимание, что с Tmux 2.4 (с момента фиксации ) синтаксис привязки изменился. Я перефразирую этот комментарий Гитуба, чтобы кратко изложить изменение:

  1. заменить -t на -T
  2. замените vi-<name> на <name>-mode-vi
  3. префикс команды с помощью send-keys -X

Я имел:

 bind-key -n -t vi-copy Enter copy-pipe 'xclip -i -sel p -f | xclip -i -sel c' bind-key -n -t vi-copy MouseDragEnd1Pane copy-pipe 'xclip -i -sel p -f | xclip -i -sel c' 

который мне нужно было изменить:

 bind-key -n -T copy-mode-vi Enter send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c' bind-key -n -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe 'xclip -i -sel p -f | xclip -i -sel c' 

Из журнала изменений :

Основные таблицы претерпели серьезные изменения. Таблицы ключей режима больше не отделены от основных таблиц ключей. Все таблицы ключей режима были удалены вместе с флагом -t для привязки и отмены привязки.

Таблицы emacs-edit, vi-edit, emacs-choose и vi-select заменяются фиксированными привязками клавиш в командной строке и выбирают режимы. Опции режима и клавиши состояния остаются.

Таблицы emacs-copy и vi-copy заменены таблицами режима копирования и копирования-режима-vi. Команды отправляются с использованием флагов -X и -N для отправки ключей. Итак, следующее:

 bind -temacs-copy C-Up scroll-up bind -temacs-copy -R5 WheelUpPane scroll-up 

становится:

 bind -Tcopy-mode C-Up send -X scroll-up bind -Tcopy-mode WheelUpPane send -N5 -X scroll-up 

Эти изменения позволяют использовать полный синтаксический анализатор команд (включая последовательности команд) и набор команд – например, обычная командная строка с редактированием и история теперь используется для поиска, перехода и т. Д. Вместо пользовательского. По умолчанию привязка Cr теперь:

 bind -Tcopy-mode Cr command-prompt -p'search up' "send -X search-backward-incremental '%%'" 

Есть также некоторые новые комманды, доступные с send -X, такие как copy-pipe-and-cancel.

  • Есть ли простой способ «перезапустить» панель tmux?
  • Как я могу создать файл на основе команды оболочки в .tmux.conf?
  • Почему я не могу найти страницу руководства tmux для join-pane?
  • Прикрепите tmux к pty после reptyr?
  • Есть ли способ настроить размерность часов в tmux?
  • Возможно ли запустить fbi внутри tmux, если tmux работает в виртуальном tty?
  • Tmux: показ сеансов в нижней строке
  • Как получить файл конфигурации tmux по умолчанию?
  • vim и tmux противоречат друг другу. Как я могу это исправить?
  • Получение текущего использования памяти сеанса tmux
  • Запрет переименования окон в tmux
  • Linux и Unix - лучшая ОС в мире.