Tmux bölmesini pencereye taşıma


228

Birden çok pencerem varken , mevcut bir bölmeyi tmux'taki başka bir pencereye nasıl taşırım ve bunun tersi olur?

Ekrandan geliyorum , bölmeye geçip sonra da istediğime kadar pencereleri değiştirebiliyorum; tmux buna izin vermiyor.

Yanıtlar:


209

Bunu yapmak için komut join-panetmux 1.4.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Like split-window, but instead of splitting dst-pane and creating
    a new pane, split it and move src-pane into the space.  This can
    be used to reverse break-pane.

Bunu basitleştirmek .tmux.confiçin, benim için bu bağları var:

# pane movement
bind-key j command-prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-prompt -p "send pane to:"  "join-pane -t '%%'"

Birincisi bölmeyi hedef pencereden alır ve akıma birleştirir, ikincisi tersini yapar.

Daha sonra oturumu içinden aşağıdakileri çalıştırarak tmux oturumunuzu yeniden yükleyebilirsiniz:

$ tmux source-file ~/.tmux.conf

Bu yöntemi deniyorum, ancak kodunuzu .tmux.conf dosyama koyduğumda ve Ctrl-b, j yaptığımda hiçbir şey olmuyor.
mrlanrat

2
Her bir çift bölmeleri ile, en az 2 pencere açık gerekir: o zaman vurmak Prefix+sve istemi de pencere adı girin o pencereye bölmeyi göndermek için ...
jasonwryan

Bu konuda hala şansım yok, hiçbir şey olmuyor. Tmux'un .tmux.conf dosyasını okumadığı hissine kapılıyorum, çünkü Ctrl-b, j veya Ctrl-b, s tuşlarına hiç cevap vermiyor. (bunlar config dosyasındaki sadece 2 satırdır)
mrlanrat

7
@mrlanrat Pencere numarasını iki nokta üst üste koymanız gerektiğini biliyorum. Aşağıdaki cevaba bakınız.
Bruno Bronosky

1
'%%' ne anlama geliyor?
oligofren

152

join bölmesi cevaptır. Ben de onu tmux belgelerine dayanarak kullanma girişimlerimle ilgili sorunlar yaşıyordum. -T ve -s anahtarlarının [oturum:] penceresini değil [oturum]: penceresini kabul ettiğini göründüğünü keşfettim. Yani, oturumu belirtmenin isteğe bağlı olduğunu, ancak şunları içerdiğini söylemek gerekir: zorunludur. (Tmux 1.5 kullanıyorum)

Bu nedenle, geçerli pencereye bir bölme eklemek ve pencereyi 1 bölmeye yerleştirmek için, komut (Ctrl-B veya bağlama anahtarınız ne olursa olsun, ardından) olur ...

:join-pane -s :1

Daha sonra, varsayılan olarak: Ctrl-B! Bir kısayola bağlamak istiyorsanız, s gibi bir varsayılan bağlayıcıyı geçersiz kılmamanızı öneririm, çünkü yolun aşağısında, seçim oturumunu içeren bir cevap için internete bakacaksınız ve sisteminizde çalışmayacak. Break bölmesinin bağlı olduğuna dikkat edin! ve @ hemen yanındadır ve varsayılan olarak hiçbir şeye bağlı değildir. Bu yüzden bu bağlayıcıyı öneriyorum ...

bind-key @ command-prompt -p "create pane from:"  "join-pane -s ':%%'"

Alternatif olarak, etkileşimli bir seçiciye sahip olmak ...

bind-key @ choose-window 'join-pane -h -s "%%"'

Alternatif olarak, her zaman en son ziyaret edilen pencereye katılmak için ...

bind-key @ join-pane -h -s !

NOT: -hPanları yatay olan (dikey bölünmüş) istiflemenin tersi olan varsayılan davranışa karşı istiflemesine neden olur.

En önemlisi kısayol olarak ne seçerseniz seçin ÖĞRENİN. Çünkü onu yeni kurar ve unutursan, kendini yabancı bir sunucuda bulduğun zaman saklanacaksın. Ve kabul edelim ki, bir terminal çoklayıcısının size verdiği en önemli şey uzak sunuculardaki güvenilir oturumlardır.

Bu benim GNU Screen'den Tmux'a dönüşümümü tamamlıyor. Asla arkama bakmayacağım.

