Tmux'ta vi-copy modunda sistem panosunu kullanın


50

Tmux 1.6 kullanıyorum ve etkileşimli modda kopyalarken sistem panosunu kullanmanın yanı sıra vi tarzı tuş bağlamalarını kullanmaya da yapılandırmaya çalışıyorum:

set-window-option -g mode-keys vi

bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' "copy-selection && run \"tmux save-buffer | xclip -selection clipboard\""

Basitçe söylemek gerekirse, yapmak C+ yapmak [ve sonra vkopyalama için metin seçmeye başlamak için kullanmak istiyorum , sonra yitildiğinde, seçimi tmux seçimine kopyalayın ve ardından kullanarak sistem panosuna aktarın xclip.

Ne yazık ki, bunu yapmaya çalıştığımda aşağıdakileri görüyorum:

.tmux.conf: 14: unknown command: copy-selection && run "tmux save-buffer | xclip -selection clipboard"

Bunu tmux konfigürasyonunda yapmanın bir yolu var mı?

Yanıtlar:


86

Buna burada da cevap verildi , ama nasıl kullanılacağını anlamam biraz zaman aldı, bu yüzden kafam karışan başkalarına açıklayacağım.

Bu temelde yapacağınız ayar:

(tmux sürümleri <2.5 için )

bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

(tmux sürümleri için> = 2.5 )

bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard'

Ardından Ctrl+b [kopya moduna geçmek için düğmesine basın. Sonra Spaceseçim yapmak için herhangi bir vi hareket tuşunu takip edin. Sonra, vurmak yerine Enter, vur yve seçim panoya kopyalanacaktır.

Not: Bu, tmux'un varsayılan ciltlemelerini vi tuşları ile kullandığınızı varsayar.

Tmux, farklı modlar için farklı anahtar bağlama tablolarına sahiptir. Bu nedenle, kopya modunda tuşun bind-key -t vi-copy yeylemini ayarlar y. İlk başta kafam karıştı, çünkü Enterseçim yaptıktan sonra vurmaya alıştım . Enteraslında sadece copy-selectionkomut için varsayılan anahtar bağlamadır (kopya modundayken). copy-pipeKomut bize bu durumda olan bir komuta, boru seçimi yeni bir anahtar bağlamak sağlar xclip.

Kopyalama modu için tüm önemli bağlantıları çalıştırarak görebilirsiniz list-keys -t vi-copy.


Çok teşekkürler, tmux 1.9a'yı indirmek ve derlemek zorunda kaldım, ama çok zor değildi ve şimdi sadece çalışıyor ™!
Naftuli Kay

3
xclipsudo apt-get install xclip
Çalışmıyorsa

3
OSX için, yerini xclipile pbcopy. Windows'ta Cygwin için, putclip( cygutils-extrapaketinden) ile değiştirin .
SnoringFrog

5
Bu blog girişinden aşağıdaki ciltleme , Tmux 2.6'da da çok iyi sonuç veriyor ve kopyalama sırasında ekranda rastgele görünen karakterleri koymanın dezavantajı yok:bind -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel "xclip -i -f -selection primary | xclip -i -selection clipboard"
Matthias Braun

1
.Tmux.conf: 'dan bu satırı kaldırana kadar bu benim için çalışmıyordu set -g mouse on. Bunun "fare modunu" etkin hale getirmesi gerekiyordu ancak
faremle

11

Ben Davis cevap güncellenmiş sürümü

tmux 2.4 ile uyumlu

bind -T copy-mode-vi y send -X copy-pipe "xclip -selection c"

4
Ben onun copy-pipe-and-cancelyerine biraz daha iyi çalışır buluyorum copy-pipe. Bu
tmux'da

6

Birkaç teknik sorunla karşılaşıyorsunuz:
“Özel mod” ciltleri (örneğin vi-copy)…

  1. farklı bir komut seti kullanın (yani run-shellaka runmevcut değil) ve
  2. Birden çok komutu bağlama yeteneğine sahip değilsiniz (normalde bununla ayrılabilir ;- kabuğun &&komut ayırıcısı kullanılamaz).

tmux 1.8, copy-pipeyardımcı olabilir:

bind-key -t vi-copy y copy-pipe 'xclip -selection clipboard >/dev/null'

( SSS’de listelenen böyle bir bağlayıcı var .)


1
Tmux 1.8'im var ve bu işe yaramadı. (edit) Ugh, Enter'a gönderilen textarea girdilerinden nefret ediyorum. Her neyse, bu anahtar bağlayıcıyı ekledim, ancak <prefix> -y komutunu kullandığımda ve [boşluk] tuşuna bastığımda içerikler panoya kopyalanmaz.
Ben Davis

Sadece anladım. "Vi-copy" keybinding tablosunun nasıl çalıştığını anlamadım.
Ben Davis


2

MacOS için bu satırı şuraya ekleyebilirsiniz. .tmux.conf

bind -t vi-copy y copy-pipe 'pbcopy'


macOS kullanıcıları, tmux için> = 2.5:bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'pbcopy'
Dai

1

Bu benim için tmux 2.2 kullanarak ve xclip yüklü olarak çalışmamdan kaynaklandı. Vim stili kopyalamak için aşağıdakileri ekleyin .tmux.conf

bind Escape copy-mode
bind -t vi-copy 'v' begin-selection
bind -t vi-copy 'y' copy-selection
# Vim style copy to clipboard
bind-key -t vi-copy y copy-pipe "xclip -selection c > /dev/null"
bind-key p run "xclip -o -sel clip | tmux load-buffer - ; tmux paste-buffer"

Burada kopya modunda PREFIX v seçimi başlatır ve PREFIX y panoya kopyalar. PREFIX p, terminale yapıştırmak için kullanılabilir.

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.