2010-05-13 23 views
5

Burada, Saving current directory to bash history sorgusunun aynısını yapmak istedim ama zsh kabuğu içinde istedim. Daha önce herhangi bir zsh trickry yapmadım ama şu ana kadar var: Geçerli dizini zsh geçmişine kaydetme

function precmd { 
hpwd=$history[$((HISTCMD-1))] 
if [[ $hpwd == "cd" ]]; then 
cwd=$OLDPWD 
else 
cwd=$PWD 
fi 
hpwd="${hpwd% ### *} ### $cwd" 
echo "$hpwd" >>~/.hist_log 
} 

Şu anda bir günlük dosyasının dizin adıyla açıklamalı komutu kaydedin. Bu benim için iyi çalışıyor. Sadece tarih arabelleğinde bir değişiklik yapmanın bir yolu olabileceğini düşündüm.

+3

olası bir kopyası [zsh komut geçmişine nasıl bir şey ekleyebilirim?] (Http://stackoverflow.com/questions/2816225/how-can-i-from-a-script-add -komut-to-the-zsh-komut-tarih) –

cevap

6
function _-accept-line() { 
    [[ -z "${BUFFER" ]] || [[ "${BUFFER}" =~ "### ${(q)PWD}\$" ]] || BUFFER="${BUFFER} ### ${PWD}" 
    zle .accept-line 
} 
zle -N accept-line _-accept-line 

Komut satırına ### ${PWD} eklenir. Kullanabileceğiniz en iyi çözüm değil, ama işe yarıyor.

UPD: @Dennis Williamson'ın Yorum dayalı Cevap:

function zshaddhistory() { 
    print -sr "${1%%$'\n'} ### ${PWD}" 
    fc -p 
} 
+0

Teşekkürler Dennis ve Zyx. Beklendiği gibi çalışır. Dennis, bu bir kopya. Her nasılsa bu soru benim arama sırasında ortaya çıkmadı. Bash/zsh tarihine dair yazınız yararlı ve bilgilendirici. – Sandeep

+0

Birisi bana neden fc -p'nin gerektiğini açıklayabilir mi? Neden burada 'fc -p' yerleştirmediğimde, tarih listesi her komut için iki girdi (ilk önce yolunu içeren ve ikinci giriş düz olanı) kazanır mı? –

+0

"#" karakterlerini ayrıştırmaya çalışırken zsh ile uğraşıyordum, ancak "interaktif bilgisayarlarda" geçişi devreye giriyordu ve şimdi bu kurulumdan memnun oldum. Komut geçmişini, siz onu geçerken iyi bir şekilde şişiriyor, bu da beni üzüyor. –

3

Ben dizinleri değiştirdiğinizde saklamak() fonksiyonunun benim precmd beginging için aşağıdaki eklendi her komuta saklayın yerine:

if [ "$LAST_DIR" != "$PWD" ] 
    then 
      print -s "##dir## $PWD" 
      LAST_DIR=$PWD 
    fi 

tarihine bir komut yeni bir dizinden her çalıştırıldığında bir '## dir ## dir adı' bağımsız çizgisini ekler.

+1

"print -s" $ PWD # Path "' türünü seviyorum, bu şekilde bu tarih girişini tüm normal gibi açabilirim ve hazır Benim için otomatik-cd'ye Enter tuşuna basmak için (bu bir 'zsh' özelliği, eğer sadece bir yol sağladıysanız' '' '' '' '' '' '' '' '' 's' '' '' '' '' '' '' s '' '' '' '' '' '' ''. ** NASIL ** Bu yaklaşımın temel olarak kusurlu olduğuna inanıyorum: Eğer her biri farklı direkte açık iki teriminiz varsa, o zaman kendi direktiflerini koruyun, ancak aralarında komutlar verin, bu komutların hangi direktiflerin olduğunu bilmek mümkün değildir. içinde! Bu başarısız :( –