क्या मुझे किसी प्रोजेक्ट में किसी विशिष्ट फ़ोल्डर को अनदेखा करने के लिए Vim Ctrlp प्लगइन मिल सकता है?


17

विम Ctrlp प्लगइन एक तरह से विश्व स्तर पर कुछ फ़ोल्डर नाम की अनदेखी की है। उदाहरण के लिए:

let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'

हालाँकि, मेरे पास एक अनदेखा नियम है जो एक परियोजना के लिए विशिष्ट है। मैं एक .gitignoreफाइल की तरह कुछ और चाहूंगा ।

क्या मेरे वैश्विक कॉन्फ़िगरेशन को संशोधित किए बिना किसी विशिष्ट प्रोजेक्ट में एक विशिष्ट फ़ोल्डर को अनदेखा करने का एक तरीका है?


क्या आपने प्लगइन के मुद्दे पर नज़र रखने की कोशिश की?
रोमेनियल

जवाबों:


20

कस्टम लिस्टिंग कमांड का उपयोग करें

Ctrlp आपको यह बताता है कि फ़ोल्डर में फ़ाइलों की सूची प्राप्त करने के लिए किस कमांड का उपयोग करना है। इसलिए यदि आप नामित किसी भी चीज़ को बाहर करना चाहते हैं beets.txt, तो आप कर सकते हैं:

let g:ctrlp_user_command = 'find %s -type f | grep -v "beets.txt"'

यह वैश्विक है, लेकिन यह उत्तर की ओर इंगित करना शुरू कर देता है: अपने स्वयं के शेल कमांड की आपूर्ति करें।

इससे भी बेहतर, Ctrlp आपको मार्करों के साथ कई शेल कमांड की आपूर्ति करने देता है, जिसका अर्थ है "यदि आप रूट निर्देशिका में इस मार्कर को देखते हैं, तो इस कमांड का उपयोग करें।"

मैंने इसे पाया :help ctrlpऔर एक मुद्दे पर लेखक की टिप्पणी के आधार पर थोड़ा संशोधित किया।

let g:ctrlp_user_command = {
  \ 'types': {
    \ 1: ['.git', 'cd %s && git ls-files --cached --exclude-standard --others'],
    \ 2: ['.hg', 'hg --cwd %s locate -I .'],
    \ },
  \ 'fallback': 'find %s -type f'
  \ }

इसका मतलब है: "यदि आप .gitफ़ोल्डर में देखते हैं git ls-files..., तो उपयोग करें । अन्यथा, यदि आप देखते हैं .hg, तो उपयोग करें hg --cwd..., अन्यथा नियमित रूप से उपयोग करें find।"

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

(मेरे मामले में, मैं वास्तव में उन फ़ाइलों को अनदेखा करना चाहता था जो अंदर थीं .gitignore, इसलिए git ls-filesऊपर की कमान मेरे लिए काम करती है।)


यह बहुत बढ़िया है, इस उत्तर के लिए बहुत बहुत धन्यवाद।
डेनिस

git -C% s ls-files --cached --exclude-standard - माताओं को गिट के लिए काम करना चाहिए।
अरुणप्रसाद राजकुमार

11

यदि आप Ctrl खोजकर्ता के लिए Ctrl खोज का उपयोग कर रहे हैं (जो कहीं अधिक तेज है), बस .agignoreअपनी परियोजना निर्देशिका में एक फ़ाइल को एक ही प्रारूप में एक के रूप में जोड़ें.gitignore :

.git/
.hg/
.svn/

वैकल्पिक रूप से, एक वैश्विक ~/.agignoreफ़ाइल रखें।

अपने साथ बैकएंड के रूप में सिल्वर सर्चर को जोड़ें .vimrc

let g:ctrlp_user_command = 'ag %s -l --nocolor --hidden -g ""'

1
इसे पोस्ट करने के लिए धन्यवाद। एक और डेटा बिंदु जोड़ने के लिए: मैंने इसे अनुकूलित किया if executable("ag") let g:ctrlp_user_command = 'ag %s -l --nocolor --depth 8 -g ""' endif । अगर मैं अपने घर के फोल्डर में किसी फाइल को एडिट करते समय गलती से ctrl-p मारता हूं तो गहराई सीमा उपयोगी है। मैंने पाया कि छिपे हुए ध्वज
Eric Hu

6

किसी फ़ाइल में जानबूझकर अनट्रैक की गई फ़ाइलों को निर्दिष्ट करता है

एक फ़ाइल के साथ इसे हल करने के लिए जैसे .gitignore(नाथन grep समाधान के आधार पर), मैंने नाम की एक फ़ाइल बनाई .ctrlpignoreऔर पैटर्न को अनदेखा किया, जिन्हें लाइनों द्वारा अलग किया जाना चाहिए:

node_modules/
\.log$
...

और मेरा ctrlp कॉन्फ़िगरेशन:

let g:ctrlp_user_command = 'find %s -type f | grep -v "`cat .ctrlpignore`"'

शायद .gitignoreखुद को ctrlp में फ़ाइलों को अनदेखा करने के लिए इस्तेमाल किया जा सकता है, लगभग एक ही काम करने के लिए एक नई फ़ाइल बनाने की आवश्यकता नहीं है।


मैंने इस स्निपेट को जोड़ा है, लेकिन यह ओवरलैट ctrlp व्यवहार को तोड़ता है, अगर मैं ऑर्डर करता हूं तो इसे केवल _spec फाइलें, कोई वास्तविक ऑर्डर_कंट्रोलर.rb फ़ाइल नहीं मिलती है।
जेडी

1

जैसा कि वैगनर एंड्रेड ने कहा, एक अलग का उपयोग .ctrlpignoreकरना एक अच्छा विचार होगा।

एक अधिक मजबूत और सुविधाजनक विम सेटिंग इस प्रकार है:

let g:ctrlp_user_command = 'cd %s;
  \ commonfilter="\.(jpg|bmp|png|jar|7z|zip|tar|gz|tgz|bz)$";
  \ if [ ! -r ".ctrlpignore" ]; then
  \   find . -type f | grep -Evi "$commonfilter";
  \ else
  \   find . -type f | grep -vF "$(cat .ctrlpignore)" | grep -Evi "$commonfilter";
  \ fi'

.ctrlpignoreकिसी भी dir में डाला जा सकता है जिसे ctrlp द्वारा रूट dir के रूप में पहचाना जाएगा। यहां एक उदाहरण है, हर पंक्ति के साथ शुरू हो रहा है./

vim ~/.ctrlpignore

./Desktop
./R
./.vim
./.local/lib
.....

ध्यान दें:

  1. grep -Fपैटर्न की व्याख्या करेंगे, पूर्व। यदि आप नहीं चाहते हैं कि एक निश्चित स्ट्रिंग के रूप में './.tmp', ./tmp 'को फ़िल्टर किया जाए। अभी भी कुछ तुच्छ बग हैं: './mp' भी फ़िल्टर करेगा './.tmp2'। इसे भूल जाओ, मुझे पसंद नहीं है\.

  2. g:ctrlp_custom_ignoreg:ctrlp_user_commandसेट किया गया है तो नजरअंदाज कर दिया जाएगा । जिन्हें और अधिक जटिल में किया जा सकता थाg:ctrlp_user_command

  3. ब्लैक-लिस्ट के बजाय व्हाइट-लिस्ट भी संभव है। अधिक सुविधाजनक अगर एक अलग स्क्रिप्ट में लागू किया जाता है

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