2010-10-01 16 views
5

En eclipse, existe esta práctica combinación de teclas CTRL + MAYÚSCULAS + o que incluirá automáticamente las instrucciones de importación (incluidas) que se necesitan según la clase o el módulo que se utiliza. ¿Has encontrado algún plugin para vim o emacs?Auto ¿Incluye instrucciones de importación de python en vim/emacs?

+1

http://stackoverflow.com/questions/3825073/is-there-a-plugin-for-vim-to-auto-import-python-libraries – atomocopter

+1

Quizás deba restringir su pregunta a emacs de vi pero no a ambos , ya que las respuestas serán muy diferentes. –

+0

Hasta donde yo sé, para emacs no existe tal cosa. Sin embargo, si utiliza las mismas dependencias a menudo, puede usar plantillas de emacs (http://emacs-template.sourceforge.net/) para generar un archivo python "en blanco" que contenga sus dependencias importantes. – phimuemue

Respuesta

4

Ropemacsrope-auto-import tiene, de manera que si se escribe

rmtree 

y ejecutar M-x rope-auto-import,

from shutil import rmtree 

se inserta en la parte superior del archivo. Sin embargo, es posible que desee evitar esto, porque la importación de funciones de los módulos may not be a very wise idea.

Consulte this SO post para obtener información sobre la configuración de mazas de cables. El archivo README (por ejemplo, /usr/share/doc/python-ropemacs/README.txt.gz) que viene con ropemacs también tiene información útil para configurar el caché utilizado por el comando ropemacs-auto-import.

+0

unutbu, eso es un puntero útil. Por cierto, no pueden los mazos de cuerda hacer una importación no relativa. Como en, uso shutil.rmtree y cuando hago M-x ropemacs-auto-import, ¿importa shutil? –

+0

@Senthil: Desafortunadamente, AFAIK, 'M-x rope-auto-import' solo puede crear importaciones de la variedad" from X import Y ". – unutbu

+0

@unutbu es un anagrama de Ubuntu. :) – qed

2

Así que estoy contento con esta sencilla función que ya me ahorra repetidos movimientos. Cuando llamo my-python-import-add:

  • me preguntan qué módulos para importar (puedo dar una lista separada por comas como os, sys, from foo import bar, re)
  • inserta ya sea un import xxx declaraciones o la from … que ha escrito.
  • las importaciones están ordenadas.
  • el punto no se movió (por supuesto).

Así, por ejemplo: M-x my-python-import-add RET os, sys, from foo import bar, requests me da:

import os 
import sys 

import requests 

from foo import bar 

ps: se encontró una advertencia: es necesario tener ya una declaración import.


nos basamos en el paquete isort pitón:

pip install isort 

y en el py-isort package (en melpa),

así que lea su ayuda a comprobar cómo personalizar la característica de ordenación. Yo mismo quiero una sola importación por la línea de lo que Setted

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

La función:

edición: Me puso in a gitlab repo

actualización: ahora el símbolo sugiere la palabra en el punto de predeterminado

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

Lo que quizás haré ahora es tomar th e thing-at-point (como sys.argv) y sugerirlo como predeterminado.=> hecho

Estoy seguro de que podemos tener una característica de importación automática útil y completa en emacs.

+0

Gracias, esto funciona muy bien y es mucho más rápido que usar una cuerda. –

+0

¡Genial! :) Por cierto, creé [un repositorio de git] (https://gitlab.com/emacs-stuff/python-import-add), por lo que puede hacer un seguimiento de los cambios o sugerir mejoras. – Ehvince

Cuestiones relacionadas