Layak beralih ke zsh untuk penggunaan biasa? [Tutup]

192

Shell default di Mac OS X adalah bash, yang biasanya senang saya gunakan. Saya hanya menerima begitu saja. Akan sangat bagus jika itu secara otomatis menyelesaikan lebih banyak barang , dan saya sudah mendengar hal-hal baik tentang zshini. Tapi saya tidak benar-benar memiliki kecenderungan untuk menghabiskan berjam-jam mengutak-atik pengaturan untuk meningkatkan penggunaan baris perintah saya dengan jumlah kecil, karena hidup saya di baris perintah tidak terlalu buruk.

(Seperti yang saya pahami, bashjuga dapat dikonfigurasikan untuk melengkapi otomatis dengan lebih cerdik. Ini adalah konfigurasi yang tidak saya sukai.)

Akankah beralih ke zsh, bahkan dalam sejumlah kecil kasus, membuat hidup saya lebih mudah? Atau itu hanya kulit yang lebih baik jika Anda meluangkan waktu untuk mempelajari mengapa itu lebih baik? (Contoh juga akan bagus :))


@ Rodney Amato & @ Vulcan Eager memberikan dua alasan bagus untuk masing-masing tetap berpegang pada bashdan beralih ke zsh. Sepertinya saya harus menyelidiki keduanya! Baiklah:)

Adakah yang berpendapat dari kedua belah pihak?

Will Robertson
sumber
14
Karena zsh adalah (hampir) superset dari bash, Anda dapat mulai dengan berpindah ke zsh dan menggunakannya seperti bash. Kemudian Anda bisa mempelajari permata zsh sedikit demi sedikit.
orip
Jika Anda memiliki sedikit kustomisasi bash dan Anda sering menggunakan shell di dalam emacs, ini sepertinya tidak sepele. Saya memposting pertanyaan terkait: stackoverflow.com/questions/13326879/…
justingordon
Satu- satunya hal yang saya tidak suka tentang zsh adalah bahwa (setidaknya di Ubuntu) Anda harus mengkonfigurasinya sendiri saat pertama kali Anda memulainya (alih-alih memberikan beberapa default waras yang nantinya dapat Anda mainkan). Jika Anda bisa melupakannya, zsh adalah yang terbaik!
zrajm

Jawaban:

68

Untuk penggunaan biasa, Anda mungkin lebih baik bertahan dengan bash dan hanya menginstal penyelesaian bash.

Menginstalnya cukup mudah, ambil bash-completion-20060301.tar.gz dari http://www.caliban.org/bash/index.shtml#completion dan ekstrak dengan

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

lalu salin file bash_completion / bash_completion ke / etc with

sudo cp bash_completion/bash_completion /etc

yang akan meminta kata sandi Anda. Anda mungkin ingin membuat direktori /etc/bash_completion.d untuk skrip penyelesaian tambahan (misalnya saya memiliki skrip penyelesaian git di sana).

Setelah ini dilakukan, langkah terakhir adalah memastikan file .bash_profile di direktori home Anda sudah

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

di dalamnya untuk memuat file penyelesaian saat Anda login.

Untuk mengujinya cukup buka terminal baru, dan coba selesaikan pada cvs dan itu akan menunjukkan kepada Anda opsi cvs dalam daftar penyelesaian.

Rodney Amato
sumber
Saya mencoba di atas, namun setelah itu setiap kali saya memulai bash saya mendapatkan 4 "kesalahan operator yang tidak diharapkan" dan 4 "terlalu banyak argumen" kesalahan.
AnnanFay
12
Jika Anda menggunakan homebrew di OSX, Anda dapat menjalankannya brew install bash-completion.
Nathan Villaescusa
3
Bash-Completion2 lebih baik! Pada OS X:brew tap homebrew/versions; brew install bash-completion2
Zearin
85

Secara pribadi, saya suka zsh.

Secara umum, Anda mungkin tidak akan melihat perbedaan antara itu dan bash, sampai Anda ingin dengan cepat melakukan hal-hal seperti globbing rekursif:

  • **/*.c sebagai contoh.

Atau gunakan alias sufiks untuk mengaitkan prog spesifik dengan sufiks yang berbeda, sehingga Anda dapat "mengeksekusi" mereka secara langsung. Alias ​​di bawah ini memungkinkan Anda "menjalankan" file sumber C saat diminta dengan cukup mengetik ./my_program.c- yang akan berfungsi persis seperti saat Anda mengetik vim ./my_program.c. (Sortir setara dengan mengklik dua kali pada ikon file.)

  • alias -s c=vim

Atau cetak nama file yang dimodifikasi hari ini:

  • print *(e:age today now:)

Anda mungkin dapat melakukan semua hal ini di bash, tetapi pengalaman saya dengan zsh adalah bahwa jika ada sesuatu yang ingin saya lakukan, saya mungkin dapat menemukannya di pecinta zsh . Saya juga menemukan buku ' From Bash to Z-Shell ' sangat berguna.

Bermain dengan pikiran banyak pilihan juga menyenangkan!

Mat
sumber
1
Dua contoh pertama di sini tidak berarti apa-apa bagi saya (pengguna bash kasual yang mempertimbangkan beralih ke zsh) - dapatkah Anda menguraikan apa yang dimaksud dengan "globbing rekursif", atau apa yang Anda maksud dengan "kaitkan prog spesifik dengan sufiks yang berbeda"?
aaronsnoswell
5
@ aaronsnoswell: "Pembalikan rekursif" berarti mencari subdirektori dan semua subdirektori untuk file yang namanya cocok dengan pola tertentu. Bash tidak melakukan itu secara default; Anda ingin findatau locatemencari secara rekursif. Tapi begitu Anda membiarkan program lain melakukan pencarian, Anda kehilangan batasan antara nama (kecuali Anda hati-hati) serta akses ke kemampuan globbing internal shell, dan pada dasarnya harus melakukan apa yang disediakan oleh program lain, atau pipa output melalui program seperti grep, awkatau sed(semua cukup kompleks di kanan mereka sendiri).
cao
6
Saat ini, Anda dapat mengatur globstaropsi dalam bash untuk memungkinkan pencarian berulang seperti yang disebutkan di atas. Cukup yakin bukan itu masalahnya ketika jawaban ini ditulis.
cao
Dengan glob_star_shortin zsh, Anda sekarang dapat melakukannya **.c, yang diartikan sebagai **/*.c.
PythonNut
Saya menggunakan zsh 5.3dan bergaul command not found: agedenganprint *(e:age today now:)
Timo
38

