SORU
18 ŞUBAT 2010, PERŞEMBE


Emacs/Swank/yumuşak bir öğretici Clojure için Paredit

Emacs için Clojure/Lisp üzerinde çalışmak için taşınıyorum. Üzerinde Emacs aşağıdaki yapabilmek için kurulum için gereken tüm bilgi nedir?

  1. otomatik eşleştirme kapanış parantez nesil/
  2. otomatik girintileme Lisp/Clojure stil, C /Java tarzı değil
  3. Vurgulayarak sözdizimi
  4. REPL çağırma
  5. ÇOĞALTMA halinde dosyanın kod parçası yük ve değerlendirebilmek.

Ayrıca komutların listesi şeyleri Emacs üzerinde kurduktan sonra bunları alabilirsem çok iyi olurdu.

CEVAP
18 ŞUBAT 2010, PERŞEMBE


[Düzenle non-yazar: bu, 2010 ve Mayıs 2011'den bu yana önemli ölçüde basitleştirilmiş işlem. Kurulum notlarımı bu cevap için bir post 2012. Yorum olarak ekleyin] ederim

İhtiyacınız olacak araya bir kaç parça: Emacs, BALÇIK (mükemmel çalışıyor iyi Clojure-swank-clojure), swank-clojure (Clojure uygulama BALÇIK sunucu muadili), clojure modu, Paredit ve, tabii ki, Clojure kavanoz için bir başlangıç, belki de bazı ekstralar arasında olan Leiningen ki belki de en önemli adımı.Set her şeyi yaptığın zaman, Emacs soru söz tüm iş akışı / düzenleme özellikleri -- içinde olacak.

Temel ayarlar:

Aşağıda için büyük dersler hangi tarif için hepsi bu kadar; dahası var Web, ama bazıları diğerlerinden oldukça modası geçmiş, Oysa bu iki gibi görünüyor Tamam şimdi:

  1. in which are found tricks of the trade concerning clojure authorship post Phil Hagelberg blog; Phil tutar swank-clojure ve clojure modu yanı sıra, bir paket olarak adlandırılan Emacs Başlangıç Seti olan bir şey, herhangi bir yeni başlayanlar için Emacs dünya olurdu iyi tavsiye için bir göz var. Bu talimatlar, güncel altyapısı için son değişiklikleri ile getirilmiş olması, herhangi bir şüphe durumunda, Clojure Google grup hakkında ek bilgi için bak.

  2. İncanter proje blog Setting up Clojure, Incanter, Emacs, Slime, Swank, and Paredit post. İncanter büyüleyici bir paket sağlayan R-gibi istatistiksel hesaplamalar için bir DSL Clojure içine doğru gömülür. Bu yazı ... kullanarak ya da .. - İncanter yükleme planı yok bile faydalı olacaktır.

Bu işe koyarak:

Bu şeyler her ayarladığınızda, deneyin ve hemen kullanmaya başlayabilirsin, ama kesinlikle şu: yapmanızı tavsiye ederim

  1. Kaynakları dahil oldu ve aslında çok okunabilir SÜMÜK el -- göz at. Ayrıca, neden kesinlikle bir neden yokokuyunbütün 50 sayfalık bir canavar manuel; sadece etrafı görmek için.

    Not:en son memba kaynakları bulunan BALÇIK dilerseniz sözü özelliği swank-clojure ile uyumsuz-- bu sorun olmaz gelirse takip Phil Hagelberg tavsiyesi için kullanın ELPA sürüm (bkz: onun söz konusu blog yazısı için bir açıklama) ya da sadece terk dilerseniz sözü kapalı (varsayılan değer devlet işleri). İkinci seçenek olarak kullanırsın diye Common Lisp ile en son SÜMÜK kullanabilirsiniz, bazı çekicilik var.

  2. Paredit için dokümanlar bakın. İki yolu vardır git bu: (1) bak kaynak -- orada çok büyük bir miktar yorumların en üstünde hangi dosya içeren tüm bilgiler, sen büyük olasılıkla gerekir; (2) yazınC-h-mparedit modunda iken Emacs içinde bir tampon mevcut büyük modu aktif minör modları hakkında bilgi (paredit bunlardan biridir) takip ederek bilgi ile açılır etkin.

    Güncelleme:Ben sadece buldum this cool set of notes Paredit tarafından Phil Hagelberg... Bu bağlantı için bir metin dosyası, hatırlıyorum görmek güzel bir set slaytlar ile bu Bilgi bir yerde ama bulamıyorum şimdi. Her neyse, nasıl çalıştığına dair güzel bir özet olmuş. Kesinlikle bir göz atın, Paredit olmadan artık yaşayamam ve bu dosya çok kolay kullanmaya başlamak için yapmak gerekir sanırım. :-)

  3. AslındaC-h-mkombinasyon hakkında tüm tuş atamaları, clojure modu (hatırlamak isteyeceksiniz . SÜMÜK ÇOĞALTMA aktif söyler ^kbd>C-c C-kherhangi bir Emacs tampon mevcut derleme için tampon göndermeyi ve gerçekten.

Bir dosyadan kod yükleme ve ÇOĞALTMA de deneme olarak: kullanımı söz konusuC-c C-kkombinasyon ÇOĞALTMA, sonra use require geçerli arabellek kendi ad derlemek için. Gelecek, uzakta deney.

Son notlar:

"Klik" sesi önce biraz oynamak için hazır olun. Araçlar dahil bir sürü iş var ve onların etkileşimleri çoğunlukla oldukça düzgündür, ama varsaymak güvenli olacağını noktaya başlangıçta bazı ayarlamalar yapmak zorunda kalmazsınız.

Son olarak, burada kodu biraz başka bir yerde Phil Hagelberg ile serin bir işlevi dayanıyor olsa da) bulamazsın .emacs duruyorum. Ben lein swank ile swank benim örnekleri (Leiningen soğutucu özelliklerinden biri) başlangıç ve clojure-project işlevini kullanma arasında alternatif aşağıda Emacs içinden her şeyi başlatmak için bulundu. Benim en iyi ikinci bir çevre lein swank tarafından sağlanan yakından eşleşen üretmek için yaptım. Oh, ve eğer sadece hızlı ve kirli bir deney için Emacs bir ÇOĞALTMA istiyorsanız, o zaman doğru Kur ile kullanmak gerekirM-x slimedoğrudan.

(setq clojure-project-extra-classpaths
      '(
        ; "deps/"
        "src/"
        "classes/"
        "test/"
        ))

(setq clojure-project-jar-classpaths
      '(
        ; "deps/"
        "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"))))

;;; original due to Phil Hagelberg
;;; (see `Best practices for Slime with Clojure' thread on Clojure Google Group)
(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)
  ;; I'm not sure if I want to mkdir; doing that would be a problem
  ;; if I wanted to open e.g. clojure or clojure-contrib as a project
  ;; (both lack "deps/")
                                        ; (mapcar (lambda (d) (mkdir d t)) '("deps" "src" "classes" "test"))
  (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 (expand-file-name "~/.clojure/clojure.jar")
          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))

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • andyabc45

    andyabc45

    1 Mayıs 2011
  • National Geographic

    National Geo

    7 Mayıs 2006
  • sinumatic

    sinumatic

    19 Aralık 2006