Tab완료하는 데 사용하면 처음 두 문자가 반복됩니다. 아래 스크린샷에서는 cd
이것이 반복됩니다.
rxvt-unicdoe, xterm, 터미네이터를 사용해 보았습니다. 이러한 모든 터미널 에뮬레이터에는 이 문제가 있습니다.
Zsh 버전 5.0.2, 구성 파일내 zsh에서
답변1
명령줄의 문자가 때때로 오프셋에 나타나는 경우 이는 일반적으로 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
locale | grep LC_CTYPE
LC_CTYPE
LC_CTYPE
이전 명령이 개행 문자로 끝나지 않는 일부 출력을 표시할 때 동일한 증상이 발생할 수 있으므로 프롬프트가 줄 중간에 표시되지만 쉘은 이를 인식하지 못합니다. 이 경우 이는 해당 명령을 실행한 후에만 발생하며 지속적으로 발생하지는 않습니다.
행이 잘못 표시되면 명령 redisplay
또는 clear-screen
(기본값은 Ctrl+ 에 바인딩됨)로 수정됩니다.L
답변2
나는 같은 문제가 있었고 여기에서 해결책을 찾았습니다.https://github.com/robbyrussell/oh-my-zsh/issues/5157#issuecomment-226031519. .~/.zshrc
export LC_CTYPE=en_US.UTF-8
답변3
macOS의 iTerm 2에서 이 문제가 발생했습니다. 마침내 환경 설정->프로필->텍스트로 이동하여 "유니코드 버전 9 너비 사용"을 선택하여 문제를 해결했습니다.
답변4
ubuntu lts docker image() 를 사용하는 동안 이 문제에 직면했습니다 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