क्या विभिन्न कमांड के लिए अलग-अलग zsh मेनू चयन व्यवहार का उपयोग करना संभव है?


13

मैं menu selectव्यवहार का उपयोग कर रहा हूं zsh, जो कर्सर के नीचे एक मेनू को आमंत्रित करता है जहां आप विभिन्न संभावनाओं को देख सकते हैं। इसके लिए मैंने .zshrc विकल्प सेट किया है

zstyle ':completion:*' menu select=2

डिफ़ॉल्ट रूप से, Returnइस मेनू में एक संभावना का चयन करने के लिए दबाने से केवल शब्द पूरा होता है - यह वास्तव में कमांड नहीं भेजता है। उदाहरण के लिए, मुझे इस तरह का एक मेनू मिल सकता है

~ % cd de<TAB>
completing directory:
[Desktop/]  Development/

Returnयहां दबाने पर परिणाम मिलेगा

~ % cd Desktop/

फिर मुझे वास्तव में कमांड भेजने के लिए दूसरी बार प्रेस Returnकरना होगा ।

मैं इसे करने के लिए इस व्यवहार को संशोधित कर सकता हूं ताकि Returnदोनों को पूरा करने का चयन करें और ऐसा करने से कमांड भेजता है

bindkey -M menuselect '^M' .accept-line

हालांकि, इसके साथ एक समस्या है: कभी-कभी मुझे कमांड भेजे बिना एक फ़ाइल या निर्देशिका को पूरा करने की आवश्यकता होती है । उदाहरण के लिए, मुझे यह करने की आवश्यकता हो सकती है ln -s Desktop Desktop2- इस bindkeyव्यवहार के साथ , डेस्कटॉप को पूरा करने की कोशिश के परिणामस्वरूप ln -s Desktop/कमांड के रूप में भेजा जाएगा , और जाहिर है कि मैं ऐसा नहीं चाहता।

मुझे पता है कि सिर्फ प्रेसिंग स्पेस मुझे कमांड के साथ मिलेगा, लेकिन यह अब एक आदत है।
यह देखते हुए, क्या इसे बनाने का कोई तरीका है ताकि केवल कुछ कमांड आपको Returnएक बार दबाए (जैसे cd), लेकिन अन्य सभी कमांड को इसे दो बार दबाने की आवश्यकता है?


यदि .zshrcफ़ाइल आपको ऐसा करने की अनुमति नहीं देती है, तो उत्तर बस नहीं होने वाला है, जब तक कि आप कमांड-आधारित व्यवहार का समर्थन करने के लिए स्रोत कोड को स्वयं समायोजित न करें। लेकिन फिर भी आपको यह परिभाषित करना होगा कि ऐसा करने के लिए कौन सी आज्ञा है, जो अपने आप में एक अतिरिक्त प्रवेश को दबाने की तुलना में अधिक थकाऊ है ...
तमारा विज्समैन

जवाबों:


3

यदि आपको वास्तव में इसकी आवश्यकता है, तो सैद्धांतिक रूप से आप एक फ़ंक्शन सेट कर सकते हैं जो आपके द्वारा निष्पादित कमांड की जांच करता है, और लाइन को पूरा या भेज सकता है।

कुछ इस तरह आज़माएं (अप्रकाशित):

commands=(ls cd)
# define widget function
function check-command {
    zle beginning-of-line
    zle forward-word
    RBUFFER=" $RBUFFER"
    if [[ ${commands[(r)$LBUFFER]} == $LBUFFER ]] ; then ; zle accept-line ; else; zle     end-of-line ; fi
}

# create widget from function
zle -N check-command

# bind widget
bindkey -M menuselect '^M' check-command

स्रोत: पुराने कमांड से पुराने कमांड का उपयोग करना।


0

तकनीकी रूप से यह संभव नहीं है जिस तरह से आप पूछ रहे हैं। पता नहीं कि कोई और रास्ता है या नहीं

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