Авто Включить операторы импорта Python в Vim / Emacs? - PullRequest
5 голосов
/ 01 октября 2010

В eclipse есть эта удобная сокращенная комбинация клавиш CTRL + SHIFT + o, которая будет автоматически включать операторы import (include), которые необходимы на основе используемого класса или модуля.Вы нашли такой плагин для vim или emacs?

Ответы [ 2 ]

4 голосов
/ 01 октября 2010

Ropemacs имеет rope-auto-import, так что если вы пишете

rmtree

и выполняете M-x rope-auto-import,

from shutil import rmtree

вставляется в верхней частифайл.Возможно, вы захотите избежать этого, потому что импорт функций из модулей может быть не очень разумной идеей.

См. в этом посте SO для получения информации о настройке ropemacs.Файл README (например, /usr/share/doc/python-ropemacs/README.txt.gz), который поставляется вместе с romamacs, также содержит полезную информацию для настройки кэша, используемого командой Ropemacs-auto-import.

2 голосов
/ 06 мая 2014

Так что я доволен этой простой функцией, которая уже спасает меня от повторяющихся движений.Когда я звоню 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

пс: найдено одно предупреждение: вам уже нужно иметь оператор import.


Мы полагаемся на пакет isort python:

pip install isort

и py-isort package (в Melpa),

, поэтому прочитайте их, чтобы узнать, как настроить функцию сортировки.Я сам хочу один импорт по строке, поэтому я установил

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

Функция:

edit : я поставил в репозиторий gitlab

обновление : теперь подсказка предлагает слово в точке по умолчанию

(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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...