Question Dans Vim est-il un moyen de supprimer sans mettre du texte dans le registre?


En utilisant Vim, je veux souvent remplacer un bloc de code par un bloc que je viens de tirer.

Mais lorsque je supprime le bloc de code à remplacer, ce bloc lui-même entre dans le registre qui efface le bloc que je viens de récupérer. J'ai donc pris l'habitude de taper, puis d'insérer, puis de supprimer ce que je ne voulais pas, mais avec de gros blocs de code cela devient désordonné en essayant de garder le bloc inséré et le bloc à supprimer séparément.

Alors, quel est le moyen le plus rapide et le plus rapide de remplacer le texte dans Vim?

  • existe-t-il un moyen de supprimer du texte sans le mettre dans le registre?
  • y a-t-il un moyen de dire par exemple "remplacer le mot suivant" ou "remplacer jusqu'au paragraphe suivant"
  • ou est la meilleure façon d'utiliser en quelque sorte la fonctionnalité multi-registre?

418
2017-09-10 14:46


origine


Réponses:


Pour supprimer quelque chose sans l'enregistrer dans un registre, vous pouvez utiliser le "registre de trous noirs":

"_d

Bien sûr, vous pouvez également utiliser les autres registres qui ne vous intéressent pas.


393
2017-09-10 15:36



Oui. C'est légèrement plus compliqué que de supprimer le "vieux" texte en premier, mais:

Je pars avec ..

line1
line2
line3
line4

old1
old2
old3
old4

je décalage+v sélectionnez la ligne 1, ligne 2, 3 et 4 et supprimez-les avec  commander

Ensuite, je supprime les anciennes lignes 1-4 de la même manière.

Alors fais

"2p

Cela va coller les deuxièmes lignes coupées (ligne 1-4). "3p fera le troisième depuis le dernier et ainsi de suite ..

Donc je me retrouve avec

line1
line2
line3
line4

Référence: Documentation Vim sur le registre numéroté


98
2017-09-12 10:36



