vi / vim, comment puis-je écrire un certain nombre de lignes dans un nouveau fichier

30

J'ai un tas de lignes que je veux écrire dans un fichier différent.
Comment puis je faire ça?

Michael Durrant
la source

Réponses:

44

Tu peux faire

:100,200w filename

Bien sûr, 100 200 est la plage de lignes que vous souhaitez écrire.

Bernhard
la source
Les adresses sont-elles inclusives ou exclusives?
Marcin
3
Compris. Également inclus si vous utilisez des modèles:: / ^ quelque chose /, / ^ else / w nom de fichier, ou marque: 'a,' bw nom de fichier inclut les lignes marquées 'a' et 'b'.
Bruce Ediger
Salut @Bernhard, que faire si je veux couper des lignes du fichier actuel.
Ravi Sevta
19

Le plus général:

  1. Déplacez le curseur sur la première ligne du groupe que vous souhaitez écrire. Frappez m et aséquentiellement. C'est "définir la marque nommée 'a'".

  2. Déplacez le curseur sur la dernière ligne du groupe, appuyez sur «m» et «b». »

  3. Passez en mode commande hit: comme une séquence, :'a,'b w filenamepuis appuyez sur retour.

Cela fonctionnera dans vi, nvi et vim.

Une autre méthode, fonctionne dans vim plus moderne:

  1. Placez le curseur sur la première ligne du groupe de lignes que vous souhaitez écrire. Appuyez sur V, pour "démarrer le bloc visuel de lignes".

  2. Déplacez le curseur en bas du groupe de lignes. Vim mettra en évidence avec la vidéo inverse chaque ligne.

  3. Rédiger. Appuyez sur :pour passer en mode ligne de commande. Cela vous donnera une invite au bas de l'écran qui ressemble à ceci: :'<,'> Cela signifie du début du bloc visuel à la fin. Tapez wet le nom de fichier et appuyez sur retour.

Vous pouvez ajouter des lignes simples à la fin du fichier selon vos besoins en plaçant votre curseur sur la ligne que vous souhaitez écrire, puis en tapant: :.w >> filenameet en appuyant sur retour.

Les commandes "écrire un groupe de lignes" fonctionnent également avec ">> nom de fichier" au lieu de "nom de fichier". Le ">>" fait que vi ou vim s'ajoute au fichier, plutôt que de simplement l'écrire.

Bruce Ediger
la source
8

Pour compléter la réponse de Bernhard, vous pouvez également sélectionner une région à l'aide du mode visuel, puis entrer :w filename.

noffle
la source
8

Si vous connaissez les numéros de ligne que vous souhaitez écrire, vous pouvez le faire à partir de la ligne de commande:

vim -c "100,200w new_file.txt" -c wq original_file.txt
Akavall
la source
1

une petite astuce consiste à utiliser le numéro de ligne relatif. Par exemple:: + 0, + 99w filename écrivez les 100 lignes suivantes dans filename.

Guokai Ma
la source
Cela n'écrasera-t-il pas le fichier d'origine? L'OP souhaite écrire dans un fichier différent.
SabreWolfy
1
@SabreWolfy No; peut-être avez-vous manqué «nom de fichier» après les numéros de ligne. Je viens de tester sa version et cela a fonctionné.
felwithe