Question

Comment puis-je ajouter des numéros de ligne à une plage de lignes dans vim? Pas comme dans ": set " - Cela affiche uniquement des chiffres, mais ne les ajoute pas au fichier.

Était-ce utile?

La solution

Avec

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

EDIT: pour résumer les commentaires.

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

Supposons que vous souhaitiez ajouter des nombres devant des lignes à partir d'une sélection visuelle ( V + déplacement) et que vous souhaitiez que la numérotation commence à 42.

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

Si vous souhaitez ajouter une chaîne entre le nombre et l'ancien texte de la ligne, concaténez-la simplement (avec . dans VimL) avec l'expression-nombre:

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

Si vous avez besoin de ce texte pour trier le texte, vous voudrez peut-être utiliser les codes printf pour 0001, 0002 ... au lieu de 1, 2 ... par exemple:

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

Quoi qu'il en soit, si vous souhaitez plus d'informations, ouvrez simplement l'aide de vim: : h: s et suivez les liens ( | subreplace-special | , ..., < code> | submatch () | )

Autres conseils

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 sur stdout. Heureusement, cette solution complexe contient 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 l'avoir tapé:

 :'<,'>!cat -n

Pour effacer les numéros de ligne, je vous 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 nl binaire 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 shell, de sorte que tout fonctionne aussi bien dans vim que dans shell.
De Vim Tip28 :

:%!cat -n

ou

:%!awk '{print NR,
fu! LineIt()
  exe ":s/^/".line(".")."/"
endf
}'

Toutefois, si vous utilisez vim dans MS-DOS, sous win9x, win2000, vous perdez ces outils. voici un moyen très simple d'archiver cela uniquement par vim:

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

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

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

Vous pouvez également utiliser un substitut:

<*>

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

  

"Parfois, il peut être utile de modifier des fichiers sources volumineux pour imprimer les numéros de ligne sur du papier.
  Pour ce faire, vous pouvez utiliser l'option : définir printoptions = numéro: y à activer et : définir printoptions = numéro: n pour désactiver cette fonctionnalité.
  Si le numéro de ligne doit toujours être imprimé, placez la ligne set printoptions = number: y dans vimrc . & Quot;

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

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

Ensuite, vous pouvez ajouter des numéros de ligne. NR fait référence au numéro de ligne actuel commençant par un, vous pouvez donc effectuer quelques 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,<*>}'

Le plug-in "VisIncr & " convient à l'insertion de colonnes. d’incrémentation de chiffres en général (ou lettres, dates, 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 insertion de bloc visuel), mettez cette colonne en surbrillance en mode bloc visuel et exécutez l’une des commandes du plugin.

Si quelqu'un souhaite placer un onglet (ou des espaces) après avoir inséré les numéros de ligne, utilisez la cette excellente réponse , voici un moyen. Après être passé en mode échappement, faites:

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

^ signifie le début d'une ligne et % s est la directive pour la substitution. Donc, nous disons qu'il faut mettre un numéro de ligne au début de chaque ligne, y ajouter 4 espaces, puis insérer le contenu de la ligne avant le remplacement et le faire pour toutes les lignes du fichier.

Ceci le remplacera automatiquement. Sinon, si vous souhaitez que la commande vous demande confirmation, procédez comme suit:

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

P.S: puissance de vim :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top