Shell borularla tmux 'panosuna' nasıl kopyalanır?


17

Bir kabuk ortamında çalışırken, genellikle 'ara boru çıkışını' kopyalama (örneğin, halihazırda çalışan editörlerden / diğer kabuklara, diğer makinelere, vb.)

Bir pencere ortamında, bunu çözmek için kolay (ve genel) bir yöntem genellikle sistem panosundan geçer, örn .:

  • X11: ... | xsel -i/xsel -o | ...
  • OS X: ... | pbcopy/pbpaste | ...

Tmux kopyala / yapıştır özelliğini kullanarak nasıl benzer davranışlar elde edebilirim?

Yanıtlar:


20

tl; Dr.

  • ... | tmux loadb -
  • tmux saveb - | ...

Açıklama ve Arkaplan

Tmux'ta, tüm kopyala / yapıştır etkinliği , üst (dizin 0) en son kopyalanan metin olan arabellek yığınından geçer ve açıkça bir arabellek dizini sağlanmadığında yapıştırmak için kullanılır -b. Geçerli arabellekleri tmux list-buffersveya varsayılan kısayol tmux-prefix+ ile inceleyebilirsiniz #.

Yığının en üstündeki yeni bir tmux arabelleğine geçmenin, set-bufferdize bağımsız değişkenini load-bufferalmanın ve dosya bağımsız değişkenini almanın iki yolu vardır . Bir tampon içine borulamak için genellikle load-bufferstdin ile kullanmak istersiniz , örn .:

print -l **/* | tmux loadb -

Bunu tekrar editörlere yapıştırmak oldukça açıktır ( tmux-prefix+ ]veya bağladığınız her şey paste-buffer), ancak macunun kabuğun içinden erişilmesi değildir, çünkü çağırmak paste-buffer, macunu terminalinizin düzenlemesinde sonlanan stdin'e yazacaktır. arabellek ve macundaki herhangi bir yeni satır, kabuğun şu ana kadar yapıştırılmış olan her şeyi yürütmesine neden olur (muhtemelen gününüzü mahvetmek için harika bir yol).

Buna yaklaşmanın birkaç yolu vardır:

  1. tmux pasteb -s ' ': -stüm satır sonlarını (ayırıcılar) sağladığınız ayırıcıyla değiştirir. Ancak yine de davranışı elde edersiniz, paste-bufferbu da hamurun terminal düzenleme tamponunuzda bittiği anlamına gelir, bu da istediğiniz gibi olabilir, ancak genellikle değildir.
  2. tmux showb | ...: show-buffertamponu stdout'a yazdırır ve neredeyse gerekli olan şeydir, ancak Chris Johnsen yorumlarda belirtildiği gibi , show-bufferyazdırılamayan ASCII karakterlerinin ve ASCII olmayan karakterlerin sekizli kodlamasını gerçekleştirir. Bu maalesef, boş sonlandırılmış dizeler veya aksanlı latin karakterler (örn. (Zsh) print -N á | tmux loadb - ; tmux showbbaskılar \303\241\000) gibi basit şeylerle bile sinir bozucu olmak için yeterince sık kırılıyor .
  3. tmux saveb - | ...: save-bufferbasitçe tersine çevirir load-bufferve değiştirilmemiş ham baytları çoğu durumda istenen olan stdin'e yazar. Daha sonra başka bir boru monte etmeye devam edebilirsiniz, örn. | xargs -n1 -I{} ...işlem hattı akıllıca geçmek , vb ..

1
tmux show-bufferC0 kontrol karakterlerinin ve ASCII olmayan baytların sekizli kodlamasını yapar (örneğin aksanlı Latin karakterler, vb.). tmux save-buffer -Ham baytları istiyorsanız kullanabilirsiniz (bu genellikle istediğiniz şeydir).
Chris Johnsen

@ChrisJohnsen Bunu yakaladığınız için çok teşekkürler, cevabı buna göre güncelledim.
düşünülmemiş
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.