Saya baru saja mulai menggunakan Zsh dan itu luar biasa. Sayangnya, untuk proyek yang saya anggap sebagai proyek "utama" saya, semuanya berjalan lambat. Yang saya maksud adalah bahwa setiap kali saya menjalankan perintah - ls
, misalnya - ada penundaan sekitar lima detik antara waktu perintah dijalankan dan waktu saya dapat menggunakan terminal lagi.
Apa yang bisa berbeda dari repo yang satu ini yang membuat Zsh sangat lambat? Saya berasumsi ini adalah hal khusus Zsh karena tidak ada masalah sebelum saya mulai menggunakan Zsh. Saya mencoba melakukan a git clean
tetapi tidak membuat perbedaan yang mencolok.
Saya menggunakan Mac OS X jika itu penting.
Pembaruan: Ternyata baris saya .zshenv
inilah yang membuatnya lambat:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function
Jika saya mengomentari baris itu, dari butuh sekitar 3 detik menjadi sekitar 1 detik. Sayangnya, saya membutuhkan baris itu, karena banyak proyek saya menggunakan RVM. Saya tidak tahu harus berbuat apa sekarang.
Pembaruan 2 : ini tampaknya secara khusus merupakan hal oh-my-zsh. Jika saya tidak memuat ~/.oh-my-zsh/oh-my-zsh.sh
, saya tidak punya masalah.
~/.z*
file Anda ?Jawaban:
Anda dapat menambahkan ini ke konfigurasi git Anda dan zsh tidak akan memeriksa statusnya lagi
Penjelasan
Ada dua fungsi git pusat di lib / git.zsh :
git_prompt_info()
parse_git_dirty()
Setiap Metode memiliki sakelar konfigurasi git untuk menonaktifkannya:
oh-my-zsh.hide-status
oh-my-zsh.hide-dirty
Beberapa tema membuat kueri gitnya sendiri dan terkadang mengabaikan tanda ini .
sumber
oh-my-zsh.hide-dirty
. Mungkin telah berubah atau mungkin tema saya (agnoster) hanya menghormatihide-dirty
.--global
sangat berguna (lambat dalam tamu, cepat pada host) seperti yang dijelaskan di sini: stackoverflow.com/a/40943155/1092815 <3git config --add oh-my-zsh.hide-dirty 1
itu semua yang saya butuhkan untuk repo lambat saya.Oh_my_zsh tampaknya lambat untuk beberapa repo karena memeriksa status repo setelah setiap perintah. Perilaku ini dapat diganti di versi baru .oh_my_zsh. Cukup Uncomment baris berikut di .zshrc:
Setelah ini, mulai ulang terminal Anda atau jalankan perintah berikut:
sumber
git config --add oh-my-zsh.hide-status 1
mempercepat semuanya tetapi itu sepenuhnya menghapus status zsh dari VCS. Yang ini menyimpannya dan tetap mempercepatnya.git config --add oh-my-zsh.hide-dirty 1
berhasil untuk saya.git config --global --add oh-my-zsh.hide-dirty 1
untuk menonaktifkan ini untuk semua repo.DISABLE_UNTRACKED_FILES_DIRTY="true"
tidak melakukan hal yang sama denganoh-my-zsh.hide-dirty
pengaturan, meskipun serupa. Lihat kodenya di sini: github.com/ohmyzsh/ohmyzsh/blob/master/lib/git.zsh#L17 . TheDISABLE_UNTRACKED_FILES_DIRTY
Pengaturan hanya menambahkan--untracked-files=no
bendera kegit status
perintah, sedangkanoh-my-zsh.hide-dirty 1
pengaturan akan melewatkan seluruhgit status
perintah sama sekali. Saya merekomendasikan saran @ JohnathanElmore tentang pengaturan konfigurasi git global.Ini bisa menjadi tema yang memanggil hal-hal git dan rvm setelah setiap perintah.
Bagi saya, mengubah
ZSH_THEME="juanghurtadoto"
menjadiZSH_THEME="miloshadzic"
menghapus penundaan 2 detik setelah setiap perintah sepenuhnya.Tema dapat ditemukan di https://github.com/robbyrussell/oh-my-zsh/wiki/themes
sumber
Bagi saya itu lambat di VirtualBox (tamu) karena saya menggunakan folder yang disinkronkan. Saya masih ingin itu diaktifkan di OS X (host) yang cukup cepat. Alih-alih menggunakan pengaturan konfigurasi lokal yang disimpan dengan repo dan akan mengubahnya baik pada tamu dan tuan rumah, saya menggunakan pengaturan konfigurasi global hanya pada tamu :
Jika saya menginginkannya hanya untuk satu repo:
sumber
Ada berbagai cara untuk mempercepat
oh-my-zsh
, seperti yang dijelaskan dalam " zsh dimulai dengan sangat lambat ", membersihkan bagian plugin.Misalnya, entri blog " Memperbaiki kelambatan perintah oh-my-zsh git-svn " menyebutkan
parse_git_dirty
fungsi tersebut sebagai potensi masalah.sumber
Saya akhirnya menemukan jawabannya. Proyek saya memiliki
rake
folder dengan banyak file (seperti 20.000). Saya tidak tahu untuk apa folder itu ada di sana, tetapi saya menghapusnya, Zsh tidak lagi lambat, dan aplikasi saya sepertinya masih berfungsi.sumber
Jika Anda tidak peduli tentang program kontrol versi lain tetapi
git
, Anda dapat menonaktifkan semuavcs_info
di Anda*.zsh-theme
dan menggantinya dengangit
perintah asli .Misalnya saya men-tweak my
agnoster.zsh-theme
by:vcs_info
,edit kode dalam
prompt_git()
fungsi dari:ref="$vcs_info_msg_0_"
untukref="$(git branch 2>/dev/null | grep -Po '(?<=\* ).*$')"
Jadi, pada dasarnya, saya baru saja menonaktifkan semua
vcs_info
tindakan, dan sebagai gantinya menggunakangit
perintah asli untuk memeriksa status repo. Hasilnya, saya masih dapat melihat perintah git yang berguna dengan kecepatan secepat bekerja di direktori non-git. Dengan modifikasi kecil ini, zsh saya bisa bekerja 4-5x lebih cepat dalam git repo.Catatan: gunakan GNU grep bukan BSD grep.
sumber
Jawaban di atas tidak menyelesaikan masalah saya. Dalam kasus saya, fungsinya
git_prompt_status
memakan waktu terlalu banyak daripada yang lain. Jadi saya memodifikasi ~ / .oh-my-zsh / lib / git.zsh, menggantigit_prompt_status
fungsi dengan versi pengembalian awal saya:Meskipun saya menggunakan ZSH_THEME_GIT_PROMPT_MODIFIED sebagai tanda belum ditentukan, Anda dapat memilih status apa pun yang Anda suka untuk menunjukkannya atau menerapkan
git_prompt_status
fungsi yang jauh lebih cepat dalam kasus Anda.sumber
Untuk siapa pun yang menggunakan tema pesawat luar angkasa, tambahkan ini ke
.zshrc
:bekerja untuk saya. Jelas, Anda akan kehilangan status git di prompt terminal Anda.
Opsi git untuk tema ini dapat ditemukan di sini
sumber