Có cách nào để vẽ lại cửa sổ tmux khi chuyển màn hình nhỏ hơn sang màn hình lớn hơn không?


399

Giả sử bạn đang kết nối với máy chủ từ xa qua ssh với Terminal.app. Khi bạn "gắn tmux" với màn hình độ phân giải lớn hơn từ màn hình nhỏ hơn mà bạn đã bắt đầu tmux trước đó, nó sẽ vẽ các chấm xung quanh bảng điều khiển. Nó không phù hợp với kích thước cửa sổ mới. Có cách nào để vẽ lại và làm sạch cửa sổ không? CTRL+ Lhoặc CTRL- B+ Rkhông giúp đỡ. Tôi không thể tìm thấy bất kỳ mệnh lệnh thích hợp nào về con người.

% tmux -V
tmux 1.5

7
Tôi muốn biết làm thế nào để vẽ lại tất cả các phiên mà không tách ra bất kỳ phiên nào trong số chúng.
PJ Brunet

3
tất cả mọi người chỉ tách ra ... bạn đã tìm ra cách chưa?
Patoshi パ ト


vâng, tôi vẫn rất muốn biết câu trả lời cho câu hỏi: "Có cách nào để vẽ lại và làm sạch cửa sổ không?"
jaydel

Câu trả lời:


579

tmux giới hạn kích thước của một cửa sổ ở mức nhỏ nhất của mỗi kích thước trong tất cả các phiên mà cửa sổ được gắn vào. Nếu nó không làm điều này, sẽ không có cách nào hợp lý để hiển thị toàn bộ khu vực cửa sổ cho tất cả các máy khách được đính kèm.

Cách dễ nhất để làm là tách bất kỳ khách hàng nào khác khỏi các phiên khi bạn đính kèm:

tmux attach -d

Thay phiên, bạn có thể di chuyển bất kỳ khách hàng khác sang một phiên khác trước khi đính kèm vào phiên:

takeover() {
    # create a temporary session that displays the "how to go back" message
    tmp='takeover temp session'
    if ! tmux has-session -t "$tmp"; then
        tmux new-session -d -s "$tmp"
        tmux set-option -t "$tmp" set-remain-on-exit on
        tmux new-window -kt "$tmp":0 \
            'echo "Use Prefix + L (i.e. ^B L) to return to session."'
    fi

    # switch any clients attached to the target session to the temp session
    session="$1"
    for client in $(tmux list-clients -t "$session" | cut -f 1 -d :); do
        tmux switch-client -c "$client" -t "$tmp"
    done

    # attach to the target session
    tmux attach -t "$session"
}
takeover 'original session' # or the session number if you do not name sessions

Màn hình sẽ co lại lần nữa nếu máy khách nhỏ hơn chuyển sang phiên.

Ngoài ra còn có một biến thể trong đó bạn chỉ "tiếp quản" cửa sổ (liên kết cửa sổ thành một phiên mới, thiết lập aggressive-resizevà chuyển đổi bất kỳ phiên nào khác có cửa sổ đó hoạt động sang một số cửa sổ khác), nhưng nói chung khó hơn trong kịch bản trường hợp (và khác với lối ra của Wap vì bạn muốn hủy liên kết cửa sổ hoặc hủy phiên thay vì chỉ tách ra khỏi phiên).


Lưu ý rằng bạn có thể có phiên hiện tại với $(tmux display-message -p '#S'), xem: superuser.com/questions/410017/ .
GManNickG

3
Câu trả lời này nhận được đạo cụ cho chi tiết và kiến ​​thức cơ bản. Nhưng hãy xem câu trả lời của Shi B. Ctrl-b + Dđể dễ sử dụng (và ghi nhớ).
fbicknel

"tmux Detach -a" làm việc cho tôi; "tmux đính kèm -d" đã không.
mahemoff

(1) lỗi tmux mới hơn trên set-option... set-remain-on-exit on. Xem tmux # 787 . Bây giờ, sử dụng : tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on.
dùng1902689

1
(2) trên tmux mới hơn, phải sử dụng new-windowđối số cuối cùng của một cái gì đó như 'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"hoặc bạn sẽ không thấy thông báo. (Trong một số trường hợp, bạn sẽ thấy nó nếu bạn cuộn lên hoặc nếu thiết bị đầu cuối cao hơn.) Nếu bạn sử dụng điều này, có lẽ bạn sẽ tốt hơn nếu không có nhận xét của tôi "(1)" hoặc bất kỳ cài đặt nào remain-on-exit.
user1902689

