На mu Ubuntu 12.04 мои команды копирования и вставки в буфер обмена tmux настроены следующим образом:
set -g prefix M-a
unbind C-b
bind C-c run "tmux save-buffer - | xclip -i -sel clipboard"
bind C-v run "tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"
Это прекрасно работало в течение самого долгого времени, примерно месяц назад, когда я подозреваю, что было сделано какое-то изменение конфигурации или изменение пакета, что нарушило вышесказанное. В терминале GNOME вставка по-прежнему работает нормально с prefix+ ctrl-vи ctrl-shift-v.
Однако команда xclip
copy больше не работает, независимо от того, что я делаю, и я попытался удалить приведенную выше привязку пользовательского префикса, используя -select
вместо -sel
, не используя clipboard
и т. Д. Это в значительной степени ограничитель показа для пользователя GVim, такого как я, так как я не t даже есть обходной путь для терминала GNOME, ctrl-shift-cкогда tmux берет на себя оболочку. Я вхожу в режим копирования, выбираю текст с space+ movement, и когда я выполняю prefix+ ctrl-cабсолютно ничего не происходит. До того, как это сломалось, tmux отображал подтверждающее сообщение в разделе уведомлений внизу.
У кого-нибудь есть предложения относительно того, как можно это отладить? Это довольно большой удар по производительности. Я, возможно, пока могу использовать временную уловку с временным файлом , но было бы здорово узнать, что случилось xclip
.
type xclip
?xsel -b
?xsel -i -b
похоже , делает свое дело!xsel -b
иxclip -selection clipboard
сделал бы то же самое!Ответы:
xsel
Утилита аналогичнаxclip
, но реализовано немного по- другому. Обычно я ожидал бы, что они будут вести себя одинаково, но они не будут делать точно один и тот же вызов библиотеки X, поэтому возможно, что в некоторых угловых случаяхxsel
будет работать, но не будетxclip
, или наоборот. Пытаться:источник
Добавление
-b
вrun-shell
(илиrun
) команду решило проблему. С помощью-b
команды shell запускается в фоновом режиме.bind C-c run-shell -b "tmux save-buffer - | xclip -i -sel clipboard"
источник
Хотя я больше не могу воспроизвести это, но вот технический ответ, что могло произойти в вашем случае.
Во-первых, вам нужно понять, как работает буфер обмена X11. Вы можете прочитать эссе jwz по этому адресу : http://www.jwz.org/doc/x-cut-and-paste.html
Короче говоря, приложение, которое содержит содержимое буфера обмена, должно запускаться, пока другое приложение не подтвердит право собственности. Поэтому, когда вы запускаете,
xclip -i <<< test
вы можете видеть, как xclip работает в фоновом режиме, пока вы не сделаете другой выбор:Теперь все в порядке, но когда вы выходите из этой оболочки, все процессы, принадлежащие этому сеансу, по умолчанию останавливаются, посылая им сигнал HUP. Это будет означать, что xclip будет убит, и вы больше не сможете получить доступ к содержимому буфера обмена.
Таким образом, предлагаемый обходной путь (если у вас нет xsel) - игнорировать сигнал HUP, используя следующую привязку:
xsel
Эта проблема не затрагивается, потому что первое, что он делает после fork (), - отсоединяется от управляющего терминала, чтобы он не получал сигнал HUP при выходе из своей оболочки (вы даже не увидите его в приведенном выше ps). вывод, но только когда вы делаетеps -e | grep xsel
).источник
У меня похожая проблема, и я боюсь, что временный файл не поможет в этом конкретном случае. Это связано с тем
xclip
, что при вызове tmux он ведет себя иначе, чем при интерактивном запуске, и ожидает, пока другое приложение не станет владельцем области буфера обмена. Попробуйте использовать,xclip -l 1
чтобы немедленно завершить работу (подробности см. На странице руководства).источник
bind C-y run-shell "tmux save-buffer - | xclip -l 1 -i"
.xclip
происходит, когда вы пытаетесь скопировать буфер. Если он там висит и ждет чего-то, поможет ли его убийство? Кроме того, вы должны выйти из режима выбора, нажав Enter (и, следовательно, сохранив его в буфере), прежде чем пытаться скопировать буфер в буфер обмена X.Это старый вопрос, но я подозреваю, что у меня есть решение, взятое со страницы Tmux вики Arch :
Итак, ваша команда должна стать:
источник
Это рабочая конфигурация, которую я использую:
источник