2014-02-19 2 views
6

Моя цель - использовать Emacs 24 в качестве моего редактора python (также есть редактор Matlab и R, но это не то, о чем мой вопрос).Какая комбинация python-mode, ipython, (ipython.el) версий/выпусков и init.el/.emacs.d работает?

(Пожалуйста, дайте мне знать, если я оставил какую-либо информацию, или если я не утверждал что-то ясно.)

Я был в состоянии установить мои пакеты и мой файл init.el таким образом, что Я могу получить завершение вкладки, правильное выделение и фрагменты для python. Я использую python-mode.el как мой режим python. Проблемы все вращаются вокруг этого: я хочу использовать ipython как свою оболочку python, чтобы использовать его функции завершения вкладки при отладке скриптов.

  • Однако, когда я запускаю ipython (используя M-x ipython), у меня нет завершения табуляции. Кроме того, он не показывает «[1] в:», однако он показывает «[1]:».
  • Я хотел бы сделать ipython моей оболочкой по умолчанию в Emacs. Однако попытки этого не выполняются (например, установка C: \ PATH \ TO \ IPython.exe на py-python-command).
  • Когда я пытаюсь запустить свой скрипт python с помощью C-c C-c, он запускается с использованием обычного Python и действительно останавливается в позиции, которую я говорю отладчику, чтобы остановить (я использую ipdb.set_trace). однако, когда я использую команду другого типа, которая должна запускать IPython (например, установка области на весь мой скрипт и запуск py-execute-region-ipython), IPython не работает. Он запускает оболочку IPython или, по крайней мере, кажется, но я могу просто набрать оболочку, как это был текстовый редактор (fyi: в мини-буфере он отображает «Comint: run shell-compile»).

Мой вопрос является: Какой комбинацией версий пакетов и LISP коды в моем файле init.el должна позволить мне использовать IPython с завершением вкладки в моих оболочках по умолчанию в Emacs? В случае необходимости я готов отказаться от некоторых пакетов.

Extra Информация:

Из того, что я прочитал на странице проекта Python-mode.el Я понимаю, что есть еще некоторые ошибки, касающиеся IPython с последней версией этого пакета, так что, вероятно, необходимо использовать старую версию. Я много искал поисков решения, и я не смог найти тот, который работает для меня.

Я бегу

My init.эш выглядит (питон материал находится в нижней части):

