Voici comment je copie habituellement un bloc de texte ou de code:
- Sélectionnez le bloc avec le mode visuel ( V) et supprimez-le avec d; ou s'il s'agit d'une seule ligne, utilisez-la dd.
- Allez là où je veux que le texte soit, je suis trop stupide pour me souvenir de la différence entre pet P, donc je comprends bien environ 50% du temps. (si je me trompe: recommencez).
- Parfois, l'indentation doit être ajustée, donc je passe à Vnouveau en mode visuel et resélectionne le même bloc, et j'utilise >ou <pour corriger cela.
Existe-t-il un moyen plus simple? Dans certains éditeurs, j'ai vu que vous pouvez "ramasser" un bloc de texte, pour ainsi dire, et le déplacer; voici un exemple d'Emacs (mais j'ai également vu cela dans d'autres éditeurs):
Ou peut-être existe-t-il une autre (encore meilleure) manière?
cut-copy-paste
visual-mode
Martin Tournoij
la source
la source
]p
ou[p
plutôt quep
ouP
. De cette façon, le bloc que vous collez sera automatiquement indenté.Réponses:
Il existe un plugin pour cela: dragvisuals.vim .
Il ne lie aucune clé par défaut, vous devrez donc le faire vous-même. J'aime les mapper sur Control+ Arrow key:
Il est également livré avec une clé bonus pour dupliquer la sélection actuelle:
Avantages de ce plugin par rapport aux autres réponses:
Une autre astuce utile pour compléter cela, sont ces raccourcis clavier:
Cela sélectionnera à nouveau la dernière sélection visuelle après utilisation >en mode visuel, afin que vous puissiez ajuster l'alignement plus facilement (vous pouvez également utiliser les touches fléchées, mais cela le déplacera d'un caractère et non d'un
shiftwidth
).la source
Pour l'étape 3, vous pouvez utiliser à la
gv=
place (=
signifie retrait etgv
signifie "resélectionner la dernière sélection visuelle").Pour le comportement d'Emacs, il serait assez simple d'ajouter des mappages dans votre .vimrc:
Vous pouvez ensuite utiliser les touches fléchées haut et bas pour vous déplacer dans une sélection de ligne visuelle. (Bien sûr, vous pouvez également mapper sur différentes touches si vous détestez les flèches.)
(Vous pouvez le faire avec des sélections visuelles normales et en les déplaçant également vers la gauche et la droite:
vnoremap <left> dhPgvhoho
etvnoremap <right> dpgvlolo
.)la source
gv
va à la dernière sélection visuelle, qui dans ce cas serait le paragraphe qui a été supprimé. Qu'est-ce que je rate?Vous pouvez remapper certaines touches pour déplacer les lignes. Par exemple, des flèches de haut en bas si vous avez l'habitude de vous déplacer
hjkl
.Par exemple sur .vimrc
:m
, commande normale pour déplacer une ligne+1
ou-2
pour indiquer une ligne vers le haut ou vers le bas (-1 maintient la ligne au même endroit)gv
pour sélectionner à nouveau le même texte enVISUAL
modeCette solution n'interfère pas avec les registres, donc tout texte copié sera toujours disponible, ainsi que reformater le code pour définir une indentation appropriée, etc.
la source
=
(cela change souvent trop de mise en forme sans rapport avec moi).La manière la plus simple que j'ai trouvée pour le faire est documentée ici: http://vimrcfu.com/snippet/77
Mettez ce qui suit dans votre .vimrc
la source
Il y a peu de plugins pour cela, mais je préfère vim-unimpaired ( github ) de Tim Pope (Ingo Karkat LineJuggler est similaire).
Vous sélectionnez visuellement votre bloc de texte puis faites
]e
(e pour échange) pour déplacer le bloc vers le bas ([e
pour l'autre sens). Utilisez.
pour répéter l'action (vous avez installé repeat.vim n'est-ce pas). Si vous allez trop loin, annulez simplement viau
.Maintenant, personnellement, je pense
p
et ceP
sont des commandes si courantes qu'il serait préférable de les apprendre avant de créer de mauvaises habitudes. Ensuite, vous pouvez utiliser]p
pour coller au même retrait. Si vous utilisez intact, vous pouvez faire>p
pour coller un niveau d'indentation plus profondément ou=p
pour coller et reformater.Si vous avez du mal à vous souvenir
p
,P
cela peut vous aider à les considérer en termes de commandeso
etO
qui est une sorte de symétrie.Comme d'autres l'ont noté, vous pouvez utiliser
gv
pour resélectionner une sélection visuelle. Cependant, si vous venez de mettre / coller du texte, vous aurez perdu votre sélection visuelle. Ne vous inquiétez pas parce que tous les changements (et Ricains!) Établira'[
et']
autour de la zone modifiée. Vous pouvez donc mettre en retrait via>']
(lire: déplacer vers la droite jusqu'à la fin du dernier changement) et utiliser.
pour répéter le retrait jusqu'à ce que le texte soit au bon endroit.Pour plus d'aide, voir:
la source
Si vous connaissez le numéro de ligne vers lequel vous souhaitez déplacer le bloc de texte, vous pouvez utiliser une plage ou une sélection visuelle avec la
:move
commande pour y déplacer le bloc.Par exemple, si j'ai le fichier suivant:
et je veux déplacer la ligne de a après la ligne de c, je place le curseur sur la ligne de a et j'entre
:m3
, puis la ligne est décalée.Cela fonctionne également avec les décalages +/-. Dans l'exemple ci-dessus, le même résultat pourrait être obtenu avec
:m+2
pour déplacer la ligne 2 lignes vers le bas.Pour les blocs de texte, la seule différence consiste à ajouter une plage ou une sélection. Pour déplacer les lignes aaa et bbb à la fin du fichier, utilisez une commande comme
:1,2m$
($ = dernière ligne) ou sélectionnez visuellement les lignes et:m$
.la source
:move
consultez également vim.wikia.com/wiki/Moving_lines_up_or_down ou les astuces 29 Dupliquer ou déplacer des lignes à l'aide des commandes ': t' et ': m' dans le livre Practical Vim de D. Neil.Plugin vim-move par matze
Disponible depuis
Mappages par défaut en mode visuel et normal:
la source