क्या zsh शेल के लिए एक फजी मैचिंग मोड मौजूद है?


22

मुझे हाल ही में कुशल पाठ पूरा करने वाले सिस्टम से प्यार हो गया है। मेरे पसंदीदा प्रकारों में से एक तथाकथित फजी पूर्णता है। यह एक ऐसी विधा है जहां प्रोग्राम उपयोगकर्ता के इनपुट को केवल कुछ वर्णों के आधार पर पूरा करेगा जो फ़ाइल नाम या पथ में 'कहीं भी' (लगभग) हो सकते हैं। यह सुविधा कम से कम इन कार्यक्रमों के लिए मौजूद है:

पाठ संपादक में इस विधा का उपयोग उदाहरण:

उपयोगकर्ता शब्द longWordNameThatTheyDontWantToWriteByHand को पूरा करने की कोशिश कर रहा है, और वे ऐसा कर सकते हैं जैसे पहला अक्षर और कुछ कैपिटल केस अक्षर टाइप करके। इसलिए टाइपिंग lwnt पूरे शब्द को पूरा कर सकता है।

मेरा सवाल यह है: क्या एक मोड या कुछ ऐसा ही है जिसे मैं zsh शेल के साथ उपयोग कर सकता हूं?

जवाबों:


27

मेरे में यह है .zshrc

# 0 -- vanilla completion (abc => abc)
# 1 -- smart case completion (abc => Abc)
# 2 -- word flex completion (abc => A-big-Car)
# 3 -- full flex completion (abc => ABraCadabra)
zstyle ':completion:*' matcher-list '' \
  'm:{a-z\-}={A-Z\_}' \
  'r:[^[:alpha:]]||[[:alpha:]]=** r:|=* m:{a-z\-}={A-Z\_}' \
  'r:|?=** m:{a-z\-}={A-Z\_}'

यह पूर्ण फजी मिलान zshइंजन को पूरा करता है। इसमें उदात्त पाठ के सुपर स्मार्ट की कमी है, लेकिन, हाँ, यह पूरा हो जाएगा lwnt -> longWordNameThatTheyDontWantToWriteByHand


1
मुझे बस एक बग मिला: रिक्त स्थान के साथ फ़ाइल नाम के लिए काम नहीं करता है, क्योंकि आप अंतरिक्ष के बाद कुछ भी टाइप कर रहे हैं a Ie stack install && vlc ~/Music/erfपूरा नहीं करता है stack install && vlc ~/Music/FGFC820\ -\ Perfect\ War.mp3
हाई-एंजेल

5
@ हाय-एंजेल हे, इस टक्कर के लिए धन्यवाद। मैं वास्तव में 'r:|?=** m:{a-z\-}={A-Z\_}'अब उपयोग करता हूं , जो एक गुच्छा सरल है, और आपके द्वारा वर्णित समस्या से ग्रस्त नहीं है।
23

एक दम बढ़िया! शायद आप इस कोड के साथ एक प्लगइन बना सकते हैं। बस इतना है कि इसे खोजना आसान है।
जुलिएनजी

15

मेरे प्रोजेक्ट fzf को देखें

यह गोलंग में लिखा गया एक सामान्य उद्देश्य फ़र्ज़ी खोजक है जिसका उपयोग किसी भी चीज़ की सूची के साथ किया जा सकता है: फाइलें, प्रक्रियाएं, कमांड इतिहास, गिट शाखाएं, आदि।

Zsh के लिए, यह निम्नलिखित प्रमुख बाइंडिंग प्रदान करता है:

  • CTRL-T - कमांड लाइन में चयनित फाइल पाथ (एस) को पेस्ट करें
  • CTRL-R - इतिहास से चयनित कमांड को कमांड लाइन में पेस्ट करें
  • ALT-C - चयनित निर्देशिका में सीडी

और फ़ज़ी पूर्णता मोड:

# Files under current directory
# - You can select multiple items with TAB key
vim **<TAB>

# Files under parent directory
vim ../**<TAB>

# Files under parent directory that match `fzf`
vim ../fzf**<TAB>

# Files under your home directory
vim ~/**<TAB>

# Directories under current directory (single-selection)
cd **<TAB>

# Directories under ~/github that match `fzf`
cd ~/github/fzf**<TAB>

# Process IDs. Can select multiple processes with TAB or Shift-TAB
kill -9 <TAB>

# Host names
ssh **<TAB>
telnet **<TAB>

# Environment variables / aliases
unset **<TAB>
export **<TAB>
unalias **<TAB>

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