Di chuyển khung tmux sang cửa sổ


228

Làm cách nào để di chuyển một khung hiện có vào một cửa sổ khác trong tmux khi tôi có nhiều cửa sổ và ngược lại?

Tôi đến từ màn hình , nơi tôi có thể chuyển sang khung và sau đó chuyển cửa sổ cho đến khi tôi đến cái tôi muốn; tmux dường như không cho phép điều này.

Câu trả lời:


209

Lệnh để làm điều này là join-panetrong 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.

Để đơn giản hóa điều này, tôi có các ràng buộc này trong .tmux.confđó cho tôi :

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

Cái đầu tiên lấy khung từ cửa sổ đích và nối nó với dòng điện, cái thứ hai làm ngược lại.

Sau đó, bạn có thể tải lại phiên tmux của mình bằng cách chạy phần sau từ trong phiên:

$ tmux source-file ~/.tmux.conf

Tôi đang thử phương pháp này nhưng khi tôi đặt mã của bạn vào tệp .tmux.conf của mình và thực hiện Ctrl-b, j, dường như không có gì xảy ra.
mrlanrat

2
Bạn cần ít nhất 2 cửa sổ mở, với một vài ô trong mỗi cửa sổ : sau đó nhấn Prefix+snhập tên cửa sổ tại dấu nhắc để gửi khung tới cửa sổ đó ...
jasonwryan

Tôi vẫn không gặp may mắn với điều này, không có gì xảy ra. Tôi có cảm giác tmux không đọc tệp .tmux.conf vì nó hoàn toàn không đáp ứng với Ctrl-b, j hoặc Ctrl-b, s. (đây là 2 dòng duy nhất trong tệp cấu hình)
mrlanrat

7
@mrlanrat Tôi thấy rằng bạn phải thêm tiền tố vào số cửa sổ bằng dấu hai chấm. Xem câu trả lời của tôi dưới đây.
Bruno Bronosky

1
'%%' Đề cập đến điều gì?
oligofren

152

tham gia khung là câu trả lời. Tôi cũng gặp vấn đề với những nỗ lực sử dụng nó dựa trên tài liệu tmux. Tôi phát hiện ra rằng các khóa -t và -s dường như chấp nhận cửa sổ [session]: chứ không phải [session:]. Điều đó có nghĩa là việc chỉ định phiên là tùy chọn, nhưng bao gồm: là bắt buộc. (Tôi đang sử dụng tmux 1.5)

Do đó, để thêm một khung vào cửa sổ hiện tại và đặt cửa sổ 1 vào khung, lệnh sẽ là (Ctrl-B hoặc bất cứ khóa liên kết nào của bạn, theo sau) ...

:join-pane -s :1

Sau đó, bạn có thể ngắt chúng appart với break-pane mà theo mặc định là: Ctrl-B! Nếu bạn muốn liên kết nó với một phím tắt, tôi khuyên bạn KHÔNG nên ghi đè một ràng buộc mặc định như s, bởi vì trên đường bạn sẽ tìm trên internet để tìm câu trả lời liên quan đến phiên chọn và nó sẽ không hoạt động trên hệ thống của bạn. Lưu ý rằng break-pane bị ràng buộc! và @ ở ngay bên cạnh và không bị ràng buộc với bất cứ điều gì theo mặc định. Vì lý do đó, tôi đề nghị ràng buộc này ...

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

Thay phiên, để có một người chọn tương tác ...

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

Thay phiên, để luôn tham gia cửa sổ được truy cập gần đây nhất ...

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

GHI CHÚ: Các -hnguyên nhân khiến nó xếp chồng các tấm theo chiều ngang (với sự phân chia theo chiều dọc) trái ngược với hành vi mặc định là ngược lại.

Điều quan trọng nhất là TÌM HIỂU bất cứ điều gì bạn chọn để tắt. Bởi vì nếu bạn chỉ đặt nó và quên nó, bạn sẽ bị gim khi bạn thấy mình trên một máy chủ nước ngoài. Và hãy đối mặt với nó, điều quan trọng nhất mà bộ ghép kênh đầu cuối mang lại cho bạn là các phiên đáng tin cậy trên các máy chủ từ xa.

Điều này hoàn thành việc chuyển đổi của tôi từ GNU Screen sang Tmux. Tôi sẽ không bao giờ nhìn lại.

Thưởng thức!


2
Tôi cũng đã bỏ lỡ ':' ... cảm ơn vì điều này.
rascalking

