53 votes

Comment configurer vim pour qu'il ne mette pas de commentaires au début des lignes lors de l'édition de fichiers python ?

Lorsque j'ajoute un # en mode insertion sur une ligne vide dans Vim tout en éditant des fichiers python, vim déplace le # au début de la ligne, mais je voudrais que le # soit inséré au niveau de la tabulation où je l'ai entré.

Par exemple, en écrivant ceci dans vim

for i in range(10):
    #

le numéro ne reste pas là où je l'ai entré.

Il est déplacé comme ça, par vim.

for i in range(10):
#

Quelqu'un connaît-il un élément de configuration dans vim qui permettrait de changer cela ?

Si cela peut vous aider, j'utilise Ubuntu 8.10.

0 votes

34voto

Paul D. Eden Points 4842

J'ai trouvé une réponse ici http://vim.wikia.com/wiki/Restoring_indent_after_typing_hash

Il semble que l'option smartindent de vim soit à l'origine du problème. La page référencée ci-dessus décrit des solutions de contournement mais après avoir lu l'aide de smartindent dans vim lui-même (:help smartindent), j'ai décidé d'essayer cindent au lieu de smartindent.

J'ai remplacé

set smartindent

avec

set cindent

dans mon fichier .vimrc

et jusqu'à présent, cela fonctionne parfaitement.

Cette modification a également corrigé le comportement de '<<' et '>>' pour l'indentation des blocs visuels qui incluent des commentaires python.

Il y a plus d'options de configuration et d'informations sur l'indentation dans l'aide vim pour smartindent et cindent (:help smartindent et :help cindent).

2 votes

Ah, j'ai "filetype plugin indent on" dans mon .vimrc, peut-être est-ce la raison pour laquelle cela fonctionne correctement pour moi. vimdoc.sourceforge.net/htmldoc/filetype.html

0 votes

Il a sauvé ma journée. +1 ! :)

0 votes

Existe-t-il des paramètres de configuration recommandés/commons pour cindent ?

21voto

user94368 Points 161

@PolyThinker Bien que je voie souvent cette réponse à cette question, à mon avis ce n'est pas une bonne solution. L'éditeur pense toujours qu'il devrait être indenté à gauche - vérifiez-le en appuyant sur == sur une ligne qui commence par un dièse, ou en appuyant sur = pendant qu'un bloc de code contenant des commentaires est mis en évidence pour le réindenter.

Je recommande vivement filetype indent on et retirer le set smartindent y set autoindent (ou set cindent ) de votre vimrc. Quelqu'un d'autre (apparemment David Bustos) a eu la gentillesse d'écrire un analyseur d'indentation complet pour nous ; il se trouve à $VIMDIRECTORY/indent/python.vim.

(Paul cindent Cette solution fonctionne probablement pour python, mais filetype indent on est beaucoup plus généralement utile).

0 votes

Merci - cela m'a aidé. J'ai eu un problème, à savoir que j'ai essayé "filetype indent on" dans gvim (MacVim) et je n'ai vu aucun changement de comportement. Une fois que j'ai commencé à le tester en l'ajoutant à .vimrc, puis en redémarrant, j'ai vu le changement de comportement.

0 votes

Même problème, j'ai essayé les solutions acceptées (et les permutations), j'ai placé 'filetye indent on' à la fin de .vimrc, et maintenant #commenter python ne dé/outdent pas. Mais maintenant la chose s'indente automatiquement pour moi. Soupir.

0 votes

Désactiver la smartindent ne fonctionne pas pour moi (à la fois sur ubuntu vim et osx mac-vim). Ajouter "filetype indent on" à mon $HOME/.vimrc et redémarrer [g]vim résout mon problème (à la fois sur l'édition python et bash script).

12voto

PolyThinker Points 3473

J'ai les lignes suivantes dans mon .vimrc, qui semble être installé par défaut avec mon Ubuntu 8.10

set smartindent
inoremap # X^H#
set autoindent

Et je n'observe pas le problème. Vous pouvez peut-être essayer ceci. (Notez que ^H doit être entré par Ctrl-V Ctrl-H)

0 votes

Cette correction est décrite dans la documentation ( :help smartindent ). Je pense que set autoindent est redondant ; smartindent l'inclut

4voto

bearvarine Points 51

Ma solution au problème de la non-indentation des # :

Si vous utilisez cindent, sachez qu'il est conçu pour le codage en C et C++. Ici, un # signifie que vous créez un #DEFINE ou un #MACRO(), le comportement est donc correct. Mais pour les autres langages où # est un commentaire, c'est irritant.

Ce qui suit a fonctionné pour moi :

" cindent       enable specific indenting for C code
" set cin       nocin
set cin

" cinkeys       The default cinkeys causes leading # to unindent to column 0.
"               To prevent this, remove the 0# from the definition.
" set cinkeys=0{,0},0),:,0#,!^F,o,O,e - default
set cinkeys=0{,0},0),:,!^F,o,O,e

2voto

too much php Points 27983

C'est dû à la fonction "smartindent". Si vous avez :set smartindent dans votre .vimrc, vous devez le supprimer.

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