Keyfini çıkarın!


2
':' De eksikti ... bunun için teşekkürler.
12'de

Bu konuda son zamanlarda 2 aşağı oy aldım, bunun nedenini öneren bir yorum yok. Bu sadece kaba ve FOSS karşıtı bir kültür.
Bruno Bronosky

1
dokümantasyon, kolonlardan hiç söz etmez! Nice one
JonnyRaa 24:17

1
Nokta sözdizimini kullanmak, window.paneörneğin join-pane -s 1.01. penceredeki bölmeyi 0 geçerli pencereye taşımak için bana yardımcı oldu . Maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras

Tmux 2.1'den itibaren, :görünüşe göre artık gerekli değil (örneğin, sadece yapın :join-pane -s 1). Belki de bu önceki sürümlerde bir
hataydı

38

Sanırım bölmeleri kendi pencerelerine taşımak için kullandıklarını daha çok seviyorum. kullanırım

break-pane -t :

Bunu deneyimle çözdüm, ama çok iyi çalışıyor gibi görünüyor. Kolayca tuşlayabilir veya takma ad yapabilirsiniz, komut dosyası gerekmez.


2
+1. Bunu daha sık kullanma eğilimindeyim join-pane.
Chris B

14

Bir bölmeye bölme tanımlayıcıyı yazmak istemiyorsanız,

bind-key j "join-pane -s !"

Son aktif panel / pencere geçerli pencereye katılacak.


1
Hangi sürümü kullanıyorsun? unknown command: join-pane -s !1.6 ile alıyorum .
paradroid

Burada 2.0 kullanarak, ancak sadece çizgi olmadan tırnak içine koymadan iyi iş gibi görünüyor. bind-key j join-pane -s !
bkz:

13

Diğer cevapları okuduktan ve tmux man sayfasını inceledikten sonra şu an için aşağıdaki bağları çözdüm:

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

Bu, birleştirilecek pencereyi etkileşimli olarak seçmenize ve yeni dikey / yatay bölmeler oluşturmak için küçük harfleri s/ vciltlemelerimi yansıtmanıza olanak tanır. Birisi pencere yerine ayrı ayrı panellerin nasıl seçileceğini bilen varsa bana bildirin.


Bu çok yardımcı. Teşekkür ederim. Maalesef -vve -hsırasıyla dikey ve yatay "bölünür" oluşturmayın. Sırasıyla dikey ve yatay " yığılmış camlar " oluştururlar. (Dikey olarak istiflenmiş bölmelerin yatay bir ayrılığına sahip olduğunu söylemek gerekir.) Yani beyninizi bu şekilde eğitmek zorundasınız. Aynı zamanda -vvarsayılandır, bu yüzden onu dışarıda bıraktım ve içine koydum, -hböylece ~/.tmux.confbakmanız için bir kopya kağıdı gibi davranıyorsunuz.
Bruno Bronosky

Bunu, "bölmenin karşıtı" için verilen diğer cevaplardan daha çok seviyorum. Bir bölmeyi geçici olarak kendi penceresine boşalttıktan sonra, daha sonra eski pencerelerden birine geri göndermek istiyorum.
Stabledog

13

Anahtar bağlama

Varsayılan olarak, Ctrl+ b, !olur kırmak yeni pencereye etkin bölmeyi ve buna geçiş yapın.

Nerede Ctrl+ bvarsayılan önek için .

ayrıntılar

tmuxBu anahtar yürütür komut break-pane(diğer adı: breakp) yürütüldüğü gibi cmd-break-pane.cve varsayılan olarak bağlanmış anahtar bindings.c görüldüğü gibi list-keys(diğer adı: lsk) komutu çıkışı:

bind-key    -T prefix       !                 break-pane

4

Anahtar bağlarını değiştirmek zorunda değilsin.

Taşımak istediğiniz bölmenin odağı varken , Önek yazın ve ardından hedef pencerenin numarası aynı oturumda :join-pane -t :1nerede 1olursa olsun. Adını hazırlayarak başka bir oturuma taşıyabilirsiniz project:3. Benim için join-panetab-autocompletes j.

Hedefte yaratılan yeni bölmenin yönünü ayarlamak için komuta bir -hya da -vgeçiş yapın ya da yeniden düzenlemek için ona ve Önek + spaceseçeneğine gidin .

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.