462

Bạn luôn có thể nhấn CTRL- B+ SHIFT- Dđể chọn ứng dụng khách nào bạn muốn tách ra khỏi phiên.

tmux sẽ liệt kê tất cả các phiên với kích thước hiện tại của chúng. Sau đó, bạn chỉ cần tách ra khỏi tất cả các phiên có kích thước nhỏ hơn.


6
Làm rõ. Đó là vốn D. Nhỏ 'd' làm mất khách hàng.
Raghuram Murthy P

2
CTRL-Bnếu đó là tiền tố của bạn. Của tôi đã được CTRL-Akể từ khi tôi chuyển từ màn hình.
Blaskovicz

1
Trên thực tế, bạn cần tách ra khỏi tất cả các phiên có kích thước nhỏ hơn từ cùng một nhóm phiên. Tuy nhiên, CTRL-B + SHIFT-D không hiển thị mỗi phiên thuộc về nhóm nào. Tôi muốn chạy tmux list-sessionsđể hiển thị tên phiên, kích thước và thông tin nhóm, sau đó tmux kill-session -t <session_name>để giết các phiên của cùng một nhóm.
Zhichang Yu

180

Một giải pháp đơn giản hơn trên các phiên bản gần đây của tmux (đã thử nghiệm trên 1.9) bây giờ bạn có thể thực hiện:

tmux detach -a

-a dành cho tất cả các khách hàng khác trong phiên này ngoại trừ khách hàng hiện tại

Bạn có thể đặt bí danh cho nó trong. [Bash | zsh] rc

alias takeover="tmux detach -a"

Quy trình làm việc: Bạn có thể kết nối với phiên của mình một cách bình thường và nếu bạn bị làm phiền bởi một phiên khác buộc phải giảm kích thước cửa sổ tmux của bạn, bạn có thể chỉ cần gọi takeover.


13
Cảm ơn nhiều! đã làm việc. Nếu bạn đang thực hiện nó trong một phiên tmux đang hoạt động, chỉ cần nhấn CTRL + B (hoặc bất kỳ lệnh tmux tùy chỉnh nào của bạn) sau đó:detach -a
Iacchus

Hoặc chỉ thực hiện tmux detach -atrên dòng lệnh shell bên trong Tmux.
jdhao

4

Các câu trả lời khác không giúp tôi vì tôi chỉ có khách hàng đính kèm (câu trả lời trước đó đã bắt đầu phiên đã được tách ra).

Để khắc phục, tôi đã làm theo câu trả lời ở đây (Tôi không sử dụng xterm).

Mà nói đơn giản:

  1. Tách từ phiên tmux
  2. Chạy resizelệnh linux
  3. Reattach đến phiên tmux

3

Tôi vừa gặp phải vấn đề này và tình cờ gặp một tình huống khác. Mặc dù nó có lẽ chỉ là một con kỳ lân, tôi nghĩ tôi đã đặt nó ra.

Tôi đã có một phiên nhỏ hơn và tôi nhận thấy rằng kích thước phông chữ khác nhau: phiên nhỏ hơn có phông chữ nhỏ hơn. Rõ ràng, tôi đã thay đổi kích thước phông chữ cửa sổ vì một số lý do.

Vì vậy, trong OS X, tôi chỉ thực hiện Cmd-+trên phiên có kích thước nhỏ hơn và nó quay lại đúng vị trí.


Điều này cố định vị trí kỳ lạ của thanh trạng thái tmux trong thiết bị đầu cuối macOS. Khi tôi mở các tab thiết bị đầu cuối, nó sẽ làm rối vị trí thanh trạng thái tmux. Chơi với zoom qua cmd-+hoặc -sửa nó.
Paul

0
ps ax | grep tmux
17685 pts/22   S+     0:00 tmux a -t 13g2
17920 pts/11   S+     0:00 tmux a -t 13g2
18065 pts/19   S+     0:00 grep tmux

giết người kia


8
Có vẻ như một câu trả lời hợp lệ cho câu hỏi tiêu đề, mặc dù có câu trả lời tốt hơn. Tôi không hiểu tại sao nó lại bị lãng quên.
JoL

yessss, đây là câu trả lời duy nhất có hiệu quả với tôi
Yasir Hantoush


0

Tôi sử dụng Ctrl- b+ qlàm cho số flash của nó cho mỗi ô, vẽ lại chúng trên đường đ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.