Setelah menginstal perangkat lunak baru, terminal yang sudah dibuka dengan zsh tidak akan tahu tentang perintah baru dan tidak dapat menghasilkan pelengkapan otomatis untuk itu. Tampaknya membuka terminal baru memperbaiki masalah, tetapi bisakah indeks (atau apa pun namanya) dibangun kembali sehingga pelengkapan otomatis akan berfungsi pada terminal lama?
Saya mencoba compinit
tetapi itu tidak membantu. Juga, adakah cara yang tidak bergantung pada shell? Sangat menyenangkan memiliki cara untuk memverifikasi jawabannya juga (kecuali untuk menghapus sesuatu dan menginstalnya kembali).
Yang saya maksud adalah setelah mengetik beberapa karakter nama perintah, saya bisa menekan Tab, dan zsh
harus melakukan sisanya untuk menarik nama lengkap.
zsh
autocomplete
phhehehe
sumber
sumber
Jawaban:
Untuk membangun kembali cache dari perintah yang dapat dieksekusi, gunakan
rehash
atauhash -rf
.Pastikan Anda belum menghapus
hash_list_all
opsi (ini menyebabkan akses disk semakin sedikit tetapi membuat pembaruan cache lebih jarang).Jika Anda tidak ingin harus mengetikkan perintah, Anda dapat memberi tahu zsh untuk tidak mempercayai cache-nya saat menyelesaikan dengan memasukkan baris berikut di
~/.zshrc
¹ Anda :Ada biaya kinerja, tetapi dapat diabaikan pada pengaturan desktop biasa hari ini. (Bukan jika Anda
$PATH
menggunakan NFS, atau sistem yang kekurangan RAM.)The
zstyle
perintah itu sendiri didokumentasikan dalamzshmodule
halaman manual. Nilai-nilai gaya yang didokumentasikan dalamzshcompsys
danzshcompwid
manusia halaman, atau Anda dapat membaca sumber (di sini, dari_command_names
fungsi). Jika Anda menginginkan beberapa dokumentasi yang dapat dibaca ... jika Anda menemukannya, beri tahu saya!¹ membutuhkan zsh≥4.3.3, terima kasih Chris Johnsen
sumber
PATH="$PATH"
juga akan melakukan pekerjaan.HASH_LIST_ALL
ditampilkan sebagai default dalam dokumentasi saya.Jika Anda mengalami masalah dalam mendapatkan "penyelesaian argumen" yang berfungsi untuk perintah baru maka compinit mungkin adalah perintah yang Anda butuhkan, namun memiliki mekanisme caching yang mungkin menyebabkan masalah Anda.
Dokumentasi untuk versi saya (4.3.10) mengatakan bahwa compinit menggunakan "dump file" yang di-cache
.zcompdump
,, untuk menyimpan fungsi penyelesaian yang dikompilasi untuk mempercepat pemanggilan berikutnya. Itu hanya membatalkan file dump ketika melihat perubahan dalam jumlah file penyelesaian (fpath
elemen file yang dimulai dengan#compdef …
atau#autoload …
). Agaknya menginstal perangkat lunak baru akan mengubah jumlah file penyelesaian seperti itu (dengan asumsi bahwa itu juga menginstal file lengkapi-otomatis zsh di tempat yang tepat), jadi saya berharap datarancompinit
berfungsi. Jika Anda berada dalam situasi di mana tidak berfungsi, Anda mungkin perlu mem-bypass atau membatalkan file dump secara manual.Untuk melewati menggunakan file dump, gunakan
compinit -D
; ini hanya akan mempengaruhi shell saat ini.Untuk membangun kembali file dump, hapus dan jalankan kembali
compinit
:Ini akan memengaruhi shell saat ini, shell yang ada saat ini
compinit
, dan shell yang akan datang.sumber
zim
mengizinkan penggunaan file dump per-host. Jika demikian, hapus juga$zcompdump_file
bersama.zcompdump
.