2015-11-05 1 views
0

Je dois supprimer plusieurs lignes dans vim (ligne 42, ligne 424 et ligne 4242). J'ai trouvé 2 solutions possibles:Façons de supprimer une ligne dans vim

  • Déplacez le curseur au début de cette ligne, puis appuyez sur 'dd' ou

  • Type ': 42d' etc ...

Cependant, pour accomplir la tâche, je dois supprimer toutes les 3 lignes. Dois-je faire quelque chose comme ça? :42d :423d :4240d

Ou cela?

:4242d :424d :42d

Une fois que je fais cela, je dois remplacer l'occurrence 42e d'un mot avec un autre mot (remplacer "Vader" avec "Vader (chiffre de père)"). J'ai cherché "Vader" en tapant 42/Vader, puis entré dans le mode 'INSERT' et remplacé le mot. Le problème que je rencontre ici est qu'un vérificateur me dit que le fichier original ne contient pas les informations correctes. Je pense qu'il y a un problème avec la suppression des lignes. Ou suis-je en train de remplacer "Vader" par "Vader (figure du père)"?

+0

Votre recherche le 42ème match via '42/Vador' me va bien. –

Répondre

2

Si vous commencez vraiment avec les numéros de ligne, je voudrais supprimer de bout en bout, pour éviter le calcul de décalage. Vous pouvez concaténer toutes :delete commandes en une seule ligne de commande:

:4242d|424d|42d 

Par ailleurs, vous n'avez pas besoin pour cela Vim; une solution scriptée peut être faite avec des outils Unix comme sed -i -e 4242d -e 424d -e 42d.

Mais, bien plus souvent, vous ne commencez pas par les numéros de ligne, mais vous accédez plutôt aux lignes, par ex. par recherche. Ensuite, la séquence habituelle est dd (supprimer la ligne en cours), n (aller au prochain match), . (répéter).

1

La première tâche pourrait se faire avec:

:4242dd|424d|42d<CR> 

ou:

4242Gdd424G.42G. 

Notez l'ordre inverse, nécessaire pour maintenir la numérotation des lignes tout au long de la tâche.


gg42/Vader<CR> 

est un moyen plus sûr de rechercher l'occurrence 42e Vader parce qu'il commence au sommet du tampon.

Une fois que le curseur est sur la droite Vader, vous pouvez le faire:

cgnVader(father figure)<Esc> 

pour le remplacer.

Vous pouvez utiliser le registre sans nom pour éviter de retaper Vader:

cgn<C-r>"(father figure)<Esc> 

Mais il est sans doute préférable de faire vos terres de recherche sur le dernier caractère de votre match:

/Vader/e<CR> 
a(father figure)<Esc> 
+0

J'ai oublié de mentionner quelque chose: on m'a demandé de remplacer la 42ème occurrence de 'Vader', et j'ai remarqué que dans tout le texte, ce mot est fusionné avec", "," '"". ""! "Ou"? " . Donc, si je trouve quelque chose comme «Vador», dois-je le compter ou non? Je pense que je dois sauter ces occurrences ... – Polb

+0

C'est une question pour la personne qui vous a demandé de le faire. – romainl

+0

Vous avez raison. En attendant je lui ai demandé cela et il n'y a pas de différence entre les 2 alternatives. – Polb