Saya mencoba mencari cara yang layak untuk menyalin apa yang saya miliki di buffer tmux ke clipboard saya. Saya sudah mencoba beberapa hal yang berbeda seperti
bind-key p select-pane -t 2 \; split-window 'xsel -i -b' \; paste-buffer
yang membuat saya cukup dekat, yang harus saya lakukan adalah menekan control-d setelah saya melakukan prefix-p.
Saya mencoba memperbaikinya dengan melakukan
bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE\; tmux paste-buffer\; echo HERE'
Tapi itu tidak berhasil. Sebenarnya jika saya memasangkan ini ke adil
bind-key p select-pane -t 2 \; split-window 'xsel -i -b << HERE'
tidak melakukan apa-apa jadi saya berasumsi bahwa split-window tidak suka << dalam perintah shell.
Ada ide?
Sunting: Anda dapat melewati select-pane -t 2
jika Anda mau, itu tidak terlalu penting. Saya hanya menggunakan tata letak tertentu dan panel 2 adalah yang saya lebih suka untuk membagi ketika saya melakukan sesuatu yang lain sehingga masuk ke binding saya yang melibatkan pemisahan secara default.
sumber
Jawaban:
Di sini dokumen perlu baris baru. Misalnya, dalam skrip shell, Anda dapat menulis
Saya tidak berpikir tmux memungkinkan Anda menempatkan baris baru di sana, dan bahkan jika itu terjadi, ini tidak akan menjadi pendekatan yang baik. Bagaimana jika data itu sendiri berisi
HERE
satu per satu (mis. Karena Anda menyalinnya.tmux.conf
)?Saya sarankan untuk menulis konten buffer ke file sementara. Belum dicoba:
Ada kondisi lomba jika Anda menggunakan perintah ini dalam dua instance tmux yang terpisah. Saya tidak tahu bagaimana menyelesaikannya.
sumber
mktemp
yang tersedia secara luas$PPID
dalam sebuah shell yang diluncurkan oleh tmux). Tapi bagaimana Anda mendapatkan nama file variabel (namun itu dibangun) ke dalam argumensave-buffer
? Saya kirasave-buffer - | …
seperti dalam jawaban Grauwolf , yang mana menghapus file sementara sama sekali?Ini seharusnya bekerja:
sumber
TMUX
variabel lingkungan.C-p
adalah:bind C-p run "xclip -o | tmux load-buffer - ; tmux paste-buffer"
- tidak ada masalah mengutip atau masalah batas baris perintah.copy-mode
?xclip -o
opsi tidak bekerja untuk saya jadi saya telah berubah kebind C-c run "tmux save-buffer - | xclip -selection c"\; display-message "Buffer copied to clipboard"
Solusi yang lebih sederhana untuk Mac OS-X
Ini membangun dari jawaban Alex dan menggunakan hal-hal yang tidak ada pada saat itu.
Jika Anda menggunakan homebrew (dan jika tidak, mengapa tidak?) Maka Anda bisa melakukan ini:
Kemudian di Anda
~/.tmux.conf
:Untuk menyalin buffer dari tmux (Anda seharusnya sudah menyalin sesuatu menggunakan tmux) ke papan tulis Mac, gunakan
<tmux-key> Control-c
. Sekarang akan tersedia untukCommand-v
ataupbpaste
Untuk menempelkan sesuatu dari papan tulis Mac, gunakan
<tmux-key> Control-v
.sumber
tmux show-buffer
yang menyebabkan masalah bungkus garistmux save-buffer -
menyelesaikannya.-
pada akhirtmux save-buffer -
?save-buffer
ke stdout. Anda dapat mengganti-
dengan nama file dan itu akan menyimpannya di sana. Ini mencegah Anda dari menulis (dan harus membersihkan) file.The
copy-pipe
perintah ditambahkan pada versi 1.8. Ini menyalin pilihan ke buffer tmux dan pipa itu ke perintah. Sekarang tidak perlu untuk mengikat awalan. Ini sebuah contoh:Sekarang ketika Anda memiliki beberapa teks yang dipilih
copy-mode
, yakan menyalin teks itu ke buffer tmux serta clipboard OS. Namun, itu tidak membantu jika Anda ingin mendapatkan teks dari clipboard ke buffer tmux.sumber
reattach-to-user-namespace
tidak perlu.bind-key -T copy-mode-vi y send-keys -X copy-pipe "xclip"
dan untuk OS X:bind-key -T copy-mode-vi y send-keys -X copy-pipe "reattach-to-user-namespace pbcopy"
Anda mungkin ingin mencoba plugin tmux-yank . Ini memungkinkan penyalinan langsung ke clipboard sistem (OS X dan Linux) dan beberapa barang lain seperti menarik garis shell saat ini.
sumber
Setelah mencoba berbagai solusi, berikut ini adalah pengaturan terakhir saya:
menggunakan save-buffer alih-alih show-buffer memberikan data nyata tanpa data seperti yang ditunjukkan dengan jeda baris saat Anda berada di split.
Saya juga menggunakan ini untuk memulai seleksi / salin dalam mode salin tmux:
Saya kira mungkin saja untuk menggabungkan seleksi-salinan dengan tombol 'y' DAN memindahkannya ke papan klip x.
sumber
Berikut adalah upaya jawaban yang komprehensif.
Pertama, sedikit sejarah
Ketika pertanyaan ini pertama kali ditanyakan (Juni, 2011) menyalin teks dari Tmux ke clipboard harus merupakan proses dua langkah, pertama-tama salin teks yang dipilih ke buffer Tmux, kemudian salin teks dari buffer Tmux ke clipboard sistem.
Pada 1.8 (Maret, 2013)
copy-pipe
perintah telah ditambahkan yang memungkinkan Anda untuk menyalin teks yang dipilih langsung ke clipboard sistem (atau tujuan lain).Kemudian pada 2.4 (April, 2017) tabel kunci diubah secara signifikan sehingga banyak jawaban pada halaman ini menjadi usang.
Menjawab pertanyaan awal
Linux :
Mac :
Jika Anda menggunakan homebrew maka Anda harus menginstal
reattach-to-user-namespace
dengan menjalankan perintah berikut di terminal:Kemudian di ~ / .tmux.conf Anda:
The Shorter Method (salin dan tempel pilihan langsung dari dan ke clipboard untuk tmux> 2.4)
Catatan: ada dua versi untuk Linux karena Linux memiliki clipboard primer dan sekunder (juga dikenal sebagai seleksi).
Linux :
Mac :
Kustomisasi perintah ini
Jika Anda tidak ingin perintah memberi tahu Anda apa yang dilakukannya di baris status maka hapus saja
display-message
(dan juga\;
yang datang sebelumnya).Jika Anda menggunakan mode salin gaya Emacs alih-alih vi maka ganti instance
copy-mode-vi
dengan hanyacopy-mode
Jika Anda menjalankan Linux dan Anda ingin menggunakan
xsel
alih-alihxclip
gantixclip -r
denganxsel -i -p
danxclip -o
denganxsel -o -p
The
-r
dalamxclip -r
adalah opsional, ia bisa menghilangkan baris terakhir. Ini berguna untuk menyalin perintah, maka ketika Anda menempelkannya mereka tidak akan segera dieksekusi.Jika Anda melakukan tunneling melalui SSH maka Anda harus berkonsultasi dengan https://unix.stackexchange.com/a/354581/14252
Referensi:
> /dev/null
menyalin buffer tmux ke clipboard akan menyebabkan tmux tidak menanggapi pintasansumber
bind-key C-p run-shell "xclip -o | tmux load-buffer - ; tmux paste-buffer"
, masih valid? untuktmux>2.4
Saya tidak suka memiliki penekanan tombol ekstra, jadi saya ingin sesuatu yang lebih ambisius. Masuk ke mode salin dengan [, sorot teks kanan, lalu tekan] untuk menyalin teks ke clipboard.
Juga, tmux suka memasukkan baris baru dalam ekspresi yang membungkus (dan anehnya baris baru itu berada di tempat yang salah ! Mereka tidak berada di tempat ekspresi dibungkus pada layar). Jadi saya ingin C-] menyalin ekspresi menghapus baris baru.
Pada tmux 1.6 saya mencoba ini:
tetapi itu tidak berhasil karena tmux tampaknya tidak senang untuk mengikat hal-hal kompleks ke tabel vi-copy. Jadi saya akhirnya melakukan ini sebagai gantinya:
Ini mengarah ke hal-hal aneh (] atau C-] akan bertindak lucu saat lain kali Anda menggunakannya, tetapi hanya sekali) jika Anda keluar dari mode salin dengan cara lain selain] atau C-]. Ini bisa diperbaiki dengan lebih banyak binding yang saya bayangkan, tetapi ini yang paling saya inginkan.
sumber
Ada solusi di Arch Wiki menggunakan
xclip
:https://wiki.archlinux.org/index.php/Tmux
sumber
save-buffer
file dengan aman di direktori bersama? Kalau tidak memasukkannya ke dalam/tmp
lubang keamanan. Ada penggunaan yang tidak bergunacat
, dan penghapusan file sementara hilang. Maka itu soalxsel
vsxclip
, yang setara di sini, dan Anda punya solusi (ditulis dengan tidak sabar).Solusi untuk Mac OS X. Ikuti 2 langkah ini:
Gunakan solusi Chris Johnsen: https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard
Tambahkan kode ini ke konfigurasi tmux Anda (~ / .tmux.conf)
sumber
Varian yang sedikit dimodifikasi dari jawaban yang diterima, yang saya buat.
Saya juga lebih suka menggunakan clipboard sistem (Ctrl-C, Ctrl-V) selain
primary
clipboard default xclip (yang Anda dapatkan dengan pemilihan mouse dan klik tengah mouse). Untuk memilih clipboard sistem Anda harus menyampaikan-selection clipboard
argumenxclip
.Juga saat menyalin buffer ke clipboard, saya suka kemampuan untuk memilih buffer yang ingin saya salin. Hal ini dilakukan menggunakan
choose-buffer
dan kemudian meneruskan buffer argumen untuksave-buffer
menggunakan-b %%
.UPDATE: Entah bagaimana dengan tmux 1.8 dan dua instalasi openSUSE 12.2 saya, saya melihat hang ketika
tmux run-shell
dipanggil denganxclip
membaca dari stdin melalui pipa. Saya malah memutuskan untukxsel
mencoba dan itu tampaknya berhasil. Ini adalah binding kunci setara yang digunakanxsel
. Saya juga digunakan&&
untuk rantai perintah di tempel untuk ketahanan lebih.sumber
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 :Jadi pengikatannya harus:
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
:Untuk menempelkan dari primer:
Saya tidak sepenuhnya mengerti mengapa
$DISPLAY
tidak ditetapkan dengan benar saat sumber.tmux.conf
, jadi ini sebabnya saya harus mengekstraknya dengantmux show-env
dansed
.Jika Anda memiliki tmux> = 1.8, Anda dapat menyesuaikan perintah ini dengan
copy-pipe
:sumber
/home/linux/.tmux.conf:11: invalid or unknown command: bind-key C-y run "tmux save-buffer - | xclip -i -selection clipboard -d `tmux show-env | sed -n 's[0/0] PLAY=//p'` >/dev/null
sed
perintah yang Anda tunjukkan tidak sama dengan yang saya tulis ... Apakah ini yang Anda tulis.tmux.conf
?sed
? Perintah harus:sed -n s/^DISPLAY=//p
. Atau, Anda bisa menggunakancut
:tmux show-env DISPLAY | cut -d'=' -f2
. Mungkin juga patut memeriksa versi tmux Anda.Untuk binding gaya emacs ada beberapa opsi berbeda. (Vi-style harus serupa?) Penjilidan khas untuk melakukan "copy-selection" di emacs adalah Mw, jadi akan sangat nyaman untuk memiliki ikatan yang sama di tmux.
1 - Apakah ideal, tetapi tidak berfungsi (karena batasan tmux?)
2 - Kompromi yang berfungsi baik untuk saya : Terima menggunakan keybinding berbeda untuk emacs-copy di tmux. Gunakan misalnya CMw. (Ini mengikat yang akan didefinisikan "secara global" - tidak hanya dalam mode salin - tetapi hanya berguna dalam mode salin)
sumber
Banyak dari jawaban ini tidak berfungsi untuk Ubuntu 14.04 saya di zsh apa adanya. Tidak yakin apakah shell saya ada hubungannya dengan itu, tetapi ini adalah versi kerja saya menggunakan strategi ini untuk menyalin, dan strategi ini untuk menempel.
Beberapa catatan:
-sel clip -i
. Baris itu menggabungkan yank ke tmux buffer dan mengirimkannya ke xclip.-sel clip -o
Ini berfungsi dengan baik sekarang untuk pengaturan vim / zsh / tmux saya.
sumber
-sel clip -i
memecahkan masalah. Meskipun, saya tidak mengerti mengapa Anda perlu menentukan clipboard lagi untuk menempelkannya (standar]
berfungsi untuk saya)Dan versi perbaikan jawaban @Leif bisa berupa:
Dengan cara ini tidak ada konsekuensi jika Anda keluar dari mode salin dengan cara lain selain], kode di atas dibungkus dengan tundle / tmux-yank plugin tmux untuk menyalin teks tmux ke clipboard sistem, ia menargetkan tmux> = 1,6 pada OS X dan Linux.
sumber
Pada OS-X dengan tmux versi 2.2 atau lebih baru yang berikut ini akan berfungsi:
sumber
Saya menggunakan
copyq
manajer clipboard multiline. (Ini bekerja dengan Windows, OSX, Linux.)Tambahkan baris berikut di
~/.tmux.conf
:cygwin
menuntutcopyq.exe
lokasi di~/.bashrc
:sumber