TL; DR; version - Comment puis-je annuler du texte qui a été collé à partir de mon tampon de copie du système d'exploitation sans annuler un autre texte qui a été tapé depuis que je suis passé en mode insertion?
Description plus longue:
- Mettez quelque chose dans votre tampon de copie du système d'exploitation (par exemple, mettez du texte en surbrillance et faites-le
Command-c
sur Mac) - Passez en mode insertion dans vim (
i
) - Tapez quelque chose (par exemple
asdf
) - Sans quitter le mode d'insertion, collez depuis votre tampon de copie dans vim (
Command-v
sur Mac) - Frappé
escape
- Essayez d'annuler la pâte (
u
)
Il annule tout depuis la dernière fois que vous êtes passé en mode insertion. En d'autres termes, il efface asdf
plus tout le texte que j'ai collé.
Comment puis-je simplement défaire le texte qui collé dans? Dois-je toujours quitter le mode d'insertion et revenir avant de coller du texte juste pour avoir la possibilité d'annuler le texte collé?
:h i_CTRL-G_u
(c'est-à-dire "interrompre la séquence d'annulation, commencer une nouvelle modification" en mode insertion).Dans MacVim, vous devez démapper l'
Edit > Paste
élément de menu afin de remplacer le raccourci, puis vous pouvez remapper Cmd-V (D-v
dans le langage MacVim) à la commande appropriée dans chaque mode. J'ai ajouté ceci à mon~/.gvimrc
et maintenant tout fonctionne à merveille:Le
<C-g>u
n'est nécessaire qu'en mode insertion pour corriger l'historique d'annulation; lanoremap
etcnoremap
sont tout simplement de restaurer le comportement coller par défaut dans les modes normal et commande.Merci à Ingo Karkat de m'avoir indiqué la bonne direction ici.
la source
En fait, la solution est que vous devez d'abord passer en mode commande (par exemple Esc) et entrer à nouveau en mode insertion, mais cela ne fonctionne que si je tape manuellement mais il semble "au hasard" cesser de fonctionner si je le teste
~/.vimrc
. Google n'aide pas du tout.Je passe beaucoup de temps à essayer de résoudre ce problème et je viens de comprendre la raison dans mon cas:
Ne mappez pas la clé de collage de la même manière que la clé de collage existante du terminal
par exemple , Ctrl+Shift+Vva coller dans mon terminal Konsole, mais si j'attribue cette clé
<C-S-v>
dans~/.vimrc
la « undo seulement pâte unique au lieu de plusieurs pâtes » ne sera pas de travail.Dans mon cas, je dois utiliser
<C-v>
au lieu de<C-S-v>
:Votre cas peut différer, mais le point est le même: n'affectez pas les mêmes conflits de clé de collage avec la clé d'émulateur de terminal existante.
J'ai 100% prouvé cette conclusion en définissant ma clé de collage de terminal sur Ctrl+Vet maintenant
<C-v>
arrêter de travailler mais de<C-S-v>
travailler.Notez également que le vim est trop sensible et étrange. Je me rends compte que je dois utiliser
i
et ensuite 2 touches Droite manuellement pour le faire fonctionner dans la position correcte du curseur, cela signifie que je dois mettrei
et 2 touches Droite dans le~/.vimrc
trop. Votre cas peut différer, mais le point est le même, assurez-vous que les clés + ordre dans ~ / .vimrc correspondent à 100% à ce que vous tapez manuellement.la source