Dua karakter pertama diulang sementara saya gunakan Tabuntuk menyelesaikan. Pada tangkapan layar di bawah ini, cd
diulangi.
Saya telah mencoba rxvt-unicdoe, xterm, terminator. Semua emulator terminal ini memiliki masalah ini.
Zsh versi 5.0.2, file konfigurasi on-my-zsh
zsh
line-editor
oh-my-zsh
jilen
sumber
sumber
Jawaban:
Jika karakter pada baris perintah Anda kadang-kadang ditampilkan pada offset, ini sering karena zsh telah menghitung lebar yang salah untuk prompt. Gejala-gejalanya adalah tampilan terlihat baik selama Anda menambahkan karakter atau memindahkan karakter demi karakter tetapi menjadi kacau (dengan beberapa karakter muncul lebih jauh dari seharusnya) ketika Anda menggunakan perintah lain yang menggerakkan kursor ( Home, penyelesaian, dll. ) atau ketika perintah tumpang tindih dengan baris kedua.
Zsh perlu mengetahui lebar prompt untuk mengetahui di mana karakter perintah ditempatkan. Diasumsikan bahwa setiap karakter menempati satu posisi kecuali dikatakan sebaliknya.
Satu kemungkinan adalah bahwa prompt Anda berisi urutan melarikan diri yang tidak dibatasi dengan benar. Escape sequence yang mengubah warna atau aspek pemformatan teks lainnya, atau yang mengubah judul jendela atau efek lainnya, memiliki lebar nol. Mereka perlu dimasukkan dalam konstruk persen-kawat gigi
%{…%}
. Lebih umum, urutan melarikan diri seperti%42{…%}
memberitahu zsh untuk mengasumsikan bahwa apa yang ada di dalam kawat gigi itu lebar 42 karakter.Jadi periksa pengaturan prompt Anda (
PS1
,,PROMPT
atau variabel yang mereka rujuk) dan pastikan bahwa semua urutan melarikan diri (seperti\e[…m
untuk mengubah atribut teks - perhatikan bahwa itu mungkin hadir melalui beberapa variabel seperti$fg[red]
) ada di dalam%{…%}
. Karena Anda menggunakan oh-my-zsh, periksa pengaturan Anda sendiri dan definisi yang Anda gunakan dari oh-my-zsh.Masalah yang sama muncul di bash. Ada urutan dengan lebar nol dalam prompt harus disertakan
\[…\]
.Kemungkinan lain adalah bahwa prompt Anda berisi karakter non-ASCII dan bahwa zsh (atau aplikasi lain) dan terminal Anda memiliki gagasan yang berbeda tentang seberapa lebar mereka. Ini bisa terjadi jika ada ketidaksesuaian antara pengkodean terminal Anda dan pengkodean yang dinyatakan dalam shell, dan dua pengkodean menghasilkan lebar yang berbeda untuk urutan byte tertentu. Biasanya Anda mungkin mengalami masalah ini saat menggunakan terminal non-Unicode tetapi mendeklarasikan lokal Unicode atau sebaliknya.
Aplikasi bergantung pada variabel lingkungan untuk mengetahui lokal; pengaturan yang relevan
LC_CTYPE
, yang ditentukan dari variabel lingkunganLANGUAGE
,LC_ALL
,LC_CTYPE
danLANG
(yang pertama ini yang ditetapkan berlaku). Perintahlocale | grep LC_CTYPE
memberi tahu Anda pengaturan Anda saat ini. Biasanya cara terbaik untuk menghindari masalah lokal adalah membiarkan emulator terminal diaturLC_CTYPE
, karena ia tahu apa yang diharapkan oleh pengkodean; tetapi jika itu tidak berhasil untuk Anda, pastikan untuk mengaturLC_CTYPE
.Gejala yang sama dapat terjadi ketika perintah sebelumnya menampilkan beberapa output yang tidak berakhir di baris baru, sehingga prompt ditampilkan di tengah baris tetapi shell tidak menyadarinya. Dalam hal ini itu hanya akan terjadi setelah menjalankan perintah seperti itu, tidak terus-menerus.
Jika suatu baris tidak ditampilkan dengan benar, perintah
redisplay
atauclear-screen
(terikat ke Ctrl+ Lsecara default) akan memperbaikinya.sumber
->
Saya kira ini diharapkanlocale
dan dariecho $PS1 | od -t x1
(dan hal yang sama dengan variabel lain yang digunakan oleh$PS1
).\e{7,8}
untuk menyimpan / mengembalikan status kursor.LC_CTYPE
yang memperbaikinya bagi saya. Saya mengaturnyaC
, ketika saya tidak menyetelnya , semuanya bekerja. Terima kasih.Saya memiliki masalah yang sama dan menemukan solusi saya di sini: https://github.com/robbyrussell/oh-my-zsh/issues/5157#issuecomment-226031519 . Masukkan saja yang berikut ke dalam
~/.zshrc
.export LC_CTYPE=en_US.UTF-8
sumber
locale
saya gunakan, tetapi itu berhasil untuk saya. Jawaban ini memberikan langkah-langkah yang diperlukan untuk Ubuntu.Saya memiliki masalah ini di iTerm 2 di macOS. Saya akhirnya menyelesaikannya dengan pergi ke Preferensi -> Profil -> Teks dan centang "Gunakan Unicode Versi 9 Lebar".
sumber
Saya mengalami masalah ini menggunakan gambar lts docker ubuntu (
ubuntu:latest
). Saya memperbaikinya dengan instruksi yang diberikan pada halaman yang sesuai: https://hub.docker.com/_/ubuntusumber