Thanh trạng thái tmux bị hỏng sau khi trích dẫn tệp nhị phân, làm thế nào để thiết lập lại?


94

Tôi vô tình làm hỏng thiết bị đầu cuối tmux của mình sau khi nhập catmột tệp nhị phân. Bây giờ của tôi tmuxđang rối tung lên. Việc tháo rời và gắn lại không giúp ích gì, cũng không vẽ lại (Cb r). Chạy resetchỉ vẽ lại khung hoạt động, không phải phần còn lại. Chạy ssty sanetrong hoặc ngoài tmuxcũng không giúp được gì.

tmux rối tung lên

Trong mỗi khung, tôi có phản hồi bình thường từ những gì tôi nhập (cuộc gọi ban đầu resetngay sau khi thiết bị đầu cuối bị rối đã giải quyết vấn đề này), nhưng tôi dường như không thể sửa thanh trạng thái.

Trong gnome-terminal, mọi cập nhật cho thanh trạng thái đều dẫn đến thanh trạng thái để phát triển (xem ảnh chụp màn hình ở trên). Ví dụ, điều này xảy ra khi tôi chạy một ứng dụng mới, khi tôi chuyển đổi panes hoặc khi tôi thay đổi kích thước một khung. Buộc vẽ lại (Bằng C-b r, bằng cách chạy resethoặc qua menu gnome-terminal) thu nhỏ lại thanh trạng thái thành một dòng duy nhất, nhưng nó vẫn bị hỏng.

Trong xterm, thanh trạng thái vẫn nằm trong một dòng, nhưng nó vẫn bị hỏng như trong hình.

Tôi đang sử dụng tmux 1.5.

  • Làm thế nào để tôi sửa chữa tmux-terminal của tôi ?

Báo cáo lỗi này từ năm 2008 dường như mô tả cùng một vấn đề, nhưng nó đã được đánh dấu là đã sửa. Tôi không biết phiên bản nào đã được sửa, nhưng tmux 1.5 phải bao gồm bản sửa lỗi từ năm 2008.


Chỉ có vấn đề này, và "rõ ràng" làm việc cho tôi.
user149818

1
Trong trường hợp ai đó gặp phải vấn đề tương tự, sau khi thực hiện tất cả các điều trên, thanh trạng thái tmux của tôi vẫn bị rối. Đặt tùy chọn cửa sổ trạng thái bên phải sửa chữa nó.

2
Đề nghị trên đã sửa nó cho tôi quá. Lệnh để làm điều đó là: Control+ b+ :và sau đó set -g status-right "#H"đặt trạng thái quyền cho tên máy chủ.
Mayank

Câu trả lời:


85

Hãy thử đổi tên cửa sổ 4

  • Chuyển sang cửa sổ 4: Control+b 4
  • Đổi tên cửa sổ: Control+ b , Control+ umyNewname

(Đó là một dấu phẩy ở giữa)

Hoặc: Control+b :rename-window myNewname


1
Đổi tên cửa sổ hoạt động như một bùa mê
shoutuma

4
Bạn cần xóa tên trước khi gõ tên mới. Cách dễ nhất là với ctrl+u, vì vậy trình tự đầy đủ làctrl+b , ctrl+u newname
z0r

1
Ngọt ngào - điều này byobucũng hiệu quả ( f8, <newname>)
ali_m

Tại sao Control-ucần thiết? Control-,đã đổi tên rồi phải không? Mặc dù tôi có thể xác nhận rằng nó là cần thiết trong trường hợp của tôi, nhưng nó có phải là một nhân vật thiết lập lại của một số loại?
hbogert

1
Control-u xóa dòng. nếu bạn sử dụng mật khẩu trong một thiết bị đầu cuối và biết mật khẩu, bạn có thể xóa mục nhập bằng control-u, thay vì nhấn backspace 20 lần
Rqomey

55

Bạn cần hai chuỗi lệnh để dọn dẹp mớ hỗn độn:

Đầu tiên, chạy cái này trong cửa sổ bị cắt xén (cái này hoạt động ngay cả khi bạn đang ở trong ssh):

stty sane; printf '\033k%s\033\\\033]2;%s\007' "`basename "$SHELL"`" "`uname -n`"; tput reset; tmux refresh

Sau đó chạy cái này trên máy tính chạy tmux(nó hoạt động bên trong và bên ngoài tmux):

Lệnh sau ảnh hưởng đến tất cả các tmuxtrường hợp, có thể thay đổi trạng thái bên trái nhiều hơn cửa sổ hiện tại. Nếu bạn không cần tính năng đó, hãy bỏ nó đi.

tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

