Astuce mignonne - tant que le mot-clé «END» (qui est, bien sûr, choisi par l'utilisateur) n'apparaît pas sur une ligne à l'intérieur du matériau à commenter.
Jonathan Leffler
9
@kalengi: Oui; le mot utilisé dans les guillemets peut être quelque chose de commode; EOFest un exemple classique (tout comme !un point d'exclamation en lui-même), mais vous pouvez utiliser SNURFLE_BURGERSou classical_end_markerou tout autre mot qui n'apparaît pas seul sur une ligne dans le texte commenté. J'apprendrais à expérimenter des espaces, etc., mais le mot pourrait bien fonctionner avec eux aussi.
@MB_CE, voir stackoverflow.com/questions/32126653/… . Cela dit - il exécute une commande ( :) qui ne lit pas son entrée et se termine toujours avec une valeur réussie, et envoie le "commentaire" en entrée. Pas grand chose.
Charles Duffy
2
Je considère qu'il est incroyablement laid et déroutant d'écrire du code actif pour créer du code passif ... utilisez simplement le bon vieux mode de sélection de bloc et appuyez sur #; quel est le gros problème avec ça?
Rusty75
90
Il n'y a pas de commentaire de bloc sur le script shell.
En utilisant vi(oui vi), vous pouvez facilement commenter à partir de la ligne n à m
<ESC>:10,100s/^/#/
(qui se lit, de la ligne 10 à 100, remplacer le début de la ligne (^) par un signe #.)
et un commentaire avec
<ESC>:10,100s/^#//
(qui lit, de la ligne 10 à 100, le début de la ligne de remplacement (^) suivi de # en notant //.)
viest presque universel partout où il y a /bin/sh.
Belle astuce avec une expression régulière sur vi pour placer # devant les lignes.
Atiq Rahman
5
Juste un conseil - si vous utilisez vim et que cela finit par mettre en évidence le début de chaque ligne, ajoutez |nohà la fin. Le tuyau sépare les commandes supplémentaires et nohn'est destiné à aucun surlignage. La mise en évidence des termes de recherche reprendra automatiquement la prochaine fois que vous rechercherez quelque chose. Exemple::10,100s/^/#/g|noh
Matthew
J'ai besoin que cela soit automatisé à partir d'un script. Existe-t-il un moyen de le faire dans un fichier avec vi sans avoir besoin d'une interaction humaine?
Timothy Swan
1
@ TimothySwan J'imagine que le programme gawk ou sed pourrait faire ça ... d'une manière ou d'une autre.
BeowulfNode42
ma façon préférée de commenter (ou de préfixer) un bloc avec vi: aller au début de la ligne que vous souhaitez commencer à commenter (par exemple <SHIFT>+G 10 <ENTER>alors 0ou par tout autre moyen pour naviguer). Utilisez ensuite <CTRL>+Vpour entrer en mode de blocage visuel et mettez en surbrillance le début de toutes les lignes que vous souhaitez commenter (dans cet exemple 90 J). Appuyez ensuite sur SHIFT+Ipour insérer avant le bloc en surbrillance. Entrez le signe du commentaire (par exemple #) et appuyez sur <ESC>pour terminer votre préfixe. Cette explication semble super longue, mais d'après mon expérience, elle est beaucoup plus rapide dans la pratique.
Ueffes
52
Vous pouvez utiliser:
if[1-eq 0];then
echo "The code that you want commented out goes here."
echo "This echo statement will not be called."fi
Cela ne semble fonctionner que si le texte commenté est en fait du code. Je rencontre des problèmes avec les commentaires avec les tuyaux et les points-virgules. La réponse du Sunny256 a fonctionné.
swdev
encore plus concis serait []; en utilisant le test qui est
Justin Duncan
27
Ce qui suit devrait fonctionner pour sh, bash, kshet zsh.
Les blocs de code à commenter peuvent être placés à l'intérieur BEGINCOMMENTet ENDCOMMENT:
[-z $BASH ]|| shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"
BEGINCOMMENT
echo "This line appears in a commented block"
echo "And this one too!"
ENDCOMMENT
echo "This is outside the commented block"
L'exécution du code ci-dessus entraînerait:
This is outside the commented block
Afin de décommenter les blocs de code ainsi commentés, disons
J'aime ça. Mais que signifie le double soulignement? Autant que je sache, ce n'est qu'un nom de variable utilisant la convention selon laquelle il doit être traité comme privé?
chessofnerd
Fournit également la coloration syntaxique dans la plupart des éditeurs et peut être appelé si nécessaire avec $ __, bien que je suggère un nom de variable comme la documentation ou les documents pour plus de clarté.
jasonleonhard
Vous pouvez également ajouter le mot local devant ref ici
jasonleonhard
Ce devrait être la meilleure réponse. Il suffit de mettre un nom de variable fictive au lieu des doubles soulignements
B Abali
J'ai essayé, mais j'ai échoué car il y avait un -F ';' à l'intérieur du bloc pour commenter.
En toute honnêteté, pourquoi tant de suringénierie ...
Je considère que c'est vraiment une mauvaise pratique d'écrire du code actif pour générer du code passif.
Ma solution: la plupart des éditeurs ont un mode de sélection de bloc. Utilisez-le simplement pour ajouter # à toutes les lignes que vous souhaitez commenter. Quel est le gros problème ...
Exemple de bloc-notes:
Pour créer: Alt - mousedrag down, appuyez sur #.
Pour supprimer: Alt-mousedrag vers le bas, flèche vers la droite, supprimer.
L'utilisateur est probablement dans le terminal. Ne peut pas assumer un environnement de souris.
Gary
Existent-ils encore? Je modifie généralement en mode graphique et je recolle en utilisant vi, ce serait une solution de contournement facile.
Rusty75
2
Une variante de l'astuce here-doc dans la réponse acceptée par sunny256 consiste à utiliser les mots clés Perl pour les commentaires. Si vos commentaires sont en fait une sorte de documentation, vous pouvez alors commencer à utiliser la syntaxe Perl à l'intérieur du bloc commenté, qui vous permet de l'imprimer correctement, de le convertir en page de manuel, etc.
En ce qui concerne le shell, il vous suffit de le remplacer 'END'par '=cut'.
echo "before comment":<<'=cut'=pod
=head1 NAME
podtest.sh -Example shell script with embedded POD documentation
etc.=cut
echo "after comment"
Le '##' m'aide à trouver facilement le début et la fin du commentaire de bloc. Je peux coller un nombre après le '##' si j'en ai un tas. Pour désactiver le commentaire, je colle simplement un «1» dans le «[]». J'évite également certains problèmes que j'ai rencontrés avec les guillemets simples dans le bloc commenté.
Réponses:
En bash:
Le
'
et'
autour duEND
délimiteur sont importants, sinon les choses à l'intérieur du bloc comme par exemple$(command)
seront analysées et exécutées.Pour une explication, voir ceci et cette question.
la source
EOF
est un exemple classique (tout comme!
un point d'exclamation en lui-même), mais vous pouvez utiliserSNURFLE_BURGERS
ouclassical_end_marker
ou tout autre mot qui n'apparaît pas seul sur une ligne dans le texte commenté. J'apprendrais à expérimenter des espaces, etc., mais le mot pourrait bien fonctionner avec eux aussi.:
) qui ne lit pas son entrée et se termine toujours avec une valeur réussie, et envoie le "commentaire" en entrée. Pas grand chose.Il n'y a pas de commentaire de bloc sur le script shell.
En utilisant
vi
(ouivi
), vous pouvez facilement commenter à partir de la ligne n à m(qui se lit, de la ligne 10 à 100, remplacer le début de la ligne (^) par un signe #.)
et un commentaire avec
(qui lit, de la ligne 10 à 100, le début de la ligne de remplacement (^) suivi de # en notant //.)
vi
est presque universel partout où il y a/bin/sh
.la source
|noh
à la fin. Le tuyau sépare les commandes supplémentaires etnoh
n'est destiné à aucun surlignage. La mise en évidence des termes de recherche reprendra automatiquement la prochaine fois que vous rechercherez quelque chose. Exemple::10,100s/^/#/g|noh
<SHIFT>+G 10 <ENTER>
alors0
ou par tout autre moyen pour naviguer). Utilisez ensuite<CTRL>+V
pour entrer en mode de blocage visuel et mettez en surbrillance le début de toutes les lignes que vous souhaitez commenter (dans cet exemple90 J
). Appuyez ensuite surSHIFT+I
pour insérer avant le bloc en surbrillance. Entrez le signe du commentaire (par exemple#
) et appuyez sur<ESC>
pour terminer votre préfixe. Cette explication semble super longue, mais d'après mon expérience, elle est beaucoup plus rapide dans la pratique.Vous pouvez utiliser:
la source
if [ ];
marche aussi.if false;
. stackoverflow.com/a/18019516/2097284Ce qui suit devrait fonctionner pour
sh
,bash
,ksh
etzsh
.Les blocs de code à commenter peuvent être placés à l'intérieur
BEGINCOMMENT
etENDCOMMENT
:L'exécution du code ci-dessus entraînerait:
Afin de décommenter les blocs de code ainsi commentés, disons
au lieu de
dans l'exemple ci-dessus.
la source
si vous pouvez esquiver les guillemets simples:
la source
Utilisez
: '
pour ouvrir et'
fermer.Par exemple:
Ceci est de l'exemple de Vegas trouvé ici
la source
À Vim:
shift-V
(entrer en mode visuel), haut en bas des lignes de surbrillance dans le bloc:s/^/#/
la commande ressemblera à ceci:
appuyez sur Entrée
par exemple
la source
:s/^#/
Vous pouvez utiliser le mode Visual Block de Vi / Vim qui est conçu pour des choses comme ceci:
Uncommentaire serait:
C'est la manière interactive de vi de faire ce genre de chose plutôt que de compter ou de lire les numéros de ligne.
Enfin, dans Gvim, vous utilisez ctrl-q pour passer en mode Visual Block plutôt que ctrl-v (car c'est le raccourci pour coller).
la source
En toute honnêteté, pourquoi tant de suringénierie ...
Je considère que c'est vraiment une mauvaise pratique d'écrire du code actif pour générer du code passif.
Ma solution: la plupart des éditeurs ont un mode de sélection de bloc. Utilisez-le simplement pour ajouter # à toutes les lignes que vous souhaitez commenter. Quel est le gros problème ...
Exemple de bloc-notes:
Pour créer: Alt - mousedrag down, appuyez sur #.
Pour supprimer: Alt-mousedrag vers le bas, flèche vers la droite, supprimer.
la source
Une variante de l'astuce here-doc dans la réponse acceptée par sunny256 consiste à utiliser les mots clés Perl pour les commentaires. Si vos commentaires sont en fait une sorte de documentation, vous pouvez alors commencer à utiliser la syntaxe Perl à l'intérieur du bloc commenté, qui vous permet de l'imprimer correctement, de le convertir en page de manuel, etc.
En ce qui concerne le shell, il vous suffit de le remplacer
'END'
par'=cut'
.(Trouvé sur " Intégrer la documentation dans le script shell ")
la source
Un autre mode est le suivant: si votre éditeur N'A PAS de commentaire BLOC,
TERMINÉ
cela fonctionne avec n'importe quel éditeur
la source
J'aime une seule ligne ouverte et fermée:
Le '##' m'aide à trouver facilement le début et la fin du commentaire de bloc. Je peux coller un nombre après le '##' si j'en ai un tas. Pour désactiver le commentaire, je colle simplement un «1» dans le «[]». J'évite également certains problèmes que j'ai rencontrés avec les guillemets simples dans le bloc commenté.
la source