Ben Tabtamamlamayı yaparken ilk iki karakter tekrarlandı . Aşağıdaki ekran görüntüsünde cd
, tekrarlanır.
Rxvt-unicdoe, xterm, terminator'ü denedim. Bütün bu terminal emülatörleri bu konuda var.
Zsh sürüm 5.0.2, yapılandırma dosyası -my-zsh
Ben Tabtamamlamayı yaparken ilk iki karakter tekrarlandı . Aşağıdaki ekran görüntüsünde cd
, tekrarlanır.
Rxvt-unicdoe, xterm, terminator'ü denedim. Bütün bu terminal emülatörleri bu konuda var.
Zsh sürüm 5.0.2, yapılandırma dosyası -my-zsh
Yanıtlar:
Komut satırınızdaki karakterler bazen bir ofsette görüntüleniyorsa, bunun nedeni genellikle zsh isteminin yanlış genişliğini hesaplamış olmasıdır. Belirtiler, imleci hareket ettiren diğer komutları ( Home, tamamlama, vb. ) Kullandığınızda karakter eklediğiniz veya karakter karakter taşıdığınız sürece ekranın iyi görünmesi ancak bozuk (bazı karakterlerin olması gerekenden daha doğru görünmesi) olur . ) veya komut ikinci bir satıra geçtiğinde.
Zsh komutun karakterlerinin nereye yerleştirildiğini bilmek için istemin genişliğini bilmelidir. Aksi söylenmediği sürece her karakterin bir pozisyon işgal ettiği varsayılmaktadır.
Bir olasılık, isteminizin uygun şekilde sınırlandırılmayan kaçış dizileri içermesidir. Metnin rengini veya diğer biçimlendirme yönlerini değiştiren veya pencere başlığını veya diğer efektleri değiştiren çıkış dizileri sıfır genişliğe sahiptir. Onlar bir yüzde parantez yapı içinde yer alması gerekir%{…%}
. Daha genel olarak, benzeri bir kaçış dizisi %42{…%}
, zsh'a parantezlerin içindekilerin 42 karakter genişliğinde olduğunu varsaymasını söyler.
Bu yüzden bilgi istemi ayarlarınızı ( PS1
, PROMPT
ya da referans gösterdikleri değişkenleri) kontrol edin ve tüm çıkış dizilerinin ( \e[…m
metin özelliklerini değiştirmek gibi - bunun gibi bir değişken aracılığıyla bulunabileceğini unutmayın $fg[red]
) içeride olduğundan emin olun %{…%}
. Oh-my-zsh kullandığınız için, hem kendi ayarlarınızı hem de oh-my-zsh'dan kullandığınız tanımları kontrol edin.
Aynı sorun bashta da ortaya çıkıyor. İçinde bulunması gereken bir istemde sıfır genişlikte diziler var \[…\]
.
Başka bir olasılık, isteminizin ASCII olmayan karakterler içermesi ve zsh'nin (veya başka herhangi bir uygulamanın) ve terminalinizin ne kadar geniş oldukları konusunda farklı bir fikre sahip olmasıdır. Bu, terminalinizin kodlaması ile kabukta belirtilen kodlama arasında bir uyumsuzluk varsa ve iki kodlama belirli bayt dizileri için farklı genişliklerle sonuçlanırsa olabilir. Genellikle, Unicode olmayan bir terminal kullanırken, ancak bir Unicode yerel ayarı veya tam tersini bildirirken bu sorunla karşılaşabilirsiniz.
Uygulamalar yerel ayarları bilmek çevre değişkenlerine dayanır; İlgili ayardır LC_CTYPE
ortam değişkenleri belirlenir, hangi LANGUAGE
, LC_ALL
, LC_CTYPE
ve LANG
(set olduğunu Bunlardan ilki geçerlidir). Komut locale | grep LC_CTYPE
size mevcut ayarlarınızı gösterir. Genellikle yerel sorunlardan kaçınmanın en iyi yolu, terminal emülatörünün set etmesine izin vermektir LC_CTYPE
; ancak bu sizin için işe yaramazsa, ayarladığınızdan emin olun LC_CTYPE
.
Aynı komut, önceki komut yeni bir satırda bitmeyen bazı çıktılar gösterdiğinde ortaya çıkar, böylece bilgi istemi satırın ortasında görüntülenir, ancak kabuk bunu anlamaz. Bu durumda, böyle bir komutu çalıştırdıktan sonra gerçekleşecek, ısrarla değil.
Bir çizgi düzgün görüntülenmezse, komut redisplay
veya clear-screen
( varsayılan olarak Ctrl+ ' ya bağlı L) düzeltecektir.
->
bence
locale
ve echo $PS1 | od -t x1
(tarafından kullanılan diğer değişkenle ve aynı şeyi $PS1
).
\e{7,8}
imleç durumlarını kaydetmek / geri yüklemek için kullanılır .
LC_CTYPE
benim için düzeltti. Ayarladım C
, ayarladıysam , her şey işe yaradı. Teşekkürler.
Aynı problemi yaşadım ve çözümümü burada buldum: https://github.com/robbyrussell/oh-my-zsh/issues/5157#issuecomment-226031519 . Basitçe aşağıdakileri içine koyun ~/.zshrc
.
export LC_CTYPE=en_US.UTF-8
MacOS'ta iTerm 2'de bu sorunu yaşadım. Tercihler -> Profiller -> Metin bölümüne giderek ve "Unicode Sürüm 9 Genişliklerini Kullan" seçeneğini işaretleyerek çözdüm.
Bu sorunu ubuntu lts docker image ( ubuntu:latest
) kullanarak anladım . İlgili sayfada verilen talimatlarla düzelttim: 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