Çalışma dizini başına geçmiş tutma (kabuk oturumu başına cf.)


11

Modern bir kabuğun tarih özelliğini bir yola koymanın bir yolu var mı?

Çalışma bağlamlarım dosya sistemindeki yollar olarak ayrılır ve tekrar tekrar verilen komutlar gibi kabuk etkinliği paterni her bir 'projeden' farklı olma eğilimindedir. Geçmiş özelliğini geçerli yoldan (veya alt yoldan) verilen komutlara dahil edebilsem iyi olur.

Yanıtlar:


5

İle zshşunları yapabilirsiniz:

mkdir -p ~/.zsh/dirhist

Ve ~ / .zshrc'nize ekleyin:

HISTSIZE=1000
SAVEHIST=10000
setopt HIST_SAVE_NO_DUPS INC_APPEND_HISTORY
HISTFILE=~/.zsh/dirhist/${PWD//\//@}
chpwd() {
  [[ $PWD = $OLDPWD ]] || fc -Pp ~/.zsh/dirhist/${PWD//\//@}
}

chpwd()geçerli dizin her değiştiğinde çağrılır. Orada, böyle bir şey geçmiş dosyası sıfırlamak ~/.zsh/dirhist/@foo@barsizi cdetmek /foo/bar.


Kabuk kullanım alışkanlıklarımı değiştirmeyi gerektirmediği için bu yaklaşımı seviyorum ve birkaç gün içinde test iyi görünüyor.
sohocoke

10

Düzgün bir cevap değil bash, kabuk olarak kullanıyorsanız bir alternatif : içinde bazı takma adlar oluşturabilirsiniz .bashrc.

Örneğin:

alias a='cd /tmp/A ; history -w ; history -c ; export HISTFILE=/home/user/.a_history ; history -r $HISTFILE'
alias b='cd /tmp/B ; history -w ; history -c ; export HISTFILE=/home/user/.b_history ; history -r $HISTFILE'

Ardından, şunu yazarsanız a:

  1. proje dizininize taşınacaksınız
  2. geçerli geçmiş kaydedilecek ( history -w)
  3. bellekte tutulan geçmiş sıfırlanır ( history -c)
  4. proje geçmişi dosyası olarak ayarlanır /home/user/.a_historyve okunur ( history -r)

Sorumun eksik ayrıntı için özür dilerim, bir istek / gereksinimi ihmal ettiğini fark ettim. Yani: Takma adlar / işlevler kullanmayı hatırlamamayı tercih ederim; yani kapsam belirleme normalde kabukla etkileşim şeklimde bir eklenti olarak çalışmalıdır.
sohocoke

Dışa aktarmayın HISTFILE. Diğer programlara dışa aktarmak için bir neden yoktur ve ~ / .bashrc her etkileşimli bash işlemi için yürütülür, bu nedenle onu ayarlamak için kodunuz her bash'da çalıştırılacaktır. Genel olarak, kabuk tanımlı bir değişken varsayılan olarak dışa aktarılmazsa, nadiren dışa aktarmanız gerekir.
Chris Page

1

ZSH kullanıyorsanız, son zamanlarda bunu ele almak için yazdığım bu küçük eklentiye bir göz atın:

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

HISTFILEKomutları yürüttüğünüz her dizin için ayrı bir depolar ve dizinleri değiştirdiğinizde s chpwdarasında geçiş yapmak için bir kanca ekler HISTFILE.

Ayrıca HISTFILEorijinal "global" HISTFILEve HISTFILEgeçerli çalışma dizininiz arasında geçiş yapacak bir tuşa bağlayabileceğiniz bir zle widget'ı sağlar .

Başlangıçta Jim Hester'ın dizin başına tarih eklentisine dayanıyordu , ancak o zamandan beri bu eklentiyle ilgili birçok sorunu düzeltmek için baştan yeniden yazıldı.


Burada yalnızca bağlantı yanıtları önerilmemektedir, lütfen ne olduğunu / nasıl çalıştığını açıklayın.

0

İstediğinizi yapan bir ZSH eklentisi yazdım: https://github.com/tymm/zsh-directory-history

Diğer çözümlerin aksine eklentim otomatik olarak global tarihe geri döner. Bu, dizin geçmişi ile genel geçmiş arasında geçiş yapmak zorunda olmadığınız anlamına gelir.

Ancak diğer çözümler biraz daha hafif sanırım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.