2012-05-19 13 views
5

मैं emacs में C++ विकास के लिए स्वत: पूर्णता पॉपअप करने के लिए एक प्लगइन की तलाश कर रहा हूं। मैंने जो कोशिश की है वह सीडेट सेमेटिक्स और Autocompletion mode है, वे चर और फ़ंक्शन नामों को पूरा करने के मामले में काफी साफ हैं जब तक कि मेरे पास पहले से ही कुछ शब्द हैं। उदाहरण के लिए, मैं इतने लंबे समय के रूप में मैं इसemacs में स्वत: पूर्ण कार्यक्षमता की तलाश

int main(){ 
foo bar; 
bar.get... 
} 

प्लगइन्स टाइप करना शुरू किया एक वर्ग नामित foo और एक समारोह है कि एक पूर्णांक रिटर्न 1

class foo{ 
    int getInt(){return 1}; 
}; 

मुख्य विधि में है, ऊपर पॉपिंग कोई समस्या नहीं है bar.getInt() जैसे सुझाव। हालांकि, मैं वास्तव में जो खोज रहा हूं वह ग्रहण की तरह कुछ है, जैसे ही मैं "डॉट" दबाता हूं, मेरे लिए संभावित विकल्प उत्पन्न किए जा सकते हैं। क्या यह Emacs में संभव है? धन्यवाद

उत्तर

2

यह ऑटो-पूर्ण & CEDET की आपकी सेटिंग्स पर निर्भर करता है। ऐसा लगता है कि कई पात्रों को टाइप करने के बाद केवल पूर्ण समापन दिखाने के लिए ऑटो-पूर्ण सेटअप है। आप ac-auto-start वैरिएबल का मान देख सकते हैं - यदि यह एक संख्या है, तो इस संख्या के बाद ऑटो-पूर्ण कॉल किया जाएगा। एक और महत्वपूर्ण बात यह है कि आपके ac-sources चर में क्या है - CEDET के साथ काम के लिए आपको ac-source-semantic-raw या ac-source-semantic पूर्णता स्रोत का उपयोग करने की आवश्यकता है। स्वत: पूरा होने के लिए . या -> के बाद आप सिमेंटिक के उपयोग करने के लिए कोशिश कर सकते हैं की तरह कुछ के साथ निर्मित पूरा होने:

(defun my-c-mode-cedet-hook() 
(local-set-key "." 'semantic-complete-self-insert) 
(local-set-key ">" 'semantic-complete-self-insert)) 
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook) 

पी.एस. क्या आपने my article on CEDET & C++ देखा था?

+1

अरे एलेक्स! असल में मैंने आपका लेख देखा और मैंने जो किया है उसकी नकल करने की कोशिश कर रहा हूं लेकिन इसे सही तरीके से कॉन्फ़िगर नहीं कर सका। खैर, मुझे कुछ सवाल मिल गए हैं। *** डॉट *** सम्मिलन के बारे में, मैंने जो सुझाव दिया है, मैंने किया है, लेकिन हर बार जब मैंने *** बार ** टाइप किया है तो ** बार के बाद उपरोक्त मामले में *** *** , मुझे यह संदेश मिला *** प्रतीक की फ़ंक्शन परिभाषा शून्य है: eieio-build-class-alist *** और यहां तक ​​कि एक सामान्य बिंदु चिह्न भी सम्मिलित नहीं कर सका। *** एसी-स्रोत ***, मैं ऑटो पूर्णता पैकेट का उपयोग कर रहा हूं, ऐसा लगता है कि एसी-स्रोत इसका एक हिस्सा है। उनके बीच संबंध क्या है, मैं उलझन में हूं। धन्यवाद –

+0

बीटीडब्ल्यू, मैंने *** एसी-ऑटो-स्टार्ट ** वैरिएबल 4 सेट किया है, लेकिन हर बार जब मैंने Emacs शुरू किया, तो मुझे CH v ** ac-auto में टाइप करके वैरिएबल के मान को मैन्युअल रूप से जांचना होगा स्टार्ट *** पहले, फिर मेरा *** डॉट *** सम्मिलन बाद में काम करेगा, अन्यथा मैं *** परिभाषा को शून्य बना रहा हूं *** त्रुटि। वैसे, *** डॉट *** में सिस्टम हेडर भी ढूंढने में परेशानी होती है, जैसे कि मैंने वेक्टर ऑब्जेक्ट के बाद एक डॉट में टाइप किया था, मैं आकार() फ़ंक्शन को पॉप अप करने के रूप में नहीं देख पा रहा था। बहुत बहुत धन्यवाद –

+0

हम्म, यह अजीब - ऐसा लगता है कि eieio सही ढंग से लोड नहीं किया गया था। आप अर्थपूर्ण किस संस्करण का उपयोग कर रहे हैं? –

0

मुझे पता चला है कि सीडेट वास्तव में जबरदस्त है, खासकर सेमेक परियोजनाओं के तहत।

मैं https://github.com/Andersbakken/rtags का उपयोग करने की अनुशंसा करता हूं, जैसा कि आप टाइप करते हैं और साथ ही स्मार्ट पूर्णता का उपयोग करते हुए त्रुटियों को रेखांकित करते हैं। आवश्यक emacs संकुल प्राप्त करने के बाद बस इसे अपनी init फ़ाइल में जोड़ें

(require 'rtags) 
(require 'popup) 
(require 'rtags-ac) 
(setq rtags-completions-enabled t) 
(rtags-enable-standard-keybindings c-mode-base-map) 
(add-hook 'c++-mode-hook 
      (lambda() 
      (setq ac-sources '(ac-source-rtags) 
))) 
संबंधित मुद्दे