Existe-t-il une commande pour supprimer la ligne (ou n lignes) au-dessus de la ligne actuelle? Ci-dessus = courant non inclus.
C'est-à-dire, existe-t-il une alternative à dklaquelle ne supprime pas la ligne actuelle? Similaire à la façon dont o/ Oet p/ Pfonctionne, mais avec suppression.
Actuellement, je fais kdd, ce qui déplace le curseur d'une ligne vers le haut et le supprime. Je pourrais faire nnoremap <Leader>d kdd
et nnoremap <Leader>D jdd-
, mais avoir une alternative qui ne déplace pas le curseur semble être une meilleure option. Y en a-t-il?
key-bindings
cursor-movement
normal-mode
Martin Tóth
la source
la source
nnoremap <Leader>d kddj
etnnoremap <Leader>D jddk
?kddj
ou de l' autrejddk
, la position des colonnes n'est pas conservée. Je ne dis pas que c'est un gros problème, mais c'est ennuyeux. Pour l'enregistrement,kddj
déplace le curseur d'une ligne sous sa position d'origine. Etjdd-
semble être une meilleure alternativejddk
car au moins je reviens au premier caractère non blanc. Si la ligne en dessous de celle que je souhaite supprimer est vide, je reste au début de la ligne.Réponses:
coupe la ligne au-dessus de la ligne actuelle.
coupe la 5ème ligne au-dessus de la ligne actuelle (mais déplace le curseur).
coupe les 5 lignes au-dessus de la ligne actuelle.
coupe les 5 lignes sous la ligne actuelle.
la source
EDIT Je ne connaissais pas les fonctionnalités intégrées suggérées par @Romainl dans sa réponse: bien sûr, la méthode
-d
et+d
devrait être préférée car elle est beaucoup plus simple que d'ajouter des fonctions à votre.vimrc
Peut-être que l'ajout de quelque chose comme ça
.vimrc
pourrait être ce que vous voulez:Ces fonctions suppriment la ligne sous ou la ligne au-dessus de la ligne actuelle et reviennent à la position avant la suppression.
Pour la fonction,
DeleteOver()
nous devons remonter d'une lignenormal k
après la suppression, car la suppression modifie le numéro de la ligne d'origine qui ne correspond pas àDeleteUnder()
Vous pouvez également l'ajouter à votre
.vimrc
Pour créer les mappages appelant les fonctions.
la source
nostartofline
option.Si nous utilisons le petit registre de suppression "-, nous pouvons restaurer la position du curseur après avoir supprimé au-dessus de n lignes.
Par exemple, d0dgk"-Psupprime au-dessus d'une ligne et restaure le curseur où il était.
d0supprime les caractères du curseur au premier caractère de la ligne. Puisqu'il 0s'agit d'un mouvement exclusif, le caractère sous le curseur n'est pas supprimé. Et les caractères supprimés sont placés dans le petit enregistreur de suppression "-.
dgksupprime au-dessus de 1 ligne. Cela laissera la ligne actuelle, car elle gkn'est pas linéaire et exclusive.
"-P place le texte du petit registre de suppression "-.
C'est une sorte de hack. Mais si vous recherchez des commandes non ex, envisagez de les utiliser.
la source
"-P
ne veux pas"-p
. Ce dernier gâche un peu le texte.Vous améliorerez peut-être votre flux de travail si vous n'avez pas peur de ... sauter :)
Exemple:
Vos actions (mode normal, le curseur est
_
):/I want
Enter
5dd
Ctrl-o
. C'est ça.Bien sûr, la réponse romainl est la meilleure si tout ce que vous voulez supprimer des lignes entières, et vous pouvez facilement compter leur décalage (en utilisant des linumbers relatifs par exemple). Ce qui précède est une façon plus générique "d'agir": allez-y, en utilisant quelque chose qui compte comme un saut: cela signifie que vous pouvez toujours revenir en arrière, après avoir modifié le texte.
Par exemple, si vous utilisez des numéros de ligne absolus, vous pouvez remplacer le
/I want
Enter
par quelque chose comme78gg
ou78G
pour sauter directement à ce numéro de ligne.la source
Sur la base de la solution ms-kim , j'ai développé une variation légèrement différente qui enregistre la position de col.
OBS: J'ai également utilisé ce poste comme référence.
la source
Si vous souhaitez supprimer les lignes en double dans tout le fichier, procédez comme suit:
Exemple:
En mode commande
Si vous voulez juste une liste de la chaîne (s) initialement:
la source