1115 votes

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

J'ai un fichier de code Ruby ouvert dans vi, il y a des lignes commentées avec # :

class Search < ActiveRecord::Migration
  def self.up
    # create_table :searches do |t|
    #   t.integer :user_id
    #   t.string :name
    #   t.string :all_of
    #   t.string :any_of
    #   t.string :none_of
    #   t.string :exact_phrase
    # 
    #   t.timestamps
    # end
  end

  def self.down
    # drop_table :searches
  end
end

Supposons que je veuille décommenter toutes les lignes du premier fichier def ... end section. Quel est le moyen le plus efficace de faire cela dans Vim ?

En général, je cherche un moyen facile et fluide de commenter et décommenter des lignes. Ici, il s'agit de code Ruby, mais il pourrait s'agir de JavaScript ( // ) ou Haml ( -# ).

2420voto

CMS Points 315406

Pour les tâches que j'utilise la plupart du temps sélection des blocs .

Mettez votre curseur sur le premier # caractère, appuyez sur CtrlV (ou CtrlQ pour gVim), et descendez jusqu'à la dernière ligne commentée et appuyez sur <code>x</code> qui supprimera toutes les # caractères verticalement.

Pour commenter un bloc de texte, c'est presque la même chose : d'abord, allez à la première ligne que vous voulez commenter, appuyez sur CtrlV et sélectionnez jusqu'à la dernière ligne. Ensuite, appuyez sur <code>I</code><code>#</code>Esc (puis donnez-lui une seconde), et il insérera un # sur toutes les lignes sélectionnées. Pour la version dépouillée de vim fournie par défaut avec debian/ubuntu, tapez : s/^/# dans la deuxième étape à la place.

798voto

clover Points 651

Pour commenter des blocs dans vim :

  • touchez ctrl + v (mode bloc visuel)
  • utilisez les flèches vers le bas pour sélectionner les lignes que vous voulez (tout ne sera pas mis en évidence)
  • Shift + i (majuscule I)
  • insérez le texte que vous voulez, par exemple "%".
  • Pulse ESC

Donne-lui une seconde pour travailler.

319voto

Magnus Points 2101

Sur ma machine, j'utilise simplement le plugin NerdCommenter. Cependant, il m'arrive souvent de me retrouver dans une boîte distante où ce plugin n'est pas installé.

Dans ce cas, une alternative de faible technicité consiste à utiliser la commande "norm", qui se contente d'appliquer n'importe quelle commande vim arbitraire à chaque ligne dans une région que vous spécifiez. Par exemple :

Commentant avec # :

1. visually select the text block (using V as usual)
2. :norm i#

Ceci insère "#" sur chaque ligne. Notez que lorsque vous tapez :, l'intervalle sera rempli, donc cela ressemblera réellement à :'<,'>norm i#

Décommenter # :

1. visually select the text block as before (or type gv to re-select the previous selection)
2. :norm x

Cela supprime le premier caractère de chaque ligne

Notez également que, puisque Norm ne fait qu'exécuter des commandes vim normales, vous n'êtes pas limité aux commentaires, vous pouvez effectuer des modifications complexes sur chaque ligne.

Si vous avez besoin du caractère d'échappement dans le cadre de votre séquence de commandes, tapez simplement ctrl-v puis appuyez sur la touche d'échappement.

171voto

Manuel Ceron Points 3568

J'utilise le NERD Commenter script . Il vous permet de commenter, décommenter ou basculer facilement les commentaires dans votre code.

116voto

jqno Points 7831

J'ai les éléments suivants dans mon .vimrc :

" Commenting blocks of code.
autocmd FileType c,cpp,java,scala let b:comment_leader = '// '
autocmd FileType sh,ruby,python   let b:comment_leader = '# '
autocmd FileType conf,fstab       let b:comment_leader = '# '
autocmd FileType tex              let b:comment_leader = '% '
autocmd FileType mail             let b:comment_leader = '> '
autocmd FileType vim              let b:comment_leader = '" '
noremap <silent> ,cc :<C-B>silent <C-E>s/^/<C-R>=escape(b:comment_leader,'\/')<CR>/<CR>:nohlsearch<CR>
noremap <silent> ,cu :<C-B>silent <C-E>s/^\V<C-R>=escape(b:comment_leader,'\/')<CR>//e<CR>:nohlsearch<CR>

Fonctionne à la fois en mode normal et en mode visuel.

(Je l'ai volé sur un site web il y a de nombreuses années, donc je ne peux plus expliquer complètement comment il fonctionne :)).

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