79 votes

Ajouter des numéros de ligne de code source dans vim

Comment puis-je ajouter des numéros de ligne à une plage de lignes dans vim? Pas comme dans ":set nu" - c'est simplement l'affichage des numéros, mais ne pas ajouter dans le fichier.

126voto

Luc Hermitte Points 14171

Avec

:%s/^/\=line('.')/

EDIT: pour résumer les commentaires.

Cette commande peut être modifié autant que vous le souhaitez.

Disons que vous voulez pour ajouter les numéros en face de lignes à partir d'une sélection visuelle (V + déplacement), et vous voulez que la numérotation commencer à 42.

:'<,'>s/^/\=(line('.')-line("'<")+42)/

Si vous souhaitez ajouter une chaîne de caractères entre le numéro et le texte de la ligne, juste concaténer (avec . dans VimL) pour le nombre d'expression:

:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/

De toute façon, si vous voulez plus d'informations, il suffit d'ouvrir vim aider: :h :s et de suivre les liens (|subreplace-special|, ..., |submatch()|)

39voto

Jerub Points 17488

cat -n ajoute des numéros de ligne à son entrée. Vous pouvez transférer le fichier en cours d' cat -n et remplacer le tampon courant avec ce qu'il imprime sur la sortie standard stdout. Heureusement ce alambiqué solution est de moins de 10 caractères dans vim:

 :%!cat -n

Ou, si vous voulez juste une sous-sélection, sélectionner visuellement la zone, et tapez ceci:

 :!cat -n

Qui va automatiquement mettre la sélection visuelle des marqueurs et ressemblera à ceci après que vous avez tapé à la machine:

 :'<,'>!cat -n

Afin d'effacer les numéros de ligne, je recommande l'utilisation d' control-v, ce qui vous permettra de sélectionner visuellement un rectangle, vous pouvez alors supprimer ce rectangle avec x.

26voto

Martin v. Löwis Points 61768

Sur un système GNU: avec l'extérieur nl binaire.

:%!nl

7voto

VonC Points 414372

Avec un environnement de type Unix, vous pouvez utiliser le chat ou awk pour générer un numéro de ligne facilement, parce que vim dispose d'une interface conviviale avec shell, donc tout le travail dans vim ainsi comme il le fait dans un shell.
De Vim Tip28:

:%!cat -n

ou

:%!awk '{print NR,$0}'

Mais, si vous utilisez vim en mode MS-DOS, windows 9x, win 2000, de perte de ces outils. voici un moyen très simple pour l'archivage de ce que par vim:

fu! LineIt()
  exe ":s/^/".line(".")."/"
endf

Ou, une séquence composée avec l'alphabet est aussi facile que ci-dessus:

exe "s/^/".nr2char(line("."))."/" 

Vous pouvez également utiliser un subst:

:g/^/exe ":s/^/".line(".")."^I/"

Vous pouvez aussi vous ne voulez imprimer les lignes sans les ajouter à la file:

"Parfois, il pourrait être utile, en particulier de modifier les gros fichiers source pour imprimer les numéros de ligne sur le papier.
Pour ce faire, vous pouvez utiliser l'option :set printoptions=number:y d'activer et d' :set printoptions=number:n pour désactiver cette fonction.
Si le numéro de ligne doit être imprimé toujours, la place la ligne, set printoptions=number:y dans la vimrc."

4voto

Lance Roberts Points 11164

Tout d'abord, vous pouvez supprimer les numéros de ligne si vous avez besoin de:

:%s/^[0-9]*//

Ensuite, vous pouvez ajouter des numéros de ligne. NR renvoie le numéro de ligne en cours, en commençant à un, de sorte que vous pouvez faire un peu de maths sur elle pour obtenir la numérotation que vous souhaitez. La commande suivante vous donne quatre chiffres pour les numéros de ligne:

:%!awk '{print 1000+NR*10,$0}'

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