2
votes

Comment dd ligne entière et coller l'insert sur une autre ligne sans nouvelle ligne ni espace?

par exemple:

  1:  if doc.text =~ /test/
  2:        content = doc.xpath('
  3:   /html/body/table[3]/tbody/tr/td[5]
     ')
  4:    end

Étape: jj ligne 4 et sauter à la ligne 2 puis vi'p

si je dd la ligne 4 et coller pour remplacer la chaîne entre guillemets par la ligne 2, la ligne contiendra un saut de ligne et des espaces, comme suit:

  1:  if doc.text =~ /test/
  2:        content = doc.xpath('shoud be replaced') // this string in quotes will be replaced with `vi'p`
  3:    end
  4:    /html/body/table[3]/tbody/tr/td[5] // dd this line

vim

0 commentaires

3 Réponses :


1
votes

Variante 1:

" hotkey to trim register
nnoremap <leader>t :call setreg(v:register, trim(getreg()))<CR>

4Gdd<leader>t2Gvi'p

4G - allez à la 4ème ligne, 1er caractère non vide (vous pouvez également utiliser _ ou ^)

y $ - tirez jusqu'à (mais non compris) la fin de la ligne

... p>

"0p mettre le dernier texte copié

Variante 2:

4Gy$dd2Gvi'"0p


1 commentaires

@TangMonk Voir aussi : h Y .



4
votes

Avant de mettre, réécrivez le contenu du registre par défaut pour couper les espaces, ce que vous pouvez faire avec

:let @@ = trim(@@)

En supprimant les espaces de début et de fin, y compris la nouvelle ligne de fin, le registre deviendra par caractère (plutôt que par ligne), donc Vim ne coupera pas la ligne avant le contenu du registre lors de sa mise.

Alternativement, si vous pouvez contrôler l'heure à laquelle vous coupez le contenu, utilisez D pour supprimer à la nouvelle ligne, après être allé au premier caractère non vide avec ^ . Une suppression par caractère se terminera dans le registre "- , qui ne sera pas écrasé par une suppression de ligne ultérieure ( dd pour supprimer l'espace blanc restant dans cette dernière ligne) , donc plus tard, vous pourrez le mettre avec "-p.


0 commentaires

0
votes

J'avais besoin de "transtyper" le contenu du registre dans un certain mode (caractère / ligne / bloc) si souvent, j'ai écrit le Plugin UnconditionalPaste pour cela. Il fournit des alternatives gcp , glp , etc. aux commandes de collage intégrées qui forcent un certain mode (et maintenant plusieurs autres variantes sur ce thème, comme coller avec joint par des virgules ou des caractères interrogés).

Avec lui, vous pouvez simplement utiliser gcp / gcP pour coller après / avant la position du curseur, quelle que soit la façon dont vous avez extrait le texte. Les caractères de nouvelle ligne intérieurs et le retrait sont aplatis à un seul espace, le début et la fin sont supprimés.


0 commentaires