내가 Tab완료 하는 데 사용 하는 동안 처음 두 문자가 반복되었습니다 . 아래 스크린 샷에서 cd
반복됩니다.
rxvt-unicdoe, xterm, terminator를 시도했습니다. 이 모든 터미널 에뮬레이터에는이 문제가 있습니다.
Zsh 버전 5.0.2, 구성 파일 on-my-zsh
내가 Tab완료 하는 데 사용 하는 동안 처음 두 문자가 반복되었습니다 . 아래 스크린 샷에서 cd
반복됩니다.
rxvt-unicdoe, xterm, terminator를 시도했습니다. 이 모든 터미널 에뮬레이터에는이 문제가 있습니다.
Zsh 버전 5.0.2, 구성 파일 on-my-zsh
답변:
명령 행의 문자가 오프셋에 표시되는 경우가 종종 있는데, 이는 zsh가 프롬프트에 대해 잘못된 너비를 계산했기 때문입니다. 커서를 이동하는 다른 명령 ( Home, 완료 등 )을 사용할 때 문자를 추가하거나 문자를 기준으로 문자를 이동하지만 문자가 움직이지 않는 한 표시가 제대로 표시되는 경우가 있습니다 . ) 또는 명령이 두 번째 줄과 겹치는 경우.
Zsh 는 명령의 문자 위치를 알기 위해 프롬프트 의 너비를 알아야합니다 . 달리 언급하지 않는 한 각 캐릭터는 한 위치를 차지한다고 가정합니다.
한 가지 가능성은 프롬프트에 올바르게 구분되지 않은 이스케이프 시퀀스 가 포함되어있을 수 있습니다 . 텍스트의 색상이나 기타 서식 측면을 변경하거나 창 제목 또는 기타 효과를 변경하는 이스케이프 시퀀스의 너비는 0입니다. 그것들 은 퍼센트 괄호 구문 안에 포함되어야합니다%{…%}
. 보다 일반적으로, 이스케이프 시퀀스 %42{…%}
는 zsh에게 중괄호 안에있는 것이 너비가 42 자라고 가정하도록 지시합니다.
따라서 프롬프트 설정 ( PS1
, PROMPT
또는 참조하는 변수)을 확인하고 모든 이스케이프 시퀀스 (예 : \e[…m
텍스트 속성 변경 등 $fg[red]
)가 내부에 있는지 확인하십시오 %{…%}
. oh-my-zsh를 사용하고 있으므로 자신의 설정과 oh-my-zsh에서 사용하는 정의를 모두 확인하십시오.
bash에서도 동일한 문제가 발생합니다. 프롬프트 에서 너비가 0 인 시퀀스는 로 묶어야 \[…\]
합니다.
또 다른 가능성은 프롬프트에 비 ASCII 문자가 포함되어 있고 zsh (또는 다른 응용 프로그램)와 터미널의 너비에 대한 아이디어가 다를 수 있습니다. 터미널 인코딩과 셸에서 선언 된 인코딩 간에 불일치 가 발생하면 두 바이트의 인코딩으로 인해 특정 바이트 시퀀스의 너비가 달라집니다. 일반적으로 비 유니 코드 터미널을 사용하지만 유니 코드 로캘을 선언하거나 그 반대의 경우이 문제가 발생할 수 있습니다.
응용 프로그램은 로케일을 알기 위해 환경 변수에 의존합니다. 관련 설정은 LC_CTYPE
환경 변수로부터 결정되고, LANGUAGE
, LC_ALL
, LC_CTYPE
및 LANG
(SET는 이들의 최초 적용). 이 명령 locale | grep LC_CTYPE
은 현재 설정을 알려줍니다. 로케일 문제를 피하는 가장 좋은 방법은 터미널 에뮬레이터 LC_CTYPE
가 예상하는 인코딩을 알고 있기 때문에 설정 하는 것입니다. 그러나 그것이 효과가 없다면을 설정하십시오 LC_CTYPE
.
이전 명령이 줄 바꿈으로 끝나지 않은 일부 출력을 표시하여 프롬프트가 행 중간에 표시되지만 쉘이이를 인식하지 못하는 경우에도 동일한 증상이 발생할 수 있습니다. 이 경우에는 그러한 명령을 실행 한 후에 만 지속될 수 있습니다.
줄이 제대로 표시되지 않으면 명령 redisplay
또는 clear-screen
( 기본적 으로 Ctrl+ L에 바인딩 됨 )이 수정합니다.
->
내가 생각할 것으로 예상된다
locale
and의 출력을 게시하십시오 echo $PS1 | od -t x1
(및 다른 변수가 사용하는 것과 동일한 내용 $PS1
).
\e{7,8}
커서 상태 저장 / 복원에 사용
LC_CTYPE
나를 위해 고쳐진 것입니다. 설정을 C
해제하면 모든 것이 작동했습니다. 감사.
나는 같은 문제가 있었고 내 해결책을 찾았습니다 : https://github.com/robbyrussell/oh-my-zsh/issues/5157#issuecomment-226031519 . 에 다음을 입력하십시오 ~/.zshrc
.
export LC_CTYPE=en_US.UTF-8
macOS의 iTerm 2 에서이 문제가 발생했습니다. 기본 설정-> 프로필-> 텍스트로 이동하여 "유니 코드 버전 9 너비 사용"을 선택하여 문제를 해결했습니다.
우분투 도커 이미지 ( ubuntu:latest
)를 사용 하여이 문제가 있습니다. 해당 페이지에 제공된 지침으로 수정했습니다 : https://hub.docker.com/_/ubuntu
apt-get update && \
apt-get install -y locales && \
rm -rf /var/lib/apt/lists/* && \
localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
echo 'export LANG=en_US.utf8' >> ~/.zshrc
zsh