Какая комбинация версий / выпусков python-mode, ipython, (ipython.el) и кода init.el/.emacs.d?

Моя цель - использовать Emacs 24 в качестве редактора Python (также есть редактор Matlab и R, но это не тот вопрос, о котором я говорю).

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

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

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

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

Дополнительная информация:

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

я бегу

Мой init.el выглядит так (Python вещи внизу):

;; 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)

3 ответа

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

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

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

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

Как примечание, вы можете начать автозаполнение джедая с jedi:setup когда вы находитесь в оболочке Python. Это дает хорошие всплывающие окна с параметрами help и doc, и вы можете выбрать, чтобы запустить его в точке (вместо 3 символов). См. Автозаполнение IPython emacs24 не работает. Это можно рассматривать как дополнение, а не замена 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

Надеюсь это поможет.

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

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

Другие вопросы по тегам