Comment faire pour supprimer la ligne(s) en dessous de la ligne en cours dans vim?
Est-il une commande pour supprimer une ligne (ou plusieurs lignes) qui est immédiatement au-dessous de la ligne en cours?
Actuellement, je suis en train de faire comme:
jdd, puis . pour répéter au besoin.
Est-il une commande qui permettrait de combiner tous ces?
Mise à JOUR: La raison pour laquelle je tiens à avoir une telle commande est que je n'aime pas à passer de la position actuelle, encore être en mesure de supprimer les lignes ci-dessous.
- Je pense que @Pierre Rincker la réponse doit être marqué comme réponse
- fait @gixxer, merci pour le heads up
Vous devez vous connecter pour publier un commentaire.
La suppression de la commande ex fonctionnent bien.
Cela va effacer toutes les lignes de courant +1 jusqu'à la fin ($)
Pour supprimer les 2 lignes de la suivre de la plage de travail,
+1,+2
ou l'abréviation+,+2
Comme @ib mentionné le
:delete
ou:d
commande permet de placer le curseur au début de la ligne suivante du texte supprimé. (Même avecnostartofline
set). Pour surmonter cela, nous pouvons émettre l'``
commande mode normal.``
va revenir en arrière à la position exacte avant le dernier saut, dans ce cas, le:d
de commande. Notre commande est maintenant:+,+2denter``
Ou une commande ex
Pour rendre cela plus facile, nous envelopper tout cela en une commande:
Maintenant pour supprimer le suivant 3 axes:
Cette commande peut également prendre un
{reg}
comme:delete
et:yank
faire. Ainsi, la suppression de la prochaine 4 lignes dans le registrea
serait:Pour plus d'informations
:+1,+5s!a!b!g
va remplacer une avec b sur les 4 lignes après le curseur). Voir :commande d'aide-plages pour certains plus d'exemples.:+,$d|norm!``
. Par la voie, comme indiqué dans la question, l'auteur de la question à supprimer plusieurs lignes au-dessous de l'actuel, pas nécessairement tous les chemin vers le bas à la fin du fichier.set sol
? Comment utiliser le`
marque?sol
seule ne permet pas de résoudre le problème: lorsque l'on supprime, par exemple, trois lignes à l'aide de:+,+3d
, le curseur est déplacé sur la ligne à côté des supprimées.dG devrait fonctionner.
Cela signifie supprimer toutes les lignes jusqu'à la fin du fichier actuel du curseur.
Cela supprimera TOUTES les lignes ci-dessous l'actuel:
Malheureusement que de déplacer le curseur au début de la ligne courante après la suppression est effectuée.
bien, de le faire simplement, vous pouvez utiliser les xxdd de commande. La plupart du temps, je sais (au moins avoir une idée de la taille du script je suis d'édition. Ainsi, la commande ci-dessous est généralement plus que suffisant :
Les autres solutions sont à titre d'information, mais je pense qu'il serait plus simple d'utiliser une macro pour cela:
qq
(début de l'enregistrement)jddk
(aller vers le bas, supprimez la ligne, et de remonter jusqu'à - dire la chose que vous voulez faire)q
(fin de l'enregistrement)Maintenant vous pouvez le faire
@q
pour effectuer cette action, en maintenant le curseur à la position actuelle. Vous pouvez aussi faire quelque chose comme5@q
pour supprimer 5 lignes en dessous du curseur.Et enfin, si vous êtes à répéter l'action plusieurs fois, vous tapez juste
@@
après la première fois que vous exécutez@q
(il répète la dernière utilisation de macro - dans ce casq
)C'est un travail pour les marques!
Essayer
maj20dd`a
ma
définit le nom de fichier spécifique à la marque "a",j20dd
la suppression que vous voulez (20 lignes dans ce cas), et`a
restitue vous de la marque de la position (ligne et colonne).Évidemment, ce modèle peut être étendu à faire ce que vous voulez avant de revenir à la marque. Si vous utilisez
mA
(ou toute autre lettre capitale) la marque sera réellement unique dans l'ensemble des fichiers, de sorte que vous pouvez même éditer ailleurs avant de revenir. Si vous avez un très fréquente utilisation que vous pourriez faire une macro comme suggéré ci-dessus.Vous pouvez entrer le nombre de lignes à supprimer: j 20 dd k.
k
déplace le curseur au-dessus de la ligne initiale. Aussi, le curseur de position de la colonne sera perdu à cause dedd
.dd
(le premier caractère non blanc de la ligne à proximité de lignes supprimées, je crois).Vous pouvez définir une petite fonction qui fait exactement ce que vous avez décrit:
supprimer la prochaine
n
lignes en dessous de la ligne courante et la restauration initialela position du curseur.
Aussi, vous pouvez définir une commande qui accepte le nombre de lignes ci-dessous pour
supprimer (par défaut) et le registre de nom pour l'utiliser comme une option
argument (comme
:delete
de commande).En outre, vous pouvez définir un mappage pour l'exécution de
:D
, si c'estnécessaire.
let mapleader = ","
2:nmap <leader>d :D<CR>