2011-10-05 2 views
7

Alors, voici mes problèmes. Disons que j'ai un fichier Python et je tape une ligne très longue, comme le dernier ici:Comment est-ce que je peux fixer le comportement de Vim pour les longues lignes en Python?

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

Lorsque je tape ce dans vim, cela se produit:

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

Ce n'est pas seulement mauvais style, il casse PEP8. Ce que je voudrais arriver est:

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

Ce qui est conforme à PEP8. (Aux fins de cette discussion, je suis seulement intéressé par le comportement de rupture de ligne, pas le comportement de retrait.)

Edit:breakat fonctionne uniquement conjointement avec linebreak pour régir la façon dont les lignes sont affichées. Il ne fonctionne pas (apparemment) en conjonction avec textwidth pour déterminer où les coupures de lignes dures sont insérées. Donc, mon idée ci-dessous ne fonctionnera pas ...

Étonnamment, je n'ai rien trouvé là-bas indiquant d'autres partagent ce problème, ce qui me conduit à penser que je fais quelque chose de mal. Néanmoins, mon idée était d'ajouter le caractère ( au paramètre breakat (avec [ et { pendant que j'y étais).

J'ai essayé ceci; voici la sortie de :set breakat:

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

Cependant, il est vain. Quoi que je fasse, Vim insiste pour rompre après le "=" ci-dessus. J'ai le même problème avec les noms de fonctions longues, où il va se casser juste après def.

Voici le contenu complet de mon .vimrc: (. Je n'ai pas de plugins, etc. installé dans le but d'essayer de comprendre cela)

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 

Quelqu'un at-il une idée Je peux demander à Vim d'obéir à mon réglage de breakat, ou à d'autres réflexions sur la meilleure façon de gérer ce comportement?

+0

ajouté note à propos de pythonTidy à ma réponse. –

Répondre

3

Vous ne définissez pas le saut de ligne. Sans cela, vim ignore la variable breakat. Voir here pour plus de détails, et beaucoup de bonté vim. Notez également que vous devez définir nolist en cas de rupture de ligne.

Un autre billet de blog traitant de l'emballage de mots here. Celui-ci note que certains types de fichiers n'incluent pas automatiquement les options de format "t". Sans cela, l'habillage automatique ne se produit pas.

Je pense que la chose la plus simple à faire serait d'ajouter dans un mappage pour exécuter :%! pythonTidy. pythonTidy est un script, en python, pour prendre du code python sur stdIn et afficher une jolie version dans stdOut. Avec ce mappage, il vous permettra de l'exécuter sur votre fichier actuel et de remplacer tout le contenu par la version reformatée. Ajoutez une autocommande pour l'exécuter à chaque fois que vous quittez le mode insertion dans les fichiers python, et vous devriez être défini.

+0

Hm. Je l'ai essayé avec 'set linebreak' et' set nolist'. Cela ne marche pas pour moi.En fait, j'ai même essayé de supprimer le caractère espace de breakat. Cela n'a pas changé le comportement. Quand je suis en train de taper une longue ligne, Vim ne fait que casser une nouvelle ligne dans l'espace, peu importe ce que je fais ... – jsdalton

+0

Bon, bon, je vois le problème. 'linebreak' et' breakat' ne gouvernent que la façon dont les lignes sont affichées, alors que 'textwidth' insère des sauts de ligne réels. C'est le comportement que je veux. Il semble, cependant, que textwidth est "bête" et ajoute seulement des sauts de ligne aux espaces. Donc je suppose que j'ai besoin d'un moyen de modifier le comportement d'insertion de saut de ligne textwidths? – jsdalton

+0

Depuis qu'il a mentionné PEP8, je pense qu'il veut des sauts de ligne, c'est-à-dire pas plus de 80 caractères. Cependant, je préfère utiliser des lignes 100-char - 80 est assez court, surtout si vous avez des chaînes codées en dur - et de nos jours, presque personne n'est vraiment limité à 80 caractères de largeur de terminal – ThiefMaster

Questions connexes