Perintah sejarah di Zsh

61

Bagaimana Zsh melacak riwayat perintah?

Saya melihat dua file di direktori home saya: .zhistorydan .zsh_history. Apa perbedaan di antara mereka? File-file itu sepertinya berisi semua riwayat saya. Apakah Zsh terus menambahkan baris ke salah satu dari mereka selamanya ? Bukankah itu membuat pencarian sejarah terlalu lambat?

Dapatkah saya membuat tautan simbolik file-file ini dengan aman ke lokasi lain? (mis. repositori git untuk melacak perubahan pada histori)

Amelio Vazquez-Reina
sumber
Periksa opsi Anda ~/.zshrcdan / atau /etc/zshrcuntuk yang dijelaskan di sana zsh.sourceforge.net/Guide/zshguide02.html#l17
UVV

Jawaban:

78

Zsh menyimpan baris input (mungkin dengan informasi waktu) dalam file yang ditunjukkan oleh variabel HISTFILE. Ini harus berupa nama file absolut (jika tidak akan ditafsirkan relatif terhadap direktori apa pun saat ini pada saat itu).

Zsh tidak memiliki nilai bawaan bawaan untuk HISTFILE. Distribusi zsh dilengkapi dengan wizard pengaturan untuk pengguna baru yang memiliki nilai ~/.histfilebawaan, jadi inilah yang didapat pengguna zsh secara default. Oh-my-zsh hadir dengan HISTFILE=.zhistorypreset. Jadi sepertinya Anda mencoba zsh baik dengan pengaturan default dan dengan oh-my-zsh. Periksa .zshrc(atau tanggal file) Anda untuk melihat mana yang sedang Anda gunakan.

Bagaimana zsh membuka file, dan oleh karena itu apa yang terjadi jika itu adalah tautan simbolik, tergantung pada beberapa opsi.

  • Jika salah satu opsi append_history(diatur secara default), inc_append_historyatau share_historydisetel, atau ketika riwayat disimpan secara eksplisit fc -AI, zsh menambahkan ke file yang ada.
    Perhatikan bahwa bahkan di bawah pengaturan ini, zsh sesekali menimpa file seperti yang dijelaskan di bawah ini untuk memangkasnya menjadi ukuran.
  • Jika tidak, jika opsi hist_save_by_copydiatur (diatur secara default sejak zsh 5.0, tetapi tidak ada di 4.2), zsh menulis file sementara lalu memindahkannya di tempat ketika selesai. Dalam hal ini, jika file riwayat adalah tautan simbolik, file baru menggantikan tautan simbolik.
  • Kalau tidak, zsh akan menimpa file yang ada di tempatnya.

Daripada mengarahkan zsh ke tautan simbolis, atur HISTFILEke mana pun Anda ingin file riwayat berada.

Berapa banyak baris sejarah disimpan dikonfigurasi melalui variabel HISTSIZEdan SAVEHIST. HISTSIZEadalah jumlah maksimum baris yang disimpan dalam suatu sesi dan SAVEHISTmerupakan jumlah maksimum baris yang disimpan dalam file histori.

Untuk mendapatkan beberapa riwayat yang tersimpan sama sekali, Anda perlu mengatur keduanya HISTFILEdan SAVEHIST, karena nilai default SAVEHISTadalah 0. Anda mungkin ingin meningkatkan HISTSIZEjuga (pada zsh 5.0, standarnya hanya 30).

Gilles 'SANGAT berhenti menjadi jahat'
sumber