Terminal yeniden çizme sorunlarına neden olmadan zsh istemime nasıl yeni satır ekleyebilirim?


13

Benim zsh istemi ile küçük (ama sinir bozucu) bir sorunu düzeltmeye çalışıyorum. Gördüğüm sorun, GUI OS ortamında bir terminal kullandığımda (örneğin, OS X 10.7.2'de Terminal.app veya iTerm 2) ve terminal penceresini yeniden boyutlandırdığımda, terminalin ekstra istemlerle yeniden çizilmesi .

Sorunu aşağıdakileri içeren temiz bir .zshrc'de çoğalttım:

export PROMPT=">
"

Açıkçası, bu iki satırlı bir dosya. Dize, birkaç ( kuşkusuz eski ) yerlerde okudum gerçek bir satırsonu gitmek için bir yoldur. Bu, terminal penceresini yeniden boyutlandırana kadar çalışır, bu noktada yinelenen bilgi istemi dizeleriyle sonlanırım. Örneğin, yeni bir pencere açarsam, görüyorum ( *imlecim için bir yer tutucu kullanılıyor):

Last login: Wed Jan 25 19:05:06 on ttys000
>
*

Sonra pencereyi yeniden boyutlandırdığımda kısaltırım:

Last login: Wed Jan 25 19:05:06 on ttys000
>
>
>
>
*

Ekstra istem çıktısı sayısı, pencere boyutunu ne kadar değiştirdiğim ile kabaca orantılı görünüyor - genellikle dikey. Yeni satırı bilgi istemi dizesinden kaldırırsam sorun giderilir.

Yeni $(print ">\n")satırı denemek gibi çeşitli şeyleri denedim %{%}. Bunun newline komut istemi dizesinin ne kadar uzun sürdüğünü ya da bir şey çizdiğini varsayıyorum. Bu sorun düzeltilebilir mi yoksa onunla yaşamak zorunda mıyım?

Yanıtlar:


13

Bu sorun, ZSH'nin yeniden boyutlandırma olaylarında promosyonu nasıl yeniden yazdırdığı ve daha önce beni rahatsız etmesinden kaynaklanmaktadır. Çözüm, $PROMPTtek satır yapmak ve bir precmd kullanarak istemin ilk satırını yazdırmaktır.

Yani örneğinizde bu sadece şöyle olur:

precmd() { print ">" }
export PROMPT=""

veya print ifadesinde hızlı genişletme içeren daha karmaşık bir örnek için şu -rPparametreleri kullanın :

precmd() { print -rP "%~" }
export PROMPT="%# "

Birden fazla precmd kaydınız varsa kullanmanız gerekir add-zsh-hook precmd(bkz. man zshcontrib).


1
Benim gibi yeni başlayanlar için, -rP'nin ne anlama geldiğini görebilirsiniz: cs.elte.hu/zsh-manual/zsh_17.html . Görünüşe göre printZSH'ye özgü bir komut ve Googling "linux print" size çok iyi sonuçlar vermiyor.
MikeWyatt

print, zsh'nin bir parçasıdır. Yardımını görebilirsiniz man zshbuiltins. Bash'in kendi eşdeğeri var, ancak uyumlu olduklarından emin değilim.
Jim Stewart

11

Böyle bir şeye ne dersin:

NEWLINE=$'\n'
PROMPT="Line1${NEWLINE}LINE2"

Bu çözümü kabul edilen cevaptan daha çok seviyorum. daha taşınabilir ve zsh ve bash ortamlarım arasında aynı komut dosyasını
korumama
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.