Zsh'ın boru sembolünden önce yer yemesini nasıl durdurabilirim?


18

Bir boşluk ve ardından '|'zsh komut satırında boru sembolü yazdığımda , zsh alanı yiyor ve boru sembolünü doğrudan önceki sözcüğün karşısına yerleştiriyor. Bunu yapmasını nasıl durdurabilirim? Olası stilistik kurallardan emin değilim, ancak okunabilirlik için boru sembolünün her iki tarafında bir boşluk seviyorum. Oh-my-zsh'ı kutunun dışında kullanıyorum.

Çözüm

Aşağıdaki mpy'nin cevabına dayanarak aşağıdaki çözümü kullandım:

Varsayılan olarak, zle / ohmyzsh içinde ZLE_REMOVE_SUFFIX_CHARS tanımsızdır. Tanımsız olduğunda, sanki şu şekilde davranır:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

~ / .Zshrc dosyasına şu tanımı ekledim:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(boru hariç) ve presto, mükemmel! sorun gitti.


1
önce zsh -f(yapılandırmanızı yüklemeyi atlamak için) düğmesini kullanarak bunu tekrar deneyin . Artık zsh'ın bunu yapmayacağını fark edeceksiniz. Daha sonra, buna neden olduğunu anlamak için (büyük olasılıkla) oh-my-zsh'ı kazmanız gerekecek ;-)
Francisco

Yanıtlar:


18

Ben size zaman anlamına varsayalım TABbir komut tamamlamak / bir boşluk otomatik olarak eklenir kütükadı ama bastıktan sonra |tekrar kaybolur. Aksi takdirde bu etkiyi yeniden üretemem.

Bununla birlikte, bu durumda çözüm,

ZLE_REMOVE_SUFFIX_CHARS=""

Açıklama biraz zor, bu yüzden sadece alıntı man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS Bu parametreler hat editörü tarafından kullanılır. Belirli durumlarda, tamamlama sistemi tarafından eklenen sonekler (genellikle boşluk veya eğik çizgi), ya bir sonraki düzenleme komutu eklenebilir bir karakter olmadığından ya da karakterin sonekin kaldırılmasını gerektiren olarak işaretlenmiş olması nedeniyle otomatik olarak kaldırılır.

Bu değişkenler, son ekin kaldırılmasına neden olacak karakter kümelerini içerebilir. Eğer ZLE_REMOVE_SUFFIX_CHARS ayarlanır, bu karakterleri soneki kaldırılan olmasına yol açar; eğer ZLE_SPACE_SUFFIX_CHARSayarlanırsa, bu karakterler soneki çıkarılıp bir alan ile değiştirilir neden olur.

Eğer ZLE_REMOVE_SUFFIX_CHARSayarlanmazsa, varsayılan davranış eşdeğerdir:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Eğer ZLE_REMOVE_SUFFIX_CHARSkümesidir ancak boş olduğunda, hiçbir karakter bu davranışı var. ZLE_SPACE_SUFFIX_CHARS öncelik taşır, böylece aşağıdakiler:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

karakterlere neden olur &ve |son eki kaldırır, ancak bir boşlukla değiştirir.

Farkı göstermek için, seçeneğin AUTO_REMOVE_SLASHyürürlükte olduğunu ve DIR dizininin sonuna eklenmiş olduğunu /ve ardından kullanıcının yazdığını varsayalım &. Varsayılan sonuç şudur DIR&. İle ZLE_REMOVE_SUFFIX_CHARSsette ama eklemeden &sonucudur DIR/&. İle ZLE_SPACE_SUFFIX_CHARSiçerecek şekilde ayarlanmıştır &sonucu olduğunu DIR &.

Belirli tamamlamaların, burada açıklanan değerleri geçersiz kılan kendi sonek kaldırma veya değiştirme davranışlarını sağlayabileceğini unutmayın.


Evet, siz
bahsetene
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.