คุ้มค่าที่จะเปลี่ยนเป็น zsh เพื่อการใช้งานทั่วไป [ปิด]


192

เชลล์เริ่มต้นใน Mac OS X คือbashซึ่งโดยทั่วไปฉันยินดีที่จะใช้ ฉันแค่เอามันไปให้ มันจะดีจริงๆถ้ามันเติมข้อมูลให้โดยอัตโนมัติและฉันก็ได้ยินเรื่องดีๆzshในเรื่องนี้ แต่ฉันไม่มีความชอบที่จะใช้เวลาหลายชั่วโมงกับการตั้งค่าเพื่อปรับปรุงการใช้บรรทัดคำสั่งของฉันด้วยจำนวนเล็กน้อยเนื่องจากชีวิตของฉันในบรรทัดคำสั่งนั้นไม่เลวเลย

(ตามที่ฉันเข้าใจมันbashสามารถกำหนดค่าให้เติมข้อมูลอัตโนมัติได้อย่างชาญฉลาดยิ่งขึ้นนี่คือการกำหนดค่าที่ฉันไม่ได้สนใจทั้งหมด)

การเปลี่ยนไปใช้zshแม้ในกรณีจำนวนน้อยจะทำให้ชีวิตของฉันง่ายขึ้นหรือไม่ หรือเป็นเพียงเปลือกหอยที่ดีกว่าถ้าคุณใส่ในเวลาที่จะเรียนรู้ว่าทำไมมันถึงดีกว่า? (ตัวอย่างจะดีเช่นกัน:))


@ Rodney Amato & @ Vulcan Eager ให้เหตุผลสองข้อที่ดีในการติดbashและเปลี่ยนไปตามลำดับzshและสลับไปดูเหมือนว่าฉันจะต้องตรวจสอบทั้งสองอย่าง! โอ้ดี:)

มีใครบ้างที่มีความเห็นจากทั้งสองด้านของการโต้แย้ง?


14
เนื่องจาก zsh คือ (เกือบ) superset of bash คุณสามารถเริ่มต้นด้วยการย้ายไปที่ zsh และใช้มันเช่น bash จากนั้นคุณสามารถเรียนรู้อัญมณี zsh ทีละนิด
orip

หากคุณมีการปรับแต่ง bash นิดหน่อยและคุณมักจะใช้เชลล์ใน emacs นี่ก็ดูไม่สำคัญ ฉันโพสต์คำถามที่เกี่ยวข้อง: stackoverflow.com/questions/13326879/ …
justingordon

เพียงสิ่งที่ผมชอบเกี่ยวกับ zsh คือว่า (อย่างน้อยใน Ubuntu) คุณจะต้องกำหนดค่าตัวเองครั้งแรกที่คุณเริ่มต้นมัน (แทนมันให้ค่าเริ่มต้นที่มีเหตุผลบางอย่างที่คุณสามารถทำได้ในภายหลังกับคนจรจัด) หากคุณสามารถเอาชนะมันได้ zsh ก็ดีที่สุด!
zrajm

คำตอบ:


68

สำหรับการใช้งานทั่วไปคุณควรใช้ bash และติดตั้ง bash เสร็จ

การติดตั้งนั้นง่ายมากคว้า bash-completion-20060301.tar.gz จากhttp://www.caliban.org/bash/index.shtml#completionและแยกมันด้วย

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

จากนั้นคัดลอกไฟล์ bash_completion / bash_completion ไปยัง / etc ด้วย

sudo cp bash_completion/bash_completion /etc

ซึ่งจะแจ้งให้คุณใส่รหัสผ่าน คุณอาจต้องการสร้างไดเร็กทอรี /etc/bash_completion.d สำหรับสคริปต์ที่สมบูรณ์เพิ่มเติมใด ๆ (ตัวอย่างเช่นฉันมีสคริปต์ git ที่สมบูรณ์อยู่ในนั้น)

เมื่อเสร็จสิ้นขั้นตอนสุดท้ายคือตรวจสอบให้แน่ใจว่าไฟล์. bash_profile ในโฮมไดเร็กตอรี่ของคุณมี

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

ในนั้นเพื่อโหลดไฟล์เสร็จเมื่อคุณเข้าสู่ระบบ

เพื่อทดสอบเพียงแค่เปิดเทอร์มินัลใหม่และลองทำ cvs ให้เสร็จและควรแสดงตัวเลือก cvs ในรายการความสำเร็จ


ฉันพยายามข้างต้น แต่หลังจากนั้นเมื่อใดก็ตามที่ฉันเริ่มทุบตีฉันได้รับ 4 "ผู้ประกอบการ unary คาดว่า" และ 4 "ข้อโต้แย้งมากเกินไป" ข้อผิดพลาด
AnnanFay

12
หากคุณกำลังใช้ Homebrew ใน OSX brew install bash-completionคุณสามารถเรียกใช้
นาธาน Villaescusa

