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
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.
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.
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
Ce n'est pas plus simple que ça! Du mode normal:
yy
puis déplacez-vous sur la ligne à laquelle vous souhaitez coller et
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.
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
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
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 :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.
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 .
Y
esP
bail. :)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
la source
Y
ày$
. (Cohérent avecD
etC
; (mais pas compatible avec Vi (personne ne s'en soucie.))) C'est même proposé dans:help Y
.yj
ouyk
, d'autant plus que vous ne doublez pas sur un caractère. De plus,yk
c'est une version en arrière qui2yy
ne peut pas faire, et vous pouvez mettre le nombre de lignes à atteindre en arrière dansy9j
ouy2k
, etc. La seule différence est que votre compte doit êtren-1
pour un total den
lignes, 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,:,+t0
copiera 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 plage1,.
).Si vous devez déplacer au lieu de copier, utilisez
:m
plutôt que:t
.Cela peut être vraiment puissant si vous le combinez avec
:g
ou: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 formulaireclass xxx
juste après le curseur.Référence:
:help range
,:help :t
,:help :g
,:help :m
et:help :v
la source
:
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,:t0
copiera les lignes au début.:t.
est la réponse exacte à la question.YP
ouYp
ouyyp
.la source
Y
est 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:
puis déplacez-vous sur la ligne à laquelle vous souhaitez coller et
la source
yy
tirera sur la ligne actuelle sans la supprimer
dd
supprimera la ligne actuelle
p
sera
put
une ligne saisie par l'une des méthodes précédentesla source
Faites ceci:
Tout d'abord, yypour copier la ligne actuelle, puis ppour coller.
la source
Si vous voulez une autre façon:
"ayy
: Cela stockera la ligne dans le tampona
."ap
: Cela mettra le contenu du tampona
sur le curseur.Il existe de nombreuses variantes à ce sujet.
"a5yy
: Cela stockera les 5 lignes dans le tampona
.Voir " Fichiers d'aide Vim pour plus de plaisir.
la source
yyp - souviens-toi avec "yippee!"
Plusieurs lignes avec un nombre entre:
y7yp
la source
:.,.+7 copy .+7
: Pyyp - coller après
yyP - coller avant
la source
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
la source
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>
la source
Une autre option serait d’aller avec:
vous donne l'avantage de conserver la position du curseur.
la source
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
la source
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 source
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
la source
Je sais que je suis en retard à la fête, mais peu importe; J'ai ceci dans mon .vimrc:
la
:copy
commande 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 .la source
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
la source
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
.vimrc
fichier.nmap <S-C-d> <Esc>Yp
Ou, pour le mode Insertion:
imap <S-C-d> <Esc>Ypa
la source
i
à la fin pour le ressaisir se briseundo
, 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 etnmap <S-C-d> <Esc>Yp
en mode normalJ'aime utiliser cette cartographie:
car il est cohérent à utiliser avec la
YP
commande native .la source