2013-02-02 51 views
9

में पिछले तर्क का विस्तार करें मुझे लगता है अपने आप को अक्सर की तरह साधारण आदेशों करना चाहते:zsh: वर्तमान कमांड लाइन

cp /really/long/path/from/file.txt /really/long/path/to/file.txt

हालांकि मैं पहले से ही अक्सर !! और !$ तरह शॉर्टकट का उपयोग कर, यह करने के लिए अच्छा होगा वर्तमान कमांड लाइन में अंतिम तर्क का संदर्भ देने में सक्षम हो (और इसे वैकल्पिक रूप से संपादन के लिए विस्तृत करें)। क्या समय बचाने के लिए zsh, या कुछ अन्य समकक्ष चाल में ऐसा करने का कोई तरीका है?

उत्तर

21

सामान्य में (मेरे मामले में उदाहरण के लिए), आप इतिहास विस्तार का उपयोग वर्तमान कमांड लाइन में अलग-अलग शब्दों का उल्लेख कर सकते।

$ cp /really/long/path/from/file.txt !#:1:s/from/to 

या

$ cp /really/long/path/from/file.txt !#:$:s/from/to 

कमांड लाइन के लिए इतिहास विस्तार !# है अब तक टाइप किया है। :1 उस विस्तार में पहला तर्क निर्दिष्ट करता है (वें मामले में, लंबी फ़ाइल पथ)। :$ का उपयोग अंतिम तर्क को संदर्भित करने के बजाय किया जा सकता है, इस बात से स्वतंत्र है कि अब तक कितने तर्क टाइप किए गए हैं। :s/from/to चयनित शब्द पर टेक्स्ट प्रतिस्थापन करता है।

$ cp /really/long/path/{from,to}/file.txt 

(नोट::

इस कार्य के लिए, आप भी ब्रेस विस्तार उपयोग कर सकते हैं इन दोनों bash से लिया जाता है, लेकिन यह भी zsh में काम करते हैं वहाँ अन्य zsh -only चाल है कि मैं कर रहा हूँ हो सकता है। इसके बारे में पता नहीं है।)

+0

बिल्कुल सही, उन दो विशेषताओं को मैं वही था जो मैं ढूंढ रहा था। मुझे लगता है कि ब्रेस विस्तार शायद इसके बारे में जाने का सबसे अच्छा तरीका है, खासकर जब से मुझे भूलने की संभावना है! # # का मतलब है वर्तमान लाइन – robbles

1

आप टैब पर ज़श पर सामग्री का विस्तार करने के लिए हिट कर सकते हैं। उदाहरण के लिए:

मैं इस आदेश को पहले

% ls /etc 

और यह अगली पंक्ति में करते हैं मुझे क्या करना

% !!<Tab> 

!!

% ls /etc 

तो मैं यह कर सकते हैं से बदल दिया जाएगा जिस तरह से मैं चाहता हूं इसे संपादित करें। यह * और पर्यावरण चर जैसे कई चीजों के लिए काम करता है। उदाहरण $TERM के बाद टैब कुंजी दोहन के लिए, (यह विस्तार) का स्थान ले लेगा साथ xterm-256color

+0

यह सहायक है - मुझे नहीं पता था कि आप वर्तमान कमांड लाइन में इतिहास का विस्तार कर सकते हैं। क्या आपको पता है कि विस्तार को "पूर्ववत करने" का कोई तरीका है या नहीं? – robbles

+1

emacs बाइंडिंग के साथ निश्चित नहीं है, लेकिन vi bindings के साथ आप 'esc' दबाते हैं तो अंतिम क्रिया को पूर्ववत करने के लिए 'u'। –

+0

इसका मतलब है कि पिछले पहले तर्क को स्पष्टता के लिए '!!: 1' के साथ विस्तारित किया जा सकता है :) – dezza