3
Bash-Completion2 ดีกว่า! ใน OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin

85

ส่วนตัวฉันรัก zsh

โดยทั่วไปคุณอาจไม่สังเกตเห็นความแตกต่างระหว่างมันกับ bash จนกว่าคุณจะต้องการทำสิ่งต่าง ๆ อย่างรวดเร็วซ้ำซาก:

  • **/*.c ตัวอย่างเช่น.

หรือใช้นามแฝงต่อท้ายเพื่อเชื่อมโยงโปรเจ็กต์เฉพาะกับส่วนต่อท้ายที่แตกต่างกันเพื่อให้คุณสามารถ "รัน" พวกเขาโดยตรง ด้านล่างนามแฝงช่วยให้คุณ "รัน" ไฟล์ที่มา C ที่พร้อมท์โดยเพียงแค่พิมพ์./my_program.c- vim ./my_program.cซึ่งจะทำงานตรงตามถ้าคุณพิมพ์ (เรียงลำดับเทียบเท่ากับการดับเบิลคลิกที่ไอคอนไฟล์)

  • alias -s c=vim

หรือพิมพ์ชื่อไฟล์ที่แก้ไขวันนี้:

  • print *(e:age today now:)

คุณอาจจะสามารถทำทุกสิ่งเหล่านี้ในทุบตี แต่ประสบการณ์ของฉันกับ zsh คือว่าถ้ามีสิ่งที่ฉันต้องการจะทำผมอาจจะสามารถหาได้ในzsh รัก ฉันเจอหนังสือ ' จาก Bash ถึง Z-Shell ด้วย ' มีประโยชน์จริงๆ

การเล่นด้วยใจที่มีตัวเลือกจำนวนมากอย่างเหลือเชื่อนั้นสนุกดีเช่นกัน


1
สองตัวอย่างแรกที่นี่ไม่ได้มีความหมายอะไรเลยสำหรับฉัน (ผู้ใช้ทุบตีชั่วคราวที่พิจารณาเปลี่ยนเป็น zsh) - คุณช่วยอธิบายเพิ่มเติมเกี่ยวกับความหมายของ "recursive globbing" หรือว่าคุณหมายถึงอะไร
aaronsnoswell

5
@aaronsnoswell: "Recursive globbing" หมายถึงการค้นหาไดเรกทอรีย่อยและไดเรกทอรีย่อยทั้งหมดสำหรับไฟล์ที่มีชื่อตรงกับรูปแบบเฉพาะ Bash ไม่ได้ทำตามค่าเริ่มต้น คุณต้องการfindหรือlocateค้นหาซ้ำ แต่เมื่อคุณปล่อยให้โปรแกรมอื่นทำการค้นหาคุณจะสูญเสียขอบเขตระหว่างชื่อ (เว้นแต่คุณจะระมัดระวัง) รวมถึงการเข้าถึงความสามารถในการวนรอบภายในของเชลล์และโดยทั่วไปแล้วต้องทำในสิ่งที่โปรแกรมอื่นให้ หรือท่อเอาท์พุทผ่านโปรแกรมเช่นgrep, awkหรือsed(ทั้งหมดค่อนข้างซับซ้อนในสิทธิของตนเอง)
cHao

6
วันนี้คุณสามารถตั้งค่าglobstarตัวเลือกเป็น bash เพื่ออนุญาตให้ทำการค้นหาแบบเรียกซ้ำตามที่กล่าวไว้ข้างต้น ค่อนข้างแน่ใจว่าไม่ใช่กรณีที่คำตอบนี้ถูกเขียนขึ้น
cHao

ด้วยglob_star_shortในzshตอนนี้คุณสามารถทำซึ่งถูกตีความว่าเป็น**.c **/*.c
PythonNut

ฉันใช้zsh 5.3และไปcommand not found: ageด้วยprint *(e:age today now:)
Timo

38

เปลี่ยนเป็น zsh คุณจะสามารถเข้าถึง:

  1. zmv: คุณทำได้: zmv '(*).mp3' '$1.wma'สำหรับไฟล์หลายพันไฟล์
  2. zcalc: เครื่องคิดเลขที่สะดวกสบายที่สุดดีกว่า bcเครื่องคิดเลขที่สะดวกสบายมากดีกว่า
  3. zparseopts: ซับในหนึ่งสำหรับการแยกวิเคราะห์ตัวเลือกที่ซับซ้อนโดยพลการที่กำหนดให้กับสคริปต์ของคุณ
  4. autopushd: คุณสามารถทำได้popdหลังจากcdมีการเปลี่ยนแปลงกลับไปยังไดเรกทอรีก่อนหน้าของคุณ
  5. รองรับจุดลอยตัว มีความจำเป็นเป็นครั้งคราว
  6. สนับสนุนแฮช บางครั้งพวกเขาเป็นเพียงคุณสมบัติที่สำคัญ

