Suppression dans Vim puis collage sans nouvelle ligne

11

Plusieurs fois dans vim, je voudrais supprimer une ligne complètement, donc j'utilise dd. Cependant, je dois ensuite coller cette ligne dans une autre position au sein d'une ligne, mais cela insère une nouvelle ligne avant de la coller, ce qui rend très difficile pour moi d'obtenir le résultat souhaité. Par exemple,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

quand je fais cela avec le code ci-dessus, je reçois:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

ce qui est très loin du résultat que je veux ... comment puis-je supprimer ce comportement de nouvelle ligne, ou utiliser une autre méthode qui le fait très efficacement? Je ne pense pas que d $ soit bon parce que je dois non seulement aller au début de la ligne, mais si je veux aussi supprimer la ligne vide, je dois la supprimer dans un autre registre, je pense qu'il devrait y avoir un moyen plus simple! Merci.

fYre
la source
1
ce n'est pas un doublon, comme je l'ai dit, je veux un moyen plus efficace que d'aller au début de la ligne, je veux aussi supprimer la ligne complète avec le caractère de nouvelle ligne .... pas seulement le contenu de la ligne
fYre
Oh, je vois ce que tu veux dire maintenant. Ce n'était tout simplement pas très clair pour moi ce que vous tentiez d'accomplir.
EvergreenTree
1
0Dsupprimer la ligne sauf le saut de ligne. Et que gJde rejoindre les lignes. Vous pouvez maintenant mettre le texte sans ligne de rupture et sans ligne vide.
Alex Kroll

Réponses:

9

Vous pouvez aller n'importe où dans la ligne au-dessus de la ligne que vous souhaitez supprimer, puis appuyez JDdessus et collez-la pau point souhaité.

  • Jjoint les deux lignes et vous déplace au début du texte que vous souhaitez supprimer. Cela supprime un caractère de nouvelle ligne et l'indentation de la ligne que vous souhaitez déplacer.
  • D supprime de la position actuelle du curseur jusqu'à la fin de la ligne mais conserve le caractère de nouvelle ligne.

Astuce: vous pouvez utiliser :pusi vous avez supprimé avec Dou tiré avec y$et que vous souhaitez coller avec une nouvelle ligne.

Hajo
la source
3

Pas vraiment plus simple, mais légèrement plus efficace, et vous pouvez également créer des cartes en mode normal pour les deux séquences:

  • yanking: allez à la ligne que vous souhaitez déplacer, puis ^D"_dd
  • coller: accédez au mot que vous souhaitez remplacer, puis viwp
lcd047
la source
2

Vous pouvez réaliser quelque chose qui fonctionne assez bien avec un imap. Ajoutez ce qui suit à votre vimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

Cela créera un mappage pour CTRL-acoller le dernier texte supprimé (avec ddou similaire). Si vous préférez, vous pouvez bien sûr utiliser une clé différente pour le mappage.

Références:

:h i_CTRL-R
:h quote1
:h J
Karl Yngve Lervåg
la source
1

Cela revient un peu pour moi aussi, je n'ai jamais pensé à l'optimiser auparavant, mais cette cartographie fonctionne:

nmap dil ^d$

dilest « suppression en ligne », semblable à diw, di"etc.

flukus
la source
1

Coller sans nouvelle ligne

Mettez ceci dans votre fichier .vimrc:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

Exemple:

<span style="color:">danger</span>

Vous pouvez maintenant taper gppour insérer #D51B3Faprès color:lorsque mon curseur est :en mode Normal.

Yank sans nouvelle ligne

Utilisez la réponse de Flukus:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

comme acronyme de supprimer la ligne intérieure . Cela supprime également l'indentation principale.

trébucherie
la source
0

Vous pouvez sélectionner le texte que vous souhaitez copier en appuyant sur v, puis le mettre en mémoire tampon en appuyant sur y, puis le coller n'importe où par p. Il n'insère aucune nouvelle ligne.

Varun Agarwal
la source
C'est vrai, mais cela laisse toujours une ligne vide.
muru