скопировать (в буфер обмена X) ярлык в .tmux.conf

22

Чтобы скопировать текст в буфер обмена X в tmux, я сейчас делаю следующее:

  • перейти в режим выбора с prefix[
  • начать выбор с space(используя mode-keys viкстати)
  • выделите текст и нажмите enter
  • скопировать буфер tmux в буфер обмена X, используя prefixctrl+c

(У меня есть отображение как bind C-c run "tmux show-buffer | xclip -selection clipboard -i"

Я пытаюсь устранить некоторые из этих шагов, делая сопоставление для режима выбора. Я пытался:

bind-key -t vi-copy C-c run "tmux show-buffer | xclip -selection clipboard -i"

что дает мне и ошибку:

.. usage: bind-key [-cnr] [-t key-table] key command [arguments]

(Я не смог скопировать ошибку)

Как я могу это исправить?

РЕДАКТИРОВАТЬ: я понял, что я могу выбрать и скопировать в буфер tmux (первые 3 шага) с помощью мыши, как обычный выбор (хотя выделение не длится, он по-прежнему выбирает текст), а затем использовать следующую привязку для копирования в буфер обмена х :

bind-key -n C-c run "tmux show-buffer | xclip -selection clipboard -i"

(Я использовал этот метод, чтобы скопировать этот текст, и это было легко;)

обратите внимание, что -nобозначает «без префикса», поэтому экранирование не требуется. если вас не смущает исчезающая изюминка, это аналогично обычному (общему пользовательскому интерфейсу) копированию.

это лучшее, что я придумал до сих пор ..

EDIT2: оказалось, что ctrl+cперекрывается с прерыванием процесса, поэтому я перешел ctrl+alt+cна сейчас. (не совсем понравилось)

EDIT3: в tmux 1.8 или около того добавлена ​​поддержка добавления сочетаний клавиш в режиме копирования, так что теперь мое первое оригинальное намерение возможно с использованием чего-то вроде:

bind-key -tvi-copy y copy-pipe "xclip -selection clipboard -i"
bind-key -tvi-copy enter copy-pipe "xclip -selection clipboard -i"

Эти две привязки позволяют копировать текст в буфер обмена при использовании enterили yзавершать копирование.

Я по-прежнему сохраняю эту строку на случай, если я сделаю копирование мышью и решу позже получить содержимое буфера tmux в буфер обмена:

bind-key y run "tmux show-buffer | xclip -selection clipboard -i"
никто
источник
1
Вы можете изменить прерывание с ctrl-c на другое, используя stty. Например, чтобы использовать Ctrl-Z: stty intr=^Z. Будьте осторожны с этой командой, можно установить обычный символ в качестве символа прерывания (если вы это сделаете, используйте ctrl-v, чтобы ввести его до исправления настройки). И не запутайтесь в том, какой ключ используется (например, ctrl-z обычно является ключом приостановки).
пепел
@ash записал, спасибо .. но я думаю, что я буду использовать ^cв качестве ключа прерывания, поскольку я использую его чаще, чем копирование. Я также обновил ответ, чтобы отразить мое текущее решение этой проблемы.
нет
звучит хорошо. Также обратите внимание, что многие запуски xmodmap могут привести в смешное состояние, которое трудно исправить, поэтому я рекомендую начинать заново с нового сеанса X, если влияние команд кажется неправильным.
пепел
Бегущий bind-key -t vi-copy C-c run "tmux show-buffer | xclip -selection clipboard -i"концерт дает:Unknown command: run
Алексей Магура
1
Тем не менее, работает bind-key C-c run "tmux show-buffer | xclip -selection clipboard -i"работает просто отлично.
Алексей Магура

Ответы:

13

Этот ответ не отвечает непосредственно на ваш вопрос о создании ярлыка. Но вот что я делаю.

Вы можете временно приостановить передачу событий клавиш / мыши в tmux, удерживая shift. Таким образом, вы можете нажать и удерживать Shift и использовать обычные ярлыки терминала / X, чтобы сделать копию. В моем случае, используя Terminator, я нажимаю shift, выделяю мышью все, что хочу, копируюCtrl+Shift+C

А в случае, если у вас есть разделенные панели, вы можете увеличить текущую панель с помощью клавиши масштабирования Prefix + zи выполнить операцию копирования. (проверено на tmux v1.8)

Муниб
источник
Я не смог использовать это из-за горизонтального разделения, но трюк с масштабированием звучит замечательно, спасибо за совет.
нет
Это работает в gnome-Terminal, наверняка; но относится ли это ко всем терминальным эмуляторам? Вероятно, нет
jpaugh
В wsl-терминале это работает. Спаси мой день
Q
1

Это не дает прямого ответа на ваш вопрос, но посмотрите на tmux-yank , как описано в разделе Использование системного буфера обмена в режиме vi-copy в tmux и Получение tmux для копирования буфера в буфер обмена . После установки

prefix + y - копирует текст из командной строки в буфер обмена.

привязки режима копирования:

y - скопировать выделение в системный буфер обмена

Serv-вкл
источник