आप किस zsh फीचर्स का उपयोग करते हैं? [बन्द है]


33

मैं टर्मिनल में बहुत काम करता हूं इसलिए मैंने अपनी पसंद के खोल के बारे में बहुत कुछ सीखा है, zsh। अपने आप को काम पर और अधिक उत्पादक बनाने के लिए आप zsh की किन विशेषताओं का उपयोग करते हैं? मेरे पसंदीदा में से एक बहु-डायर स्वतः पूर्ण है। इसलिए टाइप करने के बजाय cd /fo{tab}/ba{tab}/ba{tab}मैं बस कर सकता हूं cd /fo/ba/ba{tab}और उस कई कीस्ट्रोक्स को बचा सकता हूं !


2
मैं उस सुविधा के बारे में नहीं जानता था, मुझे लगता है कि एक कोशिश करनी होगी!
रॉय रिको

1
वह कौन सा विकल्प है जो निर्देशिका स्वत: पूर्ण है?
गृहनगर

जवाबों:


50

बस यह छोटा रत्न मिला:

cd old new

यह प्रपत्र वर्तमान निर्देशिका के पूर्ण पथ में cdसभी आवृत्तियों को प्रतिस्थापित करता है और कार्यशील निर्देशिका को परिणामी पथ में बदलने का प्रयास करता है।oldnew

उदाहरण के लिए, यदि आपकी कार्यशील निर्देशिका है /home/larry/code/backrub/serverऔर आप स्विच करना चाहते हैं /home/sergei/code/backrub/server, तो आपको बस इतना करना है:

cd larry sergei

7
ठीक है, वह नियम।
गृहनगर

21

मैं उन चीजों को रखूँगा, जहाँ तक मुझे पता है, बैश नहीं कर सकते।

  • फैंसी समापन। हाँ, बैश इसके कुछ हैं, लेकिन zsh को अधिक आज्ञाओं का पता है, अक्सर अधिक सटीक होता है, और कई और अधिक कॉन्फ़िगरेशन संभावनाएं होती हैं।

  • **ग्लोब, जैसे, **/fooकहा जाता है फ़ाइलों के लिए दिखता है fooरिकर्सिवली उपनिर्देशिका में। (और ***/fooसहानुभूति का पालन भी करता है।) एक लंबे findकमांड के बजाय दो अक्षर (जो कि कुछ फ़ाइल नामों में रिक्त स्थान और उद्धरण जैसे विशेष वर्ण शामिल हैं, तो सही होना मुश्किल है)।

  • कम अक्सर, ग्लोब क्वालिफायर foo*(*)(जैसे foo*, लेकिन केवल निष्पादन योग्य फ़ाइलों को बनाए रखें), foo(.)(केवल नियमित फ़ाइलें, निर्देशिकाएं नहीं), foo(-@) (केवल झूलते हुए सिम्लिंक), foo*(m-5)(केवल पिछले 5 मिनट में संशोधित फ़ाइलें), foo*(om[1])(सबसे हाल ही में संशोधित फ़ाइल) , आदि।

  • autocd: कमांड के रूप में निर्देशिका नाम टाइप करना इसमें परिवर्तित होता है ( cdया pushdआप इसे कैसे कॉन्फ़िगर करते हैं इसके आधार पर)। cdआदेश बहुत लंबा तीन पात्रों है! मैं दर्द महसूस किए बिना तीस सेकंड से अधिक के लिए बैश का उपयोग नहीं कर सकता। मेरे कुछ एकल-चरित्र कार्य भी हैं, जैसे कि

