55 votes

vim - Comment lire une plage de lignes d'un fichier dans le tampon courant

Je veux lire la ligne n1-> n2 du fichier foo.c dans le tampon actuel.

J'ai essayé: 147,227r /path/to/foo/foo.c

Mais je reçois: "E16: Plage invalide", même si je suis certain que foo.c contient plus de 1000 lignes.

87voto

boxxar Points 2051
:r! sed -n 147,227p /path/to/foo/foo.c

26voto

joeytwiddle Points 3226

Je vois que la réponse acceptée utilise sed ce qui vous semble sale quand vous pouvez le faire en pur Vimscript:

 :put =readfile('/path/to/foo/foo.c')[146:226]
 

Notez que nous devons décrémenter les numéros de ligne car les tableaux commencent à 0 tandis que les numéros de ligne commencent à 1.

(Cela ne gagne pas non plus en code-golf, car il y a 7 caractères de plus que la solution sed !)

19voto

Stewart Johnson Points 7632

La {plage} fait référence à la destination dans le fichier actuel, pas à la plage de lignes du fichier source.

Après quelques expériences, il semble

 :147,227r /path/to/foo/foo.c
 

signifie insérer le contenu de /path/to/foo/foo.c après la ligne 227 dans ce fichier. c'est à dire: il ignore le 147.

2voto

PaulB Points 47

Tu devras:

 :r /path/to/foo/foo.c
:d 228,$
:d 1,146
 

Trois étapes, mais ça va être fait ...

2voto

Justin Points 46

"Une plage permet d'appliquer une commande à un groupe de lignes du tampon en cours." Ainsi, la plage d'instruction de lecture signifie où insérer le contenu du fichier actuel, mais pas la plage de fichier que vous souhaitez lire.

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