Ini adalah jawaban saya yang agak panjang yang harus memperbaiki dua masalah utama dengan menggunakan xclip untuk menyalin buffer dari sesi tmux jarak jauh (ssh):
1. xclip tidak responsif
Bagi saya @ jawaban Grauwolf dengan xclip
tidak bekerja (menjadikan tmux pane benar-benar tidak responsif). Saya menemukan alasannya di halaman Tmux di Arch wiki :
xclip juga dapat digunakan untuk tujuan itu, tidak seperti xsel, ia berfungsi lebih baik untuk mencetak bitstream mentah yang tidak sesuai dengan lokal saat ini. Namun demikian, lebih baik menggunakan xsel daripada xclip, karena xclip tidak menutup STDOUT setelah membaca dari buffer tmux. Karena itu, tmux tidak tahu bahwa tugas penyalinan telah selesai, dan terus menunggu penghentian xclip, sehingga membuat tmux tidak responsif. Solusinya adalah dengan mengarahkan STDOUT dari xclip ke / dev / null
Jadi pengikatannya harus:
bind-key C-y run "tmux save-buffer - | xclip -i -sel clip > /dev/null"
Sekarang, ini akan berfungsi jika sesi tmux Anda bersifat lokal.
2. xclip tidak dapat terhubung ke X
Jika Anda menggunakan tmux over ssh -X , ada kemungkinan besar ini tidak akan berfungsi secara langsung.
Itu karena variabel shell $DISPLAY
perlu diatur dengan benar.
Solusi lengkap
Jadi bagi saya, solusi kerja yang lengkap adalah dengan meletakkan baris berikut di saya ~/.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
Untuk menempelkan dari primer:
bind-key C-p run "xclip -d `tmux show-env | sed -n s/^DISPLAY=//p` -o | tmux load-buffer - && tmux paste-buffer"
Saya tidak sepenuhnya mengerti mengapa $DISPLAY
tidak ditetapkan dengan benar saat sumber .tmux.conf
, jadi ini sebabnya saya harus mengekstraknya dengan tmux show-env
dan sed
.
Jika Anda memiliki tmux> = 1.8, Anda dapat menyesuaikan perintah ini dengan 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'