python-mode,ipython,(ipython.el)版本/发布和init.el / .emacs.d代码的组合是什么?

时间:2014-02-19 12:47:59

标签: python emacs ipython emacs24 python-mode

我的目标是使用Emacs 24作为我的python编辑器(也有一个Matlab和R编辑器,但这不是我的问题)。

(如果我遗漏了任何信息,或者我没有说明清楚的话,请告诉我。)

我已经能够以这样的方式设置我的包和我的init.el文件,以便我能够获得标签完成,正确的突出显示和python片段。我正在使用python-mode.el作为我的python模式。 问题都围绕着这个:我想使用ipython作为我的python shell,以便在调试脚本时使用它的选项卡完成功能。

  • 但是,当我启动ipython(使用M-x ipython)时,我没有完成标签。此外,它没有显示“[1] in:”,但它确实显示“[1] out:”。
  • 我想让ipython成为我在Emacs中的默认shell。但是,尝试此操作失败(例如将C:\ PATH \ TO \ IPython.exe设置为py-python-command)。
  • 当我尝试使用C-c C-c运行我的python脚本时,它使用普通的Python运行,并且确实停在我告诉调试器停止的位置(我使用ipdb.set_trace)。但是当我使用另一种应该启动IPython的命令时(比如将该区域设置为我的整个脚本并运行py-execute-region-ipython),IPython不起作用。它确实启动了一个IPython shell,或者至少它似乎是,但我可以像在文本编辑器中一样键入shell(fyi:在迷你缓冲区中它显示“Comint:run shell-compile”)。

我的问题是: 我的init.el文件中的包版本和lisp代码的哪些组合应该允许我使用带有tab完成的ipython作为Emacs中的默认shell?如果有必要,我愿意降级一些软件包。

额外信息

从我在Python-mode.el的Project页面上看到的内容我明白,对于使用该软件包的最新版本的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)

;; 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 个答案:

答案 0 :(得分:3)

使用Emacs24,我使用默认的python.el(而不是python-mode.el),它开始on github

  1. 当我用python-shell-switch-to-shellC-c C-p(Python菜单 - >开始解释器)启动ipython时,我得到了ipython。标签完成工作。

  2. ipython是默认的python解释器(请参阅我的初始化文件)

  3. 当我启动ipython shell时,我可以向其发送文件或选定的区域(菜单中提供的命令),并且可以正确评估它。

  4. 作为旁注,当您在python shell中时,可以使用jedi:setup启动jedi自动完成。它提供了带有参数help和doc的漂亮弹出窗口,您可以选择在点(而不是3个字符后)触发它。见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

    希望这有帮助。

答案 1 :(得分:1)

在IPython-shell中,python-mode.el提供 TAB 调用py-indent-line。这样循环可能的缩进就像脚本缓冲区一样。完成位于 M-TAB 。您可以重新定义这些密钥。

答案 2 :(得分:-1)

我不使用Emacs(我是VIM粉丝),但通常当ipython不执行制表符时,这意味着你错过了readline模块https://pypi.python.org/pypi/readline/6.2.2