कमांड-लाइन Zsh में टिप्पणियाँ


115

मैंने हाल ही में बैश से ज़श पर उबंटू में स्विच किया और मैं इसके बारे में काफी खुश हूं। हालांकि, कुछ ऐसा है जिसे मैं वास्तव में याद करता हूं और मुझे यह नहीं मिला कि मैं एक ही चीज कैसे प्राप्त करूं।

बैश में, जब भी मैं एक लंबी कमांड टाइप कर रहा था और मैंने देखा कि मुझे पहले कुछ और चलाना था, तो मुझे बस निम्नलिखित तरीके से टिप्पणी करनी थी:

me@home> #mysuperlongcommand with some arguments
me@home> thecommandIhavetorunfirst #and then: then up up
me@home> #mysuperlongcommand with some arguments #I just need to uncomment it!

बहरहाल, यह काफी आवर्तक स्थिति नहीं के रूप में आसान पता करने के लिए के साथ के रूप में है zsh, यह देखते हुए #mysuperlongcommand(जैसे चलाया जाएगा और जिसका परिणाम: zsh: command not found: #mysuperlongcommand

जवाबों:


172

बस zsh बाहर की कोशिश कर रहा है, मैं इस समस्या में भी भाग गया। आप setopt interactivecommentsबैश-शैली की टिप्पणियों को सक्रिय करने के लिए कर सकते हैं ।


3
आप यह भी कर सकते हैं set -kअगर यह सिर्फ एक बंद है। लेकिन मैं setoptअपने zshrc
Hamish Downer

12
क्या कोई कारण है कि यह डिफ़ॉल्ट व्यवहार नहीं है?
n

1
@ शून्य के सबसे अच्छे बिट्स के बहुत से डिफ़ॉल्ट डिफ़ॉल्ट बंद हैं। पता नहीं क्यों
zzapper

@ naught101 क्योंकि यह नया और अभिनव है। बहुत प्रगति, बहुत सुधार
.рослав Рахматуллин

40

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

bindkey "^Q" push-input

Zsh मैनुअल से:

बफर स्टैक पर पूरे वर्तमान मल्टीलाइन निर्माण को पुश करें और शीर्ष-स्तर (PS1) प्रॉम्प्ट पर लौटें। यदि वर्तमान पार्सर का निर्माण केवल एक ही लाइन है, तो यह बिल्कुल पुश-लाइन जैसा है। अगली बार जब संपादक शुरू होता है या गेट-लाइन के साथ पॉप होता है, तो निर्माण बफर स्टैक के शीर्ष पर पॉपअप हो जाएगा और संपादन बफर में लोड हो जाएगा।

तो यह इस तरह दिखता है:

> long command
Ctrl+Q => long command disappears to the stack
> forgotten command
long command reappears from stack
> long command

इसके अलावा, यदि आप INTERACTIVE_COMMENTSविकल्प ( setopt INTERACTIVE_COMMENTS) सेट करते हैं, तो आप इंटरेक्टिव गोले में टिप्पणियों का उपयोग करने में सक्षम होंगे जैसे आप उपयोग किए जाते हैं।


