[गैर-लेखक से संपादित करें: यह 2010 से है, और मई 2011 से इस प्रक्रिया को काफी सरल बना दिया गया है। मैं अपने सेटअप नोट्स के साथ फ़रवरी 2012 तक इस उत्तर में एक पोस्ट जोड़ दूंगा।]
आपको कुछ टुकड़ों को एक साथ रखना होगा: Emacs, SLIME (जो पूरी तरह से क्लोजर के साथ अच्छी तरह से काम करता है - swank-clojure देखें), swank-clojure (SLIME के सर्वर समकक्ष का Clojure कार्यान्वयन), clojure-mode, Paredit और बेशक, क्लोजर जार एक शुरुआत के लिए, फिर शायद कुछ एक्स्ट्रा कलाकार जिनमें से लेनिंगन सबसे उल्लेखनीय होंगे। एक बार जब आप इसे पूरी तरह से सेट कर लेते हैं, तो आपके पास - Emacs के भीतर - प्रश्न में उल्लिखित सभी वर्कफ़्लो / संपादन सुविधाएँ।
बुनियादी ढांचा:
निम्नलिखित महान ट्यूटोरियल हैं जो बताते हैं कि यह सब कैसे सेट करना है; वेब पर अधिक है, लेकिन कुछ अन्य काफी पुराने हैं, जबकि ये दोनों अब के लिए ठीक लग रहे हैं:
जिसमें फिल हागेलबर्ग के ब्लॉग पर क्लोजर ऑथरशिप पोस्ट के विषय में व्यापार के गुर पाए जाते हैं ; फिल स्वांक-क्लोजर और क्लोजर-मोड को बनाए रखता है, साथ ही Emacs स्टार्टर किट नामक एक पैकेज है जो Emacs की दुनिया में किसी भी नवागंतुक के लिए एक नज़र रखने के लिए अच्छी तरह से सलाह दी जाएगी। इन निर्देशों को आधारभूत संरचना में हाल के बदलावों के साथ लाया गया लगता है; संदेह के मामले में, क्लोजर के Google समूह पर अतिरिक्त जानकारी के लिए देखें।
इन्कंटर परियोजना के ब्लॉग पर क्लजुरे, इन्कंटर, एमएसीएस, कीचड़, स्वांक, और पारडिट पोस्ट की स्थापना। इंकान्टर एक आकर्षक पैकेज है जो कि क्लोजर में दाईं ओर स्थित सांख्यिकीय संगणनाओं के लिए आर-जैसे डीएसएल प्रदान करता है। यह पोस्ट तब भी उपयोगी होगी जब आप उपयोग करने की योजना नहीं बनाते हैं - या यहाँ तक कि स्थापित करने - Incanter।
काम करने के लिए यह सब डाल:
एक बार जब आप इस सभी सामान को सेट कर लेते हैं, तो आप कोशिश कर सकते हैं और तुरंत इसका उपयोग करना शुरू कर सकते हैं, लेकिन मैं आपको निम्नलिखित करने के लिए दृढ़ता से सलाह दूंगा:
SLIME के मैनुअल पर एक नज़र डालें - यह स्रोतों में शामिल है और वास्तव में बहुत पठनीय है। इसके अलावा, पूरी तरह से कोई कारण नहीं है कि आपको पूरे 50-पेज के राक्षस मैनुअल को पढ़ना चाहिए ; बस देखने के लिए चारों ओर एक नज़र है कि क्या सुविधाएँ उपलब्ध हैं।
नोट: नवीनतम अपस्ट्रीम स्रोतों में पाया गया SLIME का ऑटोडोक फीचर स्वंक-क्लॉज्योर के साथ असंगत है - यदि आप ELPA संस्करण का उपयोग करने के लिए फिल हगेलबर्ग की सिफारिश का पालन करते हैं तो यह समस्या सामने नहीं आएगी (स्पष्टीकरण के लिए उनका उपरोक्त ब्लॉग पोस्ट देखें) या बस ऑटोडोक को छोड़ दें (जो चीजों की डिफ़ॉल्ट स्थिति है)। बाद वाले विकल्प में कुछ जोड़ा गया अपील है कि आप अभी भी सामान्य लिस्प के साथ नवीनतम एसएलटाइम का उपयोग कर सकते हैं, यदि आप इसका उपयोग करते हैं।
पैराडिट के लिए डॉक्स पर एक नजर है। इस बारे में जाने के दो तरीके हैं: (1) स्रोत को देखें - फ़ाइल के शीर्ष पर बड़ी मात्रा में टिप्पणियां हैं जिनमें वे सभी जानकारी शामिल हैं जिनकी आपको आवश्यकता है; (2) C-h mईमेक में टाइप करें जबकि पैराडिट-मोड सक्रिय है - वर्तमान प्रमुख मोड पर जानकारी के साथ एक बफर पॉप जाएगा जिसके बाद सभी सक्रिय मामूली मोड पर जानकारी होगी (पैराडिट उन में से एक है)।
अद्यतन: मैंने अभी-अभी फिल हाग्लबर्ग द्वारा परेडिट पर नोटों का यह शांत सेट पाया है ... यह एक टेक्स्ट फ़ाइल का लिंक है, मुझे याद है कि इस जानकारी के साथ स्लाइड का एक अच्छा सेट कहीं न कहीं दिखाई दे रहा है, लेकिन अब इसे ढूंढना संभव नहीं है । वैसे भी, यह एक अच्छा सारांश है कि यह कैसे काम करता है। निश्चित रूप से इस पर एक नज़र डालें, मैं अब परदित के बिना नहीं रह सकता और इस फ़ाइल को इसका उपयोग शुरू करना बहुत आसान बनाना चाहिए, मुझे विश्वास है। :-)
वास्तव में, C-h mसंयोजन आपको क्लीजुर-मोड में SLIME REPL पर सक्रिय सभी कीबाइंडिंग के बारे में बताएगा (आप C-c C-kसंकलन के लिए वर्तमान बफर को भेजने के लिए याद रखना चाहते हैं ) और वास्तव में किसी भी Emacs बफर में।
एक फ़ाइल से कोड लोड करने और फिर REPL में इसके साथ प्रयोग C-c C-kकरने के लिए: वर्तमान बफर का संकलन करने के लिए aforementioned संयोजन का उपयोग करें , use
या फिर require
REPL पर इसके नाम स्थान। इसके बाद, प्रयोग करें।
अंतिम नोट:
सभी क्लिक होने से पहले कुछ समय के लिए चीजों को मोड़ने के लिए तैयार रहें। इसमें बहुत सारे उपकरण शामिल हैं और उनकी बातचीत ज्यादातर काफी चिकनी होती है, लेकिन उस बिंदु तक नहीं जहां यह मान लेना सुरक्षित होगा कि आपको शुरू में कुछ समायोजन नहीं करना होगा।
अंत में, यहाँ एक बिट कोड रखा गया है, .emacs
जिसमें आप कहीं और नहीं मिलेंगे (हालाँकि यह फिल हैग्लबर्ग का एक शांत कार्य पर आधारित है)। मैं वैकल्पिक रूप से Emacs के भीतर से पूरी बात शुरू करने के लिए नीचे दिए गए फ़ंक्शन lein swank
का उपयोग करके ( लिनिंगन की कूलर विशेषताओं में से एक) के साथ अपने हंस इंस्टेंस को शुरू करने के बीच वैकल्पिक हूं clojure-project
। मैंने बाद के माहौल को बारीकी से बनाने के लिए अपनी पूरी कोशिश की है जो इसके द्वारा प्रदान की गई है lein swank
। ओह, और यदि आप बस एक त्वरित और गंदे प्रयोग के लिए Emacs में एक REPL चाहते हैं, तो सही सेटअप के साथ आपको M-x slimeसीधे उपयोग करने में सक्षम होना चाहिए ।
(setq clojure-project-extra-classpaths
'(
"src/"
"classes/"
"test/"
))
(setq clojure-project-jar-classpaths
'(
"lib/"
))
(defun find-clojure-project-jars (path)
(apply #'append
(mapcar (lambda (d)
(loop for jar in (remove-if (lambda (f) (member f '("." "..")))
(directory-files d t))
collect jar into jars
finally return jars))
(remove-if-not #'file-exists-p
clojure-project-jar-classpaths))))
(defun find-clojure-jar (jars)
(let ((candidates
(remove-if-not
(lambda (jar)
(string-match-p "clojure\\([0-9.-]+\\(SNAPSHOT|MASTER\\)?\\)?\\.jar$" jar))
jars)))
(if candidates
(car candidates)
(expand-file-name "~/.clojure/clojure.jar"))))
(defun find-clojure-contrib-jar (jars)
(let ((candidates
(remove-if-not
(lambda (jar)
(string-match-p "clojure-contrib\\([0-9.-]+\\(SNAPSHOT|MASTER\\)?\\)?\\.jar$" jar))
jars)))
(if candidates
(car candidates)
(expand-file-name "~/.clojure/clojure-contrib.jar"))))
(defun clojure-project (path)
"Sets up classpaths for a clojure project and starts a new SLIME session.
Kills existing SLIME session, if any."
(interactive (list (ido-read-directory-name
"Project root:"
(locate-dominating-file default-directory "pom.xml"))))
(when (get-buffer "*inferior-lisp*")
(kill-buffer "*inferior-lisp*"))
(cd path)
(let* ((jars (find-clojure-project-jars path))
(clojure-jar (find-clojure-jar jars))
(clojure-contrib-jar (find-clojure-contrib-jar jars)))
(setq swank-clojure-binary nil
swank-clojure-jar-path clojure-jar
swank-clojure-extra-classpaths
(cons clojure-contrib-jar
(append (mapcar (lambda (d) (expand-file-name d path))
clojure-project-extra-classpaths)
(find-clojure-project-jars path)))
swank-clojure-extra-vm-args
(list (format "-Dclojure.compile.path=%s"
(expand-file-name "classes/" path)))
slime-lisp-implementations
(cons `(clojure ,(swank-clojure-cmd) :init swank-clojure-init)
(remove-if #'(lambda (x) (eq (car x) 'clojure))
slime-lisp-implementations))))
(slime))