Giải thích chi tiết

Điều này đã được lắp ráp để giải quyết tất cả các bit được tìm thấy trong các câu trả lời và bình luận khác. Hiện tại dường như chỉ còn lại một chút với lệnh thứ hai. (Xem trong "bit thiếu" bên dưới).

Để hiểu cách thức hoạt động của nó, trước tiên chúng ta hãy giết dòng trạng thái tmuxtty. Sau đó, chúng tôi sửa lại một lần nữa, sử dụng một phương thức luôn luôn có sẵn (không giống như lệnh reset).

Làm thế nào để làm cho một tmuxthiết bị đầu cuối (giả định UTF-8) không thể sử dụng

stty -echo; printf '\016\033k%2000s\\\033\033]2;\355\007' $'\302\217'

Cảnh báo: Sau khi chạy lệnh trên, vỏ trông có vẻ mù và điếc và dường như chỉ nói chuyện nhảm nhí bằng một số ngôn ngữ ngoài hành tinh không xác định. Xem bên dưới về cách sửa chữa này.

Giải thích:

  • stty -echo giết phản ứng loại thiết bị đầu cuối

  • printf '\016'làm một SO, vì vậy bạn đang ở trong bộ ký tự thay thế

  • printf '\033]2;%s\007' 'right status text'đặt trạng thái đúng, trong trường hợp này $'\355', làm lộ ra lỗi trình bày

  • printf '\033k%2000s\033\\' $'\302\217' đặt tên tiêu đề cửa sổ

Đây có thể là sự kết hợp mà bạn có thể thấy trên thiết bị đầu cuối sau khi một số lệnh tương tác bị hỏng và rơi trở lại vào trình bao. (Với /bin/catbạn không thể kích hoạt stty -echoIMHO, nhưng các lệnh tương tác như vimthường đặt điều này.)

Bây giờ dọn dẹp mớ hỗn độn này

stty sane; printf '\033k%s\033\\\033]2;%s\007' "$(basename "$SHELL")" "$(uname -n)"; tput reset; tmux refresh

Lưu ý: Nếu bạn sử dụng bản sao và dán (có thể bạn cần giữ Shifttrong khi dán), có lẽ bạn không thể thấy dán của mình nếu bạn đã sử dụng lệnh trên để gây rối với tty. Do đó, chỉ cần nhấn phím Enter một cách mù quáng sau khi dán này.

Giải thích:

  • stty sane thiết lập các tham số đầu cuối "sane", để bạn lấy lại tiếng vang của mình trong khi gõ

  • printf '\033k%s\033\\' "$(basename "$SHELL")"đặt tiêu đề cửa sổ trở lại bình thường. Bạn có thể sử dụng tmux rename-window "$(basename "$SHELL")"thay thế, tuy nhiên tmux rename-windowbị giới hạn tmuxở nơi trình tự thoát luôn hoạt động.

  • printf '\033]2;%s\007' "$(uname -n)"Đặt lại quyền trạng thái được hiển thị như mặc định. (Lưu ý rằng bạn không nên sử dụng tmux set status-right "something", vì nó chỉ xuất ra pane titlecái bị hỏng, vì vậy status-rightchỉ lộ ra một số lỗi trình bày. Ngoài ra, tôi không tìm thấy tmuxlệnh để đặt tiêu đề khung trực tiếp.)

  • tput reset Đặt lại thiết bị đầu cuối, chỉ trong trường hợp điều này đã bị rối với

  • tmux refresh làm mới màn hình để loại bỏ các mảnh vụn khác có thể xuất hiện

Thiếu một chút

Việc printf '\033k%s\033\\' "$(basename "$SHELL")"mất khả năng tiêu chuẩn tmuxđể trình bày lệnh hiện tại trong khu vực trạng thái bên trái. Sau khi printf '\033k%s\033\\' "something"được thực hiện, khả năng này bị mất và tôi không tìm thấy cách nào tốt, tuy nhiên, làm thế nào để đưa nó trở lại như trước.

Nhưng, như đã lưu ý trong các nhận xét bên dưới, bạn có thể kích hoạt một tính năng tương tự tmuxnhư thay thế với tmuxcài đặt sau :

