2010-05-13 19 views
5

पर वर्तमान निर्देशिका को सहेजना मैं इसे Saving current directory to bash history पर पूछे गए लेकिन zsh खोल के भीतर प्राप्त करना चाहता था। मैं पहले किसी भी zsh trickry नहीं किया है, लेकिन अभी तक मेरे पास है:zsh इतिहास

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

अभी मैं आदेश एक लॉग फ़ाइल के लिए निर्देशिका का नाम के साथ एनोटेट सहेजें। यह मेरे लिए ठीक काम करता है। बस सोचा कि इतिहास बफर में प्रतिस्थापन करने का एक तरीका हो सकता है।

+3

संभावित डुप्लिकेट [मैं कैसे (स्क्रिप्ट से) zsh कमांड इतिहास में कुछ जोड़ सकता हूं?] (Http://stackoverflow.com/questions/2816225/how-can-i-from-a-script-add -sethingething-to-the-zsh-command-history) –

उत्तर

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

आपकी कमांड लाइन में ### ${PWD} जोड़ देगा। सबसे अच्छा समाधान नहीं है जिसका आप उपयोग कर सकते हैं, लेकिन यह काम करता है।

युपीडी: उत्तर @Dennis विलियमसन की टिप्पणी के आधार पर:

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

धन्यवाद डेनिस और ज़िक्स। यह उम्मीद के रूप में काम करता है। डेनिस, यह एक डुप्लिकेट है। किसी भी तरह से यह सवाल मेरी खोज के दौरान दिखाई नहीं दिया। Bash/zsh इतिहास पर आपका आलेख helpfule और जानकारीपूर्ण है। – Sandeep

+0

क्या कोई मुझे बता सकता है कि क्यों 'fc -p' की आवश्यकता है? ऐसा क्यों है कि जब मैं यहां 'fc -p' नहीं डालता, तो इतिहास सूची प्रत्येक आदेश के लिए दो प्रविष्टियां प्राप्त करती है (पहला पथ सहित, और दूसरी प्रविष्टि सादा है)? –

+0

मैं '#' वर्णों को पार्स करने की कोशिश कर रहे zsh के साथ संघर्ष कर रहा था, लेकिन 'सेटोपेट इंटरैक्टिव कॉमेंट्स' पर स्विच करने से संबोधित किया गया और अब मैं इस सेटअप से खुश हूं। यह आदेश इतिहास को थोड़ा सा फटकारता है क्योंकि आप इसे पार करते हैं, जो मुझे दुखी करता है। –

3

बजाय यह हर आदेश मैं अपने precmd की beginging के लिए निम्न() फ़ंक्शन यह स्टोर करने के लिए जब मैं निर्देशिका बदलने जोड़ा पर स्टोर:

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

प्रत्येक निर्देशिका को एक नई निर्देशिका से चलाने के लिए इतिहास में '## dir ## dir name' स्टैंडअलोन लाइन जोड़ता है।

+1

मुझे 'प्रिंट -s' $ PWD # पथ "पसंद है, इस तरह से मैं इस इतिहास प्रविष्टि को सामान्य सामान्य रूप से ला सकता हूं, और यह तैयार है मेरे लिए उस पथ पर ऑटो-सीडी में एंटर दबाएं (यह 'zsh' की एक विशेषता है, यदि आप केवल एक पथ प्रदान करते हैं तो यह आपके लिए' cd'/'pushd' है)। ** कैसे ** मुझे विश्वास है कि यह दृष्टिकोण मौलिक रूप से त्रुटिपूर्ण है: यदि आपके पास दो शब्द खुले हैं, प्रत्येक अलग-अलग डीआईआर में हैं, तो अपने संबंधित डीआईआर रखें, लेकिन उनके आदेशों को जारी करने के बीच स्विच करें, यह जानना संभव नहीं है कि उन आदेशों का क्या वर्णन हुआ में! यह असफल है :( –