sejarah tidak disimpan dalam zsh

16

Setiap kali saya membuka instance baru terminal, histori kosong. Mengapa demikian? Apakah saya perlu mengatur sesuatu? Dalam bash, tidak perlu untuk ini.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Tidak yakin tentang itu zsh, tetapi secara default bashmenulis ke file histori saat keluar , yang berarti jika Anda belum pernah menggunakannya dan membuka beberapa shell, mereka semua akan menunjukkan histori sekarang sampai setidaknya satu log keluar, dengan demikian menulis file histori nya.
DopeGhoti

Jawaban:

24

Bash dan zsh memiliki standar yang berbeda. Zsh tidak menyimpan riwayat ke file secara default.

Ketika Anda menjalankan zsh tanpa file konfigurasi, ini akan menampilkan antarmuka konfigurasi. Di antarmuka konfigurasi ini, pilih

(1)  Configure settings for history, i.e. command lines remembered
     and saved by the shell.  (Recommended.)

kemudian tinjau pengaturan yang diusulkan dan pilih

# (0)  Remember edits and return to main menu (does not save file yet)

Ulangi untuk submenu lainnya untuk (2) selesai, (3) ikatan tombol dan (4) opsi, lalu pilih

(0)  Exit, saving the new settings.  They will take effect immediately.

dari menu utama.

Pengaturan terkait riwayat yang disarankan adalah

HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
setopt appendhistory

Saya akan menggunakan nama yang berbeda untuk file histori, untuk menunjukkan itu adalah file histori zsh. Dan 1000 baris dapat ditingkatkan pada sistem modern.

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt appendhistory

Omong ~/.zshrc-omong, garis-garis ini masuk .

Gilles 'SANGAT berhenti menjadi jahat'
sumber
8

Meskipun jawaban yang ada benar, saya pikir mungkin ada baiknya menambahkan bahwa mungkin ada opsi yang lebih baik daripada appendhistorymenyimpan riwayat Anda dan ini SHARE_HISTORY.

Dari dokumen SHARE_HISTORY"keduanya mengimpor perintah baru dari file riwayat, dan juga menyebabkan perintah yang Anda ketik ditambahkan ke file riwayat". Ini berarti bahwa kerang juga mengetahui sejarah masing-masing tanpa harus menutup yang sekarang atau membuka yang baru.

Jadi, secara keseluruhan Anda akan mengaturnya seperti ini:

HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=1000
setopt SHARE_HISTORY
bert
sumber
1
+1 dan selamat datang di U / L, tetapi secara pribadi saya lebih suka INC_APPEND_HISTORY_TIME, yang menulis sejarah dari semua terminal seperti di atas, tetapi sejarah itu "tidak akan segera tersedia dari contoh lain dari shell yang menggunakan file histori yang sama". Ini lebih masuk akal bagi saya, karena dengan begitu saya dapat menelusuri sejarah masing-masing terminal secara mandiri, tetapi semuanya masih dicatat.
Sparhawk
2
Terima kasih! Ya itu cukup adil dan saya benar-benar bisa melihat mengapa INC_APPEND_HISTORY_TIMEmungkin lebih masuk akal. Saya mungkin seharusnya tidak mengatakan "lebih baik", saya kira itu hanya masalah preferensi pribadi pada saat ini!
bert
0

ketika Anda pertama kali beralih dari bash ke zsh, riwayat bash Anda tidak akan terbawa. Jadi semua riwayat yang Anda miliki di bash masih ada dalam file riwayat bash. zsh mulai merekam riwayat sejak Anda menggunakannya sebagai shell.

Jika Anda tidak mengaturnya untuk mengambil histori, Anda dapat menjalankan kembali wizard konfigurasi dan memberi tahu berapa banyak histori yang akan disimpan. Ubah nama ~ / .zshrc atau hapus untuk mendapatkan kesempatan baru di wisaya.

LocoCoyote
sumber
0

Jika tidak berfungsi, dan semua ini sudah ada, coba:

fc -W

Itu menulis sejarah saat ini ke file riwayat. Dan jika Anda mendapatkan:

zsh: locking failed for /home/username/.zsh_history: permission denied

maka sudah waktunya untuk memeriksa izin pada file dan direktori induk.

Chris Snyder
sumber