Günlük kullanım için zsh'a geçmeye değer mi? [kapalı]


192

Mac OS X'teki varsayılan kabuk, bashgenellikle kullanmaktan mutluluk duyuyorum. Sadece bunu kabul ediyorum. Yine de daha fazla şeyi otomatik olarak tamamlaması gerçekten güzel olurdu ve zshbu konuda iyi şeyler duydum . Ancak, komut satırı kullanımımı küçük bir miktar artırmak için ayarlarla uğraşmak için gerçekten zaman harcamak istemiyorum, çünkü komut satırındaki hayatım o kadar da kötü değil.

(Anladığım kadarıyla, bashdaha akıllı bir şekilde otomatik olarak tamamlanacak şekilde de yapılandırılabilir.

zshAz sayıda durumda bile geçiş yapmak hayatımı kolaylaştıracak mı? Yoksa neden daha iyi olduğunu öğrenmek için zaman ayırırsanız daha iyi bir kabuk mudur? (Örnekler de iyi olurdu :))


@ Rodney Amato & @ Vulkan istekli vermek sopa sırasıyla iki iyi nedenler bashanahtarı ve zsh. Her ikisini de araştırmam gerekecek gibi görünüyor! Oh iyi:)

Argümanın her iki tarafından da görüş sahibi olan var mı?


14
Zsh (neredeyse) bash'ın bir üst kümesi olduğundan, zsh'a geçip bash gibi kullanmaya başlayabilirsiniz. O zaman zsh taşlarını bir seferde biraz öğrenebilirsiniz.
orip

Biraz bash özelleştirme varsa ve sıklıkla emacs içindeki kabuğu kullanıyorsanız, bu önemsiz görünmüyor. İlgili soruyu gönderdim: stackoverflow.com/questions/13326879/…
justingordon

Sadece ben zsh sevmediğim şey gerekecek (Ubuntu üzerinde en az) (daha sonra birlikte tinker üzerinde can bazı aklı başında varsayılan sağlama bunun yerine) bunu başlatmak ilk kez kendiniz yapılandırmak olmasıdır. Eğer üstesinden gelebilirseniz, zsh en iyisidir!
zrajm

Yanıtlar:


68

Rahat kullanım için muhtemelen bash ile yapışmak ve sadece bash tamamlama yüklemek daha iyidir.

Kurulumu oldukça kolaydır, http://www.caliban.org/bash/index.shtml#completion adresinden bash-completion-20060301.tar.gz dosyasını alın ve

tar -xzvf bash-completion-20060301.tar.gz

sonra bash_completion / bash_completion dosyasını / etc dizinine kopyalayın.

sudo cp bash_completion/bash_completion /etc

sizden şifrenizi girmeniz istenir. Muhtemelen herhangi bir ek tamamlama komut dosyası için /etc/bash_completion.d dizini yapmak isteyeceksiniz (örneğin git git komut dosyası var).

Bu yapıldıktan sonra son adım, ana dizininizdeki .bash_profile dosyasının

if [ -f /etc/bash_completion ]; then
     . /etc/bash_completion 
fi

giriş yaptığınızda tamamlama dosyasını yüklemek için.

Test etmek için sadece yeni bir terminal açın ve cvs üzerinde tamamlamayı deneyin ve tamamlamalar listesinde cvs seçeneklerini göstermelidir.


Yukarıda denedim, ancak daha sonra bash başlattığınızda 4 "tekli operatör bekleniyor" ve 4 "çok fazla argüman" hataları alıyorum.
AnnanFay

12
OSX'te homebrew kullanıyorsanız çalıştırabilirsiniz brew install bash-completion.
Nathan Villaescusa

3
Bash-Completion2 daha iyi! OS X'te:brew tap homebrew/versions; brew install bash-completion2
Zearin

85

Şahsen, zsh'ı seviyorum.

Genellikle, özyinelemeli globbing gibi şeyleri hızlı bir şekilde yapmak istediğinizde, muhtemelen bash ve bash arasındaki farkı fark etmezsiniz:

  • **/*.c Örneğin.

Veya, belirli programları farklı soneklerle ilişkilendirmek için son ek takma adlarını kullanın, böylece bunları doğrudan "yürütebilirsiniz". Aşağıdaki diğer ad, bir C kaynak dosyasını yalnızca yazarak komut satırında "çalıştırmanıza" olanak tanır ./my_program.c- tam olarak yazdığınız gibi çalışır vim ./my_program.c. (Bir dosyanın simgesine çift tıklamak için eşdeğer olanı sıralayın.)

  • alias -s c=vim

Veya bugün değiştirilen dosyaların adlarını yazdırın:

  • print *(e:age today now:)

Muhtemelen tüm bunları bash'da yapabilirsiniz, ancak zsh ile yaşadığım deneyim, yapmak istediğim bir şey varsa, muhtemelen zsh-aşıklarda bulabileceğimdir . Ayrıca ' Bash'ten Z-Shell'e ' kitabını gerçekten faydalı buluyorum .

Şaşırtıcı derecede çok sayıda seçenekle oynamak çok eğlenceli!


1
Buradaki ilk iki örnek benim için bir şey ifade etmiyor (zsh'a geçmeyi düşünen sıradan bir bash kullanıcısı) - "özyinelemeli globbing" in ne anlama geldiğini veya "belirli ekleri farklı soneklerle ilişkilendirme" hakkında ne ifade edebilir misiniz?
aaronsnoswell

5
@aaronsnoswell: "Özyinelemeli globbing" , adları bir alt dizinde ve tüm alt dizinlerinde , adları belirli bir kalıpla eşleşen dosyalar için arama yapmak anlamına gelir . Bash bunu varsayılan olarak yapmaz; Eğer olur findya locateözyinelemeli arama yapmak. Ancak başka bir programın aramayı yapmasına izin verdikten sonra, isimler arasındaki sınırları (dikkatli değilseniz) ve kabuğun dahili globbing yeteneklerine erişiminizi kaybedersiniz ve temel olarak ya diğer programın sağladığı ile yapmak zorunda kalırsınız, veya boru gibi bir program aracılığıyla çıkış grep, awkya sed(kendi başlarına tüm oldukça karmaşık).
cHao

6
Bu günlerde, globstaryukarıda belirtildiği gibi özyinelemeli aramaya izin vermek için bash seçeneğini ayarlayabilirsiniz . Yine de bu cevabın yazıldığı zaman böyle olmadığından eminim.
cHao

İle glob_star_shortde zsh, artık yapabileceği **.colarak yorumlanır hangi **/*.c.
PythonNut