;; Requisites: Emacs >= 24 
(require 'package) 
(package-initialize) 

(add-to-list 'package-archives 
      '("melpa" . "http://melpa.milkbox.net/packages/")) 
(add-to-list 'package-archives 
      '("marmalade" . "http://marmalade-repo.org/packages/") t) 

(package-refresh-contents) 

(defun install-if-needed (package) 
    (unless (package-installed-p package) 
    (package-install package))) 

;; make more packages available with the package installer --> 
;; removed python mode since the version I got had errors 
(setq to-install 
     '(
;python-mode 
magit yasnippet jedi auto-complete autopair find-file-in-repository flycheck)) 

(mapc 'install-if-needed to-install) 


;;------------R STUFF----------- 

(add-to-list 'load-path "C:\\emacs-24.3\\site-lisp\\ess-13.09-1") 
(setq ess-use-auto-complete t) 
(load "ess-site") 

;;------------MatLab STUFF----------- 
; add folder of matlab-mode.el 
(add-to-list 'load-path "C:\\Users\\Rob Ter Horst\\AppData\\Roaming\\.emacs.d\\elpa\\matlab-mode-20130829.142") 
(load-library "matlab-load") 

(matlab-cedet-setup) 


(setq matlab-show-mlint-warnings t) 
(add-hook 'matlab-mode-hook 'auto-complete-mode) 
(add-hook 'matlab-mode-hook 'mlint-minor-mode) 
;;------------GENERAL STUFF----------- 

; Ido mode: Ido-powered versions of code. Most ido commands are named ido-xxxxx 
; so find-file becomes ido-find-file, and so on. 
(setq ido-enable-flex-matching t) 
(setq ido-everywhere t) 
(ido-mode t) 
(global-linum-mode t) 
;Use y or n always instead of yes/no 
(defalias 'yes-or-no-p 'y-or-n-p) 

;; -------------------- extra nice things Andrea Crotti-------------------- 
;; use shift to move around windows 
(windmove-default-keybindings 'shift) 
(show-paren-mode t) 
; Turn beep off 
(setq visible-bell nil) 
(custom-set-variables 
'(ansi-color-names-vector ["#242424" "#e5786d" "#95e454" "#cae682" "#8ac6f2" "#333366" "#ccaa8f" "#f6f3e8"]) 
'(custom-enabled-themes (quote (wheatgrass)))) 
(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. 
) 
(put 'downcase-region 'disabled nil) 

;;------------PYTHON STUFF----------- 
;(require 'magit) 
;(global-set-key "\C-xg" 'magit-status) 

(require 'auto-complete) 
(require 'autopair) 
(require 'yasnippet) 
(require 'jedi) 

;yasnipped settings 
(setq yas-snippet-dirs 
     '("C:\\Users\\Rob Ter Horst\\AppData\\Roaming\\.emacs.d\\elpa\\yasnippet-20140106.1009\\snippets")) 
(add-to-list 'load-path "C:\\Users\\Rob Ter Horst\\AppData\\Roaming\\.emacs.d\\elpa\\yasnippet-20140106.1009") 

(global-set-key [f7] 'find-file-in-repository) 

; auto-complete mode extra settings 
(setq 
ac-auto-start 2 
ac-override-local-map nil 
ac-use-menu-map t 
ac-candidate-limit 20) 

;; ;; Python mode settings 
(setq py-install-directory "C:\\Users\\Rob Ter Horst\\AppData\\Roaming\\.emacs.d\\self_installed\\python-mode.el-6.1.3") 
(add-to-list 'load-path py-install-directory) 
(add-to-list 'auto-mode-alist '("\\.py$" . python-mode)) 
(when (featurep 'python) (unload-feature 'python t)) 
(require 'python-mode) 

(setq py-electric-colon-active t) 
(add-hook 'python-mode-hook 'autopair-mode) 
(add-hook 'python-mode-hook 'yas-minor-mode) 
(add-hook 'python-mode-hook 'auto-complete-mode) 

;; ;; Jedi settings 

;; It's also required to run "pip install --user jedi" and "pip 
;; install --user epc" to get the Python side of the library work 
;; correctly. 
;; With the same interpreter you're using. 

;; if you need to change your python intepreter, if you want to change it 
;; (setq jedi:server-command 
;;  '("python2" "/home/andrea/.emacs.d/elpa/jedi-0.1.2/jediepcserver.py")) 

(add-hook 'python-mode-hook 
      (lambda() 
      (jedi:setup) 
      (jedi:ac-setup) 
      (local-set-key "\C-cd" 'jedi:show-doc) 
      (local-set-key (kbd "M-SPC") 'jedi:complete) 
      (local-set-key (kbd "M-.") 'jedi:goto-definition))) 

; ipython settings 

(setq py-python-command "C:\\Python27\\Scripts\\ipython.exe") 
(setq py-complete-function 'ipython-complete 
     py-shell-complete-function 'ipython-complete 
     py-shell-name "ipython" 
     py-which-bufname "IPython") 
;(require 'ipython) 

;With tab autocompletion in ipdb I get an error that might be solved by changing this var 
;the error: "variable binding depth exceeds max-specpdl-size" 
(setq max-specpdl-size 32000) 

; Try to add flycheck --> flycheck causes emacs to become incredibly slow on big script with 
; many style errors (as present in a lot of my older scripts, so I do not want to activate it 
; by default 
;(setq flycheck-highlighting-mode 'lines) 
;(add-hook 'python-mode-hook 'global-flycheck-mode) 
;(flycheck-select-checker 'python-flake8) 
;(provide 'init-flycheck) 

(yas-reload-all) 

ответ

-1

Я не использую Emacs (я VIM вентилятор), но, как правило, когда IPython не выполняет автодополнение это означает, отсутствующий модуль Readline https://pypi.python.org/pypi/readline/6.2.2

+0

Почему это проголосовали? Я согласен с тем, что это может быть не особая проблема, но комментарий полностью действителен и по теме. Я столкнулся с этой проблемой до того, как и проверка и установка readline обычно решали ее для меня. – user590028

+0

Я не проголосовал за вас, но мое впечатление (хотя и не указано) заключается в том, что Rubbert * имеет * рабочее завершение TAB в ipython за пределами Emacs, и в этом случае ответ, вероятно, не по-теме. Это только мое предположение. – phils

1

В IPython-оболочке, как питон-mode.el обеспечивает его TAB вызовов py-indent-line. Таким образом, циклические возможные отступы работают как в буфере сценариев. Завершение составляет M-TAB. Вы можете переопределить эти ключи.

3

С Emacs24 я использую по умолчанию python.el (не python-mode.el), который начался on github.

  1. , когда я начинаю IPython с python-shell-switch-to-shell или C-c C-p (меню Python -> начать переводчика), я получаю IPython. Завершение работы вкладки.

  2. IPython является интерпретатор питона по умолчанию (см мой файл инициализации)

  3. , когда я начал IPython оболочки я могу отправить файл или выделенную область к нему (команды, доступные в меню), и оценивается правильно.

В качестве примечания, вы можете начать джедаи автодополнение с jedi:setup, когда вы находитесь в оболочке Python. Он дает приятные всплывающие окна с параметрами help и doc, и вы можете стрелять в точку (вместо трех символов). См. IPython auto-completion emacs24 doesn't work. Это можно рассматривать как дополнение, а не замену ipython.

После моей конфигурации:

;; trying ipython tab completion: that works :) 
(setq 
python-shell-interpreter "ipython" 
python-shell-interpreter-args "" 
python-shell-prompt-regexp "In \\[[0-9]+\\]: " 
python-shell-prompt-output-regexp "Out\\[[0-9]+\\]: " 
python-shell-completion-setup-code "from IPython.core.completerlib import module_completion" 
    python-shell-completion-module-string-code "';'.join(module_completion('''%s'''))\n" 
    python-shell-completion-string-code "';'.join(get_ipython().Completer.all_completions('''%s'''))\n" 
    ) 

http://www.emacswiki.org/emacs/PythonProgrammingInEmacs#toc5 взят из

Надеются, что это помогает.