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 copier (aa) et coller (p) dans le même fichier. Mais cela ne fonctionne pas pour différents fichiers. Comment cela se fait-il?
Existe-t-il également un moyen de couper-coller? J'ai essayé de googler, mais la plupart des ressources ne parlent que de copier-coller.
vim
copy-paste
vi
cut
macha
la source
la source
Réponses:
Puisque vous savez déjà comment couper / copier du texte, voici quelques idées pour le coller dans un autre fichier:
:e /path/to/other/file
) et collez-leOuvrez les deux fichiers ensemble dans une fenêtre divisée et naviguez entre eux à l'aide de Ctrl+ w, Up/ Downsoit en:
vi -o /path/to/file1 /path/to/file2
la source
Ctrl
+w
,s
.:sp myfile
qui se divise horizontalement et ouvre le fichier spécifié, mais comment faire si je préfère diviser la fenêtre verticalement?Si vous utilisez Vim sous Windows, vous pouvez accéder au presse-papiers (copier / coller MS) en utilisant:
"*dd - couper une ligne (ou 3dd pour couper trois lignes)
"*yy - copier une ligne (ou 3yy pour copier trois lignes)
"*p - coller des lignes en ligne après le curseur
"*P - coller des lignes en ligne avant le curseur
Le vous permet de coller entre des fenêtres Vim distinctes ou entre des applications Vim et PC ( Bloc - notes , Microsoft Word , etc.).
la source
+
comme registre de presse-papiers du système multiplateforme (Windows et Linux) par rapport à*
, qui est Windows uniquement (+
fonctionne de la même manière que sous Windows*
).Utilisez les variations de
d
commedd
pour couper.Pour écrire une plage de lignes dans un autre fichier, vous pouvez utiliser:
Où
<n>
et où<m>
sont les nombres (ou symboles) qui désignent une plage de lignes.Pour utiliser le presse-papiers du bureau, jetez un œil aux
+g
commandes.la source
ma
,, passer à la dernière lignemb
,. Ajoutez ensuite a'
à la lettre de la marque lorsque vous utilisez la commande ci-dessus::'a,'b w filename
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 souhaitez copier, tapez"qY
, allez dans le fichier que vous voulez coller et tapez"qP
."
buffer_name, copie dans le tampon.Y
est sec etP
est mis. J'espère que cela pourra aider!la source
Voici une façon de le faire;
Vous pouvez également afficher les deux fichiers. Divisez l'écran avec par exemple Ctrl+ w s.
Quant à la coupe, dcoupe et place la matière coupée dans le tampon de tirage. dd"coupe" une ligne.
la source
Ce sont toutes d'excellentes suggestions, mais si vous connaissez l'emplacement du texte dans un autre fichier, utilisez sed avec facilité.
:r! sed -n '1,10 p' < input_file.txt
Cela insérera 10 lignes dans un fichier déjà ouvert à la position actuelle du curseur.la source
:r ! head -n2 file.py
Lors de la modification du fichier, marquez l'endroit où vous souhaitez que le début et la fin soient utilisés
ma
-a
marque le coupmb
-b
marque le coupEnsuite, pour copier cela dans un autre fichier, utilisez simplement la
w
commande:la source
Mise à jour 2017-05:
Je viens de découvrir que si vous ajoutez la ligne suivante dans votre fichier vimrc,
alors Vim utilise le presse-papiers du système.
Je viens de découvrir que la méthode yank ne fonctionnera pas sur la façon dont je copie le contenu entre différentes fenêtres d'instance Vim. (Au moins, cela ne fonctionne pas sur la base de mes connaissances Vim. Je ne sais pas s'il existe une autre façon de lui permettre de fonctionner).
La méthode yank ne fonctionne que sur la façon dont plusieurs fichiers sont ouverts dans la même fenêtre selon mon test.
Si vous voulez le faire, vous feriez mieux d'utiliser le système de coupe-copie-passé du système d'exploitation tel que Ctrl+ x, Ctrl+ c(sous Windows).
la source
Ces remaps fonctionnent comme un charme pour moi:
Donc, quand je suis en mode visuel, je sélectionne les lignes que je veux et j'appuie sur Ctrl+ cpuis sur Ctrl+ vpour insérer le texte dans le fichier récepteur. Vous pouvez également utiliser "* y, mais je pense que c'est parfois difficile à retenir.
Ceci est également utile pour copier du texte de Vim dans le presse-papiers.
Source: copier et coller entre les sessions à l'aide d'un fichier temporaire
la source
La copie de texte entre deux tampons (== fichiers) ouverts dans la même instance de Vim ne pose aucun problème:
Tirez simplement dans un tampon avec y(en supposant que vous avez marqué une zone à copier en mode visuel auparavant), puis collez-le dans l'autre tampon avec p. Il fonctionne également avec différents onglets tant qu'ils se trouvent dans la même instance de Vim.
Comment ouvrir deux fichiers dans la même instance de Vim dépend de votre système:
vim file1 file2
--remote-silent
option pour vous assurer que tous les fichiers sont ouverts dans la même instanceSi vous avez ouvert les deux fichiers dans deux instances différentes de Vim, vous devez utiliser le presse-papiers du système: dans la première instance de Vim, tirez le texte dans le presse-papiers du système à l'aide de
"+y
(encore une fois, marquez la zone à tirer en mode visuel avant ), puis passez à la deuxième et collez le Vim presse - papier là - bas:"+p
.la source
Objectif : enregistrer un morceau d'un fichier dans un autre fichier.
Solution :
Enregistrez le texte sélectionné dans le nouveau fichier. Tapez :wSpaceet le nom du nouveau fichier. En fait, vous verrez
:'<,'>w new.txt
Puis appuyez Enter
la source
Mon scénario était que je devais copier n nombre de lignes au milieu, n inconnu, du fichier 1 au fichier 2.
la source
:echo has('clipboard')
devrait revenir1
0
(par exemple Mac OS X, au moins v10.11 (El Capitan), v10.9 (Mavericks) et v10.8 (Mountain Lion) - est livré avec une version Vim sans support de presse-papiers), vous devez installer un Version Vim avec prise en charge du presse-papiers, par exemple viabrew install vim
(n'oubliez pas de relancer votre (vos) terminal (s) après l'installation)PS:
set mouse+=a
à votre.vimrc
- cela vous permettra de sélectionner des lignes dans Vim à l'aide de la souris, tout en ne sélectionnant pas les éléments étrangers (comme les numéros de ligne, etc.) AVIS: cela bloquera la possibilité de copier le texte sélectionné par la souris dans le presse-papiers du système de Vim .la source
Exemple: fichierA et fichierB - commencez dans le fichierA à la ligne 25, copiez 50 lignes et collez-le dans le fichierB
la source
L'option ci-dessous fonctionne la plupart du temps et également pour un collage ultérieur.
Les lignes tirées seront stockées dans le tampon
'x'
. Il peut être utilisé n'importe où dans l'édition.Pour coller des lignes dans l'autre fichier,
Exemple: saisissez la commande ci-dessous dans l'édition en cours
Opération complète
ouvrir le fichier 1:
-Ouvrez maintenant le deuxième fichier de l'édition en cours
-déplacez le curseur sur la ligne où vous devez coller
- Les lignes du tampon
'*a*'
seront copiées après la position actuelle du curseurla source
Si vous souhaitez copier une partie d'un fichier et coller ce contenu au milieu d'un autre fichier, vous pouvez procéder de cette façon.
Exemple:
Ou
Exemple:
Maintenant, les lignes sont copiées dans un autre fichier. Si vous souhaitez supprimer ces lignes après la copie, vous pouvez le faire
Ou
Maintenant, allez dans un autre fichier. Gardez ensuite le curseur sur la ligne où vous souhaitez coller.
Type
Maintenant, le contenu du fichier temporaire est collé ici. Vous pouvez supprimer le fichier temporaire de la ligne de commande elle-même, après avoir collé le contenu.
Cela vous aiderait si vous vouliez copier et coller plusieurs fois.
la source
Une autre façon pourrait être d'ouvrir les deux fichiers dans deux tampons séparés et d'utiliser le "snippet" suivant après sélection visuelle des lignes d'intérêt.
la source
Entrer en mode commande et exécuter
Par exemple, pour extraire des lignes
20-30
dufilename
fichier actuellement ouvertla source