이진 파일을 가져온 후 tmux 상태 표시 줄이 손상되었습니다. 재설정 방법은 무엇입니까?


94

cat이진 파일을 사용한 후 실수로 tmux 터미널을 망쳤습니다 . 이제 내 tmux엉망입니다. 분리 및 다시 부착해도 도움이되지 않으며 다시 그리기 (Cb r)도 도움이되지 않습니다. 실행 reset하면 나머지가 아닌 활성 창이 다시 그려집니다. ssty sane내부 또는 외부에서 실행 tmux해도 도움이되지 않습니다.

tmux 엉망

각 창 내에서 입력 한 내용 ( reset터미널이 엉망 이 된 직후 의 초기 호출)에서 정상적인 피드백을 받았지만 상태 표시 줄을 수정할 수없는 것 같습니다.

에서 gnome-terminal, 상태 표시 줄에 모든 업데이트 (위 스크린 샷 참조) 성장하는 상태 표시 줄에 연결됩니다. 예를 들어, 새 응용 프로그램을 실행하거나 창을 전환하거나 창 크기를 조정할 때 이런 일이 발생합니다. 다시 그리기를 실행하면 ( , gnome-terminal 메뉴를 C-b r실행 reset하거나 통해) 상태 표시 줄이 한 줄로 줄어들지 만 여전히 손상됩니다.

에서 xterm, 상태 표시 줄 한 줄 내에 남아 않지만, 사진으로는 손상된 남아있다.

tmux 1.5를 사용하고 있습니다.

  • tmux터미널을 어떻게 수정 합니까?

2008 년 이 버그 보고서 는 같은 문제를 설명하는 것으로 보이지만 수정 된 것으로 표시되었습니다. 어떤 버전으로 수정되었는지는 모르지만 tmux 1.5는 2008의 수정 사항을 포함해야합니다.


방금이 문제가 있었고 "명확한"것이 나를 위해 일했습니다.
user149818

1
누군가 동일한 문제가 발생하는 경우 위의 모든 작업을 수행 한 후에도 tmux 상태 표시 줄이 여전히 엉망이되었습니다. 창 옵션 상태를 오른쪽으로 설정하면 복구되었습니다.

2
위의 제안은 나에게도 해결되었습니다. 이를 수행하기위한 명령은 Control+ b+ :이고 set -g status-right "#H"status-right를 호스트 이름으로 설정하는 것입니다.
Mayank

답변:


85

창 이름 바꾸기 4

  • 창 4로 전환 : Control+b 4
  • 이름 바꾸기 창 : Control+ b , Control+ umyNewname

(중간에 쉼표가 있음)

또는 : Control+b :rename-window myNewname


1
윈도우의 이름을 변경하면 마법처럼 작동합니다
exhuma

4
새 이름을 입력하기 전에 이름을 지워야합니다. 가장 쉬운 방법은입니다 ctrl+u. 전체 시퀀스는 다음과 같습니다.ctrl+b , ctrl+u newname
z0r

1
byobuf8, <newname>
Sweet-이것도

Control-u필요한가? Control-,이미 이름을 바꾸고 있습니까? 필자의 경우에는 필요하다는 것을 확인할 수 있지만 어떤 종류의 재설정 문자입니까?
hbogert

1
Control-u는 회선을 지 웁니다. 만약 당신이 터미널에서 당신의 패스워드를 모두 알고 그것을 알고 있다면, 당신은 백 스페이스를 20 번
누르는

55

엉망을 정리하려면 두 가지 명령 시퀀스가 ​​필요합니다.

먼저 깨진 창에서 이것을 실행하십시오 (이 상태에서도 작동합니다 ssh).

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

그런 다음 실행되는 컴퓨터에서 이것을 실행하십시오 tmux(내부 및 외부에서 작동 tmux).

다음 명령은 모든 tmux인스턴스에 영향을 미치며 현재 인스턴스보다 더 많은 왼쪽 상태를 변경할 수 있습니다. 해당 기능이 필요하지 않은 경우 비워 두십시오.

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

자세히 설명

