205 votes

Comment commenter un bloc de code Python dans Vim

Je me demandais s'il existait un mappage de touches dans Vim pour me permettre d'indenter certaines lignes de code (que ces lignes aient été sélectionnées en mode visuel, ou n lignes au-dessus/au-dessous de la position actuelle du curseur).

Donc, en gros, quelque chose qui convertit ce qui suit

def my_fun(x, y):
    return x + y

à

#def my_fun(x, y):
#    return x + y

Je suis d'accord pour utiliser soit # o """ pour avoir commenté les lignes pertinentes. Idéalement, j'aimerais aussi que le même keymapping permette de décommenter les lignes si les lignes données ont été commentées.

0 votes

Pas besoin de réinventer la roue, il existe une plugin : tComment pour vous, qui prend en charge le code (dé)commenté pour plusieurs langues.

444voto

theosp Points 2763

Étape 1 : Allez dans la première colonne de la première ligne que vous voulez commenter.

Initial State

Étape 2 : Presse : Ctrl + v et sélectionnez les lignes que vous voulez commenter :

Select lines

Étape 3 : Shift - <code>I</code>#space (Entrez en mode Insertion à gauche, tapez les caractères à insérer. La sélection disparaîtra, mais toutes les lignes qu'elle contient seront modifiées après l'étape 4).

Comment

Étape 4 : Esc

<Esc>

4 votes

Commenter les lignes de cette façon fonctionne très bien. Existe-t-il un moyen de décommenter ces lignes ? Shift-I # <ESC> n'a pas fonctionné (peut-être que je m'y prends mal).

48 votes

@rishabh-manocha : utilisez le bloc visuel (Ctrl-V) pour sélectionner tous les # ajoutés et tapez x pour les supprimer.

5 votes

Il faut se rappeler que Shift-I signifie "insérer au premier caractère non blanc de la ligne", il ne peut donc pas être utilisé pour supprimer. Faire une sélection visuelle avec Ctrl-V marque les caractères à modifier, puis "x" efface un caractère dans la zone sélectionnée, ce qui finit par effacer les caractères '#'. Voir ":h I" et ":h CTRL-V" dans vim pour plus d'informations.

79voto

ghostdog74 Points 86060

Aller simple manuel

:set number
:10,12s/^/#

4 votes

Mais comment les enlever ?

18 votes

@CharlieParker : :10,12s/^#//

2 votes

Bravo pour la réponse ex (old school :)

57voto

cdated Points 456

Vous pouvez ajouter le mappage suivant à votre .vimrc

vnoremap <silent> # :s/^/#/<cr>:noh<cr>
vnoremap <silent> -# :s/^#//<cr>:noh<cr>

Mettez votre bloc en évidence avec :

Shift+v

# pour commenter vos lignes de la première colonne.

-# pour décommenter de la même manière.

8 votes

Simple, c'est génial ! Merci à vous !

0 votes

Y a-t-il un moyen de faire en sorte que cela ne mette pas à jour le terme de recherche ? Avec hlsearch on, cela finit par mettre en évidence le premier caractère de chaque ligne.

0 votes

Celle-ci prévaut sur # qui est une commande valide et utilisée dans le mode commande cependant

35voto

user2437225 Points 126

Mettez votre bloc en évidence avec : ShiftV

Commentez le bloc sélectionné avec : :norm i# (i minuscule)

Pour décommenter, mettez à nouveau votre bloc en surbrillance et décommentez avec : :norm ^x

El :norm La commande effectue une action pour chaque ligne sélectionnée. Le commentaire insère un # au début de chaque ligne, et le fait de décommenter effacera cet élément. # .

0 votes

Avec un Vim à jour et une configuration simple, la sélection des lignes en mode visuel (avec Shift+v ) et en utilisant ensuite :norm i# ne modifie que la première ligne sélectionnée. Cela fonctionne pour moi pour commenter les lignes 389 à 391 : :389,391norm i #

26voto

J'ai l'habitude de balayer un bloc visuel ( <C-V> ), puis recherchez et remplacez le premier caractère par :

:'<,'>s/^/#

(L'entrée en mode commande avec un bloc visuel sélectionné place automatiquement '<,'> sur la ligne de commande) Je peux ensuite décommenter le bloc en balayant le même bloc visuel et :

:'<,'>s/^#//

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