Je me retrouve donc généralement à copier du texte d'un point à un autre tout en écrasant l'ancien texte où le nouveau est collé:
blah1
newtext
blah2
wrong1
blah3
wrong2
blah4
Supposons que je marque visuellement newtext
et que je y
m'ancre. Maintenant, je sélectionne wrong1
(ce qui pourrait être n'importe quoi, pas nécessairement juste un mot) et p
aste le newtext
. Cependant, si je fais maintenant la même chose, wrong2
il sera remplacé par wrong1
au lieu de newtext
.
Alors, comment puis-je empêcher le texte qui se trouve dans le tampon d'être échangé avec le texte que j'écrase actuellement?
Modifier 1
Bien que j'aime bien les suggestions de réenregistrement (je pense que je vais commencer à utiliser plus de registres, maintenant que j'ai découvert la :dis
commande), je vais avec une modification de la réponse de jinfield , car je n'utilise pas le mode de permutation.
vnoremap p "0p
vnoremap P "0P
vnoremap y "0y
vnoremap d "0d
fait parfaitement l'affaire.
Modifier 2
J'étais trop rapide; La solution de romainl est exactement ce que je cherchais, sans le hack dans Edit 1 .
En fait, ça vnoremap p "_dP
suffit!
Donc, changer la réponse acceptée.
la source
vnoremap p "_dP map
et j'ai remarqué que cela ne fonctionne pas bien pour le dernier mot / caractère d'une ligne. J'ai de nouveau allé auvnoremap p "0p
,vnoremap P "0P
etset clipboard=unnamed
(pour Mac OS X)vnoremap p "_dP
supprime les espaces blancs sur la pâte. Edit 1 fonctionne parfaitement.Réponses:
J'ai ces mappages dans mon .vimrc:
"_
est le "registre des trous noirs", selon:help "_
:"Lors de l'écriture dans ce registre, rien ne se passe. Cela peut être utilisé pour supprimer du texte sans affecter les registres normaux. Lors de la lecture de ce registre, rien n'est retourné. {Absent de Vi}"
la source
vnoremap p "_dP map
et j'ai remarqué que cela ne fonctionne pas bien pour le dernier mot / caractère d'une ligne. J'ai de nouveau allé auvnoremap p "0p
,vnoremap P "0P
etset clipboard=unnamed
(pour Mac OS X)vnoremap p "_dP
arrête de travailler pour moi en mode select, maisvnoremap <leader>p "_dP
ça marche<leader>
est peut - être un espace réservé que je suis censé savoir pour remplacer par quelque chose, mais cela n'a fonctionné pour moi que si je l'ai supprimé. Qu'est-ce que cela signifie ici?:help mapleader
.vnoremap <leader>p
mappage ne fonctionne pas correctement sur la dernière ligne du tampon car dès que vous supprimez cette dernière ligne du tampon, vous êtes maintenant sur l'avant-dernière ligne, et leP
collera au-dessus de cette ligne, au lieu de ci-dessous.En plus du tampon standard, vous pouvez extraire du texte dans des tampons nommés, puis les placer à partir de ces tampons nommés. Vous pouvez utiliser jusqu'à 26 tampons nommés (un pour chaque lettre). Utilisez des guillemets doubles et une lettre pour accéder à un tampon nommé. Exemples:
"dyy
- Mettre la ligne courante dans le tampon d."a7yy
- Récupérez les sept lignes suivantes dans le tampon a."dP
- Placer le contenu du tampon d avant le curseur."ap
- Mettre le contenu du tampon un après le curseurUne autre chose intéressante, si vous utilisez une majuscule au lieu de minuscules, c'est
"Dyy
-à- dire que la ligne actuelle sera ajoutée au tampon d au lieu de le remplacer. Plus de détails dans le livre O`Reilly: http://docstore.mik.ua/orelly/unix/vi/ch04_03.htmla source
"a
tout, mais d'accord.Lors de l'utilisation
put
en mode visuel, le texte que vous remplacezwrong1
est remplacé par le contenu du registre «sans nom».Cela fonctionne réellement en «mettant» le registre après la sélection, puis en supprimant la sélection. Le problème est que cette suppression est maintenant stockée dans le
unnamed
registre et sera utilisée pour l'put
action suivante .La solution, selon
:h v_p
, consiste à extraire dans un registre nommé, tel que"0y
, puis à coller en utilisant"0p
autant de temps que nécessaire. Il peut être utile de mapper<leader>y
et<leader>p
d'utiliser un registre nommé, si c'est quelque chose que vous faites fréquemment.pour plus d'aide, voir:
la source
Il
"0
est important de savoir coller à partir du registre, mais vous voulez souvent le remplacer plusieurs fois. Si vous en faites une action répétable, vous pouvez utiliser l'.
opérateur, comme mentionné par garyjohn. C'est expliqué sur le wiki vim :la source
Lorsque vous tirez le texte dans le registre sans nom *, une copie est également placée dans le registre 0. Chaque fois que vous remplacez le texte sélectionné, vous pouvez simplement coller à partir du registre 0. Voir
De plus, si vous remplacez un certain nombre de mots par le même mot, vous pouvez simplement vous déplacer au début du mot à remplacer et taper
.
. Cela répétera la dernière opération d'édition. Voir* Les emplacements de stockage dans lesquels vous tirez et placez sont appelés registres. Un tampon est la chose que vous modifiez, généralement une copie d'un fichier à partir du disque.
la source
J'en ai besoin si souvent, j'ai écrit un plugin pour ça: ReplaceWithRegister .
Ce plugin offre une commande deux en un
gr
qui remplace le texte couvert par un {motion}, une ou des lignes entières ou la sélection actuelle par le contenu d'un registre; l'ancien texte est supprimé dans le registre des trous noirs, c'est-à-dire qu'il a disparu.la source
Comme quelque chose comme
vnoremap p "_dP
(j'ai également essayéx
ouc
) a des problèmes avec le début et la fin de la ligne, j'ai fini par le faire:vnoremap p :<C-U>let @p = @+<CR>gvp:let @+ = @p<CR>
que j'ai trouvé plus simple que les plugins existants (qui ne fonctionnaient pas non plus avec euxset clipboard=unnamedplus
). Donc ce que ça fait c'est:C-U
)+
registre de sauvegarde (en raison de unlamedplus, les alternatives sont"
et*
selon votre configuration) pourp
la source
C'est ce que j'utilise (littéralement copié de mon .vimrc) pour le contrôle de style Windows + X couper / Contrôle + C copier / Contrôle + V coller / Contrôle + S enregistrer / Contrôle + F trouver / Contrôle + H remplacer le comportement.
La fonction smartpaste () doit contenir ce que vous cherchez, c'est-à-dire un moyen de coller sur du texte en surbrillance sans tirer simultanément ce qui a été sélectionné.
la source
tl; dr - vnoremap p "_c *
Voici une liste de mes mappages complets:
"Corriger l'enregistrement copier / coller
nnoremap DD" * dd
nnoremap D "* d
vnoremap D" d
nnoremap d "_d
nnoremap dd" _dd
vnoremap d "_d
nnoremap s" _s
vnoremap s "_s
nnoremap c "_c
vnoremap c" _c
nnoremap x "_x
vnoremap x" _x
vnoremap p "_c
"Coller sur une nouvelle ligne
nnoremap, p op
nnoremap, P Op
la source