ZSH - keluaran seluruh sejarah?

37

Saya baru saja beralih dari bash ke zsh. Dalam bash, satu cara (selain pencarian rekursif) yang saya gunakan untuk menemukan perintah yang sebelumnya dijalankan adalah history | grep whatever, di mana whateverbit perintah yang saya ingat.

Di zsh, ini tidak berfungsi. historymengembalikan hanya beberapa item, walaupun .zsh_historyfile saya mengandung banyak entri, yang telah saya konfigurasikan untuk melakukannya.

Bagaimana saya bisa menampilkan seluruh sejarah saya, cocok untuk pencarian grep?

Nathan Long
sumber

Jawaban:

48

Sejarah menerima rentang entri zsh sebagai [first] [last]argumen, jadi untuk menjalankan semuanya history 0.

Untuk mendapatkan bantuan zsh (setidaknya dengan pikiran) ketikkan Alt-hperintah histori dan ini akan memunculkan bantuan untuk built-in.

Kyle Brandt
sumber
3
Besar! Itu default yang menjengkelkan bagi saya, jadi saya menambahkan ini ke file alias saya:alias history="history 0"
Nathan Long
7
Bukan itu penting tetapi daftar sejarah dimulai pada 1 dan bukan 0.
ggustafsson
2
Saya menggunakan alias ini sendiri:alias h='history 1 | grep'
Harald Nordgren
3
Ini sepertinya tidak berhasil bagi saya: saya ~/.zsh_historymemiliki 10066 baris, tetapi history 0(atau yang setara, fc -l 0), hanya mencetak 4999 baris.
jayhendren
2
Untuk history 1 | greporang - orang, saya harap Anda tahu tentang ctrl+r- trik / jalan pintas terbaik yang pernah ada!
Emil Vatai
9

Jawaban yang diterima benar, tetapi perlu dicatat bahwa Anda tidak perlu memanggil grepbiner eksternal untuk melakukan pencarian, karena kemampuan itu dimasukkan. Saya memiliki fungsi ini didefinisikan dalam .zshrc:

histsearch() { fc -lim "*$@*" 1 }

Catatan:

  • fcadalah zsh builtin yang mengontrol sejarah interaktif. historysetara dengan fc -l.

  • The -mbendera membutuhkan pola, yang harus dikutip.

  • The -ibendera menambahkan catatan waktu.

  • fcmemiliki banyak trik lainnya (mis. membatasi pencarian ke riwayat internal untuk sesi saat ini). Lihat zshbuiltins(1)halaman manual atau dokumentasi resmi .

wjv
sumber
Lebih baik lagi adalah menggunakan pola "* $ @ *" (perhatikan bintang tambahan) daripada "$ @" karena yang terakhir hanya menghasilkan kecocokan yang tepat.
Piotr Dobrogost
1
Anda sepenuhnya benar, @PiotrDobrogost! Saya tidak yakin bagaimana saya berhasil mengirimkan jawaban ini dalam keadaan yang saya lakukan - saya kira saya harus mengetik fungsi itu dari memori. Memang tidak terlalu bisa digunakan, jadi saya akan mengedit jawaban untuk memasukkan tanda bintang.
wjv
3

Lihatlah fzf . Ini membantu tidak hanya menemukan "partikel apa saja" dalam riwayat shell Anda, tetapi juga di tempat-tempat menarik lainnya, misalnya riwayat browser, riwayat direktori, dll.

fzf adalah pencari fuzzy baris perintah. Itu berarti Anda dapat mencari partikel atau fraksi dari apa yang Anda cari dan itu akan menampilkan koleksi yang cocok yang dapat Anda saring terus menerus. Ini benar-benar pengubah permainan.

The homepage dari penulis berisi sejumlah contoh ilustrasi.

Daniel Schaffrath
sumber
Pertimbangkan untuk menambahkan beberapa referensi ke jawaban ini yang mendukung apa yang Anda sebutkan.
Pimp Juice,
Selamat Datang di Pengguna Super! Silakan baca Cara merekomendasikan perangkat lunak untuk informasi minimum yang diperlukan dan saran tentang cara merekomendasikan perangkat lunak pada Pengguna Super. Agar jawaban Anda bermanfaat bahkan jika tautan yang disediakan memecah detail ini harus diedit ke dalam jawaban Anda.
Saya katakan Reinstate Monica