Tôi đã nhận được 2 phiếu giảm giá về điều này gần đây mà không có ý kiến ​​cho thấy lý do tại sao. Đó chỉ là văn hóa thô lỗ và chống FOSS.
Bruno Bronosky

1
tài liệu không nói về dấu hai chấm! Một người đẹp
JonnyRaa

1
Sử dụng cú pháp dấu chấm là điều giúp tôi window.paneví dụ join-pane -s 1.0để di chuyển khung 0 trong cửa sổ 1 vào cửa sổ hiện tại. Thêm chi tiết tại maciej.lasyk.info/2014/Nov/19/tmux-join-pane
mbigras

Kể từ tmux 2.1, :rõ ràng là không cần thiết nữa (ví dụ: chỉ cần làm :join-pane -s 1). Có lẽ đó là một lỗi trong các phiên bản trước
Villapx

38

Tôi nghĩ rằng tôi thích những gì tôi đã sử dụng để di chuyển các tấm đến cửa sổ riêng của họ tốt hơn. tôi sử dụng

break-pane -t :

Tôi đã tìm ra nó thông qua thử nghiệm, nhưng nó dường như hoạt động rất tốt. Bạn có thể gõ phím hoặc bí danh một cách dễ dàng, không cần kịch bản.


2
+1. Tôi có xu hướng sử dụng điều này thường xuyên hơn nhiều join-pane.
Chris B

14

Nếu bạn không muốn nhập định danh khung vào dấu nhắc, bạn cũng có thể sử dụng

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

sẽ tham gia khung / cửa sổ hoạt động cuối cùng vào cửa sổ hiện tại.


1
Phiên bản bạn đang sử dụng? Tôi nhận được unknown command: join-pane -s !với 1.6.
paradroid

Sử dụng 2.0 ở đây, nhưng chỉ cần đặt dòng vào conf mà không có dấu ngoặc kép dường như hoạt động tốt. bind-key j join-pane -s !
bkzland 17/2/2016

13

Sau khi xem qua các câu trả lời khác và lướt qua trang man tmux, tôi đã giải quyết các ràng buộc sau đây:

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

Điều này sẽ cho phép bạn tương tác chọn cửa sổ để tham gia và phản chiếu chữ thường s/ vliên kết của tôi để tạo các phân chia dọc / ngang mới. Nếu ai biết cách chọn từng tấm thay vì cửa sổ hãy cho tôi biết.


Điều này rất hữu ích. Cảm ơn bạn. Thật không may, -v-hkhông tạo ra "chia" dọc và ngang tương ứng. Họ tạo ra các " tấm xếp chồng " dọc và ngang tương ứng. (Đó là để nói rằng các tấm xếp chồng theo chiều dọc có sự phân chia theo chiều ngang.) Vì vậy, bạn phải đào tạo bộ não của mình theo cách đó. Cũng -vlà mặc định, vì vậy tôi sẽ bỏ nó ra và chỉ đặt nó -hở đó để ~/.tmux.confhành vi của bạn như một bảng cheat để bạn xem xét.
Bruno Bronosky

Tôi thích điều này tốt hơn các câu trả lời khác cho "đối diện với break-pane". Tạm thời phá vỡ một cửa sổ miễn phí vào cửa sổ riêng của nó, sau đó tôi muốn gửi nó trở lại một trong những cửa sổ cũ hơn và điều này xử lý một cách duyên dáng.
Stablesog

13

Ràng buộc chính

Theo mặc định, Ctrl+ b, !sẽ phá vỡ khung hoạt động thành một cửa sổ mới chuyển sang cửa sổ đó.

Trong đó Ctrl+ btiền tố mặc định cho .

Chi tiết

Các tmuxlệnh thực thi quan trọng này là break-pane(bí danh: breakp) như thực hiện trong cmd-break-pane.cvà ràng buộc như mặc định trong key-bindings.c như đã thấy trong list-keys(bí danh: lsk) đầu ra lệnh:

bind-key    -T prefix       !                 break-pane

4

Bạn không phải thay đổi các ràng buộc quan trọng của bạn.

Trong khi các cửa sổ bạn muốn di chuyển có trọng tâm, loại Prefix sau đó :join-pane -t :1ở đâu 1là bất cứ điều gì số cửa sổ đích là trong cùng một phiên. Bạn có thể chuyển nó sang phiên khác bằng cách thêm tên của nó như thế nào project:3. Đối với tôi join-panetab-autocompletes từ j.

Thêm -hhoặc -vchuyển sang lệnh để đặt hướng của phân chia mới được tạo ở đích hoặc chỉ cần đi tới nó và Tiền tố + spaceđể sắp xếp lại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.