自动在vim / emacs中包含python import语句?

时间:2010-10-01 10:57:50

标签: python emacs vim

在eclipse中,有一个方便的简写CTRL + SHIFT + o,它将自动包含基于所使用的类或模块所需的导入(包含)语句。 你有没有为vim或emacs找到这样的插件?

2 个答案:

答案 0 :(得分:4)

Ropemacsrope-auto-import,所以如果你写

rmtree

并执行M-x rope-auto-import

from shutil import rmtree

插入文件的顶部。您可能希望避免这种情况,因为从模块may not be a very wise idea.

导入函数

有关设置ropemacs的信息,请参阅this SO post。 ropemacs附带的自述文件(例如/usr/share/doc/python-ropemacs/README.txt.gz)也提供了有用的信息,用于设置ropemacs-auto-import命令使用的缓存。

答案 1 :(得分:2)

所以我对这个简单的功能感到满意,这个功能已经为我节省了多次动作。当我致电my-python-import-add时:

  • 我被问到要导入哪些模块(我可以给出一个逗号分隔的列表,如os, sys, from foo import bar, re
  • 它会插入import xxx语句或您输入的from …
  • 导入已排序。
  • 这一点没有动(当然)。

例如:M-x my-python-import-add RET os, sys, from foo import bar, requests给了我:

import os
import sys

import requests

from foo import bar

ps:发现一个警告:你需要有一个import声明。


我们依赖isort python包:

pip install isort

并在py-isort package(在Melpa中),

请阅读他们的帮助,了解如何自定义排序功能。我自己想要一行一行导入,所以我设置了

(setq py-isort-options '("--force_single_line_imports"))

功能:

修改:我把它in a gitlab repo

更新:现在默认情况下,提示会在点处显示单词

(require 's)  ;; melpa
(require 'dash)  ;; melpa

(require 'py-isort)  ;; melpa

(defun my-insert-import (to_insert)
  (newline)
  (if (s-starts-with? "from" (s-trim to_insert)) (insert (s-trim to_insert))
    (insert "import " to_insert))
  )

(setq py-isort-options '("--force_single_line_imports"))


(defun python-import-add (to_import)
  "Adds an import statement for every given module. Can give a comma-separated list of modules, like:
M-x my-python-import-add RET os, sys, from foo import bar, re RET"
  (interactive "swhat to import ? ")
  (beginning-of-buffer)
  (save-excursion
    (search-forward-regexp "\\(^from \\)?.*import [a-z]+")  ;; if not found ?
    (end-of-line)
    ;; split the arguments by spaces:
    (setq to_insert (s-split "," to_import))
    ;; insert each elt of the list:
    (-map 'my-insert-import to_insert)
    ;; sort the imports: (set your py-isort options. See isort -h)
    (py-isort)
    )
  )

我现在可能会做的就是抓住事情(如sys.argv)并将其作为默认值。的 =>完成

我相信我们可以在emacs中拥有有用且完整的自动导入功能。