Comment simplifier le “copier-coller” dans Vim?
Je trouve que la procédure à copier et coller dans VIM est très délicat:
- Mode visuel
- Y
- p (ou shift-p)
- mode insertion
et si vous avez tort, utiliser "supprimer" la clé, vous avez perdu le contenu (est remplacé par le char-vous supprimé) et vous devrez re-copier !
Je suis en train de travailler sur vim depuis plusieurs mois, je l'aime, mais je déteste le copier-coller, il y a un moyen de le simplifier ? ou une autre ?
merci
- Pas besoin de goto visual mode copie. juste
Yp
devez copier&coller de la ligne en cours. - Je sais Rajendran, mais comment je l'ai dit, lorsque vous modifiez probablement vous utilisez le bouton "supprimer", et vous avez perdu le contenu, de sorte que vous besoin de re-copier (et de toute façon vous devez vous déplacer en mode commande passé: Esc + y + p + i(pour revenir en mode insertion) )
- oui 🙂 j'ai ressenti cela comme un désagrément certain nombre de fois.
Vous devez vous connecter pour publier un commentaire.
Vim tient à jour une liste des 9 dernières supprime que vous avez fait dans le numéroté registres. Donc
"0p
va coller le plus récent chose que vous avez tiré,"1p
va coller la 2e plus récente de la chose que vous avez supprimé ou changé (à noter qu'il ne comprend pas le texte qui a été tout simplement tiré d'un coup sec), et ainsi de suite pour les registres 2-9.Si vous souhaitez utiliser plus que les 9 derniers éléments supprimés ou si vous voulez un moyen facile d'accéder aux ricains je recommanderais le yankring plugin qui, entre autres choses, vous permet de voir vos 100 dernières ricains et de choisir celle que vous voulez coller avec le
:YRShow
commande.Enfin, si vous voulez coller sans quitter le mode insertion, vous pouvez utiliser
Ctrl-R
pour insérer le contenu d'un registre. Ainsi, dans le mode d'insertion de frappe<Ctrl-R>"
insérer le contenu du registre sans nom"
(qui est l'endroit où arracha le texte est mis lorsque aucun registre n'est spécifié)."0p
,"1p
, etc.?Ctrl-o
, mais pas "Ctrl-R". Merci pour cela. +1"0p
va coller le plus récent chose que vous avez question, pas arracha et supprimé."1p
fera pour supprimé, que supprimé, même s'applique à"2p
(deuxième plus récentes supprimé chose) et ainsi de suite. Vous pouvez le trouver dans:h quote_number
.Cependant pas exactement de "simplifié", vous avez la possibilité de copier votre texte dans un registre différent de celui où le texte supprimé passe par défaut. Cela permettrait de protéger la perte de ce que vous avez copié par la suppression accidentelle de quelque chose.
De copie pour vous inscrire
a
(par exemple) vous devez effectuer les opérations suivantes:" un y [mouvement]
Puis de coller votre texte que vous feriez:
" un p
Une chose que vous pouvez faire aussi bien. Si vous voulez coller le tout en mode insertion, vous pouvez appuyer sur ctrl+o, puis entrez votre commande coller (comme le registre de commande coller j'dessus décrite ci-dessus). L' ctrl+o commande est équivalente à la touche esc, mais pour une seule commande. Lire plus sur le sujet ici.
Enfin, vous avez toujours le choix d'écrire un script vim pour modifier le comportement par défaut à votre goût (ou peut-être trouver un plugin comme yankring).
Mise à JOUR
Basé sur une conversation dans les commentaires avec
kellogs
, j'ai décidé de regarder dans la façon d'utiliser un registre pour le copier/coller, mais en mode visuel pour la commande de copie (plus facile à visualiser ce que vous prenez). Il s'avère que c'est possible.De copie pour vous inscrire
a
, mais en mode visuel:v (se déplace en mode visuel)
Puis vous faites la même chose que ci-dessus, mais le mouvement d'abord la commande:
[mouvement] "uny (mettre en surbrillance votre sélection via la commande de mouvement, puis tirer dans le registre
a
).Le collage est effectué de la façon normale, comme indiqué ci-dessus le mise à JOUR.
" a y 2 w
qui a tiré à 2 mots de ma position actuelle du curseur et stockée dans un registre. J'ai ensuite été en mesure de le coller via" a p
(essayé à plusieurs endroits, y compris le même fichier, un nouvel onglet, un fichier existant).y 2 w
(yank 2 mots) et utilisé par défaut registre, au lieu de s'inscrirea
. Votre curseur change de forme (dans ma version de GVIM) et montre aussi toutes les touches vers le bas dans la ligne d'état. Une fois que vous appuyez sur la dernière touche appuyez sur la touche (w
dans ce cas), il change le curseur de retour à la normale." a y 2 w
, vous ne2 w " a y
, où le mouvement de commande qui arrive en premier au lieu du dernier).Vim n'est pas complètement à jeter arracha de texte lorsque vous supprimez quelque chose, c'est juste primordial
"
registre. Dernier arracha le texte est toujours stocké dans le registre0
, donc vous pouvez remplacerp
avec"0p
dans votre flux de travail ou, mieux, la carte de ce,p
et de l'utiliser:Une autre façon est de jeter le texte supprimé (le supprimer de trou noir s'inscrire
_
):"_dd
,"_x
et ainsi de suite. Personnellement, j'utilise,d
cartographie pour cela:Dans ce cas, Vim ne pas remplacer tous les registres.
Troisième est à l'aide de la lettre de registres, comme @Jason Bas suggéré.
Pour moi la solution la plus simple était de créer une combinaison de touche de cartographie qui modal bascule de cette suppression, les effets secondaires ou désactiver.
Avec mon script en place, le type I, et je suis dans le "pas de côté" effet de mode, de sorte que la suppression de texte n'a aucun effet sur ma copie de la mémoire tampon, de sorte que je puisse la tirer-supprimer-coller librement et efficacement tout ce que je voudrais.
Puis quand je fait le type, encore et vim remonte à son comportement par défaut à supprimer la clé d'effets secondaires.
Je trouve cette solution idéale, car je n'ai pas besoin de penser au sujet de tampons à chaque fois que je veux copier coller. Voir ici pour le script:
vim basculement du tampon de remplacer le comportement lors de la suppression d'
Lorsque je ne souhaite pas changer de mode, j'ai simplement utiliser le presse-papiers pour copier et coller.
Ou j'utilise CTRL-Y, Si je suis juste de copier les caractères de la ligne précédente.
Si vous souhaitez copier le contenu d'une ligne entière d'ailleurs dans la mémoire tampon, tapez les premiers caractères et l'utilisation CTRL-X CTRL-L.
Pour plus d'informations, consulter:
:aider i_CTRL-Y
:aider i_CTRL-X_CTRL-L
Rien beaucoup à simplifier - comment Vim fonctionne. Eh bien, plus ou moins.
Cependant, concernant votre problème de la suppression (donc, en remplaçant le contenu de ce registre) - vous pouvez utiliser YankRing par exemple. Il fournit de la "convivialité" de Vim du copier/coller.
Comment ça marche?
Vous allez à la première ligne, et de le tirer ("copier" dans la terminologie Windows). Puis vous allez à l' deuxième ligne et yank que trop. Ensuite vous à la septième ligne et tirer ainsi que une.
Puis vous allez ... n'importe où, et coller(!). Vous obtenez la dernière (septième) en ligne. Appuyez sur une touche de raccourci, et ce dernier pâte est remplacée par la précédente yank (le deuxième ligne). Encore une fois ... l' première ligne 🙂
Donc, de cette façon, vous n'avez donc pas à vous inquiéter de perdre votre arracha contenu, qui d'après ce que je comprend a été votre principal problème.
Vi et Vim) fonctionne très différemment par rapport à la normale de l'éditeur de texte comme Gedit. Il dispose également d'une jolie courbe d'apprentissage abrupte. Si vous voulez apprendre quelques commandes de base, commencer avec ce tutoriel interactif.
Cependant, pour répondre à votre question. Le presse-papiers du système de contenu peut être accessible par le plus vous inscrire. Afin de coller quelque chose à partir du presse-papiers du système, vous pouvez, à partir du mode Normal, appuyez sur: "+p (Pas en même temps, mais l'un après l'autre).
La chose, c'est ici que vous n'êtes pas censé revenir en mode insertion".
Édition (aspirer, suppression, remplacement, etc.) est fait en mode normal, le mode insertion est uniquement pour taper du texte.
Si vous êtes en mode insertion et souhaitez réutiliser une partie du texte déjà présent ailleurs dans votre document, vous pouvez frapper:
<C-n>
et<C-p>
pour insérer un mot qui commence par les caractères à gauche du curseur<C-x><C-l>
pour insérer une ligne qui commence par les caractères à gauche du curseur