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.

18voto

Geoff Reedy Points 16508

Il existe de bons plugins pour aider à commenter/décommenter les lignes. Par exemple Le commentateur NERD .

10voto

Lukas Cenovsky Points 2425

J'ai les lignes suivantes dans mon .vimrc :

" comment line, selection with Ctrl-N,Ctrl-N
au BufEnter *.py nnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N><C-N>    <C-O>mn<C-O>:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N><C-N>    mn:s/^\(\s*\)#*\(.*\)/\1#\2/ge<CR>:noh<CR>gv`n

" uncomment line, selection with Ctrl-N,N
au BufEnter *.py nnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>:s/^#$//ge<CR>:noh<CR>`n
au BufEnter *.py inoremap  <C-N>n     <C-O>mn<C-O>:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR><C-O>:s/^#$//ge<CR><C-O>:noh<CR><C-O>`n
au BufEnter *.py vnoremap  <C-N>n     mn:s/^\(\s*\)#\([^ ]\)/\1\2/ge<CR>gv:s/#\n/\r/ge<CR>:noh<CR>gv`n

Les raccourcis conservent la position de votre curseur et vos commentaires pour autant qu'ils commencent par # (il y a un espace après #). Par exemple :

# variable x
x = 0

Après avoir fait des commentaires :

# variable x
#x = 0

Après le décommencement :

# variable x
x = 0

0 votes

C'est bien, mais je pense que vous feriez mieux d'utiliser l'outil plus simple s/^/#/ regexp. Je préfère que le caractère de commentaire se trouve au début de la ligne... mais plus important encore, "commenter des commentaires" est vraiment très important. Je laisserais également tomber le au BufEnter *.py ya que # sont suffisamment généraux pour que les commandes soient utilisées par défaut dans tous les tampons.

9voto

Magnus Points 2101

Aucun plugin ou mappage requis. Essayez la commande "norm" intégrée, qui exécute littéralement tout ce que vous voulez sur chaque ligne sélectionnée.

Ajouter des commentaires

1. shift V to visually select lines
2. :norm i#

Supprimer # Commentaires

1. visually select region as before
2. :norm x

Ou si vos commentaires sont indentés vous pouvez faire :norm ^x

Remarquez que ce ne sont que des commandes vim ordinaires précédées de ":norm" pour les exécuter sur chaque ligne.

Une réponse plus détaillée pour l'utilisation de la commande "norm" dans une des réponses ici

Quel est le moyen le plus rapide de commenter/décommenter des lignes dans Vim ?

6voto

Abid H. Mujtaba Points 436

NERDcommentateur est un excellent plugin pour les commentaires qui détecte automatiquement un certain nombre de types de fichiers et les caractères de commentaires qui leur sont associés. Ridiculement facile à installer en utilisant Agent pathogène .

Commentaire avec <leader>cc . Décommenter avec <leader>cu . Et faire basculer les commentaires avec <leader>c<space> .

(La valeur par défaut <leader> dans vim est \ )

5voto

Dārayavahuš tdi Points 1001

Franchement, j'utilise un plugin tcomment pour cela. lien . Il peut traiter presque toutes les syntaxes. Il définit de beaux mouvements, et son utilisation avec des comparateurs de blocs de texte spécifiques à python en fait un outil puissant.

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