Comment dupliquer une ligne entière dans Vim chez Eclipse?


1624

Comment dupliquer une ligne entière dans Vim d'une manière similaire à Ctrl+ Ddans IntelliJ IDEA / Resharper ou Ctrl+ Alt+ / dans Eclipse ?


49
Les gens n'exécutent-ils plus vimtutor? C'est probablement dans les cinq premières minutes de l'apprentissage de l'utilisation de Vim.
dash-tom-bang

131
Souhaitez-vous dupliquer cette ligne? Yes Pbail. :)
Stavr00

3
FWIW J'ai fait vimtutor une douzaine de fois au cours des 2 derniers mois et ce concept n'est pas couvert. Il indique comment faire "dd" et "v - naviguer - y" suivi de "p". Il ne dit pas comment copier une seule ligne sans la supprimer comme cela est demandé ici.
danielson317

Réponses:


2768

yyou Yde copier la ligne (Mnémonique: y ANK )
ou
ddà d élete la ligne (copie ce que vous Vim dans un presse - papiers supprimés comme « registre », comme une coupure opération)

puis

pà p Aste le texte copié ou supprimé après la ligne en cours
ou
Pà p Aste le texte copié ou supprimé avant la ligne en cours


129
Un excellent point. Pour une raison quelconque, je trouve que frapper y deux fois est plus rapide pour moi que SHIFT-y
Mark Biek

25
@camflan Je pense que le Y devrait être "copier du curseur jusqu'à la fin"
Dzung Nguyen

42
et 2yy peuvent être utilisés pour copier 2 lignes (et pour tout autre n)
Amir Ali Akbari

5
@nXqd: Oui, un grand pourcentage d'utilisateurs des cartes Yà y$. (Cohérent avec Det C; (mais pas compatible avec Vi (personne ne s'en soucie.))) C'est même proposé dans :help Y.
Aaron Thoma

11
Pour copier deux lignes, c'est encore plus rapide juste pour aller yjou yk, d'autant plus que vous ne doublez pas sur un caractère. De plus, ykc'est une version en arrière qui 2yyne peut pas faire, et vous pouvez mettre le nombre de lignes à atteindre en arrière dans y9jou y2k, etc. La seule différence est que votre compte doit être n-1pour un total de nlignes, mais votre tête peut apprendre que en tous cas.
zelk

406

Mode normal: voir les autres réponses.

La voie Ex :

  • :t. va dupliquer la ligne,
  • :t 7 le copiera après la ligne 7,
  • :,+t0copiera la ligne actuelle et la ligne suivante au début du fichier ( ,+est un synonyme de la plage .,.+1),
  • :1,t$copiera les lignes du début jusqu'à la position du curseur jusqu'à la fin ( 1,est un synonyme de la plage 1,.).

Si vous devez déplacer au lieu de copier, utilisez :mplutôt que :t.

Cela peut être vraiment puissant si vous le combinez avec :gou :v:

  • :v/foo/m$ déplacera toutes les lignes ne correspondant pas au motif «foo» à la fin du fichier.
  • :+,$g/^\s*class\s\+\i\+/t.copiera toutes les lignes suivantes du formulaire class xxxjuste après le curseur.

Référence: :help range, :help :t, :help :g, :help :met:help :v


1
Lorsque vous appuyez sur :en mode visuel, il est transformé en '<,'>afin de présélectionner la plage de lignes sur laquelle la sélection visuelle s'étend. Ainsi, en mode visuel, :t0copiera les lignes au début.
Benoit

1
Pour mémoire: lorsque vous tapez deux points (:), vous passez en mode ligne de commande où vous pouvez entrer des commandes Ex. vimdoc.sourceforge.net/htmldoc/cmdline.html Les commandes Ex peuvent être vraiment puissantes et concises. Les solutions yyp sont des commandes "Mode normal". Si vous souhaitez copier / déplacer / supprimer une ligne ou une plage de lignes éloignées, une commande Ex peut être beaucoup plus rapide.
Niels Bom

