GNU/Linux >> Belajar Linux >  >> Linux

Karakter Pertama Perintah Diulang Di Tampilan Saat Menyelesaikan?

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.


Linux
  1. Bash Menimpa Baris Pertama, Ps1 Bash Prompt?

  2. Ke Mana File Pergi Saat Perintah Rm Dikeluarkan?

  3. Bagaimana Wildcard * Diinterpretasikan Sebagai Perintah?

  1. Sejarah Perintah Tampaknya Hilang 75 Baris Pertama?

  2. Bagaimana cara menambahkan ikon ke prompt bash

  3. Bagaimana cara mengatur warna command prompt di Bash?

  1. Menghasilkan distribusi ukuran file dari command prompt

  2. Bagaimana cara cepat mengubah kata pertama dalam perintah Bash?

  3. Bagaimana cara menangkap alamat IP pertama dari perintah ifconfig?