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

Comment puis-je append des numéros de ligne à une plage de lignes dans vim? Pas comme dans “: set nu” – cela affiche simplement des chiffres, mais ne les ajoute pas au fichier.

Avec

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

EDIT: résumer les commentaires.

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


Supposons que vous souhaitiez append des numéros devant les lignes d’une sélection visuelle (déplacement V +) et que vous souhaitiez que la numérotation commence à 42.

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

Si vous voulez append une chaîne entre le nombre et l'ancien texte de la ligne, concaténer simplement (avec . Dans VimL) à l'expression-nombre:

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

Si vous avez besoin de ceci pour sortinger en tant que texte, vous pouvez vouloir mettre à zéro les résultats, ce qui peut être fait en utilisant printf pour 0001, 0002 ... au lieu de 1, 2 ... par exemple:

 :%s/^/\=printf('%04d', line('.'))/ 

Quoi qu'il en soit, si vous voulez plus d'informations, ouvrez simplement vim help:: :h :s et suivez les liens ( |subreplace-special| , ..., |submatch()| )

cat -n ajoute des numéros de ligne à son entrée. Vous pouvez diriger le fichier actuel vers cat -n et remplacer le tampon actuel par ce qu’il imprime dans stdout. Heureusement, cette solution compliquée comporte moins de 10 caractères dans vim:

  :%!cat -n 

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

  :!cat -n 

Cela mettra automatiquement les marqueurs de sélection visuels, et ressemblera à ceci après que vous l’ayez tapé:

  :'<,'>!cat -n 

Pour effacer les numéros de ligne, je recommande d’utiliser control-v , qui vous permettra de sélectionner visuellement un rectangle, vous pouvez ensuite supprimer ce rectangle avec x .

Sur un système GNU: avec le binary nl externe:

 :%!nl 

Avec un environnement de type Unix, vous pouvez utiliser cat ou awk pour générer facilement un numéro de ligne, car vim possède une interface conviviale avec le shell, de sorte que tout fonctionne aussi bien dans vim qu’en shell.
De Vim Tip28 :

 :%!cat -n 

ou

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

Mais, si vous utilisez vim sous MS-DOS, de win9x, win2000, vous perdez ces outils. Voici un moyen très simple d’archiver ceci uniquement par vim:

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

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

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

Vous pouvez également utiliser un subst:

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

Vous pouvez également uniquement imprimer les lignes sans les append au fichier:

“Parfois, il peut être utile d’éditer des fichiers source volumineux pour imprimer les numéros de ligne sur papier.
Pour ce faire, vous pouvez utiliser l’option :set printoptions=number:y pour activer et :set printoptions=number:n pour désactiver cette fonctionnalité.
Si le numéro de ligne doit toujours être imprimé, placez le set printoptions=number:y lignes set printoptions=number:y dans le vimrc . ”

Tout d’abord, vous pouvez supprimer les numéros de ligne existants si vous devez:

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

Ensuite, vous pouvez append des numéros de ligne. NR fait référence au numéro de ligne actuel commençant à un, vous pouvez donc faire des calculs pour obtenir la numérotation souhaitée. La commande suivante vous donne des numéros de ligne à quatre chiffres:

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

Le plug-in “VisIncr” est utile pour insérer des colonnes de nombres incrémentiels en général (ou des lettres, des dates, des chiffres romains, etc.). Vous pouvez contrôler le format numérique, le remplissage, etc. Insérez donc un “1” devant chaque ligne (via :s ou :g ou insert de bloc visuel), mettez cette colonne en évidence en mode bloc visuel et exécutez l’une des commandes du plug-in.