Làm thế nào để bạn ẩn một khung tmux?


60

Tôi có 3 tấm trong cửa sổ tmux của mình:

--------------------------
|             |      2   |
|             |          |
|        1    |----------|
|             |      3   |
|             |          |
--------------------------

Pan 1 và 2 có vim. Pane 3 chạy một cli tôi đang phát triển. Đôi khi tôi muốn so sánh panes 1 và 2, vì vậy tôi muốn ẩn khung 3:

--------------------------
|             |          |
|             |          |
|        1    |       2  |
|             |          |
|             |          |
--------------------------

và sau đó mang lại khung 3 một lần nữa. Tôi không muốn giết panel 3 vì tôi đã thiết lập một số thứ ở đó và không muốn đi mặc dù thiết lập lại chúng.

  • Có cái gì đó tương tự PREFIX + zcó thể phóng to khung 2 nhưng không chạm vào khung 1 không? Hoặc là
  • Có cách nào để nhanh chóng ẩn panel 3 và đưa nó trở lại khi cần không?

Câu trả lời:


71

Sử dụng các lệnh break-panejoin-pane. Tham khảo để man tmuxbiết chi tiết, tùy chọn và sử dụng.


Ẩn 3:

Chọn khung 3và nhập Prefix- :break-pane -dP.

tmuxsẽ gửi khung 3tới một cửa sổ ở chế độ nền ( -dcờ) và in một số thông tin về nó trong khung 2 ( -Pcờ). Theo mặc định, bạn sẽ thấy một cái gì đó như 1:2.0(có nghĩa là session:window.pane:). Nhấn qđể tiếp tục làm việc. 1

1 Với một số thực hành bạn sẽ có thể để thả các -Pcờ vì bạn có thể dự đoán được session:window.panebộ ba: sessiongiá trị mặc định cho phiên hiện tại và panegiá trị mặc định để 0khi windowsẽ là nhận dạng cửa sổ miễn phí tiếp theo.

Lấy lại 3 ngăn:

Để lấy khung 3và bố cục trở lại, chọn khung 2và vấn đề Prefix- :join-pane -vs 1:2.0yêu tmuxcầu chia ngăn 2theo chiều dọc ( -v) và nối khung (nguồn) ( -s) với mã định danh 1:2.0. Tùy chọn, bạn có thể thả sessionhoặc paneđịnh danh. Cũng lưu ý rằng tmux lưu trữ lịch sử dòng lệnh, có thể truy cập thuận tiện với Prefix- :- Up.

Có lẽ bạn sẽ cần một chút thời gian để hiểu rõ về nó, nhưng một khi bạn làm được, chắc chắn bạn sẽ có thể đưa ra các ràng buộc khóa tùy chỉnh thuận tiện cho bạn.


Câu hỏi này chứa một số thông tin và thủ thuật hữu ích có thể cải thiện quy trình làm việc của bạn.


Hướng dẫn rõ ràng! Làm việc trơn tru cho tôi, tốt hơn nhiều so với câu trả lời của tôi!
Bernhard

Theo mặc định, khung 3 sẽ được chia vào cửa sổ cuối cùng, nếu bạn đã có 3 cửa sổ trong phiên hiện tại, cửa sổ sẽ trở thành Cửa sổ 3 (giả sử cửa sổ bắt đầu từ 0), vì vậy cửa sổ 3 trong "Cửa sổ 3" phụ thuộc vào các cửa sổ đã mở, làm thế nào tôi có thể làm cho công việc này trong các ràng buộc khóa tùy chỉnh?
CodyChan

5

Một ý tưởng: chạy tmux trong tmux.

Thiết lập ban đầu:

Ngăn 1 và ngăn 2; cạnh bên nhau. Chạy vim trong Pane 1 như bình thường.

Trong khung 2, chạy lại tmux và tạo hai tấm (cái này nằm trên cái kia lần này). Sau đó chạy vim trong khung 2.1 và CLI của bạn trong khung 2.2. Điều này sẽ cho phép bạn hiển thị toàn màn hình 2.1 với phiên bản Vim thứ hai của bạn dẫn đến hành vi bạn muốn.


đây là những gì tôi gọi ra khỏi suy nghĩ!
user881300

Cảm ơn người dùng881300. Nó có một số sai sót (có thể gửi lệnh có một vài quirks chẳng hạn). Tôi hy vọng sẽ cập nhật điều này thành một câu trả lời đầy đủ hơn một khi tôi đã kiểm tra nó - bản thân tôi cần chức năng tương tự.
BinaryBen

2
@ user881300 Về mặt kỹ thuật, đây là hộp trong hộp suy nghĩ.
Mateen Ulhaq

3

Thay vì ẩn khung 3, bạn cũng có thể gian lận một chút và làm cho nó rất nhỏ, có thể cũng sẽ hoạt động cho trường hợp của bạn.

Khi khung 2 là khung hoạt động, bạn có thể

PREFIX : resize-pane -D 40

Sau đó, để di chuyển nó lên một lần nữa, bạn có thể

PREFIX : resize-pane -D 28

trong đó bạn sẽ phải thay thế 28 bằng một số kha khá, hoặc thay vào đó, bạn có thể thử PREFIXEsc4, tự động thay đổi kích thước.


Tôi đã thay đổi kích thước khung bằng cách sử dụng set -g mouse-resize-pane onnhưng ngoài việc thay đổi kích thước, chúng ta có lựa chọn nào khác không?
dùng881300

@ user881300 Tôi không phải là tmuxchuyên gia, nhưng tôi sẽ tò mò tìm hiểu nếu điều này là có thể.
Bernhard

1
CTRL+B, ALT+<arrow direction to resize>, hơn CTRL+B, ESC, 4(thx @Bernhard) để khôi phục nó.
FelikZ

1

Bây giờ tôi đã có câu hỏi này gần 5 tuổi nhưng tôi chỉ tìm thấy nó vì tôi muốn làm một cái gì đó tương tự và tôi đã đưa ra các phím bấm sau đây nhờ câu trả lời của user78291 :

bind-key ! break-pane -d -n _hidden_pane
bind-key @ join-pane -s $.1

Bằng cách này, tôi có thể sử dụng Prefix!để ẩn khung hiện tại và Prefix@đưa nó trở lại. Phần tốt đẹp là tôi có thể ẩn nhiều tấm theo cách này.

Nó không hoàn hảo, nhưng nó thực hiện công việc che giấu các tấm pan và đưa chúng trở lại khá tốt.


0

Tôi biết điều này không thực sự che giấu khung bạn đang làm việc nhưng tôi đã cố gắng làm điều này để ngăn tmux gửi các lệnh phổ biến đến các cửa sổ được chọn và đưa ra một giải pháp đơn giản hơn nhiều.

Nếu bạn không muốn ẩn trực quan khung mà chỉ muốn dừng bất kỳ đầu vào nào vào khung. Một kịch bản có thể là bạn muốn gửi lệnh tới 5 ô mở nhưng không muốn gửi cho 2 người trong số họ.

Trong trường hợp sử dụng này, bạn có thể thực hiện ctrl + strên các bảng mà bạn không muốn các lệnh đi đến ( ctrl + skhóa tất cả đầu vào vào khung).

Khi bạn đã hoàn tất, nhấn ctrl + cđể quay trở lại.

Lưu ý : Không nhấn ctrl + qsau các lệnh vì nó sẽ chạy tất cả các lệnh trên màn hình đó. ctrl + csẽ không làm điều này (đã thử điều này trên Ubuntu).

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.