在eclipse中,有一个方便的简写CTRL + SHIFT + o,它将自动包含基于所使用的类或模块所需的导入(包含)语句。 你有没有为vim或emacs找到这样的插件?
答案 0 :(得分:4)
Ropemacs有rope-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中拥有有用且完整的自动导入功能。