17
ตัวอย่างสำหรับ zmv ควรเป็น zmv '(*). mp3' '$ 1.wma' โปรดแก้ไขให้ถูกต้องงานนำเสนอที่ประมาทดังกล่าวอาจสร้างความสับสนและหงุดหงิดต่อผู้ที่ไม่มีประสบการณ์
qed

5
@ TravisBear autoload zcalc; zcalc(แม้ว่าฉันจะพิมพ์เองpythonทุกครั้งที่ต้องการเครื่องคิดเลข)
ฟรานซิสโก

9
"autopushd: คุณสามารถทำ popd หลัง cd เพื่อเปลี่ยนกลับไปยังไดเรกทอรีก่อนหน้าของคุณ" ไม่เท่ากับซีดีนั้น -
minhaz1

4
zmvและzcalcไม่สามารถใช้งานได้ทันที ยังไม่ชัดเจนว่าzmvเป็นเพียงการเปลี่ยนชื่อไฟล์ ฉันคิดว่าคุณอาจแปลงรูปแบบ ฉันไม่รู้ว่าการสนับสนุน "แฮช" หมายถึงอะไร โพสต์นี้ดูเหมือนว่าเป็น "ประโยชน์" สำหรับคนที่รู้จัก zsh แล้ว
mpen

1
@ Mark ในกรณีนี้ "hash" มีความหมายเหมือนกันกับ "associative array" bash4 เผยแพร่เพียงไม่กี่เดือนก่อนคำตอบนี้
chepner

13

หากทุกสิ่งที่คุณต้องการใช้ ZSH เพื่อให้เสร็จสมบูรณ์ดีกว่าการกำหนดค่าค่อนข้างง่าย วางสิ่งนี้ใน ~ / .zshrc ของคุณ:

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

อย่างไรก็ตามมันคุ้มค่าที่จะตรวจสอบคุณสมบัติที่ยอดเยี่ยมอื่น ๆ ของ ZSH ตัวอย่างข้างต้นจะให้พรอมต์ที่ค่อนข้างดีพร้อมการดำเนินการที่ดี หากคุณไม่ต้องการเล่นซอกับการกำหนดค่า แต่ต้องการดูว่า ZSH สามารถทำอะไรให้คุณได้บ้าง Google สำหรับ "zshrc" และคุณจะได้รับพร้อมที่จะใช้การกำหนดค่าเพื่อเริ่มต้น


3
สิ่งนี้จะเพิ่มความสมบูรณ์ให้กับสิ่งใด ฉันไม่ชอบการเพิ่มเนื้อหาแบบสุ่มโดยไม่รู้ว่ากำลังทำอะไรอยู่
mpen

6

zsh มีสิ่งกำหนดค่าคอนโซล gui คุณสามารถตั้งค่าได้อย่างรวดเร็วและง่ายดายโดยไม่ต้องยุ่งยากกับไฟล์กำหนดค่า ฉันไม่คิดว่าคุณจะต้องใช้เวลามากในการตั้งค่าอาจเป็น 10 วินาทีด้วยการใช้ค่าเริ่มต้นดังนั้นไปข้างหน้าและลองใช้


10
คุณเข้าถึง "console gui" นี้ได้อย่างไร
mpen

มันเป็นสิ่งแรกที่คุณเห็นเมื่อคุณโหลดzshโดยไม่มี dotfiles ที่เกี่ยวข้อง ในการรับด้วยตนเองลองautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz

3

Staale กำลังพูดถึงตัวช่วยสร้างเช่นโปรแกรม (CUI) ซึ่งจะทำงานอัตโนมัติในครั้งแรกที่คุณเรียกใช้ zsh เพียงตอบคำถามดูและเปลี่ยนค่าเริ่มต้นและกำหนดค่าสำหรับคุณ

IBM developerWorks มีแหล่งข้อมูลที่ดีเยี่ยมบน zsh

ฉันไม่ได้ใช้คุณสมบัติขั้นสูงมากและจนถึงตอนนี้ฉันยังไม่ได้พบกับความแตกต่างที่ร้ายแรงซึ่งควรขัดขวางคนที่มาจากการทุบตี

ตัวอย่างบางส่วน:

  • !? pattern <Tab> จะเติมข้อความอัตโนมัติให้กับคำสั่งสุดท้ายในรูปแบบการจับคู่ประวัติ มีประโยชน์มาก.

  • คุณสามารถกำหนดค่าพรอมต์บน RHS การใช้งานครั้งเดียวคือการให้พรอมต์ความกว้างคงที่ทางด้านซ้ายมือเพื่อให้คำสั่งทั้งหมดเข้าแถวอย่างดีในขณะที่แสดง pwd (หรืออะไรก็ได้ที่มีความกว้างของตัวแปร) เป็นพรอมต์ด้านขวา

  • คุณสามารถเปลี่ยนเส้นทางการป้อนข้อมูลจากหลาย ๆ ไฟล์ (ยังไม่ลอง): cat <file1 <file2 <file3

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.