Comment dupliquer une ligne entière dans Vim d'une manière similaire à Ctrl+ Ddans IntelliJ IDEA / Resharper ou Ctrl+ Alt+ ↑/ ↓dans Eclipse ?
Yes Pbail. :)
Comment dupliquer une ligne entière dans Vim d'une manière similaire à Ctrl+ Ddans IntelliJ IDEA / Resharper ou Ctrl+ Alt+ ↑/ ↓dans Eclipse ?
Yes Pbail. :)
Réponses:
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
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.
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.
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
: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.
:t.est la réponse exacte à la question.
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$
yyP

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
yy
tirera sur la ligne actuelle sans la supprimer
dd
supprimera la ligne actuelle
p
sera putune ligne saisie par l'une des méthodes précédentes
Faites ceci:
Tout d'abord, yypour copier la ligne actuelle, puis ppour coller.
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.
yyp - souviens-toi avec "yippee!"
Plusieurs lignes avec un nombre entre:
y7yp
:.,.+7 copy .+7: P
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
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>
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
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.
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
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 .
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).
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
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.
imap <S-C-d> <Esc>Ypi mode insertion et nmap <S-C-d> <Esc>Ypen mode normal