308 votes

Copier et coller le contenu d'un fichier vers un autre fichier dans vi

Je travaille avec deux fichiers, et j'ai besoin de copier quelques lignes d'un fichier et de les coller dans un autre fichier. Je sais comment copier (yy) et coller (p) dans le même fichier. Mais cela ne fonctionne pas pour des fichiers différents. Comment faire ?

Par ailleurs, y a-t-il un moyen de faire un copier-coller ? J'ai essayé de chercher sur Google, mais la plupart des ressources ne parlent que de copier-coller.

0 votes

Vous êtes sûr que ça ne marche pas ? Je l'utilise assez souvent pour copier des lignes entre des fichiers.

0 votes

Eh bien, quand je fais ça, je n'obtiens qu'un guillemet ?

5 votes

La commande dd fonctionne comme cut.

260voto

Adam Batkin Points 20920

Puisque vous savez déjà comment couper/tirer du texte, voici quelques idées pour le recoller dans un autre fichier :

  • Editez le premier fichier, en arrachant le texte que vous voulez. Ensuite, ouvrez votre deuxième fichier à partir de vi ( :e /path/to/other/file ) et le coller
  • Ouvrez les deux fichiers ensemble dans une fenêtre divisée et naviguez entre eux en utilisant Ctrl + w , Up / Down soit par :

    • vi -o /path/to/file1 /path/to/file2
    • De l'intérieur du premier fichier, Ctrl + w , s

0 votes

J'ai deux fenêtres putty ouvertes, je fais d'abord "v" pour mode visuel, puis je sélectionne toutes les lignes et je fais un "y" pour tirer, je ne fais pas alt+tab pour aller sur l'autre fichier et quand je fais un "p" pour mettre, il imprime seulement un guillemet.

12 votes

Si vous travaillez avec 2 Windows Putty, vous devez utiliser la méthode de copier/coller de Putty/Windows. C'est très simple. Marquez le texte que vous voulez copier avec votre souris (vous n'avez rien d'autre à faire, le texte marqué est maintenant copié dans le presse-papiers). Passez à votre autre fenêtre putty. Entrez en mode insertion dans vim (appuyez sur i). Appuyez sur le bouton droit de la souris - le bouton droit de la souris dans une fenêtre Putty collera tout ce qui se trouve dans le presse-papiers.

4 votes

Ce que vous faites ne marchera pas : Le fait de cliquer dans vi ne placera pas le texte dans le presse-papiers de Windows, et le tampon de clic n'est pas partagé entre les instances ouvertes de vim.

59voto

JayG Points 1695

Si vous utilisez Vim sous Windows, vous pouvez avoir accès au presse-papiers (MS copier/coller) en utilisant :

"*dd -- couper une ligne (ou 3dd pour couper trois lignes)

"*yy -- copier une ligne (ou 3yy pour copier trois lignes)

"*p -- coller la ou les lignes sur la ligne après le curseur

"*P -- coller la ou les lignes sur la ligne avant le curseur

Il vous permet de coller entre des fenêtres Vim distinctes ou entre Vim et des applications PC ( Bloc-notes , Microsoft Word etc.).

21 votes

Utilisez + en tant que registre de presse-papiers de systèmes multiplateformes (Windows et Linux) par rapport au registre de presse-papiers de systèmes multiplateformes. * qui n'est disponible que sous Windows ( + fonctionne de la même manière sous Windows que * ).

0 votes

A partir de 2021, sous linux (pop_os 20.04), * fonctionne tout aussi bien que + pour les applications mentionnées dans cette réponse, c'est le copier/coller entre les instances de vim et de vim à l'application système (vim 8.2, construit avec le support du presse-papiers)

51voto

Apalala Points 2999

Utilisez les variantes de d comme dd à couper.

Pour écrire une série de lignes dans un autre fichier, vous pouvez utiliser :

:<n>,<m> w filename

<n> et <m> sont des chiffres (ou des symboles) qui désignent une plage de lignes.

Pour l'utilisation du presse-papiers du bureau, consultez la rubrique +g des commandes.

0 votes

Pour ce faire, créez deux marques (a et b, par exemple) autour du texte que vous souhaitez écrire dans un fichier : move to first line, ma déplacer à la dernière ligne, mb . Ensuite, ajoutez a ' à la lettre de la marque lorsque vous utilisez la commande ci-dessus : :'a,'b w filename

0 votes

Une solution idéale pour les gammes de produits larges !

32voto

Win Man Points 376

Vous pouvez ouvrir l'autre fichier et taper :r file_to_be_copied_from . Ou vous pouvez mettre en mémoire tampon. Ou allez dans le premier fichier, allez sur la ligne que vous voulez copier, tapez "qY allez au fichier que vous voulez coller et tapez "qP .

" nom_tampon, copie dans le tampon. Y c'est yank et P est mis. J'espère que cela vous aidera !

0 votes

En travaillant avec ssh sur le vi local, vous devez toujours :r scp://<host>/<relativepath> pour lire le fichier. Sinon, il essaiera de lire le fichier à partir du stockage local.

30voto

nos Points 102226

Voici une façon de le faire ;

  • Démarrez Vim et ouvrez file1 qui est le fichier sur lequel vous travaillez.
  • :e file2 qui fera apparaître file2, le fichier dont vous voulez copier les lignes.
  • localisez les lignes que vous voulez copier. S'il s'agit de trois lignes, vous appuyez sur 3yy
  • :b1 cela basculera vers le tampon 1, où le fichier 1 est
  • déterminez où vous voulez insérer les lignes que vous avez arrachées, puis appuyez sur p

Vous pourriez aussi avoir les deux fichiers visibles. Divisez l'écran avec par exemple Ctrl + w s .

Quant à la coupe, d coupe et place les éléments coupés dans le tampon d'arrachage. dd permet de "couper" une ligne.

2 votes

Hors sujet : comment faire pour obtenir ces choses qui ressemblent à des boutons de clavier ?

1 votes

0 votes

Et si les deux fichiers se trouvent sur deux serveurs ssh différents, auxquels le même client accède par deux terminaux différents sous Linux/MacOS ? Je veux dire, pas de putty à utiliser, et les deux fichiers ne peuvent pas être ouverts dans la même session vi dans un terminal.

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