Riwayat per direktori di zsh

10

Saya senang menggunakannya zshsejak beberapa waktu sekarang, dan saya cukup puas dengan pengaturan riwayat saya, yaitu:

# Write to history immediately
setopt inc_append_history
# History shared among terminals
setopt share_history
# Save extended info in history
setopt extended_history
# Ignore duplicates
setopt hist_ignoredups

Tetapi sering terjadi bahwa saya perlu menggunakan perintah khusus di dalam beberapa direktori tertentu. Misalnya, ketika saya berada di dalam ~/my_projectsaya biasanya memohon make target1 && ./run1, tetapi ketika saya di dalam ~/second_projectsaya biasanya perlu make target2 && cat foobar | ./run2.

Yaitu: direktori berbeda, tetapi perintah serupa.

Jadi, saya biasanya cd ~/my_projectmengetik makedan kemudian mencari ke belakang dalam sejarah sampai saya menemukan apa yang saya butuhkan. Tetapi jika kebetulan saya bekerja second_project, ketika mencari sejarah saya akan menemukan beberapa perintah yang tidak saya butuhkan.

Jadi, pertanyaan saya: apakah ada plugin / pengaturan / sesuatu untuk zsh sehingga, ketika mencari di riwayat, perintah yang dipanggil dalam direktori saat ini ditampilkan terlebih dahulu?

Idealnya, setiap perintah histori pencocokan lainnya akan muncul setelah itu, secara opsional menentukan jumlah maksimum elemen prioritas.

Saya akan mencoba untuk menulis sesuatu seperti ini sendiri, tetapi saya masih tidak tahu bagaimana menulis plugin zsh khusus, bagaimana menangani sejarah dan sebagainya.

AkiRoss
sumber

Jawaban:

6

Ada plugin yang mengklaim untuk melakukan apa yang Anda cari, dinamai sesuai per plugin history direktori :

https://github.com/jimhester/oh-my-zsh/commit/baa187e4b903f39422a84b580e6e617ec3738e09

"Per-direktori-sejarah - melacak riwayat perintah sebelumnya baik per direktori saat ini dan secara global, dengan kemampuan untuk beralih di antara mereka dengan cepat, terikat ke ctrl-g." kata wiki mereka.

Saya tidak mengujinya sendiri (belum), tetapi menurut komentar itu harus bekerja.

superuser0
sumber
1
Terima kasih banyak! Saya akan mencobanya sebelum menerimanya, jika Anda tidak keberatan :)
AkiRoss
1
Sampai saya melewatkan sesuatu, plugin tidak persis apa yang saya butuhkan, dalam arti bahwa per direktori dan sejarah global saling beralih menggunakan ctrl-g(dan bukan berdasarkan prioritas seperti yang saya minta). Meskipun demikian, saya masih merasa ini sangat berguna dan jawaban yang bagus untuk pertanyaan saya, jadi, terima kasih :)
AkiRoss
Mungkin karena perubahan ZSH, tetapi plugin ini dalam versi saat ini tampaknya tidak menangani pengeditan riwayat ZSH dengan benar.
Owen
0

Saya baru saja menulis sebuah plugin kecil yang melakukan banyak hal dari apa yang dilakukan Jim Hester, tetapi menggunakan pendekatan berbeda yang memperbaiki banyak masalah yang tercantum dalam repo plugin GitHub:

https://github.com/ericfreese/zsh-cwd-history

Ia menyimpan HISTFILEdirektori terpisah untuk setiap direktori yang telah Anda jalankan, dan menambahkan sebuah chpwdhook untuk beralih di antara HISTFILEs ketika Anda mengubah direktori.

Ini juga menyediakan widget zle yang dapat Anda ikat ke penekanan tombol yang akan mengubah HISTFILEantara "global" asli Anda HISTFILEdan HISTFILEuntuk direktori kerja Anda saat ini.

Jadi, pertanyaan saya: apakah ada plugin / pengaturan / sesuatu untuk zsh sehingga, ketika mencari di riwayat, perintah yang dipanggil dalam direktori saat ini ditampilkan terlebih dahulu?

Plugin zsh-cwd-history saat ini tidak mendukung ini, tapi saya berharap untuk menambahkan dukungan untuk itu segera.

Eric Freese
sumber
0

Saya memiliki masalah yang sama persis dan menulis sebuah plugin ZSH yang menyelesaikannya: https://github.com/tymm/zsh-directory-history

Anda tidak perlu beralih secara manual antara riwayat global dan direktori saat menggunakan plugin saya.

Idealnya, setiap perintah histori pencocokan lainnya akan muncul setelah itu, secara opsional menentukan jumlah maksimum elemen prioritas.

Ini juga berfungsi di luar kotak dengan plugin saya.

tymm
sumber