Dans Notepad ++, je peux utiliser Ctrl+ Shift+ Up/ Downpour déplacer la ligne actuelle de haut en bas. Existe-t-il une commande similaire à celle-ci dans Vim? J'ai parcouru des guides sans fin, mais je n'ai rien trouvé.
Si ce n'est pas le cas, comment pourrais-je lier l'action à cette combinaison de touches?
Edit: la réponse de Mykola fonctionne pour toutes les lignes, à l'exception de celles au début et à la fin du tampon. Déplacer la première ligne vers le haut ou la ligne du bas vers le bas supprime la ligne, et lorsque vous déplacez la ligne du bas vers le haut, elle saute initialement de deux espaces, comme un pion! Quelqu'un peut-il apporter des améliorations?
Réponses:
Mettez ce qui suit dans votre .vimrc pour faire le travail
La disparition de la ligne ressemble à un bug de Vim. J'ai mis un hack pour l'éviter. Il existe probablement une solution plus précise.
Mettre à jour
Il y a beaucoup de difficultés inexpliquées à utiliser uniquement des combinaisons Vim. Ce sont des lignes manquantes et des sauts de ligne supplémentaires.
Voici donc la solution de script qui peut être placée à l'intérieur de .vimrc ou ~ / .vim / plugin / swap_lines.vim
la source
<A-up>
comme utilisé dans eclipse.ddkP
sur la dernière ligne du document. Essayez-le par vous-même sur un fichier de 3 lignes. Pour éviter de tels problèmes, utilisez plutôt les:m
mappages beaucoup plus faciles donnés sur le wiki Vim .<A-up>
et<A-down>
mais quand j'essaie ces touches dans vim en visual running dans tmux, la sélection disparaît et le curseur se déplace vers le haut; sans déplacer les lignes sélectionnées.Si je veux échanger une ligne avec la ligne ci-dessus, je fais généralement ce qui suit
Explication
la source
ddp
pour déplacer une ligne vers le bas (supprimer la ligne et la coller sous la ligne actuelle)4 dd
puis passez à, disons 2 lignes, puis à l':2
endroit où vous souhaitez coller etP
.4dd
au lieu de4 dd
?dd<number>jp
pour déplacer la ligne actuelle <numéro> +1 de lignes vers le bas. Etdd<number>kp
pour déplacer la ligne actuelle <numéro> de lignes vers le haut.En supposant que le curseur se trouve sur la ligne que vous souhaitez déplacer.
Monter et descendre:
:m
pour se déplacer:m +1
- descend d'une ligne:m -2
- remonter de 1 lignes(Notez que vous pouvez remplacer +1 par n'importe quel nombre en fonction du nombre de lignes que vous souhaitez déplacer vers le haut ou vers le bas, c'est-à-dire que +2 le déplacerait vers le bas de 2 lignes, -3 le déplacerait vers le haut de 2 lignes)
Pour passer à une ligne spécifique
:set number
- afficher les lignes numériques (plus facile à voir où vous le déplacez):m 3
- déplacez la ligne après la 3ème ligne (remplacez 3 par la ligne de votre choix)Déplacement de plusieurs lignes:
V
(c.-à Shift- d . V) et déplacez le coursier de haut en bas pour sélectionner plusieurs lignes dans VIMune fois sélectionné, appuyez sur :et exécutez les commandes ci-dessus,
m +1
etc.la source
noremap <c-s-up> :m -2<CR> noremap <c-s-down> :m +1<CR>
Déplacer une ligne vers le haut:
ddkP
Déplacer une ligne vers le bas:
ddp
la source
.
répéter.Cela a fonctionné pour moi:
http://vim.wikia.com/wiki/Moving_lines_up_or_down_in_a_file
BTW, si vous souhaitez utiliser ALT + some_key et que votre terminal (urxvt le fait) refuse de se conformer, vous devez saisir quelque chose comme ceci dans votre .vimrc:
où ^] est un caractère unique qui représente la touche ALT. Pour saisir ce caractère, utilisez-le C+v, Escdans Vim ( C+q, Escsous Windows).
la source
[niv]noremap
sont des remappages pour les modes visuels normaux | insert |.<CR>
estCarriage Return
(Enter
clé).ajoutez ce qui suit au fichier ~ / .vimrc (assurez-vous que vous n'avez pas de mappage pour n, m)
maintenant, appuyez sur la
n
touche pour déplacer une ligne vers le bas etm
pour déplacer une ligne vers le haut.la source
En mode commande, placez le curseur sur la ligne que vous souhaitez déplacer vers le bas, puis
Explication: dd supprime la ligne courante dans le tampon général p la remet APRÈS la position du curseur, ou dans le cas de lignes entières, une ligne en dessous.
Il existe une certaine confusion concernant les commandes p et P dans de nombreux documents. En réalité, p colle APRES le curseur et P AT le curseur.
la source
Ajoutez simplement ce code à .vimrc (ou .gvimrc)
la source
Exactement ce que vous recherchez dans ce plugin génial: https://github.com/vim-scripts/upAndDown
la source
Une solution simple est de mettre dans vos
.vimrc
lignes:la source
J'ai mis ce qui suit à la fin de mon fichier .vimrc:
Alors maintenant, «H» et «N» déplacent la ligne actuelle de haut en bas respectivement.
la source
Voici une version simplifiée, pour MacVim, utilisant les exemples d'articles de Wikia (cf. lien du commentaire de gun ).
J'utilise uniquement la variante de sélection de bloc, car tout ce qu'il faut, c'est Shift-V pour sélectionner la ligne actuelle, et éventuellement le curseur haut / bas pour sélectionner d'autres lignes.
Selon les raccourcis ci-dessus, appuyez sur Cmd-Shift-Up / Down pour déplacer la sélection de bloc vers le haut / bas. "D" est la clé de commande dans MacVim, pour Windows, essayez "C" (Contrôle) ou "A" (Alt) (par exemple. <CAf> serait Contrôle Alt f).
L'article de Wikia ajoute "= gv" à ceux-ci, ce qui a pour effet d'ajuster l'indentation du bloc après le déplacement, en fonction du texte environnant. C'est déroutant, je l'ai donc supprimé et j'ai ajouté des raccourcis pour indenter rapidement la sélection à la place.
Attention, la même chose peut être faite avec << et >> mais la sélection serait perdue, donc ces raccourcis ci-dessus permettent de mettre plusieurs fois en retrait et de déplacer le bloc car la sélection est maintenue.
Mon MacVim est configuré pour changer d'onglet avec Cmd-Maj-Gauche / Droite, j'ai donc utilisé Cmd-Alt-Gauche / Droite.
Voici le changement d'onglet pour MacVim (mis en .gvimrc avec le reste ci-dessus):
la source
plugin vim unimpaired.vim [e et] e
la source
Lorsque vous appuyez sur commande
:help move
dansvim
, voici le résultat::[range]m[ove] {address} *:m* *:mo* *:move* *E134* Move the lines given by [range] to below the line given by {address}.
Par exemple: Déplacer la ligne actuelle d'une ligne vers le bas =>
:m+1
.Par exemple: déplacer la ligne avec le numéro 100 en dessous de la ligne avec le numéro 80 =>
:100 m 80
.Par exemple: déplacer la ligne avec le numéro 100 en dessous de la ligne avec le numéro 200 =>
:100 m 200
.Par exemple: déplacer les lignes avec un nombre entre [100, 120] en dessous de la ligne avec le numéro 200 =>
:100,120 m 200
.la source
Voici une solution qui fonctionne sur ma machine : MacBook Pro sous VIM 8.1
Ces commandes ne supprimeront pas vos lignes en haut ou en bas de votre tampon.
L'utilisation des symboles réels produits par Alt-J et Alt-K est une solution de contournement pour leurs codes-clés qui ne correspondent pas correctement dans mon environnement.
Jetez-le dans l'ancien .vimrc et voyez si cela fonctionne pour vous.
la source
Pour moi, l'a
ddkkp
fait (au lieu d'ddkP
un P majuscule, qui fonctionnerait aussi).la source
: m. + 1 ou: m.-2 ferait l'affaire si vous déplacez une seule ligne. Voici mon script pour déplacer plusieurs lignes. En mode visuel, Alt-up / Alt-down déplace les lignes contenant la sélection visuelle vers le haut / bas d'une ligne. En mode insertion ou en mode normal, Alt-up / Alt-down déplacera la ligne actuelle si aucun préfixe de comptage n'est donné. S'il y a un préfixe de comptage, Alt-up / Alt-down déplacera ce nombre de lignes à partir de la ligne actuelle vers le haut / bas d'une ligne.
la source
Si vous souhaitez effectuer cette opération sur plusieurs lignes correspondant à une recherche spécifique:
:g/Your query/ normal ddp
ou:g/Your query/ m -1
:g/Your query/ normal ddp
ou:g/Your query/ m +1
la source