Documents VIM: Le registre numéroté 0 contient le texte de la commande yank la plus récente, sauf si la commande a spécifié un autre registre avec ["x].

Par exemple. nous tirons "foo" et supprimons "bar" - le registre 0 contient toujours "foo"! Par conséquent "foo" peut être collé en utilisant "0p


65
2018-02-04 00:07



Il est pratique d'avoir un mappage facile qui vous permet de remplacer la sélection actuelle par un tampon.

Par exemple, lorsque vous mettez cela dans votre fichier .vimrc

vmap r "_dP       // it's a capital 'p' on the end

puis, après avoir copié quelque chose dans le registre (c'est-à-dire avec «y»), vous pouvez simplement sélectionner le texte que vous voulez remplacer et appuyez simplement sur «r» sur votre clavier. La sélection sera remplacée par votre registre actuel.

Explication:

vmap - mapping for visual mode
"_d - delete current selection into "black hole register"
P - paste

50
2018-05-28 10:11



Je mets ce qui suit dans mon vimrc:

noremap  y "*y
noremap  Y "*Y
noremap  p "*p
noremap  P "*P
vnoremap y "*y
vnoremap Y "*Y
vnoremap p "*p
vnoremap P "*P

Maintenant, je me faufile et mets du registre dans le presse-papiers, et je ne me préoccupe pas de ce qui se passe avec le registre par défaut. Un avantage supplémentaire est que je peux coller à partir d'autres applications avec un minimum de tracas. Je sais que je perds certaines fonctionnalités, mais je ne peux tout simplement pas garder trace de plus d’un registre / presse-papiers de toute façon.


32
2017-08-17 20:27



Pour l'exemple spécifique que vous avez donné, si je comprends la question, alors cela pourrait fonctionner:

*Highlight what you want to put somewhere else
*delete (d)
*Highlight the code that you want it to replace
*paste (p)

24
2017-09-10 14:52



Pour souligner ce que EBGreen a dit:

Si vous collez pendant la sélection du texte, le texte sélectionné est remplacé avec le texte collé.

Si vous souhaitez copier du texte, puis le coller dans plusieurs emplacements, utilisez "0p coller. Le registre numéroté 0 contient le texte de la commande yank la plus récente.


En outre, vous pouvez lister le contenu de tous vos registres:

:registers

Cette commande rend plus facile de comprendre ce que vous voulez enregistrer lorsque vous faites quelque chose comme La réponse de dbr. Vous verrez également les registres /,%, #. (Voir également :help registers)


Et enfin, consultez cW et cW changer un mot incluant et n'incluant pas d'espace de fin. (En utilisant le capital W comprend la ponctuation.)


15
2018-04-01 01:45



Toutes les opérations de suppression et de suppression écrivent par défaut dans le registre sans nom. Cependant, les plus récents et les plus récents sont toujours stockés (séparément) dans les registres numérotés. Le registre 0 détient le plus récent yank. Les registres 1-9 tenir les 9 dernières suppressions (avec 1 étant le plus récent).

En d'autres termes, une suppression écrase le plus récent yank dans le registre sans nom, mais il est toujours là dans le 0 registre. Le tour de registre de blackhole ("_dd) mentionné dans les autres réponses fonctionne parce qu'il empêche d'écraser le registre sans nom, mais ce n'est pas nécessaire.

Vous faites référence à un registre à l'aide de guillemets. Vous pouvez donc coller le dernier texte saisi de la façon suivante:

"0p

Ceci est une excellente référence:


14
2017-10-05 17:16



Si vous utilisez Vim, vous aurez le mode visuel, qui est comme la sélection, mais avec les modes de séparation, la base de vi / vim.

Ce que vous voulez faire, c’est utiliser le mode visuel pour sélectionner la source, puis yank, puis utiliser à nouveau le mode visuel pour sélectionner l’étendue de la destination, puis coller le texte du tampon par défaut.

Exemple:

Dans un fichier texte avec:

1 | qwer
2 | asdf
3 | zxcv
4 | poiu

avec la séquence suivante: ggVjyGVkp vous finirez avec:

1 | qwer
2 | asdf
3 | qewr
4 | asdf

Expliqué:

  • gg: aller à la première ligne
  • V: démarrer le mode visuel avec des lignes entières
  • j: descendre d'une ligne (avec la sélection commencée sur les lignes précédentes ceci augmente la sélection d'une ligne vers le bas)
  • y: cliquez sur le tampon par défaut (les deux lignes sélectionnées, et il vous quitte automatiquement du mode visuel)
  • G: aller à la dernière ligne
  • V: démarrer le mode visuel (comme avant)
  • k: monter une ligne (comme auparavant, avec le mode visuel activé, cela augmente la sélection d'une ligne)
  • p: coller (avec la sélection sur les deux dernières lignes, il remplacera ces lignes par ce qu'il y a dans le tampon - les 2 premières lignes dans ce cas)

Cela a le petit inconvénient qui met le dernier bloc sur le tampon, donc ce n'est pas du tout désiré pour des passages répétés de la même chose, donc vous voudrez sauvegarder la source dans un tampon nommé avec quelque chose comme "ay (à un tampon appelé "a") et coller avec quelque chose comme "ap (mais si vous programmez, vous ne voulez probablement pas coller plusieurs fois mais créer une fonction et l'appeler, non? DROITE?).

Si vous n'utilisez que vi, alors vous devrez utiliser des marques invisibles à la place du mode visuel, :he markpour plus de détails, je suis désolé mais je ne suis pas très bon avec cette chose invisible, je suis plutôt contaminé par le mode visuel.


10
2017-09-10 15:34



Pour remplacer le mot, essayez cw en mode normal.

Pour 'remplacer le paragraphe', essayez cap en mode normal.


10
2017-09-12 10:15