44 votes

Mise en retrait des commentaires pour correspondre au code dans vim

Je fais tout mon codage dans vim et en suis assez satisfait (donc, s'il vous plaît, pas de réponses du type "utilisez un éditeur différent"), mais j'ai un problème continu selon lequel la fonction smartindent ne veut pas indenter du tout les commentaires commençant par #. Par exemple, je veux

  # Faire quelque chose
  $x = $x + 1;
  if ($y) {
    # Faire quelque chose d'autre
    $y = $y + $z;
  }

au lieu de la préférence de vim qui est

# Faire quelque chose
  $x = $x + 1;
  if ($y) {
# Faire quelque chose d'autre
    $y = $y + $z;
  }

Les seules façons que j'ai trouvées pour empêcher les commentaires d'être envoyés au début de la ligne sont soit d'insérer et de supprimer un caractère sur la ligne avant d'appuyer sur # (un inconvénient de devoir se rappeler de le faire à chaque fois) soit de désactiver complètement smartindent (ce qui m'empêche d'augmenter/diminuer automatiquement l'indentation en ouvrant/fermant des accolades).

Comment puis-je configurer vim pour conserver mon indentation pour les commentaires au lieu de les envoyer au début de la ligne ?

46voto

Richard Waite Points 735

Il semble que vous codiez en Perl. Assurez-vous que les éléments suivants sont définis dans votre fichier .vimrc :

filetype plugin indent on
syntax enable

Ces paramètres indiqueront à Vim de définir le type de fichier lors de l'ouverture d'un tampon et de configurer l'indentation et la coloration syntaxique. Pas besoin de définir explicitement smartindent car le fichier de syntaxe Perl inclus dans Vim le configurera automatiquement (ainsi que toutes les autres personnalisations spécifiques à Perl).


Remarque : avoir set smartindent et/ou set autoindent dans ~/.vimrc peut empêcher la solution de fonctionner. Si vous rencontrez des problèmes, recherchez-les.

2 votes

Étrange... Je ne m'attendais pas à ce que cela fasse quelque chose, car j'avais déjà une coloration syntaxique correcte, mais cela a en effet permis de gérer correctement les commentaires également. Apparemment, le plugin d'indentation n'était pas chargé par défaut, alors ?

0 votes

À ma connaissance, il n'est pas configuré pour se charger en fonction du type de fichier. Certains distributeurs de packages modifieront la configuration système par défaut pour définir le plugin à charger par type de fichier, mais cela pose des problèmes lors du passage à des systèmes qui ont la configuration système "réelle" ou différemment configurée.

3 votes

Cela n'aide en rien! Je suis toujours bloqué avec ce problème d'indentation sur l'ordinateur Windows au travail. (gg=G me manque)

18voto

Russell Silva Points 947

Si vous utilisez l'option d'indentation "smartindent", une solution à votre problème est expliquée dans la documentation VIM ":help smartindent":

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

J'utilise "smartindent" et je confirme que la solution décrite fonctionne pour moi. Cela trompe VIM en remplaçant la frappe de "#" par la frappe de "X", puis en appuyant sur la touche de retour arrière, puis en retapant "#". Vous pouvez essayer cela vous-même manuellement et voir que cela ne déclenche pas la désindentation automatique.

10voto

Ben Hoffstein Points 44398

Ce problème peut être résolu en mettant le contenu suivant dans votre fichier _vimrc.

set cindent
set cinkeys=0{,0},!^F,o,O,e " par défaut : 0{,0},0),:,0#,!^F,o,O,e

Plus d'informations...

0 votes

Notez que la réponse de Richard Waite est de loin bien meilleure. Vim sait comment indenter correctement la plupart des fichiers, alors laissez-le faire.

2 votes

Je laisserai ma réponse ici au cas où quelqu'un utiliserait une version plus ancienne de Vim qui ne prend pas en charge les plugins de type de fichiers, mais je recommande d'utiliser la solution de Richard Waite chaque fois que possible.

7voto

Paul Tomblin Points 83687

Je pense que "smartindent" est conçu pour le langage C, donc il considère que "#" est le début d'une directive du préprocesseur au lieu d'un commentaire. Je ne connais pas de solution pour cela, sauf si vous tapez un espace, puis un retour en arrière, puis le "#", il ne le fera pas.

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