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.
- Cette question devrait s'appliquer à n'importe quel fichier a la fin de la ligne des marqueurs, et pas seulement des fichiers de code source.
Vous devez vous connecter pour publier un commentaire.
Avec
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.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:Si vous avez besoin de ce genre de texte, vous pouvez zéro pad les résultats, ce qui peut être fait en utilisant
printf
pour0001, 0002
... au lieu de1, 2
... par exemple: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()|
)1-line("'<")
. Vous demandez-vous, pourquoi cette vieille question, est apparu dans mon flux RSS.:help :s
ici), vim conseils (vim.wikia.com), des plugins écrits par d'autres, vim_use (l'officiel de la liste de diffusion) et des forums comme celui-ci.=line
sur l'aide. Je me demandais ce que les autres commandes que vous pouvez utiliser comme substituts à une substitution.:h :s
-> subreplace-spécial:%s/^/\=line('.') . 'string'/
. dans mon cas, j'avais besoin d'une virgule depuis que j'ai été la numérotation des lignes dans un fichier csv, donc je n'ai:%s/^/\=line('.') . ','/
2,11s/^/\=line('.')/
cat -n
ajoute les numéros de ligne à son entrée. Vous pouvez transférer le fichier en cours decat -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:Ou, si vous voulez juste une sous-sélection, sélectionner visuellement la zone, et tapez ceci:
Qui va automatiquement mettre la sélection visuelle des marqueurs et ressemblera à ceci après que vous avez tapé à la machine:
Afin d'effacer les numéros de ligne, je recommande d'utiliser
control-v
, ce qui vous permettra de sélectionner visuellement un rectangle, vous pouvez alors supprimer ce rectangle avecx
.Sur un système GNU: avec l'extérieur
nl
binaire:Avec l'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:
ou
Mais, si vous utilisez vim en mode MS-DOS, de win9x, win2000, vous la perte de ces outils.
voici un moyen très simple pour l'archivage de ce que par vim:
Ou, une séquence composée avec l'alphabet est aussi facile que ci-dessus:
Vous pouvez également utiliser un subst:
Vous pouvez aussi vous ne voulez imprimer les lignes sans les ajouter à la file:
cat
àcall
... (source étant probablement Vim tip28 comme dans neurone.tuke.sk/~hudecm/VimTips-OFFLINE-nov02.txt):%!awk '{print 1000+NR*10,$0}'
. Le seul problème (ce qui n'est pas vraiment un) c'est que mon décapage de la déclaration :%s/^[0-9]*// feuilles d'espace supplémentaire sur le devant et le référencement \s ne semble pas aider.:%!cat -n
mais comment peuvent-ils être supprimés?Tout d'abord, vous pouvez supprimer les numéros de ligne si vous avez besoin de:
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:La "VisIncr" plugin est bon pour l'insertion de colonnes de l'incrémentation des numéros en général (ou de lettres, des dates, des chiffres romains, etc.). Vous pouvez contrôler le format de nombre, rembourrage, et ainsi de suite. Afin d'insérer un "1" en face de chaque ligne (via
:s
ou:g
ou visual-bloc insert), mettez en surbrillance la colonne dans visual-mode bloc, et exécuter l'une des commandes du plugin.Si quelqu'un veut mettre un onglet (ou de certains espaces) après insertion de la ligne de nombres à l'aide de la cette excellente réponse, voici un moyen. Après entrer dans le mode fuite, n':
^
signifie le début d'une ligne et%s
est la directive de substitution. Donc, dire que nous avons mis un numéro de ligne au début de chaque ligne et ajouter 4 espaces pour elle et puis mettre tout ce qui a été le contenu de la ligne avant de la substitution, et cela pour toutes les lignes dans le fichier.Cela va automatiquement remplacer. Sinon, si vous voulez la commande pour demander la confirmation de vous, alors n':
P. S: puissance de vim 🙂