मुझे आपका विकल्प पसंद है, लेकिन मैं इसे काम नहीं कर सकता :( क्या कोई ऐसा तरीका है जिसे मुझे फ़ाइल में बाइंडिंग लिखना चाहिए, या क्या यह केवल दो वर्ण हैं, ^ और Q? मेरी कमांड मिटा दी गई है, लेकिन मुझे नहीं पता? कैसे इसे फिर से इनपुट में प्रदर्शित किया जाए।
मिहानिया सिमीयन

2
@Mihnea अगर कमांड गायब हो जाता है तो ऐसा लगता है कि पुश-इनपुट काम कर रहा है। जब आप अगली कमांड चलाते हैं या सिर्फ एंटर दबाते हैं तो यह वापस आ जाना चाहिए। क्या ऐसा नहीं होता?
मिशैल पोलित्स्की

1
@barbaz स्टैक के साथ हेरफेर किया जा सकता है read -zऔर print -zइसलिए कुछ स्क्रिप्टिंग और अस्थायी फ़ाइलों के साथ आप कर सकते हैं। लेकिन तब कमांड लाइन को एक अस्थायी फ़ाइल में सहेजने के लिए एक कस्टम ज़ेल विजेट सरल हो सकता है, और साझा इतिहास अभी भी सरल होगा।
माइकल पोलित्स्की

1
जबकि वर्तमान में स्वीकृत उत्तर प्रश्नकर्ता के प्रश्न को संबोधित करता है, यह उत्तर प्रश्नकर्ता के इरादे को संबोधित करता है । Ie zsh के पास इच्छित परिणाम प्राप्त करने का एक बेहतर तरीका है, और यह वह है।
wjv

1
यह स्वीकृत उत्तर होना चाहिए। यदि आप oh-my-zsh का उपयोग करते हैं तो आप इसके लिए Ctrl-Q का उपयोग बॉक्स से बाहर कर सकते हैं।
गेको

18

मैं खुद को अक्सर ऐसा करते हुए पाता हूं। मैं जो भी करता हूं वह लंबी कमांड को काटता है, उस कमांड को निष्पादित करता है जिसे पहले जाने की जरूरत है और फिर लंबे कमांड को वापस पेस्ट करना है। यह आसान है: CTRL + U करंट कमांड को बफर में काट देता है, CTRL + Y इसे पेस्ट करता है। Zsh और bash में काम करता है।


ठीक है, वास्तव में, मेरा तरीका एक समाधान है जबकि आपका समाधान सबसे अच्छा है;)
रॉल

4
यह स्वीकृत उत्तर नहीं होना चाहिए। नीचे दिए गए समाधान जो "सेटटॉप इंटरेक्टेवमेंट्स" का उपयोग करने के लिए कहते हैं, होना चाहिए। इसका कारण यह है कि यदि आप केवल वर्तमान कमांड को काटते हैं, तो यह आपके zsh इतिहास में नहीं है, और आप भी तब आसानी से कट और पेस्ट का उपयोग नहीं कर सकते हैं, जबकि आप जिस कमांड की कोशिश कर रहे थे उसे बिना लिखे नए कमांड में टाइप कर रहे हैं। सहेजें।
डगलस

1
टिप्पणियों का उपयोग करना और इस उत्तर में समाधान दोनों वर्कअराउंड हैं; मिशेल पोलित्स्की द्वारा पोस्ट किया गया पुश-इनपुट विधि अधिक सही है।
फ्रेड्रिक मोलरस्ट्रैंड

0

इसके अलावा setopt interactivecomments, @Lajnold द्वारा सुझाए गए, आप कुछ टिप्पणियों को इतिहास में लिखे जाने ( /superuser/352788/how-to-prevent-a- से) को रोकने के लिए कुछ जोड़ना चाह सकते हैं। कमांड-इन-द-ज़शेल-से-सेव-इन-हिस्ट्री ):

यह ZSH बिल्ट-इन फ़ंक्शन zshaddhistory (): को ओवरराइड करता है:

  • कॉलम 1 में शुरू होने वाली टिप्पणियों को एक या एक से अधिक स्थानों (यानी #somecommand जिसे मैं वापस आना चाहता हूं) से लॉग नहीं करूंगा
  • एक या एक से अधिक स्थानों के बाद कॉलम 1 में शुरू होने वाली टिप्पणियों को लॉग न करें
  • कॉलम 1 से रिक्त स्थान के आधार पर, इंडेंटेड टिप्पणियों को लॉग नहीं किया जाएगा
  • कॉलम 1 में एक स्थान के साथ कमांड लॉग नहीं करेगा (कमांड को चलाने के लिए आसान शॉर्टकट जो आप लॉग नहीं करना चाहते हैं
setopt interactivecomments

function zshaddhistory() {
  emulate -L zsh
  if ! [[ "$1" =~ "(^#\s+|^\s+#|^ )" ]] ; then
      print -sr -- "${1%%$'\n'}"
      fc -p
  else
      return 1
  fi
}

संदर्भ के लिए, यह डिफ़ॉल्ट zshaddhistory () http://zsh.sourceforge.net/Doc/Release/Functions.html है

zshaddhistory() {
  print -sr -- ${1%%$'\n'}
  fc -p .zsh_local_history
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.