Saya menjalankan versi terbaru tmux (dari repositori git) dan xclip (0.12), dan saya ingin dapat menggunakan binding keyboard seperti Emacs untuk bergerak di sekitar teks copy-mode
, menyalin ( M-w
) pilihan ke clipboard, dan tempel ( C-y
) dari / ke buffer salinan ke clipboard.
Sejauh ini saya telah dapat menempelkan teks C-y
, dan bergerak copy-mode
dengan binding keyboard seperti Emacs, tetapi saya masih tidak dapat menyalin teks dari buffer tmux (mis. Dalam copy-mode
)
Saya menemukan utas ini untuk menyalin seluruh buffer ke clipboard (dan sebaliknya), tetapi sepertinya tidak berfungsi untuk saya.
Juga, dalam tmux-users
daftar mail saya diberitahu bahwa versi terbaru dari tmux (hanya di git repo) menyediakan perintah yang disebut copy-pipe
. Halaman manual mengatakan yang berikut tentang perintah ini:
Satu perintah dalam menerima argumen, salin-pipa, yang menyalin seleksi dan pipa itu ke perintah. Sebagai contoh, yang berikut ini akan mengikat 'C-q' untuk menyalin pilihan ke / tmp serta buffer tempel:
bind-key -temacs-copy C-q copy-pipe "cat >/tmp/out"
Sepertinya copy-pipe
dimaksudkan untuk digunakan sebagian untuk menyalurkan seleksi ke perintah lain. Tampaknya ada beberapa kesalahan ketik dalam deskripsi ini dan pada perintah (apa itu temacs-copy
?)
Apa pun yang ingin saya lakukan adalah:
Penyalinan:
- Masuk ke mode salin
- Pindah ke teks saya ingin menyalin menggunakan Emacs perintah navigasi (yaitu
C-f
,C-b
,M-f
,M-b
,C-a
,C-e
dll untuk memindahkan kursor). Tidak ada awalan untuk semua ini. - Salin teks yang dipilih ke clipboard dengan:
M-w
( tidak ada awalan juga)
Menempel:
- Saya ingin dapat mengetik
C-y
( tanpa harus masukcopy-mode
) untuk menempelkan teks di terminal ( tidak ada awalan juga)
Saya telah mencoba yang berikut untuk menyalin tanpa keberuntungan:
bind-key -n M-w run "tmux save-buffer - | xclip -i -selection clipboard"
Namun, menempel sangat berhasil:
bind-key -n C-y run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
Yang aneh adalah saya tahu bahwa " xclip -i -selection clipboard
" bagian dari perintah salin di atas berfungsi dengan baik, karena saya dapat menyalin sesuatu ke clipboard di baris perintah, misalnya:
echo "Hello world. How are you?" | xclip -i -selection clipboard
Dengan semua ini, bagaimana saya bisa menyalin pilihan dari mode salin ke clipboard?
run-shell
bukannyarun
bind -Tcopy-mode M-w send-keys -X copy-pipe "xclip -i -sel p -f | xclip -i -sel c "
.bind-key -n C-y run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"
menurut komit ini disarankan oleh starfryHarap perhatikan bahwa, dengan Tmux 2.4 (karena komit ini ), sintaks yang mengikat telah berubah. Saya memparafrasekan komentar Github ini untuk merangkum perubahan secara singkat:
-t
dengan-T
vi-<name>
dengan<name>-mode-vi
send-keys -X
Saya punya:
yang perlu saya ubah menjadi:
Dari changelog :
sumber
Ini
-temacs-copy
bukan kesalahan ketik. Dasbor terdepan berarti bahwa ini adalah opsi untukbind-keys
perintah (bersama dengan argumen untuk opsi). Ini setara dengan-t emacs-copy
, jika Anda suka itu lebih baik.Mode salin menggunakan set binding dan perintah 1 berbeda dari "mode normal". The
copy-pipe
Perintah ini hanya tersedia dalam alternatif “mode” binding tabel. Saatmode-keys
iniemacs
, mode salin akan menggunakanemacs-copy
tabel, jadi Anda harus mengikat Mw kecopy-pipe
dalam tabel itu.Hati-hati membuat terlalu banyak ikatan "tanpa awalan". Mereka akan menyulitkan untuk mengetikkan kunci terikat ke program yang berjalan di dalam tmux (misalnya ketika Anda ingin mengetikkan Cy ke instance tty-mode dari Emacs yang berjalan di dalam tmux ). Anda selalu dapat (awalan) mengikat beberapa tombol yang tidak
send-keys C-y
, tetapi itu mungkin membuatnya lebih sulit untuk mengetik jika Anda cukup sering membutuhkannya.1 Hanya perintah pergerakan dan pengeditan yang tersedia. Dengan pengecualian
copy-pipe
, perintah-perintah ini tidak mengambil argumen apa pun (ini yang dimaksud dengan halaman manual dengan mengatakan "Satu perintah dalam menerima argumen"; "dalam" mungkin salah ketik atau kesalahan pengeditan).sumber
Sementara jawaban lain mungkin membantu, inilah cara saya melakukan hal yang sama:
sumber