Quel est un moyen rapide pour commenter/décommenter les lignes dans Vim?
J'ai un code Ruby d'ouverture de fichier dans le vi, il y a des lignes commentées par #
:
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
Dire que je veux commenter toutes les lignes dans la première def ... end
section. Ce qui est une façon efficace de le faire dans Vim?
En général, je suis à la recherche d'un moyen facile et fluide à commenter et décommentez les lignes. Ici, je m'occupe du code Ruby, mais il pourrait être JavaScript (//
) ou Haml (-#
).
- L'on a accepté la réponse doit être modifiée pour être l'une des réponses a des instructions détaillées sur la manière d'accomplir commenter/décommenter les blocs sans l'aide d'un plugin. Le actuel accepté de répondre est fondamentalement juste un lien vers un tiers plugin.
- Les mieux notées réponse ne pas mentionner les plugins, @rationalis votre commentaire est trompeuse, pourriez-vous s'il vous plaît corriger ou de les supprimer, merci.
Vous devez vous connecter pour publier un commentaire.
- Je utiliser le NERD Intervenant script. Il vous permet de commentaire, décommentez ou passer des commentaires dans votre code.
Comme mentionné dans le commentaires:
=begin
et=end
de commenter plusieurs lignes à la place de balises de hachage.Pour ces tâches, j'utilise la plupart du temps la sélection de bloc.
Placez votre curseur sur le premier
#
caractère, appuyez sur la touche CtrlV (ou CtrlQ pour gVim), et descendre jusqu'à la dernière ligne de commentaire et appuyez sur x, qui va supprimer toutes les#
caractères verticalement.Pour commenter un bloc de texte est presque le même:
VISUAL BLOCK
mode.INSERT
mode, puis appuyez sur #. Cela va ajouter un dièse à la première ligne.#
caractère sur toutes les autres lignes sélectionnées.Pour la stripped-down version de vim livré avec debian/ubuntu par défaut, le type de
: s/^/#
dans la troisième étape, à la place.Voici deux petit écran des enregistrements de référence visuelle.
Commentaire:
Décommenter:
n
(où n est num lignes - 1), j,n
(où n num nombre de longueur de caractère de commentaire de la séquence 1), l, x.(n-1)-l
:s/^#/
Esc
deux fois.#
dans la deuxième étape. Il peut être tout ce que vous voulez.shift I
.gsettings set org.pantheon.terminal.settings natural-copy-paste false
, ou en désactivant le paramètre équivalent dedconf-editor
.apt-get install vim-nox
CTRL-V
sur gvim dans windows ici.s/^/\/\/
pour ajouter//
pour les lignes.shift+I
? Je pense que c'est mieux à l'aide de la commande de changement dec
ous
au lieu de shift+Ishift-I
à partir de visual mode bloc peut être trouvé avec la:help v_b_I
c
à l'étape trois de remplacer à la place de l'insert.v
. Pour moi, il ne fonctionne pasPour commenter les blocs dans vim:
%
De décommenter les blocs dans vim:
Si vous voulez sélectionner plusieurs caractères, l'utilisation d'un ou de combiner ces méthodes:
gcip
). C'est pourquoi j'utilise vim pas parce qu'il a visual-mode bloc aka bloc rectangulaire de sélection: la plupart de l'éditeur aujourd'hui offrir ceci.Parfois, je suis bombardé dans un boîtier déporté où mes plugins et .vimrc ne peut pas m'aider, ou parfois NerdCommenter s'il se trompe (par exemple JavaScript intégré à l'intérieur du HTML).
Dans ces cas, un peu de technologie alternative est intégré dans
norm
de commande, qui passe juste arbitraire vim commandes à chaque ligne de la plage spécifiée. Par exemple:Commentant avec
#
:Cette inserts "#" au début de chaque ligne. Notez que lorsque vous tapez : la gamme sera rempli, donc ça va vraiment ressembler à
:'<,'>norm i#
Décommentant
#
:Cela supprime le premier caractère de chaque ligne. Si j'avais utilisé un 2-char commentaire tel que //alors j'avais tout simplement
:norm xx
pour supprimer à la fois les caractères.Si les commentaires sont en retrait comme dans le cas des OP question, alors vous pouvez ancrer votre suppression comme ceci:
qui signifie "aller au premier caractère non espace, puis supprimer un caractère". Notez qu'à la différence de la sélection de bloc, cette technique fonctionne, même si les commentaires sont inégales indentation!
Note: Depuis
norm
est littéralement l'exécution régulière de vim commandes, vous n'êtes pas limité à des commentaires, vous pouvez également faire un complexe d'édition pour chaque ligne. Si vous avez besoin, le caractère d'échappement dans le cadre de votre séquence de commandes, tapez ctrl-v, puis appuyez sur la touche echap (ou encore plus simple, il vous suffit d'enregistrer un rapide macro et ensuite utiliser la norme pour l'exécution de cette macro sur chaque ligne).Note 2: Vous pouvez bien sûr également ajouter un mappage si vous vous trouvez à l'aide de
norm
beaucoup. Par exemple mettre la ligne suivante dans ~/.vimrc vous permet de taperctrl-n
au lieu de:norm
après avoir fait votre sélection visuelleNote 3: Bare-bones vim n'a parfois pas le
norm
commande compilées, alors assurez-vous d'utiliser le renforcement de la version, c'est à dire typiquement /usr/bin/vim, ce n'est pas /bin/vi(Merci à @Manbroski et @rakslice pour des améliorations intégrées à cette réponse)
:norm ^x
. Cette méthode, en général, a l'avantage de travailler avec les sélections de régions (par exemple,vi{
va sélectionner à l'intérieur des accolades). Ces texte en objet sélecteurs ne fonctionnent pas avecVisual Block
.vim
? Je suis en train de le faire sur 7.2 sur un centos boîte et il affiche le:'<,'>norm i#
comme prévu, mais lorsque j'appuie sur entrer, il ne fait aucun changement pour les lignes qui ont été sélectionnés./bin/vi
est vim 7.2, mais c'est une version différente de/usr/bin/vim
, et il a des caractéristiques comme ce éteint.vip
pour sélectionner un paragraphe entier.norm
est court pournormal
.J'ai la suite dans ma
.vimrc
:Maintenant, vous pouvez taper
,cc
pour commenter une ligne et,cu
décommenter une ligne (fonctionne à la fois en mode normal et en mode visuel).(Je l'ai volé de certains site web il y a plusieurs années donc je ne peux pas expliquer totalement la façon dont il fonctionne plus :). Il y a un commentaire où c'est expliqué.)
<Leader>
(par défaut\
) au lieu de,
et ajoute/supprime le caractère de commentaire après une mise en retrait: gist.github.com/zonidjan/7fc11c2e9574c84383a87a8fcbe4b1caSpécifier les lignes de commentaire dans vim:
Révéler les numéros de ligne:
puis
ou ceci:
:%s/^/#/g
vais commenter toutes les lignes ? Je me demandais le signe de pourcentage%
va{
ou avecvar
pour ruby.Voici comment je le fais:
Aller au premier caractère de la première ligne que vous souhaitez commenter.
Appuyez sur Ctrl+q dans GVIM ou Ctrl+v dans VIM, puis allez vers le bas pour sélectionner le premier caractère sur les lignes de commentaire.
Puis appuyez sur c, et ajouter le caractère de commentaire.
Décommentant fonctionne de la même manière, il suffit de taper un espace au lieu de le caractère de commentaire.
c
supprime le premier caractère. CMS réponse a droite c'est à dire en appuyant surI
puis de taper le caractère de commentaire(s), puisEsc
(c'est sur windows vim)ESC
deux fois après avoir appuyé surc
et cela devrait faire l'affaireJe suis venu avec un simple ajout à mon .fichiers vimrc qui fonctionne plutôt bien et peut être étendu facilement. Il suffit d'ajouter un nouveau type de fichier à la comment_map et son commentaire de chef de file.
J'ai ajouté une cartographie à la normale et visual modes, mais vous pouvez remapper comme vous le souhaitez. Je préfère n'avoir qu'un 'toggle' style de fonction. Un ours ayant des correspondances multiples etc.
Remarque:
Je n'utilise pas de rappels ou des crochets dans les types de fichiers/de chargement, parce que je trouve qu'ils ralentissent Vim de démarrage de plus de la
.vimrc
fonction statique/carte n'mais c'est juste ma préférence. J'ai aussi essayé de rester simple et performant. Si vous n'utilisez autocommands vous devez être sûr de les mettre dans un autocommand groupe ou encore les rappels sont ajoutés au type de fichier plusieurs fois par fichier chargé et entraîner une dégradation des performances.<leader><Space>
déclaration au fond?\zs
et\ze
regex truc, le code est devenu un peu plus petit. vous pouvez le voir iciBascule commentaires
Si vous avez besoin d' bascule commentaires je préfère aller avec commentaire.vim par tpope.
Installation
Agent pathogène:
vim-plug:
Vundle:
De personnalisation
Ajouter à votre .fichiers vimrc:
noremap <leader>/:Commentary<cr>
Vous pouvez maintenant basculer commentaires en appuyant sur
Leader
+/
, tout comme Sublime et de l'Atome.Utiliser ctrl-V pour sélectionner des rectangles de texte: aller à la première
#
de caractère, de type Ctrl+V, déplacer vers la droite une fois, et puis vers le bas, jusqu'à la fin des commentaires. Maintenant, tapezx
: vous êtes à la suppression de tous les#
caractères suivis d'un espace.Voici une partie de mon
.vimrc
:En mode normal et en mode visuel, cela me permet d'appuyer sur ,ic pour insérer des commentaires et,rc pour supprimer des commentaires.
.vimrc
.map
couvre normal et visual modes, de sorte que vous n'avez pas besoin de lavmap
lignesafter/ftplugin/ruby.vim
.<leader>ic
et<leader>rc
J'utilise vim 7.4 et cela fonctionne pour moi.
En supposant que nous sommes commenter/décommenter 3 lignes.
De commentaire:
si la ligne n'a pas d'onglet/espace de au début:
ctrl + V
puisjjj
puisshift + I (cappital i)
puis//
puisesc esc
si la ligne a onglet/espace de au début, vous pouvez faire encore ci-dessus ou d'un swap pour
c
:ctrl + V
puisjjj
puisc
puis//
puisesc esc
Décommenter:
si les lignes ont pas d'onglet/espace de au début:
ctrl + V
puisjjj
puisll (lower cap L)
puisc
si les lignes ont l'onglet/espace de au début, puis de l'espace et
esc
ctrl + V
puisjjj
puisll (lower cap L)
puisc
puisspace
puisesc
J'aime utiliser les tcomment plugin:
http://www.vim.org/scripts/script.php?script_id=1173
J'ai mappé gc et gcc pour commenter une ligne ou un bloc de code. Il détecte le type de fichier et fonctionne vraiment bien.
Avec 30 réponses à l'avance de moi, je vais essayer de donner une même solution plus simple: Insérez un
#
au début de la ligne. Puis allez vers le bas une ligne et appuyez sur la touche point (.
). Répéter, fairej
,.
,j
,.
, etc...décommenter, supprimer un#
(vous pouvez frapperx
sur le#
), et faire l'inverse à l'aide dek
,.
,etc...I#<Esc>j
à le tampon - dire,c
- et puis ne10@c
, ou quel que soit le nombre de lignes qui vous convient.Comment décommentez les trois lignes suivantes dans vi:
Placez le curseur sur le coin supérieur gauche
#
symbole et appuyez sur CtrlV. Cela vous met dans visual en mode bloc. Appuyez sur la flèche vers le bas ou J trois fois pour sélectionner toutes les trois lignes. Appuyez ensuite sur D. Tous les commentaires disparaissent. Pour annuler, appuyez sur U.Comment commenter les trois lignes suivantes dans vi:
Placez le curseur sur le coin supérieur gauche de caractère, appuyez sur la touche CtrlV. Cela vous met dans visual en mode bloc. Appuyez sur la touche ↓ ou J trois fois pour sélectionner toutes les trois lignes. Ensuite, appuyez sur:
I//Esc
C'est un I majuscule, //, et d'Évasion.
Lorsque vous appuyez sur la touche ESC, toutes les lignes seront le symbole de commentaire que vous avez spécifié.
Oui, il y a 33 (surtout répétitives) répond déjà à cette question.
Ici est une autre approche de la façon de lignes de commentaire dans Vim: motions. L'idée de base est de commenter ou décommenter les lignes à l'aide de la même méthode que pour extraire un paragraphe en tapant
yip
ou la suppression de 2 lignes en tapantdj
.Cette approche vous permettra de faire des choses comme:
ccj
de commenter les 2 lignes, etcuk
décommenter;cci{
de commenter un bloc, etcui{
décommenter il;ccip
de commenter un paragraphe entier, etcuip
commenter il.ccG
de commentaire tout en bas de la dernière ligne, etcugg
décommenter tout jusqu'à la première ligne.Tous vous avez besoin sont 2 fonctions qui opérer sur les motions, et 2 des mappages pour chaque fonction. Tout d'abord, les mappages:
(Voir le manuel à propos de la
g@
de l'opérateur et de laoperatorfunc
variable).Et maintenant les fonctions:
Modifier les expressions régulières ci-dessus pour l'adapter à votre goût à l'endroit où le
#
devrait être:- Je utiliser EnhancedCommentify. Il commente tout ce dont j'avais besoin (langages de programmation, scripts, les fichiers de configuration). - Je l'utiliser avec visual-mode liaisons. Il suffit de sélectionner le texte que vous souhaitez faire des commentaires et de la presse co/cc/cd.
Je marque la première et la dernière lignes (ma et mb), et alors :'a,'bs/^# //
Si vous connaissez déjà le numéro de ligne, puis
n,ms/# //
serait de travailler.- Je utiliser Tim du Pape vim-commentaire plugin.
J'ai combiné Phil et jqno réponse et fait untoggle commentaires avec des espaces:
Il y a ce changement de vie plugin par
tpope
appelévim-commentary
https://github.com/tpope/vim-commentary
Ce plugin fournit une:
Utilisation:
:<,'>
:<,'>Commentary
et appuyez sur Entrée.vim-commentary
(comme tous tpope plugins) a le bonus d'être idiomatiques vim.gc
= "aller de commentaire",gcap
= "aller commenter un paragraphe", etc.Cette réponse est ici de 1) montrent le bon code et le coller dans un
.vimrc
pour obtenirvim 7.4+
à faire bloc commenter/décommenter tout en gardant le niveau d'indentation avec 1 raccourci en mode visuel et 2) pour l'expliquer.Voici le code:
Comment cela fonctionne:
let b:commentChar='//'
: Cela crée une variable dans vim. leb
se réfère ici à la portée, qui dans ce cas est contenue dans la mémoire tampon, sens le fichier actuellement ouvert. Votre commentaire personnages sont des chaînes de caractères et doivent être enveloppés dans des guillemets, les guillemets ne font pas partie de ce qui va être remplacées lorsque le basculement des commentaires.autocmd BufNewFile,BufReadPost *...
: Autocommands déclencher sur des choses différentes, dans ce cas, ce sont de déclenchement lorsqu'un nouveau fichier ou de la lecture du fichier se termine par une certaine extension. Une fois déclenchée, l'exécution de la commande suivante, qui nous permet de changer lecommentChar
selon le type de fichier. Il y a d'autres façons de le faire, mais ils sont plus déroutant pour les novices (comme moi).function! Docomment()
: Les fonctions sont déclarées en commençant parfunction
et se terminant avecendfunction
. Les fonctions doivent commencer avec un capital. le!
assure que cette fonction remplace toutes les précédentes fonctions définies commeDocomment()
avec cette version deDocomment()
. Sans le!
, j'ai eu des erreurs, mais ce pourrait être parce que j'ai été de définir de nouvelles fonctions par le biais de la ligne de commandes de vim.execute '''<,''>s/^\s*/&'.escape(b:commentChar, '\/').' /e'
: Exécuter appelle une commande. Dans ce cas, nous sommes d'exécutionsubstitute
, ce qui peut prendre un intervalle (par défaut, c'est la ligne actuelle) comme%
pour l'ensemble de la mémoire tampon ou'<,'>
pour la section en surbrillance.^\s*
est regex pour correspondre au début d'une ligne suivie d'un nombre quelconque d'espaces, qui est ensuite ajouté à la fin (en raison de&
). Le.
ici est utilisé pour la concaténation de chaîne, depuisescape()
ne peut pas être enveloppé dans les citations.escape()
vous permet d'échapper à caractèrecommentChar
qui correspond à la arguments (dans ce cas,\
et/
) en ajoutant avec un\
. Après cela, nous les avons réunis de nouveau à la fin de notresubstitute
chaîne, qui a lae
drapeau. Cet indicateur nous permet d'échouer en silence, ce qui signifie que si nous ne trouvons pas un match sur une ligne donnée, nous ne criez pas à ce sujet. Dans l'ensemble, cette ligne permet de nous mettre un caractère de commentaire suivi d'un espace juste avant le premier texte, ce qui nous permet de maintenir notre niveau d'indentation.execute '''<,''>s/\v(^\s*)'.escape(b:commentChar, '\/').'\v\s*/\1/e'
: Ceci est similaire à notre dernier énorme long de commande. Unique à cette question, nous avons\v
, qui fait en sorte que nous n'avons pas d'échapper à nos()
, et1
, qui se rapporte au groupe que nous avons fait avec notre()
. Fondamentalement, nous sommes correspondant à une ligne qui commence avec un nombre quelconque d'espaces et notre commentaire de caractères suivie d'un nombre quelconque d'espaces, et nous ne gardant que la première série d'espaces. Encore une fois,e
nous permet silencieuse même si nous n'avons pas un caractère de commentaire sur cette ligne.let l:line=getpos("'<")[1]
: il définit une variable comme nous l'avons fait avec notre caractère de commentaire, maisl
se réfère à l'étendue locale (locale à cette fonction).getpos()
obtient la position de l', dans ce cas, le début de notre mise en évidence, et la[1]
signifie que nous ne se soucient que le numéro de la ligne, pas d'autres choses comme le numéro de la colonne.if match(getline(l:line), '^\s*'.b:commentChar)>-1
: vous savez commentif
œuvres.match()
vérifie si la première chose que contient la deuxième chose, si nous prenons la ligne que nous avons commencé notre sélection à la, et de vérifier si elle commence avec un espace suivi par notre caractère de commentaire.match()
renvoie l'index où cela est vrai, et-1
si aucune correspondance n'a été trouvé. Depuisif
évalue différente de zéro tous les numéros pour être vrai, il nous faut comparer notre sortie pour voir si il est supérieur à -1. La comparaison dansvim
retourne 0 si la valeur est false et 1 pour true, ce qui est leif
veut voir à évaluer correctement.vnoremap <silent> <C-r> :<C-u>call Comment()<cr><cr>
:vnoremap
signifie la carte de la commande suivante en mode visuel, mais ne correspondent pas récursivement (sens de ne pas changer toutes les autres commandes qui peuvent utiliser d'autres méthodes). En gros, si vous êtes un vim novice, utilisez toujoursnoremap
pour vous assurer de ne pas casser des choses.<silent>
signifie "je ne veux pas de vos mots, de vos actions" et permet de ne pas imprimer quoi que ce soit à la ligne de commande.<C-r>
est la chose que nous sommes de cartographie, qui est ctrl+r dans ce cas (notez que vous pouvez toujours utiliser le C-r normalement, pour "refaire" en mode normal avec cette cartographie).C-u
est un peu confus, mais, fondamentalement, il fait en sorte de ne pas perdre la trace de votre visuel mettant en évidence (selon cette réponse il rend votre commande démarrer avec'<,'>
qui est ce que nous voulons).call
ici juste indique à vim pour exécuter la fonction que nous avons nommé, et<cr>
se réfère à frapper leenter
bouton. Nous avons pour frapper une fois de réellement appeler la fonction (sinon, nous avons tapé justecall function()
sur la ligne de commande, et nous avons à le frapper de nouveau pour obtenir nos substituts d'aller à travers tout le chemin (pas vraiment pourquoi, mais peu importe).De toute façon, nous espérons que cette aide. Cela va prendre quoi que ce soit mis en évidence avec
v
,V
, ouC-v
, vérifiez si la première ligne est commentée, si oui, essayez de commenter toutes les lignes en surbrillance, et si non, ajouter une couche supplémentaire de caractères de commentaire à chaque ligne. C'est mon comportement souhaité; je n'ai pas juste envie de basculer si chaque ligne dans le bloc a été commenté ou non, de sorte qu'il fonctionne parfaitement pour moi, après demander plusieurs questions sur le sujet.Ici est un one-liner basé sur la
C-v
suivie parI
méthode décrite ci-dessus.Cette commande (
:Comment
) ajoute un choisi chaîne au début de toutes les lignes sélectionnées.Ajoutez cette ligne à votre
.vimrc
pour créer une commande qui accepte un seul argument et les lieux de l'argument au début de chaque ligne dans la sélection actuelle.E. g. si le texte suivant est sélectionné:
et d'exécuter ce:
:Comment //
, le résultat sera:En commençant par les idées de réponses ici, j'ai commencé ma propre fonction de commentaire.
Il permet de basculer commentaires sur et en dehors. Il peut gérer des choses comme
//print('blue'); //this thing is blue
et enclenche le premier commentaire. En outre, il ajoute des commentaires et un espace unique où le premier non espace est et non pas au début de la ligne.Aditionally il n'est pas inutilement copier l'url, mais utilise les zooms (:h \zs de l'aide) pour éviter ce travail supplémentaire, lorsque, commentant et en retrait de la ligne.
Espérons que cela aide certains partisans de là-bas. Les Suggestions sont les bienvenues.
- Je utiliser commentaires.vim de Jasmeet Anand Singh (trouvé sur vim.org),
Il fonctionne avec C, C++, Java, PHP[2345], proc, CSS, HTML, htm, XML, XHTML, vim, vimrc, SQL, sh, ksh, csh, Perl, tex, fortran, ml, caml, ocaml, vhdl, haskel, et les fichiers normaux
Des observations et de l'onu-lignes de commentaires dans différents fichiers source en mode normal et le mode visuel
Utilisation:
La plus rapide et la plus intuitive de la méthode de tous est de reconfigurer
)
pour pied-vers le bas-commentant les lignes, puis(
pour walk-up-décommentant. Essayez-le et vous ne serez pas revenir en arrière.Dans Ruby ou Bash, avec 2 tirets:
Dans C/C++ ou PHP, avec le 4-espace tiret:
Inconvénients sont que vous perdez
(
et)
pour phrase-mouvement (maisdas
pouvez le remplir en y), et vous aurez parfois se rabattre sur sélectionnez-et-remplacer ou CtrlV pour le traitement des longues sections. Mais c'est assez rare.Et pour le style C, les longs commentaires sont manipulées avec:
... Qui se combine bien avec l'aide de
V[move]gq
pour rétablir le mot de l'habillage.Ce simple extrait de mon .vimrc:
C'est pour le //-Commentaires, mais vous pouvez l'adapter facilement pour les autres personnages. Vous pouvez utiliser autocmd pour définir un chef de file en tant que jqno suggéré.
C'est un moyen très simple et efficace de travailler avec les plages et le mode visuel naturellement.
Vous pouvez utiliser vim-commentaire par tpope (https://github.com/tpope/vim-commentary) vous pouvez l'utiliser comme suit:
Entrer dans le mode visuel en appuyant sur
Puis appuyez sur
Maintenant tout ce que vous avez à faire avec la sélection, c'est d'entrer clés:
Cela permettra de commenter tous les sélection, décommenter repead clés:
- Je utiliser vim-plusieurs curseurs pour cela.
Ctrl
+N
il sélectionne la ligne ci-dessous.0
? Avez-vous ensuite de sélectionner les lignes de commentaires/sans commentaire en utilisant le mode Visuel (en appuyant surV
ouCtrl
+V
pour entrer dans le mode Visuel, puisJ
ouK
pour sélectionner toutes les lignes que vous souhaitez commenter/décommenter) avant que vous appuyiez surCtrl
+N
?<C-v>\d<cr><C-n>i#<cr>
. Merci pour les conseils.J'aime
/* ... */
(C ansi commentaires), donc ici c'est mon truc pour vous. Vous pouvez l'adapter à une utilisation dans différents cas, bien sûr.Commentaire avec /* ... */
Sélectionnez le texte (aller à le commencer, démarrez visual bloc, sautez avec
}
):Tapez la commande à appliquer à la sélection
Commande ressemblera à:
:'<,'>norm i /* ^[$a */
Voir (i*) pour plus de détails.
Décommentez la /* ... */
Sélectionnez le texte (comme avant, ou de l'autre façon que vous aimez):
Tapez la commande à appliquer à la sélection
Commande ressemblera à:
:'<,'>norm :s-\s*/\*\s*-^M$bbld$
Voir (ii*) pour plus de détails.
Résultat
Effet est des commentaires, ligne par ligne:
Devient (et vice-versa):
De son mieux pour le sauver, comme certains
map
ou@reg
dans votre.vimrc
, parce que c'est beaucoup de type de. Si vous préférez une seule/*
et*/
à l'ensemble du bloc, utilisez:Commentaire avec un seul /* */l'ensemble du bloc
L'enregistrer dans un registre d'enregistrement avec, disons,
qc
, puis, au début d'un paragraphe de commentaire:et n'oubliez pas
q
encore une fois, pour terminer l'enregistrement.Voir (iii*) pour plus de détails.
Décommenter un seul /* */à partir d'un bloc
L'enregistrer dans le registre, disons,
@u
. Placez votre curseur n'importe où à l'intérieur du bloc, et:Enregistrer le registre par la finition de
q
commande.Voir (iv*) pour plus de détails.
Résultat
Effet est un commentaire sur plusieurs lignes:
Devient (et vice-versa):
Explications
(i*) Il fonctionne en utilisant
norm
qui s'applique de la même commande plusieurs fois dans chaque ligne sélectionnée. La commande il suffit d'insérer un/*
, trouve la fin de la ligne, et finit par l'insertion d'une*/
(ii*) Il utilise également
norm
pour répéter la recherche/remplacer sur chaque ligne. Recherche pourspaces /* spaces
et de les remplacer par rien. Après cela, trouve la fin de la ligne, en deux mots, juste une lettre, effacer jusqu'à la fin.(iii*) Sélectionne le paragraphe par
v}
, supprimer, insérer un commentaire d'ouvrir et de fermer, déplacer vers son milieu et collez le supprimé bloc.(iv*) n'importe où dans le milieu, trouve en arrière
/*
, le supprime; trouve l'avant un*/
, le supprime.Très bonne question, mais pas beaucoup de réponses à mon humble avis. Tout d'abord, je dirais, à l'aide de bloquer le mode insertion est pas facile solution ici, juste un trop grand nombre de touches, alors, évidemment, il doit travailler sur des lignes sélectionnées afin d'améliorer les performances de l'édition de code. Un autre point sur lequel personne ne mentionne : d'où le commentaire qui doit être mis dans le début de la ligne ou de l'avant texte? C'est une question de goût sans doute, mais à mon avis, il doit être placé avant le texte pour que le code soit lisible: quand les commentaires sont mis dans la très début de ligne, il rompt l'visual consistance du code indenté, de sorte qu'il ressemble à une liste à puces. Avec cela à l'esprit, j'ai fini avec la solution suivante (je fais exemple pour # commentaire). Dans mon
vimrc
:Clé
1
insère#
avant le texte (après le blanc de l'espace) dans chaque ligne sélectionnée. Il vérifie si il y a déjà#
, à ne pas insérer de#
deux fois. Et ignore également des lignes vides.Clé
2
supprime une#
. Il conserve également les commentaires sur le côté droit de la ligne de sécurité.Mise à jour: voici un exemple, comment faire de type de fichier dépendant de la bascule commentaire de commande. Pour en savoir plus sur ces chose lire: http://learnvimscriptthehardway.stevelosh.com/chapters/14.html
Juste pour le faire fonctionner, mettre les lignes suivantes dans votre
.vimrc
fichier.Même si cette question a déjà une tonne de réponses j'ai toujours pensé que je donnerais un shoutout à un petit plugin que j'ai écrit: commentify.
Commentify utilise le
commentstring
réglage de décider comment commenter un bloc de code, de sorte que vous n'avez pas à garder une cartographie des différents types de commentaires dans votre configuration, et prend en charge à la fois la ligne de base des commentaires (par exemple,//
) et de bloquer les commentaires (par exemple,/* */
).Il a également des cartes de la même raccourci (par défaut, ctrl+c) pour les commentant et en décommentant le bloc, de sorte que vous n'avez pas à vous souvenir de deux mappings ou d'un ensemble complexe de commandes.
De décommenter la totalité du fichier:
Vous pouvez commenter/décommenter une ou plusieurs lignes avec #. Faire plusieurs lignes, sélectionnez les lignes de type cc/cu raccourci, ou saisissez un numéro, puis cc/cu, par exemple, 7cc commentaires 7 lignes à partir du curseur.
J'ai eu l'orignal code de la personne sur Quelle est la façon la plus élégante de commenter /décommenter les blocs de code ruby dans Vim? et apporté quelques petites modifications (changement de touches de raccourci, et ajouter un espace après le #).
Il y a plusieurs vim plugins comme Tcomment et nerdcommenter disponibles.
- Je utiliser tcomment pour commenter fins.
gcc: Il bascule commentaire sur la ligne actuelle.
v{motion}gc: Il bascule en commentant une gamme de lignes sélectionnées visuellement
Exemple: v3jgc fera basculer la région de 3 lignes.
Ces commandes peuvent travailler pour travailler avec des commentaires dans toutes les langues.
@CMS solution est la plus "vim natif" de façon à faire dans/hors lignes. Dans @CMS deuxième étape, après CtrlV, vous pouvez également utiliser r# pour ajouter des commentaires ou x pour les supprimer. Drew Neil Pratique Vim, page 46, explique bien cette technique.
Une autre bonne option est d'utiliser un ex mode de commande. :[plage]normali##⌴. Évidemment, pour enregistrer les frappes de touches avec celui-ci, vous aurez besoin de commentaire+ de 15 lignes.
Personnellement, je n'aime pas un commentaire "bascule" de la fonction, car il va détruire les commentaires qui sont déjà inclus dans le code. Aussi, je veux avoir le commentaire char apparaissent sur l'extrême gauche, toujours, donc je peux facilement voir des blocs de commentaires. Aussi, je veux que cela fonctionne imbriquée (si j'premier commentaire un bloc et, plus tard, un bloc enfermant).
Donc, j'ai légèrement modifié l'une des solutions. J'utilise F5 de commenter et de Maj-F5 décommenter. Aussi, j'ai ajouté un /g à la fin de la s/commande:
: %s/^/\ /\ //g
supprimer la sapces entre les personnages et
Utilisez cette commande pour commentaire .C ou CPP fichiers
Cette solution de cartes /de commentaire et d' ? pour décommenter (commentaire basculement à l'aide de la simple cartographie est trop complexe à mettre en œuvre correctement). Il faut commenter les chaînes de VIM est builtin
commentstring
option qui est rempli à partir des fichiers comme/usr/share/vim/vim*/ftplugin/*.vim
sifiletype plugin on
est déclarée.c
est utilisé pour corriger le contenu.<Leader>/
et<Leader>?
.Pour Commenter Une Ligne (Pour Toutes Les Langues):
noremap <silent> ,//:call CommentLine() <CR>
Nous pouvons l'appeler avec nombre de lignes et dans mode visuel trop, il fonctionne. Comme : commentaire de quatre lignes 4,// et décommenter utilisation 4,/.
Décommenter Une Ligne (Pour Toutes Les Langues):
noremap <silent> ,/:call UnCommentLine() <CR>
Si Vous voulez ajouter un nouveau symbole[commentaire] puis ajouter une liste et d'y ajouter quelques lignes en fonction. Si vous souhaitez ajouter une langue qui a le symbole de commentaire qui sont déjà définies dans l'une des listes suffit d'ajouter votre nom de la langue dans la liste correspondante (Pour Obtenir de bons nom: Ouvrez votre fichier dans vim et l'utilisation :jeu de pieds pour obtenir le nom de votre langue).
function! CommentLine()
let slash_ft_list = ['c' , 'cpp', 'java', 'scala' , 'systemverilog' , 'verilog' , 'verilog_systemverilog']
let hash_ft_list = ['sh' , 'ruby' , 'python' , 'csh' , 'conf' , 'fstab' , 'perl']
let perct_ft_list = ['tex']
let mail_ft_list = ['mail']
let quote_ft_list = ['vim']
if (index(slash_ft_list, &ft) != -1)
:norm I//
elseif (index(hash_ft_list, &ft) != -1)
:norm I#
elseif (index(perct_ft_list, &ft) != -1)
:norm I%
elseif (index(mail_ft_list, &ft) != -1)
:norm I>
elseif (index(quote_ft_list, &ft) != -1)
:norm I"
endif
endfunction
function! UnCommentLine()
let slash_ft_list = ['c' , 'cpp', 'java', 'scala' , 'systemverilog' , 'verilog' , 'verilog_systemverilog']
let hash_ft_list = ['sh' , 'ruby' , 'python' , 'csh' , 'conf' , 'fstab' , 'perl']
let perct_ft_list = ['tex']
let mail_ft_list = ['mail']
let quote_ft_list = ['vim']
if (index(slash_ft_list, &ft) != -1)
:norm ^2x
elseif (index(hash_ft_list, &ft) != -1)
:norm ^x
elseif (index(perct_ft_list, &ft) != -1)
:norm ^x
elseif (index(mail_ft_list, &ft) != -1)
:norm ^x
elseif (index(quote_ft_list, &ft) != -1)
:norm ^x
endif
endfunction
Personnellement, je voulais commenter une-la de Visual Studio. Je suis tellement habitué au travail qu'il a pris le contrôle de ma mémoire musculaire (à l'aide de vsvim). Utiliser maj+v sélectionnez les lignes que vous souhaitez, puis appuyez sur ctrl+k, ctrl+c pour commenter ou Ctrl+k, Ctrl+u pour décommenter.
Le code ci-dessus commentez toutes les lignes qui contiennent "de rechange" et un certain nombre, après que plus il va commentaire de deux lignes de plus à partir de la ligne dans laquelle a été trouvé.
Pour d'autres utilisations visiter : http://vim.wikia.com/wiki/Search_and_replace#Details
marque une zone de texte par la marque de commande de dire ma et mb
type de commande:
:'a,'bg/(.*)/s////\1/
Vous pouvez voir un exemple de ce genre de test de manipulation à
http://bknpk.ddns.net/my_web/VIM/vim_shell_cmd_on_block.html
Appuyez sur ctrl+v ensuite, utilisez ↑ ou ↓ pour sélectionner le nombre de lignes de commentaire. Appuyez ensuite sur maj+I, appuyez sur #, puis ESC. Ce sera en commentaire le nombre de lignes que vous avez sélectionné.
L'inverse pour décommenter les lignes.