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 lingkungan LANGUAGE
, LC_ALL
, LC_CTYPE
dan LANG
(yang pertama ini yang ditetapkan berlaku). Perintah locale | grep LC_CTYPE
memberi tahu Anda pengaturan Anda saat ini. Biasanya cara terbaik untuk menghindari masalah lokal adalah membiarkan emulator terminal diatur LC_CTYPE
, karena ia tahu apa yang diharapkan oleh pengkodean; tetapi jika itu tidak berhasil untuk Anda, pastikan untuk mengatur LC_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
atau clear-screen
(terikat ke Ctrl+ Lsecara default) akan memperbaikinya.