it-swarm-id.com

Memindahkan panel tmux ke jendela

Bagaimana cara memindahkan panel yang ada ke jendela lain di tmux ketika saya memiliki banyak jendela, dan sebaliknya?

Saya berasal dari layar, tempat saya dapat beralih ke panel dan kemudian beralih windows sampai saya mendapatkan yang saya inginkan; tmux tampaknya tidak mengizinkan ini.

241
mrlanrat

Perintah untuk melakukan ini adalah join-pane di tmux 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.

Untuk menyederhanakan ini, saya memiliki ikatan ini di .tmux.conf Saya untuk itu:

# 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 '%%'"

Yang pertama mengambil panel dari jendela target dan menggabungkannya ke arus, yang kedua melakukan sebaliknya.

Anda kemudian dapat memuat kembali sesi tmux Anda dengan menjalankan yang berikut dari dalam sesi:

$ tmux source-file ~/.tmux.conf
221
jasonwryan

join-pane adalah jawabannya. Saya juga mengalami masalah dengan upaya saya untuk menggunakannya berdasarkan dokumentasi tmux. Saya menemukan bahwa -t dan -s sakelar tampaknya menerima [session]:window dan tidak [session:]window. Artinya, menentukan sesi adalah opsional, tetapi termasuk : wajib. (Saya menggunakan tmux 1.5)

Oleh karena itu, untuk menambahkan jendela ke jendela saat ini dan menempatkan jendela 1 ke jendela, perintahnya adalah (Ctrl+B atau apa pun kunci ikatan Anda, diikuti oleh) ...

:join-pane -s :1

Anda kemudian dapat memecahnya dengan break-pane yang secara default adalah: Ctrl+B! Jika Anda ingin mengikatnya ke pintasan, saya sarankan TIDAK mengesampingkan pengikatan bawaan seperti s, karena di ujung jalan Anda akan mencari di internet untuk jawaban yang melibatkan sesi-pilih dan itu tidak akan berfungsi pada sistem Anda. Perhatikan bahwa break-pane terikat ! dan @ tepat di sebelahnya dan tidak terikat apa pun secara default. Untuk alasan itu saya menyarankan ini mengikat ...

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

Bergantian, untuk memiliki pemilih interaktif ...

bind-key   @ choose-window 'join-pane -h -s "%%"'
bind-key [email protected] choose-window 'join-pane    -s "%%"'

Bergantian, untuk selalu bergabung dengan jendela yang terakhir dikunjungi ...

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

CATATAN: -h menyebabkannya menumpuk panel secara horizontal (dengan split vertikal) sebagai kebalikan dari perilaku default yang merupakan kebalikannya.

Yang terpenting adalah BELAJAR apa pun yang Anda pilih untuk pintasan. Karena jika Anda hanya mengatur dan melupakannya, Anda akan tertatih-tatih ketika menemukan diri Anda di server asing. Dan mari kita hadapi itu, hal terpenting yang diberikan terminal multiplexer adalah sesi yang dapat diandalkan di server jarak jauh.

Ini menyelesaikan konversi saya dari GNU Layar ke Tmux. Saya tidak akan pernah melihat ke belakang.

Nikmati!

167
Bruno Bronosky

Saya pikir saya menyukai apa yang telah saya gunakan untuk memindahkan panel ke jendela mereka sendiri dengan lebih baik. saya menggunakan

break-pane -t :

Saya mengetahuinya melalui eksperimen, tetapi tampaknya bekerja dengan sangat baik. Anda dapat mengikat atau alias dengan mudah, tidak perlu skrip.

45
Joshua K

Ikatan kunci

Secara default, Ctrl+b! akan break panel aktif ke jendela baru dan beralih ke sana.

Dimana Ctrl + b adalah default awalan untuk tmux .

Detail

Perintah tmux yang dijalankan kunci ini adalah break-pane (alias: breakp) seperti yang diterapkan pada cmd-break-pane.c dan terikat sebagai default di key-bindings.c seperti yang terlihat di list-keys (alias: lsk) output perintah:

bind-key    -T prefix       !                 break-pane
15
user86041

Jika Anda tidak ingin mengetik pengidentifikasi panel ke Prompt, Anda juga bisa menggunakan

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

yang akan bergabung dengan panel/jendela aktif terakhir ke jendela saat ini.

14
Bernhard T

Setelah melihat-lihat jawaban lain dan membaca halaman manual tmux saya memutuskan untuk mengikat berikut untuk saat ini:

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

Ini akan memungkinkan Anda secara interaktif memilih jendela untuk bergabung, dan mencerminkan huruf kecil saya s/v binding untuk membuat pemisahan vertikal/horizontal baru. Jika ada yang tahu cara memilih panel individual, bukan windows, beri tahu saya.

14
toupeira

Anda tidak perlu mengubah ikatan utama Anda.

Sementara panel yang ingin Anda pindahkan memiliki fokus, ketik Awalan lalu :join-pane -t :1 dimana 1 adalah apa pun nomor jendela tujuan dalam sesi yang sama. Anda dapat memindahkannya ke sesi lain dengan menambahkan namanya seperti project:3. Untuk saya join-pane tab-pelengkapan otomatis dari j.

Tambahkan -h atau -v beralih ke perintah untuk mengatur orientasi split baru yang dibuat di tujuan, atau langsung saja ke sana dan Awalanspace untuk mengatur ulang.

4
Walf