Это мой довольно длинный ответ, который должен решить две основные проблемы с использованием xclip для копирования буфера из удаленного (ssh) сеанса tmux:
1. Не отвечающий xclip
Для меня ответ @ Grauwolf с xclip
не работал (делает tmux панель совершенно безразличным). Я узнал, почему на странице Tmux вики Arch :
xclip также может быть использован для этой цели, в отличие от xsel, он лучше работает при печати необработанных битовых потоков, которые не соответствуют текущей локали. Тем не менее, лучше использовать xsel вместо xclip, поскольку xclip не закрывает STDOUT после чтения из буфера tmux. Таким образом, tmux не знает, что задание копирования выполнено, и продолжает ждать завершения xclip, что делает tmux безразличным. Обходной путь - перенаправить STDOUT xclip в / dev / null.
Так что привязка должна быть:
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
Теперь это будет работать, если ваша сессия tmux локальная.
2. xclip не может подключиться к X
Если вы используете tmux поверх ssh -X , есть большие шансы, что это не сработает напрямую.
Это потому, что переменная оболочки $DISPLAY
должна быть установлена правильно.
Комплексное решение
Так что для меня, полный рабочий раствор должен поместить следующие строки по моему ~/.tmux.conf
:
set-option -g update-environment "DISPLAY"
bind-key C-y run "export DISPLAY=`tmux show-env | sed -n 's/^DISPLAY=//p'`; tmux save-buffer - | xclip -i -selection clipboard >/dev/null"
# Or more concise:
bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's/^DISPLAY=//p'` >/dev/null
Для вставки из предмета:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
Я не до конца понимаю, почему $DISPLAY
не правильно установлен во время поиска .tmux.conf
, поэтому я должен извлечь его с помощью tmux show-env
и sed
.
Если у вас tmux> = 1.8, вы можете адаптировать эту команду с помощью copy-pipe
:
bind-key -t vi-copy y copy-pipe 'xclip -in -selection clipboard -d `tmux show-env | sed -n s/^DISPLAY=//p` >/dev/null'