Kullandığım zsh 5.3ve almak command not found: ageileprint *(e:age today now:)
Timo

38

Zsh'ye geçin. Şunlara erişebileceksiniz:

  1. zmv: Yapabilirsiniz: zmv '(*).mp3' '$1.wma'binlerce dosya için.
  2. zcalc: Son derece konforlu hesap makinesi, daha iyi bc.
  3. zparseopts: Senaryonuza verilen rastgele karmaşık seçenekleri ayrıştırmak için bir astar.
  4. autopushd: Hep yapabilirsiniz popdsonracd önceki dizine geri dönmek için .
  5. Kayan nokta desteği. Zaman zaman gereklidir.
  6. Karma desteği. Bazen sadece önemli bir özelliktir.

17
Zmv örneği zmv '(*) olmalıdır. Mp3' '$ 1.wma'. Lütfen düzeltin, böyle dikkatsiz sunum deneyimsiz olanlar için kafa karıştırıcı ve sinir bozucu olabilir.
qed

5
@TravisBear autoload zcalc; zcalc(her ne kadar kendim pythonbir hesap makinesine ihtiyacım olduğunda yazıyorum).
Francisco

9
"autopushd: Her zaman önceki dizine geri dönmek için cd'den sonra popd yapabilirsiniz." Bunun eşdeğeri sadece cd - değil mi?
minhaz1

4
zmvve zcalckutunun dışında kullanılamaz. Sadece zmvdosyaları yeniden adlandırdığı açık değil ; Biçimi dönüştürüyor olabileceğinizi düşündüm. "Hash" desteğinin ne anlama geldiğini bile bilmiyorum. Bu yazı zaten zsh bilen insanlar için "yararlı" gibi görünüyor.
mpen

1
@Mark Bu durumda, "hash", "ilişkisel dizi" ile eş anlamlıdır. bash4 bu cevaptan sadece birkaç ay önce yayınlandı.
chepner

13

ZSH'yi kullanmak istediğiniz tek şey daha iyi bir tamamlama ise, yapılandırma oldukça kolaydır. Bunu ~ / .zshrc'nize yerleştirin:

autoload -U zutil      # [1]
autoload -U compinit   # [2]
autoload -U complist   # [3]
compinit

Ancak, ZSH'nin diğer tüm harika özelliklerini kontrol etmeye değer. Yukarıdaki örnek, iyi bir tamamlama ile oldukça basit bir istem verecektir. Konfigürasyonlarla uğraşmak istemiyorsanız, ancak ZSH'nin sizin için neler yapabileceğini görmek istiyorsanız, "zshrc" için Google'ı kullanın ve başlamak için bazı yapılandırmaları kullanmaya hazır hale geleceksiniz.


3
Bu ne tür şeyleri tamamlayacak? Ne yaptığını bilmeden rastgele bir şeyler eklemeyi sevmiyorum.
Mart'ta

6

zsh bir konsol gui yapılandırma şeyine sahiptir. Yapılandırma dosyalarıyla uğraşmak zorunda kalmadan kolayca ve hızlı bir şekilde ayarlayabilirsiniz. Ayarlamak için çok fazla zamana ihtiyacınız olacağını düşünmüyorum, sadece varsayılanları kullanarak muhtemelen 10 saniye, bu yüzden devam edin ve deneyin.


10
Bu "konsol gui" ye nasıl erişirsiniz?
Mart'ta

Genellikle zshilgili nokta dosyaları olmadan yüklediğinizde ilk gördüğünüz şeydir. Manuel olarak almak için deneyinautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz

3

Staale, zsh'yi ilk çalıştırdığınızda otomatik olarak çalışan program (CUI) gibi bir sihirbazdan bahsediyor. Sadece bazı soruları cevaplayın, varsayılanları görüntüleyin ve değiştirin ve sizin için yapılandırın.

IBM developerWorks'ün zsh üzerinde mükemmel kaynakları vardır.

Çok gelişmiş özellikler kullanmadım ve şimdiye kadar bash'tan gelen birini engellemesi gereken ciddi farklılıklarla karşılaşmadım.

Bazı örnekler:

  • !? pattern <Sekme> geçmiş eşleme modelindeki son komuta otomatik olarak tamamlanacaktır. Çok kullanışlı.

  • RHS'de bir bilgi istemi yapılandırabilirsiniz. Bir kullanım, sol tarafta sabit bir genişlik istemi tutmaktır, böylece pwd'yi (veya değişken genişlikte herhangi bir şeyi) sağ taraftaki istem olarak görüntülerken tüm komutlar güzel bir şekilde sıralanır.

  • Girişi birden çok dosyadan yeniden yönlendirebilirsiniz (henüz denemek için): cat <file1 <file2 <file3

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.