समारोह - {
  अगर [[$ # -eq 0]]; फिर
    सीडी "$ OLDPWD"
  अन्य
    बिलिन - "$ @"
  फाई
}
  • zmvअंतर्निहित है, और
उर्फ zcp = 'noglob zmv -C'
उर्फ ज़्लान = 'नोग्लोब ज़मव-एल'
उर्फ ज़मव = 'नोग्लोब ज़मव'
  • जबकि मैं इस पर हूँ, noglobबिलिन।

  • precmdऔर preexecहुक कार्यों: मैं का उपयोग preexecचल आदेश शामिल करने के लिए मेरी टर्मिनल का शीर्षक सेट करने के लिए, और precmdअपने से बाहर निकलें कोड के साथ आदेश को बदलने के लिए। कुछ इस तरह

term_title_base = '@% l:% 1 ~'
Preexec () {
  प्रिंट -nr $ '\ e] 2;' '$ {(%) term_title_base} $ * "' $ \ 'a'
}
प्रमद () {
  प्रिंट -nr $ '\ e] 2;' '$ {(%) term_title_base} ($?) "' $ \ a '  
}
  • Ctrl + Z:
    • एक खाली कमांड लाइन चलती है bg(ताकि Ctrl + Z Ctrl + Z एक प्रोग्राम को स्थगित कर दे और तुरंत पृष्ठभूमि में फिर से शुरू हो जाए)।
    • एक गैर-खाली कमांड लाइन पर, वर्तमान कमांड संस्करण को निलंबित करें: मुझे दूसरी कमांड टाइप करने दें, और जब वह दूसरी कमांड लाइन समाप्त हो जाए, तो मुझे संपादित करने के लिए पहला कमांड वापस मिलता है।
    • यह निम्न फ़ंक्शन का उपयोग करता है:
फैंसी-सीटीटी-जेड () {
  अगर [[$ # BUFFER -eq 0]]; फिर
    bg
    zle redisplay
  अन्य
    zle पुश-इनपुट
  फाई
}
zle -N फैंसी-सीटीटी-जेड
bindkey '^ Z' फैंसी-सीटीएल-जेड
  • सबसे महत्वपूर्ण गैर-पूरा-संबंधित विकल्प: setopt append_history autocd extended_glob no_match

3
प्यार ^ जेड ^ जेड चाल, धन्यवाद! मूल रूप से एक एकल कुंजी को बाँधने के लिए एक समाधान के लिए superuser.com/questions/378018 देख रहा था, लेकिन ^ ^ ^ Z इतना अधिक समझ में आता है
एवगेनी डोल्जेन्को

13

zsh फ़ाइलों और निर्देशिकाओं के अलावा स्वतः पूर्ण करने की क्षमता।

उदाहरण के लिए, git पैकेज स्थापित होने के साथ, git-sh {tab} लाता है:

- git कमांड -
शॉर्टलॉग - गिट लॉग आउटपुट को सारांशित करता है
शो-ब्रांच - शाखाओं और उनके आवागमन को दर्शाता है
शो-इंडेक्स - एक पैक आईडीएक्स फ़ाइल की सामग्री को प्रदर्शित करता है

1
हाँ, यह उत्कृष्ट है! मैं भी इसका उपयोग तब करता हूं जब मुझे यह सुनिश्चित नहीं होता है कि कमांड लाइन स्विच क्या है, लेकिन मुझे मैन फाइल को डिलीट करने की आवश्यकता नहीं है।
फिड श्मिट

मेरा मानना ​​है कि बैश में भी यह क्षमता है।
कीथ थॉम्पसन

10

मुझे वास्तव में वैश्विक उपनाम पसंद हैं

alias -g L='|less
alias -g DN='>/dev/null'

मुझे ऐसे करने दो

somecommand file arg L

और पेजिंग प्राप्त करें।


मुझे grep के लिए G भी पसंद है।
श्मिट

7

जैसा कि दूसरों ने उल्लेख किया है, zsh का स्वत: पूर्ण उत्कृष्ट है।

आप बहुत अधिक परेशानी के बिना कस्टम कमांड के लिए अपने स्वयं के स्वत: पूर्ण सेटअप कर सकते हैं। उंगली करने के लिए तर्कों के रूप में पूर्ण उपयोगकर्ता नाम टैब करने के लिए:

# ~/.zshrc
function userlist {
        reply=(`users | tr ' ' '\n' |sort -u `);}
compctl -K userlist finger
set COMPLETE_ALIASES

अन्य विकल्प जो मुझे सेट करना पसंद है:

# turn on spelling correction
setopt correct
# don't save duplicates in command history
setopt histignoredups
# don't allow accidental file over-writes
setopt noclobber

Pushd और popd भी बहुत काम आते हैं।

# Always pushd when changing directory
setopt auto_pushd
# Have pushd with no arguments act like `pushd $HOME'.
setopt PUSHD_TO_HOME

घर पर और अंत में चाबियाँ zsh पर डिफ़ॉल्ट रूप से काम नहीं करती हैं, जैसे वे अन्य गोले पर करते हैं, लेकिन आप इसे ठीक कर सकते हैं।

# Make home and end keys work.
[[ -z "$terminfo[khome]" ]] || bindkey -M emacs "$terminfo[khome]" beginning-of-line
[[ -z "$terminfo[kend]" ]] || bindkey -M emacs "$terminfo[kend]" end-of-line

2
मैं वास्तव में सहायक की तुलना में वर्तनी सुधार को अधिक कष्टप्रद पाता हूं।
श्मिट

@ हे, तुम मेरे लिए ऐसा कहने वाले पहले व्यक्ति नहीं हो। सुधार की एक अच्छी विशेषता यह है कि यह सही संस्करण को इतिहास में डाल देगा, इसलिए आप गलती से फिर से वही काम नहीं करेंगे।
अभिषेकशील

5

scpदूरस्थ सर्वर पर उपयोग करते समय ऑटो-पूर्ण सक्षम करें ।

अतिरिक्त जानकारी प्रदर्शित करने के लिए सही संकेत।


वास्तव में! मेरे पास एक बहुत ही जटिल लेकिन संक्षिप्त संकेत है। Hostname [करंट लाइन] <एरर नं>%
Frew Schmidt
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.