Perintah sejarah di zsh

32

Saat ini saya telah mengatur zsh sedemikian rupa sehingga riwayat perintah dibagi antara semua sesi dengan segera.

Katakanlah saya memiliki emulator terminal terbuka dengan dua tab, masing-masing dengan sesi zsh, A1 dan A2. Jika saya memasukkan ls -la di A1, dan kemudian pergi ke A2 dan tekan tombol panah, saya akan melihat ls -la di command prompt.

Saya ingin mengubahnya sehingga sesi tidak berbagi sejarah perintah satu sama lain meskipun ketika Anda memulai sesi baru itu mendapatkan semua riwayat sebelumnya dari semua sesi sebelumnya.

Seni
sumber
Saya melakukannya secara teratur. Namun ada banyak pertanyaan yang masih belum memiliki jawaban yang memuaskan.
Seni
Pertanyaan bagus dan jawaban bermanfaat. Saya pikir ini adalah hal iTerm2 khusus. Semoga komentar ini akan seseorang dengan cara ini jika mereka membuat asumsi yang sama.
Alan H.

Jawaban:

40

Anda mungkin sudah INC_APPEND_HISTORYsiap.

The INC_APPEND_HISTORYpilihan, dari man zshoptions:

Opsi ini berfungsi seperti APPEND_HISTORY kecuali bahwa baris riwayat baru ditambahkan ke $ HISTFILE secara bertahap (segera setelah dimasukkan), daripada menunggu hingga shell keluar.

Opsi yang Anda inginkan adalah APPEND_HISTORY:

APPEND_HISTORY Jika ini diatur, sesi zsh akan menambahkan daftar histori mereka ke file histori, alih-alih menggantinya. Dengan demikian, beberapa sesi zsh paralel semua akan memiliki entri baru dari daftar riwayatnya ditambahkan ke file riwayat, dalam urutan keluarnya. File akan tetap ditulis ulang secara berkala untuk memangkasnya ketika jumlah baris tumbuh 20% di luar nilai yang ditentukan oleh $ SAVEHIST (lihat juga opsi HEMAT HEMAT DENGAN SALINAN).

Anda dapat membaca tentang opsi ini di man zshoptions, man zshallatau online di sini .

Untuk mengaturnya, dalam ~/.zshrcatau serupa Anda, Anda harus memiliki:

setopt APPEND_HISTORY

Ketahuilah bahwa, jika Anda menggunakan oh-my-zsh secara default, saya yakin, INC_APPEND_HISTORYdigunakan. Saya tidak 100% yakin di mana hal-hal dimuat, tetapi jika oh-my-zshopsi menimpa yang Anda tetapkan ~/.zshrc, Anda dapat bermain-main di~/.oh-my-zsh/lib/history.zsh

simont
sumber
echo unsetopt INC_APPEND_HISTORY >~/.oh-my-zsh/custom/history.zsh
youfu
Bagaimana iTerm2 dapat dikonfigurasi untuk mengembalikan riwayat masing-masing tab setelah restart (untuk zsh dan oh-my-zsh)?
Googol
10

Untuk menambah jawaban yang diterima, jika Anda menggunakan oh-my-zsh, Anda mungkin memiliki SHARE_HISTORYopsi yang diaktifkan secara default.

Untuk mencapai pemisahan antara cangkang yang sedang berjalan + seluruh riwayat yang digabungkan dalam terminal yang baru dibuka, Anda harus berkomentar atau menghapus baris berikut:

setopt share_history # share command history data

dari ~/.oh-my-zsh/lib/history.zsh

siergiej
sumber
Dalam kasus saya, path file history.zsh adalah~/.antigen/repos/https-COLON--SLASH--SLASH-github.com-SLASH-robbyrussell-SLASH-oh-my-zsh.git/lib/history.zsh
suzanshakya
3
Cara lain untuk melakukannya adalah dengan memasukkan setelah unsetopt share_historyAnda dimuat. Didokumentasikan di sini . .zshrcoh-my-zsh
balasan
terima kasih @counterbeing yang memperbaikinya untuk saya - Anda harus membuat jawaban yang terpisah, itu cara termudah untuk memperbaikinya
jcollum