2010-01-27 19 views
7

मैं अक्सर अपनी स्रोत फ़ाइलों के माध्यम से खोजने के लिए emacs में grep-find कमांड का उपयोग करता हूं, लेकिन यह सालाना है कि यह हमेशा अस्थायी फ़ाइलों और बैकअप फ़ाइलों में मैचों को पाता है। ग्रेप-खोजने के लिए डिफ़ॉल्ट आदेश है:emacs में grep-find के लिए डिफ़ॉल्ट स्ट्रिंग

find . -type f -print0 | xargs -0 -e grep -nH -e 

मैं जानता हूँ कि इससे पहले कि मैं इसे अपने आवश्यकताओं से मिलान करने चलाने मैं इसे संशोधित कर सकते हैं, लेकिन मैं यह कैसे बदल सकता हूँ ऐसी है कि वह स्टार्टअप पर सही है?

उत्तर

8

grep पैकेज डिफ़ॉल्ट रूप से सामने के एक समूह की गणना करता है (लेकिन पैकेज लोड पर जरूरी नहीं)। तो आप इसे होने के लिए प्राप्त करना चाहते हैं, और फिर खोज आदेश को फिर से परिभाषित करें। की तरह कुछ:

(grep-compute-defaults) 
(setq grep-find-command "find . ! -name \"*~\" ! -name \"#*#\" -type f -print0 | xargs -0 -e grep -nH -e ") 
+0

धन्यवाद यह ठीक काम करता है (केवल अंत में एक स्थान की आवश्यकता है)। – Zitrax

+4

मुझे Emacs 24 में 'grep-apply-setting' का उपयोग करना था:' (grep-apply-setting 'grep-find-command "find। !name \" * ~ \ "! -नाम \" # * # \ "-type f -print0 | xargs -0 -e grep -nH -e") ' – sandinmyjoints

0

पर कैसे Emacs की वर्तमान विकास संस्करण यह संभालती एक नजर डालें - यह बहिष्कार पैटर्न की एक बड़ी सूची प्रदान करता है।

+0

यदि सूची बहुत बड़ी है तो क्या वे मिनी बफर में पूर्ण कमांड सूचीबद्ध करने से बचते हैं? जब भी मैं खोज करता हूं, मुझे वास्तव में इसे देखने की ज़रूरत नहीं है। – Zitrax

+0

ए) इसे आजमाएं और देखें; बी) हां, वे इसे मिनीबफर में सूचीबद्ध करने से बचते हैं। हालांकि, यह '* grep *' बफर (यानी, जहां आउटपुट जाता है) के शीर्ष पर दिखाई देता है, और यह बहुत बड़ा है। – offby1

7

आप lgrep या के बजाय rgrep का उपयोग करते हैं ग्रेप-मिल जाए, आप पहले से नजरअंदाज कर दिया फ़ाइलें/dirs सेट कर सकते हैं:

(eval-after-load "grep" 
    '(progn 
    (add-to-list 'grep-find-ignored-files "*.tmp") 
    (add-to-list 'grep-find-ignored-directories "_darcs"))) 
+0

मैंने '.min.js" '' grep-find-ignored-files 'को जोड़ा, लेकिन rgrep इसका सम्मान नहीं करता है। मुझे अभी भी * .min.js फ़ाइलों के साथ परिणाम मिलते हैं। – mcandre

+0

आह, '" * .min.js "' चाल है। – mcandre

+0

इसके लिए धन्यवाद! 'हेल्म-एजी' के लिए भी उपयोगी है, जो 'grep-find-ignored * 'चर के सेटिंग्स का भी उपयोग करता है। मौजूदा सूची में जोड़ने के बजाय, मैंने इसे कड़ी मेहनत करने के लिए चुना है '(कस्टमाइज़-सेट-वेरिएबल ' grep-find-ignored-directory (सूची "एससीसीएस" "आरसीएस" "सीवीएस" "एमसीवीएस" ".svn "" .git "" .hg "" .bzr "" _MTN "" _darcs "" {arch} "" ऑब्जेक्ट्स "" बिल्ड "" बिन "" आउट "" lib "))' – Rob

2

आप जीएनयू ग्रेप एक और अच्छा समाधान में कुछ इस तरह डाल करने के लिए है का उपयोग करते हैं अपने .bashrc

export GREP_OPTIONS="--exclude=*#* --exclude=*.svn* --exclude=entries --exclude=all-wcprops --exclude=*.xcuserstate --exclude=project.pbxproj --exclude=*.svn-base --exclude=*.tmp" 

और बस कुछ फ़ाइलों को अनदेखा करने के लिए grep को बताएं। फिर आपको कमांड लाइन से भी वही व्यवहार मिलता है।