Cara apa pun untuk mendapatkan daftar fungsi yang didefinisikan dalam zsh (seperti perintah alias untuk alias)

16

saya bisa mengetik

alias

dan dapatkan daftar alias yang ditentukan di zsh

Bagaimana saya bisa mendapatkan daftar nama fungsi yang didefinisikan dalam zsh?

Ketika saya mengetik "fungsi", jendela shell saya hang setelah menampilkan banyak fungsi, selalu berakhir pada

__rvm_checksum_none () {
    [[ -z "${_checksum_md5:-}" && -z "${_checksum_sha512:-}" ]]
}
__rvm_checksum_read () {

Yang sangat menjengkelkan adalah bahwa ini tidak akan berhenti dengan ctrl-c (menggunakan terminal item2 DAN).

iterm2: masukkan deskripsi gambar di sini

Gambar terminal memiliki masalah yang sama: masukkan deskripsi gambar di sini

justingordon
sumber
Biasanya daftar yang sudah dilakukan dengan functionsbuiltin. Apakah Anda mendapatkan output jika Anda tidak menentukan fungsi bermasalah (?) Terlebih dahulu unfunction __rvm_checksum_read:?
mpy
Bagaimana jika saya ingin mendapatkan daftar fungsi (bukan deklarasi penuh)? Jika saya membatalkan fungsi metode itu, __rvm_curl lain juga mengalami masalah.
justingordon
Lihat jawaban saya. Tetapi perilaku yang Anda gambarkan terdengar aneh ... jadi tidak menarik: Apakah listing lengkap berfungsi dengan emulator terminal lain? Bisakah Anda menggunakan fungsi bermasalah dengan sukses?
mpy
terminal memiliki masalah yang sama dengan butir 2. Jawaban di bawah ini LUAR BIASA. Sementara saya ingin tahu mengapa terminal hang hanya menggunakan perintah 'fungsi' (bahkan ketika piping kurang), apakah itu penting? Adakah alasan ini akan menyebabkan masalah?
justingordon
Saya kira ada beberapa urutan karakter yang sangat aneh dalam fungsi-fungsi ini yang mengacaukan terminal. Untuk mempersempit ini, Anda bisa mengarahkan output ke file functions > /tmp/foo. Jika ini masalah zsh, seharusnya ini juga masalah. Ketika itu masalah terminal, seharusnya tidak. Jika masalah Anda dapat mengganggu penggunaan sehari-hari - saya tidak bisa bilang, maaf.
mpy

Jawaban:

18

Dengan menyontek dengan melihat _functionsfungsi penyelesaian, saya dapat menjawab pertanyaan Anda:

Fungsi disimpan dalam array asosiatif functions, jadi untuk mendapatkan hanya nama fungsi ( kflag untuk kunci ) dalam urutan abjad ( oflag untuk pemesanan ) yang dapat Anda gunakan

print -l ${(ok)functions}
mpy
sumber