이것은 다른 답변과 의견에서 발견 된 모든 비트를 해결하기 위해 조립되었습니다. 현재 두 번째 명령에는 약간의 비트 만 남아 있습니다. 아래의 "누락 비트"를 참조하십시오.

이것이 어떻게 작동하는지 이해하려면 먼저의 상태 표시 줄 tmux과를 종료하십시오 tty. 그런 다음 항상 사용할 수있는 방법 (command와 달리 reset)을 사용하여 다시 수정합니다 .

tmux터미널을 UTF-8사용할 수 없게 만드는 방법

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

경고 : 위 명령을 실행 한 후, 쉘은 장님과 귀머거리처럼 보이며 알려지지 않은 외계 언어로만 헛소리를하는 것 같습니다. 수리 방법은 아래를 참조하십시오.

설명 :

  • stty -echo 터미널 유형 응답을 종료합니다

  • printf '\016'를 수행 SO하므로 대체 문자 세트에 있습니다.

  • printf '\033]2;%s\007' 'right status text'$'\355프리젠 테이션 버그를 노출시키는 올바른 상태를 설정합니다.

  • printf '\033k%2000s\033\\' $'\302\217' 창 제목 이름을 설정합니다

이것은 일부 대화식 명령이 충돌하여 쉘로 다시 떨어진 후 터미널에서 볼 수있는 조합 일 수 있습니다. ( IMHO를 /bin/cat유발할 수는 없지만 일반적으로 stty -echo대화식 명령 vim이이를 설정합니다.)

이제이 엉망진창을 청소하십시오

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

참고 : 복사하여 붙여 넣기를 사용하는 경우 ( Shift붙여 넣기 동안 누르고 있어야 할 수도 있음 ) 위의 명령을 사용하여를 엉망으로 만든 경우 붙여 넣기를 볼 수 없습니다 tty. 따라서 붙여 넣은 후 Enter 키를 맹목적으로 누르십시오.

설명 :

  • stty sane "sane"터미널 매개 변수를 설정하므로 입력하는 동안 에코가 다시 나타납니다.

  • printf '\033k%s\033\\' "$(basename "$SHELL")"창 제목을 다시 정상으로 설정합니다. tmux rename-window "$(basename "$SHELL")"대신 사용할 수 있지만 이스케이프 시퀀스가 ​​항상 작동 tmux rename-window하는 tmux위치 로 제한됩니다 .

  • printf '\033]2;%s\007' "$(uname -n)"상태 오른쪽이 기본값으로 표시되도록 재설정합니다. ( 손상된 파일 tmux set status-right "something"만 출력 pane title하므로 status-right프레젠테이션 버그를 노출 시키기 때문에를 사용하지 않아야합니다 . 또한 tmux창 제목을 직접 설정 하는 명령을 찾지 못했습니다 .)

  • tput reset 이 문제가 발생한 경우를 대비하여 터미널을 재설정합니다.

  • tmux refresh 화면을 새로 고침하여 표시되었을 수있는 다른 잔해를 제거합니다

누락 된 비트

왼쪽 상태 영역에 현재 명령을 표시 printf '\033k%s\033\\' "$(basename "$SHELL")"하는 표준 기능 이 느슨합니다 tmux. printf '\033k%s\033\\' "something"처형 된 후에이 능력은 상실되고 좋은 방법을 찾지 못했지만, 이전과 같은 방식으로 되돌릴 수있는 방법을 찾지 못했습니다.

그러나 아래 주석에서 언급 한 것처럼 tmux다음 tmux설정을 사용하여 비슷한 기능을 대체 할 수 있습니다 .

set-window-option automatic-rename on
  • tmux현재 창에서 "Escape" :(여기서 "Escape"는 tmux명령 키)를 사용하여 도달 할 수있는 명령 줄 에서이 작업을 수행 한 다음 명령을 입력하십시오.

  • 또는 tmux set-window-option automatic-rename on현재 터미널에서 명시 적이지만, 올바른 쉘 레벨에 있지 않은 경우 (예 : sudo또는에서 작동하지 않는 경우) 실패합니다 ssh.

  • 또는 현재 tmux세션 에서 다른 창을 열고 다음 명령을 실행하십시오.

    for a in `tmux list-windows | sed 's/:.*//'; do tmux set-window-option -t "$a" automatic-rename on; done`
  • 또는 컴퓨터에서 다른 쉘을 열고 tmux다음 명령을 실행하십시오 (tmux 외부에 있음).

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

