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