J'ai appris de cette question de débordement de pile qu'il est possible d'utiliser vi
/vim
pour commenter une gamme spécifiée de numéros de ligne. Par exemple, supposons que j'ai le script Bash suivant:
#!/bin/bash
This
is
my
very
very
great
script
Supposons maintenant que je souhaite commenter les numéros de ligne 6 à 8 (qui contiennent les mots very
, very
et great
) en utilisant le #
caractère de commentaire. Dans vi
/vim
, je peux simplement taper :6,8s/^/#
Pour obtenir ce qui suit:
#!/bin/bash
This
is
my
#very
#very
#great
script
qui commente les lignes 6 à 8.
Ma question est qu'il est possible de taper une doublure similaire qui sera Supprimer Le #
caractère de commentaire des lignes 6 à 8 (mais pas d'autres lignes commentées dans le fichier)?
Cela dit, je me rends compte qu'il y a un débat sur si j'utilise réellement vi
ou vim
. En pratique, j'ouvre un fichier script.sh
avec la commande vi script.sh
. Aussi, quand je tape la commande which vi
, J'obtiens /usr/bin/vi
. Néanmoins, quand je tape simplement vi
et appuyez sur Enter, J'obtiens ceci:
~ VIM - Vi IMproved
~
~ version 7.2.330
~ by Bram Moolenaar et al.
~ Vim is open source and freely distributable
~
~ Sponsor Vim development!
~ type :help sponsor<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version7<Enter> for version info
ce qui semble suggérer que j'utilise réellement vim
. J'accède à un cluster ubuntu linux distant à l'aide de SSH de mon PC. Je n'utilise pas une interface graphique Ubuntu Linux.
Vous pouvez utiliser:
:6,8s/^#//
Mais beaucoup plus facile est d'utiliser le mode de sélection visuel du bloc: aller au début de la ligne 6, appuyez sur Ctrl-v
, descendre à la ligne 8 et appuyez sur x
.
Il y a aussi "le commentateur NERD" Plugin.
Je connais votre question spécifie à l'aide de vi
ou vim
mais voici quelques autres options pour ce faire sans avoir à ouvrir manuellement le fichier:
Perl
Perl -ne 'if($. <=8 && $. >= 6){s/^\s*#//;}print' foo.sh
Version Perl> = 5.10
Perl -ne '$. ~~ [6..8] && s/^\s*#//;print' foo.sh
Cela imprimera le contenu du fichier, vous pouvez soit rediriger vers un autre (> new_file.sh
) ou utiliser i
pour éditer le fichier en place:
Perl -i -ne '$. ~~ [6..8] && s/^\s*#//;print' foo.sh
sed
sed '6,8 s/^ *#//' foo.sh
Encore une fois, pour modifier le fichier d'origine en place, utilisez i
:
sed -i '6,8 s/^ *#//' foo.sh
awk
/gawk
etc:
gawk '(NR<=8 && NR>= 6){sub("^ *#","")}{print}' foo.sh
Pure bash
:
c=1; while read line; do
if [ $c -ge 6 ] && [ $c -le 8 ]; then
echo "${line/\#/}"
else
echo $line
fi
let c++; done < foo.sh
vi
est un lien symbolique à vim
dans la plus grande distribution GNU/Linux, donc vous utilisez effectivement vim
lorsque vous tapez vi
.
Pour supprimer les commentaires, vous pouvez taper: :6,8s/^#//
ou :6,8s/^\s*#//
Pour supprimer un espace de pointe avant le #
symbole.
Vous utilisez probablement vim.tiny
. En tout cas, vous pouvez supprimer les commentaires initiaux avec:
:6,8s/^#//
Bien sûr, si vous les insérez d'une manière différente (par exemple, avec un espace supplémentaire), vous devrez peut-être supprimer tout autre. Avec Vim complet, la sélection visuelle de colonnes et d'insertion/suppression de caractères est un moyen plus facile de faire la même chose.
Personnellement, ma manière préférée utilise le mode Visual Block
ctrl + v Pour entrer en mode bloc visuel, utilisez les touches fléchées ou HJKL pour sélectionner les lignes et appuyez sur x ou del.
Veux-y retourner?
ctrl + v faire la sélection, alors I (capitale I) #Esc
Les réponses ci-dessus, en utilisant
:6,8s/^#//
sont une solution parfaite, mais un peu encombrant à taper. Cela peut être simplifié en définissant de nouvelles commandes dans ~/.vimrc
.
command -range=% C :<line1>,<line2>s/^/#/
command -range=% D :<line1>,<line2>s/^#//
Et vous pouvez simplement taper
:6,8C
:6,8D
placer/supprimer la commande.
Si vous aimez le mode Visual, vous pouvez définir des cartes
map <F7> :s/^/#/<CR>
map <F8> :s/^#//<CR>
De sorte que vous devez seulement sélectionner une plage de ligne en mode visuel et appuyez sur F7 et F8 mettre et supprimer des commentaires respectivement.
Il y a ce plugin à changement de vie par tpope
appelé vim-commentary
https://github.com/tpope/vim-commendrynien
Ce plugin fournit :
Utilisation :
:
qui montrera comme :<,'>
:<,'>Commentary
et appuyez sur Entrée.