Pada mu Ubuntu 12,04 setup perintah copy dan paste clipboard tmux saya adalah setup sebagai berikut:
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"
Ini bekerja sangat baik untuk waktu paling lama hingga sebulan yang lalu, ketika saya menduga beberapa perubahan konfigurasi atau perubahan paket dibuat yang memecahkan hal di atas. Di terminal GNOME, menempel masih berfungsi dengan baik dengan prefix+ ctrl-vdan ctrl-shift-v.
Namun, xclip
perintah salin tidak lagi berfungsi apa pun yang saya lakukan, dan saya telah mencoba menghapus prefiks pengikatan kustom di atas, menggunakan -select
alih-alih -sel
, tidak menggunakan clipboard
dll. Ini cukup banyak show stopper untuk pengguna GVim seperti saya, karena saya tidak tahu Bahkan tidak ada solusi terminal GNOME ctrl-shift-cdengan tmux mengambil alih shell. Saya masuk ke mode salin, pilih teks dengan space+ movement, dan ketika saya menjalankan prefix+ ctrl-csama sekali tidak ada yang terjadi. Sebelum ini pecah, tmux akan menampilkan pesan konfirmasi di bagian notifikasi di bagian bawah.
Adakah yang punya saran sejauh bagaimana orang bisa men-debug ini? Ini adalah hit produktivitas yang cukup besar. Saya mungkin dapat menggunakan trik penyelesaian sementara file untuk saat ini , tetapi akan sangat bagus untuk mengetahui apa yang terjadi xclip
.
type xclip
?xsel -b
?xsel -i -b
sepertinya berhasil!xsel -b
danxclip -selection clipboard
akan melakukan hal yang sama!Jawaban:
The
xsel
utilitas ini mirip denganxclip
, tapi diimplementasikan sedikit yang berbeda. Biasanya saya akan mengharapkan mereka untuk berperilaku dengan cara yang sama, tetapi mereka tidak membuat panggilan perpustakaan X yang sama persis, jadi ada kemungkinan bahwa dalam beberapa kasus sudutxsel
akan bekerja tetapi tidakxclip
, atau sebaliknya. Mencoba:sumber
Menambahkan
-b
kerun-shell
(ataurun
) perintah memperbaiki masalah. Dengan-b
perintah shell dijalankan di latar belakang.bind C-c run-shell -b "tmux save-buffer - | xclip -i -sel clipboard"
sumber
Meskipun saya tidak dapat mereproduksi lagi, tetapi inilah jawaban teknis apa yang mungkin terjadi dalam kasus Anda.
Pertama, Anda perlu memahami cara kerja clipboard X11. Anda dapat membaca esai jwz tentang ini: http://www.jwz.org/doc/x-cut-and-paste.html
Singkatnya, aplikasi yang menyimpan konten clipboard perlu dijalankan hingga aplikasi lain menegaskan kepemilikannya. Jadi ketika Anda menjalankan
xclip -i <<< test
maka Anda dapat melihat xclip berjalan di latar belakang sampai Anda membuat pilihan lain:Sekarang ini semua baik-baik saja tetapi ketika Anda keluar dari shell ini maka semua proses milik sesi ini terbunuh secara default dengan mengirimkan mereka sinyal HUP. Ini berarti xclip akan terbunuh dan Anda tidak akan dapat lagi mengakses konten clipboard Anda.
Jadi solusi yang disarankan (jika Anda tidak memiliki xsel) adalah mengabaikan sinyal HUP dengan menggunakan bind berikut:
xsel
tidak terpengaruh oleh masalah ini karena hal pertama yang dilakukannya setelah fork () adalah melepaskan diri dari terminal pengendali sehingga tidak akan menerima sinyal HUP ketika shellnya keluar (Anda bahkan tidak akan melihatnya di ps di atas output tetapi hanya ketika Anda melakukan aps -e | grep xsel
).sumber
Saya mengalami masalah yang sama dan file sementara tidak akan membantu dalam kasus khusus ini, saya khawatir. Ini karena
xclip
tampaknya berperilaku berbeda ketika melahirkan oleh tmux daripada ketika dijalankan "secara interaktif" dan menunggu aplikasi lain untuk mengambil kepemilikan area clipboard. Coba gunakanxclip -l 1
untuk segera keluar (lihat halaman manual untuk detail).sumber
bind C-y run-shell "tmux save-buffer - | xclip -l 1 -i"
.xclip
yang dilakukan ketika Anda mencoba menyalin buffer. Jika tetap tergantung di sana menunggu sesuatu, apakah membunuh itu membantu? Anda juga harus keluar dari mode pemilihan dengan menekan Enter (dan karenanya menyimpannya ke dalam buffer) sebelum Anda mencoba untuk menyalin buffer ke clipboard X.Ini adalah pertanyaan lama, tapi saya kira saya punya solusinya, diambil dari halaman Tmux di wiki Arch :
Jadi perintah Anda harus menjadi:
sumber
Ini adalah konfigurasi yang berfungsi saya gunakan:
sumber