Dua karakter pertama diulang saat saya menggunakan Tab untuk melakukan penyelesaian. Pada tangkapan layar di bawah, cd
diulang.
Saya telah mencoba rxvt-unicdoe, xterm, terminator. Semua emulator terminal ini memiliki masalah ini.
Zsh versi 5.0.2, file konfigurasi di-zsh-saya
Jawaban yang Diterima:
Jika karakter pada baris perintah Anda terkadang ditampilkan pada offset, ini sering kali karena zsh telah menghitung lebar yang salah untuk prompt. Gejalanya adalah tampilan terlihat baik-baik saja selama Anda menambahkan karakter atau memindahkan karakter demi karakter tetapi menjadi kacau (dengan beberapa karakter muncul lebih ke kanan dari yang seharusnya) saat 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 diberitahu sebaliknya.
Satu kemungkinan adalah bahwa perintah Anda berisi urutan pelarian yang tidak dibatasi dengan benar. Urutan keluar yang mengubah warna atau aspek pemformatan teks lainnya, atau yang mengubah judul jendela atau efek lainnya, memiliki lebar nol. Mereka harus disertakan dalam konstruksi kurung kurawal persen %{…%}
. Lebih umum, urutan pelarian seperti %42{…%}
memberitahu zsh untuk berasumsi bahwa apa yang ada di dalam kurung kurawal adalah 42 karakter.
Jadi periksa pengaturan prompt Anda (PS1
, PROMPT
, atau variabel yang dirujuknya) dan pastikan bahwa semua escape sequence (seperti \e[…m
untuk mengubah atribut teks — perhatikan bahwa itu mungkin ada melalui beberapa variabel seperti $fg[red]
) berada 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 lebar nol dalam prompt yang harus diapit \[…\]
.
Kemungkinan lain adalah bahwa Prompt Anda berisi karakter non-ASCII dan zsh (atau aplikasi lain apa pun) dan terminal Anda memiliki gagasan yang berbeda tentang seberapa lebarnya. Ini dapat terjadi jika ada ketidakcocokan antara penyandian terminal Anda dan penyandian yang dideklarasikan di shell, dan kedua penyandian 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 adalah LC_CTYPE
, yang ditentukan dari variabel lingkungan LANGUAGE
, LC_ALL
, LC_CTYPE
dan LANG
(yang pertama dari ini yang ditetapkan berlaku). Perintah locale | grep LC_CTYPE
memberitahu Anda pengaturan Anda saat ini. Biasanya cara terbaik untuk menghindari masalah lokal adalah dengan membiarkan emulator terminal menyetel LC_CTYPE
, karena ia mengetahui penyandian apa yang diharapkannya; 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, bukan terus-menerus.
Terkait:Pengalihan IO dan perintah kepala?
Jika sebuah baris tidak ditampilkan dengan benar, perintah redisplay
atau clear-screen
(terikat ke Ctrl +L secara default) akan memperbaikinya.