2013-08-08 3 views
2

Я совершенно новый и для Emacs, и для Clojure, и хотел бы настроить намеки и подсветку синтаксиса, как-то похожие на видео here. Я установил:Как создать emacs для clojure, зло, намек, выделение фона?

  • Emacs 24.x
  • Leiningen 2.x
  • Мармелад

... Тогда в Emacs и с помощью Marmalade, установлены следующие пакеты:

  • Зло
  • clojure-mode
  • nrepl

Мой вопрос с большой идеей заключается в том, как эти основные/второстепенные режимы взаимодействуют и есть ли «правильный» способ установить эти вещи?
Мой вопрос с меньшей идеей заключается в том, как получить симпатичную подсветку синтаксиса и кодовое намекание? Спасибо!

+2

Вы пытаетесь изучить Emacs? Просто хочу отметить, что если вы являетесь пользователем Vim (догадываясь от зла), то vimclojure-static и камин делают для довольно хорошей подсветки синтаксиса и REPL-взаимодействия соответственно. –

+0

Да, я пытаюсь изучить Emacs. Я бы счел себя новичком пользователя Vim, но мне было быстрее установить Evil, чем даже перемещаться по учебнику Emacs, используя ярлыки Emacs по умолчанию. :) Я согласен с другими аспектами кривой обучения Emacs, поскольку, похоже, он лучше интегрируется с Clojure. – hoosierEE

+0

FYI: установка, показанная в видеороликах, доступна здесь: https://github.com/overtone/emacs-live. Вы можете просто установить его, 'lein repl' и M-x nrepl и продолжить. – tungd

ответ

3

Проверьте Emacs Live, его полную конфигурацию emacs, созданную Сэмом Аароном. Он кодирует выделение Clojure, поэтому эта настройка «батареи включена» отлично подходит для кодирования Clojure.

https://github.com/overtone/emacs-live

После того, как вы клонировали это и следовать инструкциям, вы и работает с Clojure, nrepl, мерзавец и многое другое.

+1

, но не злой. И я думаю, что это тяжелая часть. – joefromct

1

Я перечислил свою установку. Некоторое количество вещей избыточно, так как у меня нет , написанных на Clojure некоторое время, но я проверил и все еще работает.

  1. Используйте clojure, чтобы начать nrepl. Возможно, у вас есть проблема с project.clj в соответствующем каталоге, , но вы должны это выяснить.
  2. Открыть исходный файл, например. foo.clj.
  3. Использование C-c C-l для звонка nrepl-load-file Кстати, это канонический ярлык для загрузки файла в неполный процесс. Он будет работать для Common Lisp, Python и т. Д.
  4. Используйте C-c C-z, чтобы переключиться на repl. Это снова канонический ярлык, который работает на многих языках.

Вот код установки:

(require 'clojure-mode) 
(defun set-syntax-parens() 
    "highlight []{} etc." 
    (interactive) 
    (modify-syntax-entry ?[ "(]") 
    (modify-syntax-entry ?] ")[") 
    (modify-syntax-entry ?{ "(}") 
    (modify-syntax-entry ?} "){")) 
(defvar clojure.jars '("clojure-1.3.0.jar" 
         "swank-clojure-1.4.2.jar" 
         "clojure-contrib-1.2.0.jar")) 
(defvar clojure.jars.d (concat dropbox.d "source/clojure/lib/")) 
(defvar clojure.classpath 
    (apply #'concat 
     (mapcar (lambda (jar) (concat clojure.jars.d jar path-separator)) 
       clojure.jars))) 
(setq clojure.classpath 
     (concat clojure.classpath 
       dropbox.d "source/clojure/include/" 
       path-separator)) 
;;;###autoload 
(defun clojure() 
    (interactive) 
    (nrepl-jack-in)) 
(defvar clojure-server-cmd 
    (concat "java -Xss4096k -cp " clojure.classpath " clojure.main &")) 
(add-hook 'clojure-mode-hook 
     (lambda() 
     (set-syntax-parens))) 
(require 'nrepl) 
(add-hook 'nrepl-mode-hook 
     (lambda() 
     (define-key nrepl-mode-map (kbd "C-l") 'nrepl-clear-buffer))) 
+0

Что делать, добавив путь clojure classpath вручную, как это сделать? –

+0

Мне пришлось сделать это, чтобы добавить вкладчик-1.2 обратно в тот же день. Вы все еще можете использовать эту технику, чтобы загрузить материал, который не управляется 'lein' –

+0

Это содержимое вашего файла .emacs? – hoosierEE

1

здесь оперативный участок от my favorite emacs config:

(when (not package-archive-contents)                                  
    (package-refresh-contents))                                    

;; Add in your own as you wish:                                   
(defvar my-packages '(starter-kit starter-kit-lisp starter-kit-bindings clojure-mode                      
         nrepl auto-complete ac-nrepl org rainbow-delimiters)                         
    "A list of packages to ensure are installed at launch.")                             

(dolist (p my-packages)                                     
    (when (not (package-installed-p p))                                  
    (package-install p)))                                     

(require 'ac-nrepl)                                      
(add-hook 'nrepl-mode-hook 'ac-nrepl-setup)                                
(add-hook 'nrepl-interaction-mode-hook 'ac-nrepl-setup)                             
(eval-after-load "auto-complete"                                   
    '(add-to-list 'ac-modes 'nrepl-mode))                                 
(defun set-auto-complete-as-completion-at-point-function()                            
    (setq completion-at-point-functions '(auto-complete)))                             

(add-hook 'auto-complete-mode-hook 'set-auto-complete-as-completion-at-point-function)                      

(add-hook 'nrepl-mode-hook 'set-auto-complete-as-completion-at-point-function)                        
(add-hook 'nrepl-interaction-mode-hook 'set-auto-complete-as-completion-at-point-function)                     
(define-key nrepl-interaction-mode-map (kbd "C-c C-d") 'ac-nrepl-popup-doc)                        
(add-hook 'prog-mode-hook 'auto-complete-mode)                                

(add-hook 'nrepl-interaction-mode-hook                                  
      'nrepl-turn-on-eldoc-mode)                                  

(add-hook 'nrepl-mode-hook 'paredit-mode) 

Включается paredit-mode всюду, который занимает немного привыкнуть, хотя это полностью стоит того, потому что paredit и делает использование Clojure гораздо веселее. По крайней мере, как только вы получите ручку о разрыве и барфинге