Beralih ke zsh. Anda akan memiliki akses ke:

  1. zmv: Anda dapat melakukan: zmv '(*).mp3' '$1.wma'untuk ribuan file.
  2. zcalc: Kalkulator yang sangat nyaman, lebih baik daripada bc.
  3. zparseopts: Satu-liner untuk parsing opsi kompleks sewenang-wenang yang diberikan kepada skrip Anda.
  4. autopushd: Anda selalu dapat melakukan popdsetelah cdmengubah kembali ke direktori sebelumnya.
  5. Dukungan titik mengambang. Itu dibutuhkan dari waktu ke waktu.
  6. Dukungan hash. Terkadang mereka hanya fitur utama.
Zearin
sumber
17
Contoh untuk zmv adalah zmv '(*). Mp3' '$ 1.wma'. Harap perbaiki, presentasi ceroboh seperti itu dapat membingungkan dan membuat frustrasi bagi yang tidak berpengalaman.
qed
5
@ TravisBear autoload zcalc; zcalc(walaupun saya sendiri mengetik pythonsetiap kali saya membutuhkan kalkulator).
Francisco
9
"autopushd: Anda selalu dapat melakukan popd setelah cd untuk kembali ke direktori sebelumnya." Bukankah itu setara dengan itu hanya cd -?
minhaz1
4
zmvdan zcalctidak tersedia di luar kotak. Tidak jelas itu zmvhanya mengganti nama file; Saya pikir Anda mungkin telah mengubah formatnya. Saya tidak tahu apa artinya mendukung "hash". Posting ini sepertinya hanya "berguna" untuk orang-orang yang sudah tahu zsh.
mpen
1
@ Mark Dalam kasus ini, "hash" identik dengan "array asosiatif". bash4 dirilis hanya beberapa bulan sebelum jawaban ini.
chepner
13

Jika semua yang Anda ingin gunakan untuk ZSH adalah penyelesaian yang lebih baik, konfigurasinya cukup mudah. Tempatkan ini di ~ / .zshrc Anda:

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

Namun, ada baiknya memeriksa semua fitur hebat lainnya dari ZSH. Contoh di atas akan memberi Anda prompt yang cukup sederhana dengan penyelesaian yang baik. Jika Anda tidak ingin mengutak-atik konfigurasi, tetapi ingin melihat apa yang ZSH dapat lakukan untuk Anda, Google untuk "zshrc" dan Anda akan mendapatkan beberapa konfigurasi siap pakai untuk memulai.

Jkramer
sumber
3
Hal-hal apa yang akan ditambahkan untuk penyelesaian ini? Saya tidak suka menambahkan barang secara acak tanpa mengetahui apa yang dilakukannya.
mpen
6

zsh memiliki konfigurasi hal konsol gui. Anda dapat mengaturnya dengan cepat dan mudah tanpa harus mengutak-atik file konfigurasi. Saya tidak berpikir Anda akan memerlukan banyak waktu untuk mengaturnya, mungkin 10 detik hanya dengan menggunakan default, jadi silakan dan coba saja.

Staale
sumber
10
Bagaimana Anda mengakses "konsol gui" ini?
mpen
Biasanya hal pertama yang Anda lihat ketika Anda memuat zshtanpa dotfiles terkait. Untuk mendapatkannya secara manual, cobaautoload -U +X zsh-newuser-install; zsh-newuser-install -f
Adam Katz
3

Staale berbicara tentang program seperti penyihir (CUI) yang autoruns saat pertama kali Anda menjalankan zsh. Jawab saja beberapa pertanyaan, lihat / ubah default dan konfigurasinya untuk Anda.

IBM developerWorks memiliki sumber daya hebat di zsh.

Saya belum menggunakan fitur yang sangat canggih dan sejauh ini saya belum menemukan perbedaan serius yang seharusnya menghambat seseorang yang datang dari bash.

Beberapa contoh:

  • !? pattern <Tab> akan melengkapi secara otomatis ke perintah terakhir dalam pola pencocokan riwayat. Sangat berguna.

  • Anda dapat mengkonfigurasi prompt pada RHS. Satu penggunaan adalah untuk menjaga prompt lebar tetap di sisi kiri sehingga semua perintah berbaris dengan baik saat menampilkan pwd (atau apa pun dengan lebar variabel) sebagai prompt sisi kanan.

  • Anda dapat mengarahkan input dari banyak file (belum mencoba ini): cat <file1 <file2 <file3

Agnel Kurian
sumber