Comment dupliquer une ligne entière dans Vim d'une manière similaire à Ctrl+ Ddans IntelliJ IDEA / Resharper ou Ctrl+ Alt+ ↑/ ↓dans Eclipse ?
Y
es P
bail. :)
Comment dupliquer une ligne entière dans Vim d'une manière similaire à Ctrl+ Ddans IntelliJ IDEA / Resharper ou Ctrl+ Alt+ ↑/ ↓dans Eclipse ?
Y
es P
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
Y
à y$
. (Cohérent avec D
et C
; (mais pas compatible avec Vi (personne ne s'en soucie.))) C'est même proposé dans :help Y
.
yj
ou yk
, d'autant plus que vous ne doublez pas sur un caractère. De plus, yk
c'est une version en arrière qui 2yy
ne peut pas faire, et vous pouvez mettre le nombre de lignes à atteindre en arrière dans y9j
ou y2k
, etc. La seule différence est que votre compte doit être n-1
pour un total de n
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 plage 1,.
).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 formulaire class xxx
juste après le curseur.Référence: :help range
, :help :t
, :help :g
, :help :m
et: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, :t0
copiera les lignes au début.
:t.
est la réponse exacte à la question.
YP
ou Yp
ou yyp
.
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:
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 put
une 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 a
sur 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 :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 .
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 .vimrc
fichier.
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>Yp
en mode normal