2011-10-05 15 views
7

Así que aquí están mis problemas. Digamos que tengo un archivo Python y estoy escribiendo una línea muy larga, como la última vez aquí:¿Cómo puedo arreglar el comportamiento de línea de Vim para líneas largas en Python?

class SomeClass(object): 
    def some_method(self): 
    some_variable = SomeOtherClass.some_other_method(some_parameter=some_value) 

Cuando escribo esto en Vim, esto sucede:

class SomeClass(object): 
    def some_method(self): 
    some_variable = 
    SomeOtherClass.some_other_method(some_parameter=some_value) 

Eso no es sólo mal estilo, rompe PEP8. Lo que me gustaría que suceda es:

class SomeClass(object): 
    def some_method(self): 
    some_variable = SomeOtherClass.some_other_method(
     some_parameter=some_value) 

que está en consonancia con PEP8. (Para los propósitos de esta discusión, sólo estoy interesado en el comportamiento de la línea de ruptura, no el comportamiento sangría.)

Editar:breakat sólo funciona en conjunción con linebreak para gobernar cómo se muestran las líneas. No funciona (aparentemente) junto con textwidth para determinar dónde se insertan los saltos de línea. Entonces mi idea a continuación no funcionará ...

Sorprendentemente, no he encontrado nada por ahí que indique que otros comparten este problema, lo que me lleva a pensar que estoy haciendo algo mal. Sin embargo, mi idea era agregar el carácter ( a la configuración breakat (junto con [ y { mientras estaba en ello).

He intentado esto; Aquí está la salida de :set breakat:

breakat= ^[email protected]*-+;:,./?([{ 

Sin embargo, es en vano. No importa lo que haga, Vim insiste en romper después del "=" de arriba. También tengo el mismo problema con los nombres largos de funciones, donde se romperá justo después de def.

Éstos son el contenido completo de mi .vimrc: (. Yo no tienen plugins, etc. instalado con el fin de tratar de resolver esto)

set nobackup 
set nowritebackup 
set noswapfile 
set columns=80 
set tabstop=4 
set shiftwidth=4 
set softtabstop=4 
set autoindent 
set smarttab 
set smartindent 
set textwidth=80 
set wrap 
set breakat=\ ^[email protected]*-+;:,./?\(\[\{ 
filetype indent on 
filetype on 
filetype plugin on 

¿Alguien tiene alguna idea de cómo Puedo hacer que Vim obedezca mi configuración de golpes, o cualquier otro pensamiento sobre la mejor manera de lidiar con este comportamiento?

+0

agregó una nota sobre pythonTidy a mi respuesta. –

Respuesta

3

No está configurando el salto de línea. Sin él, vim ignora la variable breakat. Ver here para más detalles, y mucha bondad vim. También tenga en cuenta que necesita establecer nolist ya que rompe linebreak.

Otra publicación de blog relacionada con el ajuste de palabra here. Este señala que algunos tipos de archivos no incluyen automáticamente el indicador de opciones de formato "t". Sin eso, el autoenvoltura no ocurre.

Creo que lo más simple sería agregar un mapeo para ejecutar :%! pythonTidy. pythonTidy es una secuencia de comandos, en python, para tomar el código python en stdIn y enviar una versión bonita a stdOut. Con esa asignación, le permitirá ejecutarlo en su archivo actual y reemplazar todo el contenido con la versión reformateada. Agregue un autocomando para ejecutar esto cada vez que salga del modo de inserción en los archivos de Python, y debe estar configurado.

+0

Hm. Intenté con 'set linebreak' y' set nolist'. Eso no funciona para mí.De hecho, incluso intenté eliminar el espacio char del breakat. Esto no cambió el comportamiento. Cuando estoy escribiendo una larga línea, Vim acaba de romper una nueva línea en el espacio sin importar lo que haga ... – jsdalton

+0

De acuerdo, bueno, veo el problema. 'linebreak' y' breakat' solo rigen la forma en que se muestran las líneas, mientras que 'textwidth' inserta saltos de línea dura reales. Este es el comportamiento que quiero. Parece, sin embargo, que el ancho de texto es "tonto" y solo agrega saltos de línea en el espacio en blanco. ¿Entonces supongo que necesito una forma de modificar el comportamiento de inserción de salto de línea de textwidths? – jsdalton

+0

Desde que mencionó PEP8, creo que quiere linebreaks duros, es decir, no hay líneas de más de 80 caracteres. Sin embargo, prefiero usar líneas de 100 caracteres, 80 es bastante breve, especialmente si tiene algunas cadenas codificadas, y hoy en día casi nadie está limitado a un ancho de terminal de 80 caracteres – ThiefMaster

Cuestiones relacionadas