2009-04-04 12 views
7

मैं emacs के लिए Google स्वरूपण फ़ंक्शन का उपयोग करके अपनी सभी स्रोत फ़ाइलों को दोबारा प्रारूपित करना चाहता हूं: google-c-style.el (देखें here)।मेरी सभी स्रोत फ़ाइलों को दोबारा सुधारने के लिए मैं एक नई Emacs सी शैली कैसे लागू कर सकता हूं?

मैं इस फ़ंक्शन को मेरी सभी स्रोत फ़ाइलों पर एक बार में कैसे लागू कर सकता हूं, ताकि वे सभी Google स्वरूप के अनुसार सही रूप से स्वरूपित और इंडेंट हो सकें?

उत्तर

9

इस के लिए कई टुकड़े कर रहे हैं:

  • आप सभी को पुन: फ़ॉर्मेट आप चाहते करने के लिए Emacs कार्यों के साथ आने की जरूरत है। indent-region एक शुरुआत है, लेकिन आप भी अवांछित या कुछ अन्य चीजों को भी खोलना चाहेंगे।
  • आपको उन्हें प्रत्येक फ़ाइल पर आमंत्रित करने की आवश्यकता है, और चूंकि इंडेंट फ़ंक्शंस श्रेणियों पर काम करते हैं, इसलिए आपको एक फ़ंक्शन की आवश्यकता होती है जो संपूर्ण फ़ाइल को कवर करने के लिए चिह्न सेट करती है: mark-whole-buffer
  • आपको प्रत्येक फ़ाइल पर ईएमएसीएस का आह्वान करने की आवश्यकता है: इसका मतलब है - बैच फ़ाइल के साथ emacs का आह्वान करना।

here और here करने पर कुछ अच्छे ब्लॉग पोस्ट हैं।

+0

यह अच्छा लग रहा है, धन्यवाद! – Frank

+0

दुर्भाग्य से, ब्लॉग पोस्ट के लिंक अब मर चुके हैं। – Paul

+0

ब्लॉग पोस्ट अब काम कर रहे हैं। –

2

मेरा मानना ​​है कि यह स्क्रिप्ट सुधार को नहीं करती है। इसके बजाय यह एक कस्टम "शैली" का निर्माण करने का एक उदाहरण में बताए अनुसार है: CC mode manual - Styles

CC-मोड मैनुअल भी कहते हैं:

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

CC mode manual - Limitations-and-Known-Bugs

+0

ठीक है, हाँ, लेकिन शैली आप पुन: फ़ॉर्मेट कर भरी हुई थी। –

+0

हाँ, इसलिए मैं शैली को लोड करना चाहता हूं और इंडेंट-बफर फ़ंक्शन को लागू करना चाहता हूं। और फिर सभी फाइलों के साथ ऐसा करते हैं। – Frank

+0

रेइंडेंट, हां। सुधार, नहीं। उदाहरण के लिए ब्रेसिज़ से पहले/बाद में न्यूलाइन बदलती नहीं है। –

3

मैंने कीबोर्ड परिभाषित मैक्रो का उपयोग करके इसे पहले किया है। मैं सभी फ़ाइलों को emacs में लोड करता हूं (find . -name "*.cpp" | xargs emacs जैसे कुछ) और फिर निम्न कुंजी टाइप करें। मैंने प्रत्येक कुंजी संयोजन को जो किया है उसके साथ एनोटेट किया है।

C-x-(     'Begin recording macro 
M-<     'Go to start of file 
C-space    'Mark current location (now start of file) 
M->     'Go to end of file 
M-x indent-region  'Indent entire file according to coding style 
C-x C-s    'Save the current buffer 
C-x C-k    'Close the current buffer 
C-x-)     'End recording macro 

अब आप C-x e टाइप करके एक बफर पर इस चला सकते हैं। यदि आपने कई फाइलें लोड की हैं तो आप 100 फ़ाइलों पर इसे चलाने के लिए C-u 100 C-x e जैसे कुछ चला सकते हैं। यदि यह फ़ाइलों की संख्या से अधिक है, तो ठीक है, आपको बस कुछ "घंटी बजती" या अन्य त्रुटि मिल जाएगी, जब आप सभी प्रसंस्करण पूर्ण हो जाएंगे।

0

आप एक dired बफर में स्रोत फ़ाइलों को चिह्नित करने और उसके बाद प्रत्येक फ़ॉर्मेट करने के लिए एक समारोह चलाने आप कुछ इस तरह कर सकते हैं चाहते हैं:

(defun clean-file(filename) 
    (your-function-goes-here)) 

(defun clean-each-dired-marked-file() 
    (interactive) 
    (for-each-dired-marked-file 'clean-file)) 

(defun for-each-dired-marked-file(fn) 
"Do stuff for each marked file, only works in dired window" 
(interactive) 
(if (eq major-mode 'dired-mode) 
    (let ((filenames (dired-get-marked-files))) 
     (mapcar fn filenames)) 
    (error (format "Not a Dired buffer \(%s\)" major-mode)))) 
संबंधित मुद्दे

 संबंधित मुद्दे