75 votes

Vim supprime automatiquement l'indentation des commentaires Python

J'utilise Vim et j'édite des scripts Python.

L'indentation automatique fonctionne plutôt bien en général, mais lorsque je commence une nouvelle ligne et que je tape '#' pour saisir un commentaire, Vim désindente cette ligne pour moi.

Par exemple, si vous avez

def foo():

et j'appuie sur entrée, Vim indentera correctement

def foo():
    pass

mais, si au lieu de taper pass Je tape # il se désolidarise automatiquement

def foo():
# comment

class Thing():
    def __init__(self):
         pass
# comment line gets unindented all the way

mon fichier .vimrc suit. Quelqu'un sait-il pourquoi cela se produit ?

set tabstop=4
set smartindent
set shiftwidth=4
set expandtab
set backspace=indent,eol,start
set scrolloff=3
set statusline=%f%m%r%h%w\ [%Y\ %{&ff}]\ [%l/%L\ (%p%%)]
set laststatus=2

58voto

Michał Marczyk Points 54179

Réglage de smartindent on fait que Vim se comporte comme vous le décrivez pour moi, alors qu'avec nosmartindent (ce que j'ai tendance à utiliser), il se comporte comme vous le souhaiteriez.

Mise à jour : D'après les documents sur smartindent :

Lorsque vous tapez '#' comme premier caractère d'une nouvelle ligne, l'indentation de la ligne est modifiée. cette ligne est supprimée, le '#' est placé dans la première colonne. L'indentation est restauré pour la ligne suivante. Si vous ne voulez pas cela, utilisez ceci mappage : ":inoremap # X^H#", où ^H est entré avec CTRL-V CTRL-H. Lorsque vous utilisez la commande ">>", les lignes commençant par '#' ne sont pas décalées à droite.

Ça semble être ça.


Mise à jour : Il n'est probablement pas nécessaire de s'occuper de ce qui suit... Je le laisse ici pour la valeur informative supplémentaire ;-)

Si le réglage nosmartindent ne vous aide pas, vous pourriez peut-être utiliser l'option :set -- sans paramètres -- pour obtenir la liste de tous les paramètres en vigueur dans votre session Vim, puis collez-la quelque part (sur Pastie peut-être). Il y a quelques autres options qui affectent l'indentation automatique, pour autant que je me souvienne.

18voto

Jefromi Points 127932

Bien que le post de Michał explique ce que fait smartindent, vous pouvez faire beaucoup mieux que de simplement le désactiver. Vous pourriez le configurer plus à votre goût, ou mieux encore, laisser Vim choisir une meilleure indentation pour vous. Avec ce qui suit dans votre vimrc à la place des autres paramètres d'indentation :

filetype indent on

Vim utilisera automatiquement le plugin d'indentation approprié pour python. C'est bien mieux que de ne pas désindenter une # ligne - à peu près tout devrait être indenté correctement.

6voto

zzart Points 2162

Vous pouvez essayer une option uniquement pour les fichiers python :

autocmd BufRead *.py inoremap # X<c-h>#<space>

3voto

Michael Härtl Points 4576

Pour une raison inconnue, le comportement ci-dessus a été causé lorsque j'avais cindent sur. Le désactiver a réglé le problème pour moi. Aucune des autres corrections ci-dessus n'a aidé.

-2voto

Chronial Points 15402

Si vous installez ce script, vous aurez approprié indentation en python (pep8) :

http://www.vim.org/scripts/scripts.php?script_id=974

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X