वर्तमान कमांड के मध्य से एक सबस्लेम चल रहा है


16

मैं अक्सर इस परिदृश्य में अपने आप को पाता हूं। मैं एक कमांड टाइप करने के बीच में हूं और इसे पूरा करने से पहले मुझे कुछ और जांचना होगा।

क्या मेरे वर्तमान इनपुट के साथ किसी प्रकार का एक उपखंड खोलने का एक तरीका है, जिसे अब तक याद किया जा रहा है, तब जब मैं इस उपधारा से बाहर निकलता हूं तो मैं वापस वहीं पहुंच जाता हूं जहां मैं था?

$ mylongcommand -n -e <SOME KEY COMBINATION WHICH OPENS A SUBSHELL>
$ date
...
$ exit
$ mylongcommand -n -e <BACK TO WHERE I WAS>

मैं उपयोग कर रहा हूँ zsh


2
सिर्फ एक और टर्मिनल विंडो क्यों नहीं खोलें?
बरमार

@ बर्मन मेरे लिए, मैं अपने अधिकांश लिनक्स सिस्टम पर GUI का उपयोग नहीं करता हूं, इसलिए मुझे TTY's को स्विच करना होगा। जिसका मतलब है कि मुझे फिर से प्रमाणित करना होगा। नीचे दिए गए विकल्प बहुत अधिक कुशल हैं।
ज़ाचरी ब्रैडी

3
आप कंसोल पर कई वर्चुअल टर्मिनल का उपयोग screenया tmuxप्राप्त कर सकते हैं ।
बरमार

जवाबों:


16

कुंजी संयोजन है EscQजो कमांड बफर को बचाता है और एक नई कमांड दर्ज करने की अनुमति देता है। कमांड चलाने के बाद बफर में वह होता है जो आपने पहले टाइप किया था। यदि आपको इसे समाप्त करने से पहले एक और कमांड चलाना है तो आप EscQफिर से टाइप कर सकते हैं ।

(मैंने EscQअभी तक प्रेस करने के बाद एक उपधारा खोलने की कोशिश नहीं की ।)

देख Http://zsh.sourceforge.net/Intro/intro_10.html और "esc-q" खोजें


यह वही है जो मैं चाहता था, बहुत बहुत धन्यवाद! मैं इसे सीधे वापस लौटने के बजाय एक नेस्टेड शेल चला सकता था, लेकिन मेरे उपयोग के मामले के लिए सीधे वापस लौटना पूरी तरह से काम करता है।
पैनायोटिस

19

मैं आमतौर पर Ctrl+ का उपयोग करता हूं Uजो वर्तमान लाइन को मिटाता है और इसे एक बफर में बचाता है। वहाँ से मैं वही करता हूँ जो मुझे कभी भी चाहिए था mylongcommand। फिर जब मैं तैयार होता हूं मैं अपने प्रॉम्प्ट में वापस पेस्ट करने के लिए Ctrl+ Yका उपयोग करता mylongcommandहूं।

जब मैं किसी चीज़ की जाँच करता हूँ, तो एक आधा टाइप किया हुआ कमांड याद रखें


7

मेरा यह समाधान निश्चित रूप से कम-तकनीक और क्लंकी है, लेकिन उन कुंजी-अनुक्रमों पर निर्भर करता है जिनसे आप शायद पहले से परिचित हैं: हिट Ctrl+ A, फिर #, फिर ENTER

यह #लाइन की शुरुआत में डालने का प्रभाव है , इस प्रकार यह एक टिप्पणी करता है, फिर इसे निष्पादित करता है, जिससे इसे कमांड इतिहास में धकेल दिया जाता है। फिर आप अपने सहायक कमांड में प्रवेश कर सकते हैं, फिर कमांड इतिहास पर टिप्पणी की गई कमांड पर स्क्रॉल कर सकते हैं, कमांड को हटा सकते हैं #और आवश्यकतानुसार कमांड को पूरा कर सकते हैं।


आपको अपने कीबोर्ड पर "होम" बटन दबाना चाहिए, यह 1
कीपर

@Ferrybig - हां, यह अच्छा है, हालांकि मेरे दिन-प्रतिदिन के कीबोर्ड के लिए मैकबुक प्रो है जिसमें होम की नहीं है । गृह बराबर है एफ एन + बायाँ तीर , लेकिन टर्मिनल के शीर्ष करने के लिए कि स्क्रॉल।
डिजिटल ट्रामा

2

मैं टाइप कर रहा हूं Ctrl+ Z"सस्पेंड" कमांड मैं टाइप कर रहा हूं और दूसरी कमांड टाइप कर रहा हूं। मेरे द्वारा उस आदेश को चलाने के बाद (या इसे Ctrl+ के साथ निरस्त कर दिया गया C), निलंबित आदेश संस्करण के लिए वापस आता है (यहां तक ​​कि कर्सर की स्थिति को याद करते हुए)। अतिरिक्त सुविधा के रूप में, यदि कमांड लाइन खाली है जब मैं टाइप करता हूं Ctrl+ Z, तो कुंजी bgअंतर्निहित अंतर्निहित (इसलिए डबल Ctrl+ Zसीधे पृष्ठभूमि पर एक रनिंग कमांड भेजता है) को लागू करता है।

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

(पहले पर तैनात एक आधा टाइप कमांड याद रखें जब तक मैं कुछ जाँच जो मुख्य रूप से पार्टी है, जहां आप इतना सुविधाजनक कुछ नहीं कर सकते के लिए समाधान है। यह की एक से थोड़ा अधिक सजावटी संस्करण है निर्मित के बंधन M-qकोpush-line ।)

यह एक सबस्क्रिप्शन नहीं चलाता है: कमांड जिसे आप "सस्पेंड" करने के बाद टाइप करते हैं, पिछले एक ही शेल में चलता है। यह आपको वर्तमान निर्देशिका को बदलने जैसी चीजें करने की अनुमति देता है यदि आपको एक कमांड टाइप करने के बाद पता चलता है कि आप इसे एक अलग निर्देशिका में चलाने के लिए थे। यदि आप एक नया शेल इंस्टेंस चलाना चाहते हैं, तो आप zshएक कुंजी बाइंडिंग से चला सकते हैं , लेकिन मुझे नहीं लगता कि यह विशेष रूप से उपयोगी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.