추신 :이 솔루션을 구성하는 데 도움을 주신 모든 분들께 감사드립니다.


2
uname -n대신에 유의하십시오 hostname -s. 옵션이없는 Linux / Unix에서 호스트 이름이 변경 될 수 있으므로 문맥 상 hostname위험 root합니다 . -shostname
Tino

창 제목을 재설정하지 않으면 저도 슬프게됩니다. 그렇기 때문에 처음부터 여기에 있습니다. 적어도 그 단점을 인정하는 페이지에서 유일하게 감사합니다!
EvanED

2
창 제목
EB를

stty sane터미널이 망가 졌을 때 그 부분이 도움이되어 아무것도 보이지 않았습니다. 감사합니다!
johnny

"누락 된 비트", 즉 왼쪽 상태 영역에 현재 실행중인 명령이 필요한 경우 tmux 명령을 사용할 수 있습니다 set-window-option automatic-rename.
David Foerster

26

당신이보고있는 특정 문제는 창 4의 이름 / 제목과 관련이 있습니다. 너무 길고 (명확하게) tmux가 더 짧은 것으로 측정하는 이상한 문자가 포함 된 조합 (따라서 상태 표시 줄을 올바르게 제한하지 못합니다) 화면 너비로) 재설정 방법을 잘 모르겠습니다 (포 그라운드 프로세스의 이름을 추적하는 경우). 창을 닫아야합니다.


4
창의 이름을 바꾸려면 기본적으로^b - ,
Rob

8
@ 롭의 코멘트에 키보드 단축키가 당신을 혼란 경우,의 Ctrl- b,.
Doug Paul

창의 이름을 바꾸면 필드는 현재 창 이름으로 미리 채워지고 커서는 해당 이름의 끝에 있습니다. 내 창 이름은 긴 일련의 쓰레기이기 때문에 Backspace현재 이름을 지우려면 잠시 기다려야했습니다. 나에게 시각적 피드백은 결국 전체 이름이 지워 졌음을 분명히했다.
Doug Paul

당신은 또한 Ctrl-b :rename-window <name goes here>를 사용할 수 있습니다 ; 여기에는 해당 명령의 바로 가기 키 대신 tmux 명령 시스템이 사용됩니다.
Abbafei


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

창 이름 이외의 것이 손상되어서 그것이 무엇인지 알아낼 수 없었을 때 나를 위해 이것을 고쳤습니다.


2

tmux문제의 일부만 구성 할 수 있습니다. stty sane명령 행에서 호출해야 할 수도 있습니다 . 그러면 커널 내부 TTY 드라이버가 일반적으로 진행할 수있는 일부 기본값으로 재설정됩니다. TTY 드라이버가 충분히 엉망인 경우 stty sane"블라인드" 를 입력해야합니다 . 즉, 화면에 피드백이없는 것입니다.


stty sane문제를 해결하지 못합니다. 화면에 피드백이 있는데, 각 tmux패널 내에 입력하고 정상적으로 피드백을받을 수 있지만, tmux가 무언가를 그릴 필요가있는 즉시 (예 : 새 애플리케이션 실행, 창 크기 조정 또는 크기 조정) 상태 표시 줄이 창으로 이동합니다. ...
gerrit

2

구성 파일을 다시로드 하시겠습니까?

Ctrlb그런 다음 : :source-file ~/.tmux.conf


지금까지 최고의 솔루션.
dave

-3

나를 위해 문제를 해결하려면 :

방금 이슈 창과 창을 죽이고 새 창과 창을 만들었습니다.

문제 창에서 CTRL+ AXCTRL+ AC.


다시 나를 위해이 방법. 다른 방법으로 도울 수 있습니다
ITECH은
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.