7
Les votes négatifs ne sont pas dus à un problème avec la réponse en tant que telle (bien que cela ne fonctionnerait pas dans ma situation, je n'ai aucune idée du numéro de ligne vers lequel je veux dupliquer) mais parce que ce ne devrait VRAIMENT pas être la première réponse / acceptée pour cela question fréquemment recherchée.
mjaggard

9
@mjaggard: les réponses acceptées sont toujours en tête, quel que soit leur score. Oui, j'ai ajouté cette réponse en complément, et il semble qu'elle convenait bien à l'OP.
Benoit

7
:t.est la réponse exacte à la question.
Burak Erdem

294

YPou Ypou yyp.


Yest généralement remappé à y$(yank (copie) jusqu'à la fin de la ligne (à partir de la position actuelle du curseur, pas au début de la ligne)). Avec cette ligne en .vimrc::nnoremap Y y$
Aaron Thoma

1
N'oubliez pas le pauvre vieuxyyP
icc97

253

copier et coller dans vim

Ce n'est pas plus simple que ça! Du mode normal:

yy

puis déplacez-vous sur la ligne à laquelle vous souhaitez coller et

p

34
Qu'avez-vous utilisé pour faire le gif?
Zoltán

4
@ Zoltán, vous pouvez utiliser LiceCap, qui est de petite taille
onmyway133


44

Faites ceci:

Tout d'abord, yypour copier la ligne actuelle, puis ppour coller.


20
Ne tapez pas l'espace.
Niels Bom

1
Oui, si le curseur est à la fin de la ligne et que vous tapez l'espace comme indiqué, vous dupliquerez la ligne que vous avez tirée 2 lignes en dessous de la ligne que vous avez tirée.

44

Si vous voulez une autre façon:

"ayy: Cela stockera la ligne dans le tampon a.

"ap: Cela mettra le contenu du tampon asur le curseur.

Il existe de nombreuses variantes à ce sujet.

"a5yy: Cela stockera les 5 lignes dans le tampon a.

Voir " Fichiers d'aide Vim pour plus de plaisir.


Merci, j'ai utilisé ceci comme un lien: map <Leader> d "ayy" ap
frbl

39

yyp - souviens-toi avec "yippee!"

Plusieurs lignes avec un nombre entre:

y7yp


17
7yy est équivalent à y7y et il est probablement plus facile de se rappeler comment faire.
graywh

10
y7yp (ou 7yyp) est rarement utile; le curseur reste sur la première ligne copiée pour que p colle les lignes copiées entre la première et la deuxième ligne de la source. Pour dupliquer un bloc de lignes, utilisez 7yyP
Nefrubyr

@Nefrubyr ou :.,.+7 copy .+7: P
DarkWiiPlayer

23

yyp - coller après

yyP - coller avant


6
Étant donné que la ligne est dupliquée, le résultat final du contenu est le même.
Acumenus

4
@ABB Cependant, il y a une différence miniature ici - sur quelle ligne votre curseur atterrira-t-il.
Mikk

12

J'aime: Shift+ v(pour sélectionner immédiatement toute la ligne et vous permettre de sélectionner d'autres lignes si vous le souhaitez), y, p


11

Vous pouvez également essayer <Cx> <Cl> qui répétera la dernière ligne du mode insertion et vous apportera une fenêtre de complétion avec toutes les lignes. Cela fonctionne presque comme <Cp>


C'est très utile, mais pour éviter d'avoir à appuyer sur plusieurs touches, je l'ai mappé à CTRL-L, voici ma carte: inoremap ^ L ^ X ^ L
Jorge Gajon

11

Une autre option serait d’aller avec:

nmap <C-d> mzyyp`z

vous donne l'avantage de conserver la position du curseur.


10

Pour quelqu'un qui ne connaît pas vi, certaines réponses ci-dessus peuvent l'induire en erreur avec des phrases comme "coller ... après / avant la ligne actuelle ".
C'est en fait "coller ... après / avant le curseur ".

yyou Ypour copier la ligne
ou
ddpour supprimer la ligne

puis

ppour coller le texte copié ou supprimé après le curseur
ou
Ppour coller le texte copié ou supprimé avant le curseur


Pour plus de raccourcis clavier, vous pouvez visiter ce site: vi Liste complète des raccourcis clavier


3

1 gotcha: lorsque vous utilisez "p" pour mettre la ligne, il la place après la ligne sur laquelle se trouve votre curseur, donc si vous voulez ajouter la ligne après la ligne sur laquelle vous tirez, ne déplacez pas le curseur sur une ligne avant de mettre la nouvelle ligne.


4
ou utilisez le capital P - mis avant
Ghoti

3

La valeur par défaut est yyp, mais j'utilise cette reliure depuis environ un an et j'adore:

" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv


3

Je sais que je suis en retard à la fête, mais peu importe; J'ai ceci dans mon .vimrc:

nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>

la :copycommande copie simplement la ligne ou la plage sélectionnée (toujours des lignes entières) en dessous du numéro de ligne donné comme argument.

En mode normal, cela copy . copie la ligne juste en dessous de cette ligne .

Et en mode visuel, il se transforme en '<,'> copy '> copie du début de la sélection à la fin de la sélection jusqu'à la ligne en dessous de la fin de la sélection .


1
↑↑ meilleure réponse ici!

2

Pour ceux qui commencent à apprendre vi, voici une bonne introduction à vi en listant côte à côte les commandes vi au mouvement de curseur et aux touches de raccourci typiques de l'éditeur GUI Windows. Il répertorie toutes les commandes de base, y compris yy(ligne de copie) et p(coller après) ou P(coller avant).

vi (Vim) pour les utilisateurs Windows


1

Si vous souhaitez dupliquer une ligne et la coller immédiatement en dessous du courant comme, comme dans Sublime Ctrl+ Shift+ D, vous pouvez l'ajouter à votre .vimrcfichier.

nmap <S-C-d> <Esc>Yp

Ou, pour le mode Insertion:

imap <S-C-d> <Esc>Ypa


Cela laisse le mode d'insertion cependant, et l'ajout ià la fin pour le ressaisir se brise undo, donc la solution pour dupliquer des lignes en mode d'insertion n'est pas aussi triviale qu'il y paraît.
DarkWiiPlayer

Cela fonctionne parfaitement bien pour moi: imap <S-C-d> <Esc>Ypi mode insertion et nmap <S-C-d> <Esc>Ypen mode normal
jedi

0

J'aime utiliser cette cartographie:

:nnoremap yp Yp

car il est cohérent à utiliser avec la YPcommande native .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.