Pull to refresh

Comments 7

Поделюсь ка я и своим init.el, может кому пригодится.

~/.emacs.d/init.el
;; path
(setq root-dir (expand-file-name "~/.emacs.d"))
(add-to-list 'load-path root-dir)
;; (add-to-list 'load-path (concat root-dir "/misc"))

(global-set-key "\C-q" 'save-buffers-kill-terminal)
(cua-mode)
(show-paren-mode)

;; fixing xterm bug
(define-key input-decode-map "\e[1;2A" [S-up])


;; Marmelade
(require 'package)
(add-to-list 'package-archives 
    '("marmalade" .
      "http://marmalade-repo.org/packages/"))
(package-initialize)


;; Programming shortcuts
;; (global-set-key (kbd "C-_") 'comment-region)


;; Clojure: nrepl
(when (not (package-installed-p 'nrepl))
  (package-install 'nrepl))

;; Clojure: key bindings
(add-hook 'clojure-mode-hook
	  '(lambda () (local-set-key "\C-d" 'nrepl-eval-expression-at-point)))


;; Python
;; NOTE: this section contains a number of useful setting for all modes, 
;; not only python mode! 
(add-to-list 'load-path "~/.emacs.d/emacs-for-python/") 
(require 'epy-setup)      ;; It will setup other loads, it is required!
(require 'epy-python)     ;; If you want the python facilities [optional]
(require 'epy-completion) ;; If you want the autocompletion settings [optional]
(require 'epy-editing)    ;; For configurations related to editing [optional]
(require 'epy-bindings)   ;; For my suggested keybindings [optional]
(require 'epy-nose)       ;; For nose integration
(epy-setup-ipython)
(setq skeleton-pair nil)

(defun trim-string (string)
  (replace-regexp-in-string "\\`[ \t\n]*" "" 
			    (replace-regexp-in-string "[ \t\n]*\\'" "" string)))

(defun python-shell-send-line () 
  (interactive)
  (python-shell-send-string (trim-string (thing-at-point 'line)) nil t))


(add-hook 'python-mode-hook
          '(lambda ()
             (local-set-key (kbd "C-d") 'python-shell-send-line)
             (local-set-key (kbd "C-c C-k") 'python-shell-send-buffer)
             (local-set-key (kbd "C-c !") 'run-python)
             (pretty-lambda-mode)
             (jedi:setup)
             (setq jedi:setup-keys t)
             (setq jedi:complete-on-dot t)))

;; (setq python-remove-cwd-from-path nil)
;; (require 'ipython)
;; (setq py-shell-name "ipython")


;; Ruby
(add-to-list 'load-path "~/.emacs.d/ruby")
(autoload 'ruby-mode "ruby-mode"
  "Mode for editing ruby source files")
(add-to-list 'auto-mode-alist '("\\.rb$" . ruby-mode))
(add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
(autoload 'run-ruby "inf-ruby"
  "Run an inferior Ruby process")
(autoload 'inf-ruby-keys "inf-ruby"
  "Set local key defs for inf-ruby in ruby-mode")
(add-hook 'ruby-mode-hook
	  '(lambda ()
	     (inf-ruby-keys)
	     (local-set-key "\C-d" 'ruby-send-definition)))
(add-hook 'ruby-mode-hook 'turn-on-font-lock)


;; Octave
(autoload 'octave-mode "octave-mod" nil t)
(setq auto-mode-alist
      (cons '("\\.m$" . octave-mode) auto-mode-alist))

(add-hook 'octave-mode-hook
	  (lambda ()
	    (abbrev-mode 1)
	    (auto-fill-mode 1)
	    (if (eq window-system 'x)
		(font-lock-mode 1))))

(add-hook 'octave-mode-hook 
          (lambda () 
            (local-set-key "\C-d" 'octave-send-block)
	    (local-set-key "\C-f" 'octave-send-defun)
	    (local-set-key "\C-j" 'octave-send-line)))


;; R
(add-to-list 'auto-mode-alist '("\\.r$" . R-mode))
(add-to-list 'auto-mode-alist '("\\.R$" . R-mode))


;; PHP
(add-to-list 'auto-mode-alist '("\\.php$" . php-mode))
(add-hook 'php-mode-hook 
          (lambda () 
	    (setq tab-width 4) ; or any other preferred value
	    (defvaralias 'c-basic-offset 'tab-width)
	    (defvaralias 'cperl-indent-level 'tab-width)))

;; Markdown
(add-to-list 'auto-mode-alist '("\\.md" . markdown-mode))


(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(font-lock-comment-face ((t (:foreground "magenta")))))


В файле собраны настройки для Clojure, Python, Ruby, Octave, R, PHP и Markdown, а также некоторые настройки шрифтов, фикс для бага xterm (из-за которого в консольной версии курсор не двигается вверх), плюс пара горячих клавиш, к которым у меня лежала душа. Код разбит на секции, и любую из них можно выбросить без вреда для здоровья. Исключение — секция для Python, где прописаны настройки emacs-for-python, влияющие на поведение всего редактора. Если что-то не работает, скорее всего не хватает либо имаксовских пакетов, либо внешних библиотек, что, впрочем, обычно чинится за 15-20 минут.
Сейчас в репо пакет называется nav, а не emacs-nav.

P.S. А как же без elscreen? Без вкладок неудобно, имхо.
Когда переходил с больших IDE тоже так думал. Потом попробовал без них, и оказалось что буферов хватает и регистров хватает с головой.
А для какой версии Питона все это должно работать? А то у меня стоит 2.7.5 и 3.x.x и в итоге, как бы я не настраивал, ничего не вышло.
Теоретически должно работать на любой версии, у меня на 2.7.3 и 2.7.5 все дополняет. Тут больше играет роль версия Emacs, она у Вас точно 24?
Да, 24-я. Я сделал все заново и работает, хотя пришлось помучиться с установкой пакетов на сам питон. Какие-то пакеты из оф. репозитория не подошли, или это совсем не то, что нужно. В общем, пошел другим путем, используя pip. Спасибо за инструкцию :)
Only those users with full accounts are able to leave comments. Log in, please.