web-dev-qa-db-fra.com

Comment supprimer (pas couper) dans Vim?

Comment puis-je supprimer une ligne sans la mettre dans mon tampon par défaut?

Exemple:

line that will be copied.

line that I want to be substitued with the previous one.

Ce que j'essaye de faire:

yy
dd
p

Mais Vim remplace la chaîne copiée récente par celle supprimée (coupée). Je sais que je peux utiliser des tampons comme, "1yy, dd puis "1p, mais j'oublie toujours de mettre la chaîne copiée dans un tampon puis je dois d'abord coller mon contenu (ligne qui sera copiée) puis supprimer ce que je veux (ligne que je veux remplacer par la précédente.)

Comment puis-je vraiment supprimer un texte dans Vi (m) sans le copier?

Une autre question connexe est de savoir comment puis-je supprimer un mot en mode insertion? Je veux quelque chose de similaire à Ctrl+w.

107
MaikoID

Utilisez le "registre des trous noirs", "_ pour vraiment supprimer quelque chose: "_d.
Utilisation "_dP pour coller quelque chose et le garder disponible pour un collage ultérieur.

Pour la deuxième question, vous pouvez utiliser <C-o>dw. <C-o> est utilisé pour exécuter une commande normale sans quitter le mode insérer.

Vous pouvez bien sûr configurer vos propres mappages pour enregistrer la saisie. Je les ai:

nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP
103
romainl

Le registre des trous noirs"_ fera l'affaire, mais il existe une meilleure solution:

Lorsque vous entrez à nouveau la ligne avec la commande p, vous collez le contenu de (volatile) registre par défaut"", qui a été écrasé par dd. Mais vous pouvez toujours coller à partir du (non volatile) registre yank"0, qui ne sera pas écrasé par la commande de suppression dd.

Voici donc les commandes que vous souhaitez utiliser selon votre exemple:

yy
dd
"0p
76
cutemachine

C'est une des choses que je n'aimais pas à propos de vim ... J'ai fini par mapper dd au registre des trous noirs dans mon .vimrc et la vie est belle depuis:

nnoremap d "_d
vnoremap d "_d
32
kprobst

les mappages suivants produiront:

  • d => "supprimer"
  • leader d => "couper"
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d

De plus, c'est une bonne pratique que la clé "leader" soit définie sur virgule, par exemple:

let mapleader = ","
let g:mapleader = ","

ces 2 extraits feront de ", d" votre nouvelle commande de coupe.

Si vous souhaitez utiliser ces mappages avec une configuration de presse-papiers du système partagé, voir plus de détails sur https://github.com/pazams/d-is-for-delete

15
pazams

Vous pouvez utiliser "_d pour éviter que les choses n'écrasent votre texte. Vous pouvez stocker du texte retiré ou supprimé dans le registre de votre choix avec ", et _ est le registre du "trou noir", où vous envoyez des trucs qui ne vous intéressent pas.

Pour plus d'informations, vous pouvez taper :help "_ ou :help deleting

6
Alex
yy
Vx
p

En mode visuel, x supprimera la sélection, donc si vous voulez supprimer une ligne entière, appuyez d'abord sur V pour sélectionner la ligne en mode visuel puis appuyez sur x pour supprimer la sélection.

1
Atemu