set-window-option automatic-rename on
  • Hoặc làm điều này trong tmuxdòng lệnh, có thể đạt được trong cửa sổ hiện tại với "Escape" :(trong đó "Escape" là tmuxphím lệnh của bạn ) và sau đó nhập lệnh.

  • Hoặc loại bỏ tmux set-window-option automatic-rename ontrong thiết bị đầu cuối hiện tại của bạn, nhưng điều này không thành công trong trường hợp bạn không trực tiếp ở cấp độ vỏ phải, ví dụ như nó không hoạt động trong sudohoặc ssh.

  • Hoặc mở một cửa sổ khác trong tmuxphiên hiện tại và thực hiện lệnh sau:

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • Hoặc mở một shell khác cho máy tính đang chạy tmuxvà thực thi lệnh sau (cái này nằm ngoài tmux):

    tmux list-windows -a | while IFS=: read -r a b c; do tmux set-window-option -t "$a:$b" automatic-rename on; done

PS: Cảm ơn tất cả những người đã giúp lắp ráp giải pháp này.


2
Xin lưu ý uname -nthay vì hostname -s. hostnamelà nguy hiểm trong rootbối cảnh, vì bạn có thể kết thúc với máy chủ của mình được đổi tên thành -sLinux / Unix cũ, nơi hostnamekhông có các tùy chọn khó hiểu.
Tino

Không đặt lại tiêu đề khung làm tôi cũng buồn; đó là lý do tại sao tôi thậm chí ở đây ngay từ đầu. Cảm ơn bạn đã là người duy nhất trên trang ít nhất thừa nhận sự thiếu sót đó!
EvanED

2
Cũng xem xét "tmux setw tự động đổi tên" sau khi sửa tiêu đề cửa sổ
EB.

Phần này stty saneđã giúp tôi khi thiết bị đầu cuối của tôi bị hỏng và không hiển thị gì cả. Cảm ơn bạn!
johnny

Nếu bạn muốn "thiếu bit", tức là lệnh hiện đang chạy được hiển thị trong khu vực trạng thái bên trái, bạn có thể sử dụng lệnh tmux set-window-option automatic-rename.
David Foerster

26

Vấn đề cụ thể mà bạn đang gặp phải liên quan đến tên / tiêu đề của cửa sổ 4. Một sự kết hợp quá dài (rõ ràng) và chứa các ký tự lạ khiến tmux đo nó ngắn hơn (do đó không giới hạn đúng thanh trạng thái theo chiều rộng của màn hình) Tôi không chắc làm thế nào để thiết lập lại nó (với tôi nó theo dõi tên của quá trình tiền cảnh), bạn có thể phải đóng cửa sổ.


4
mặc định để đổi tên một cửa sổ là^b - ,
Rob

8
Trong trường hợp phím tắt trong nhận xét của @ Rob làm bạn bối rối, thì đó là Ctrl- bsau đó ,.
Doug Paul

Lưu ý rằng khi bạn đổi tên một cửa sổ, trường được điền trước bằng tên cửa sổ hiện tại (và con trỏ của bạn ở cuối tên đó). Vì tên cửa sổ của tôi là một chuỗi rác dài, tôi phải nhấn giữ Backspacemột phút để xóa tên hiện tại. Đối với tôi, phản hồi trực quan cuối cùng đã làm rõ rằng toàn bộ tên cũ đã bị xóa.
Doug Paul

bạn cũng có thể sử dụng Ctrl-b :đổi tên cửa sổ <tên ở đây>; cái này sử dụng hệ thống lệnh tmux thay vì phím tắt cho lệnh đó.
Abbafei

5

chỉ cần làm điều này $ reset && tmux rename-window <new_window_name>


5
tmux set-option -g status off && tmux set-option -g status on 

đã sửa lỗi này cho tôi khi một cái gì đó không phải là tên cửa sổ bị hỏng và tôi không thể bận tâm để tìm ra nó là gì.


2

tmuxchỉ có thể là một phần của vấn đề. Bạn có thể phải gọi stty sanetại dòng lệnh. Điều này đặt lại trình điều khiển TTY trong kernel thành một số bộ giá trị mặc định thường cho phép bạn tiếp tục. Nếu trình điều khiển TTY bị rối đủ, bạn có thể phải gõ stty sane"mù", nghĩa là không có phản hồi trên màn hình.


stty sanecũng không giải quyết được vấn đề. Tôi có phản hồi trên màn hình, trong mỗi tmuxbảng tôi có thể nhập và có phản hồi như bình thường, nhưng ngay khi tmux cần vẽ một cái gì đó (ví dụ: chạy ứng dụng mới, chuyển đổi hoặc thay đổi kích thước bảng), thanh trạng thái sẽ di chuyển vào các bảng ...
gerrit


-3

để khắc phục sự cố cho tôi:

Tôi vừa giết khung vấn đề và cửa sổ, và tạo một cửa sổ và khung mới.

Trong khung vấn đề, CTRL+ AXCTRL+ AC.


cách này cho tôi một lần nữa. không có cách nào khác có thể giúp
itech
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.