9
votes

Déplacer des lignes correspondues par: g en haut du fichier

J'ai un fichier texte important avec plusieurs appels vers une fonction spécifique méthod_name .

Je les ai assorties à l'aide de : g / méthody_name . .

Comment puis-je les déplacer vers le haut du fichier (avec le premier match étant sur le dessus)?

J'ai essayé : g / méthody_name / normal DDGGP mais ça inverse la commande. Y a-t-il un meilleur moyen de couper directement et coller toutes les lignes correspondantes, dans l'ordre?

exemple de fichier d'entrée: xxx

exemple de fichier de sortie: xxx

vim

0 commentaires

3 Réponses :


6
votes

Que diriez-vous de l'essayer dans l'inverse: déplacer les lignes non assorties en bas:

:v/method_name/normal ddGp


2 commentaires

@JOHNSYWEB, y a-t-il un autre problème avec cette méthode, autre qu'il est lent lorsqu'il existe de nombreux autres méthod_name lignes?


En fait non. : V / METHODY_NAME / M $ peut être plus efficace.



4
votes

Je pense que vous pouvez obtenir le résultat souhaité en créant d'abord une variable attribuée à 0: xxx pré>

puis exécutant cette commande: p> xxx pré>

appelle essentiellement : m code> passant comme adresse la valeur de i em>, puis incréments cette valeur par une afin de pouvoir être utilisée dans le prochain match. Semble fonctionner. P>

Bien sûr, vous pouvez supprimer la variable lorsque vous n'en avez plus besoin: p>

:unlet i


1 commentaires

Merci @johnsyweb! Vimgolf? Semble intéressant! Et félicitations, je vois que vous êtes un en haut du conseil d'administration.



1
votes

Si le fichier est vraiment important, le nombre d'entrées correspondant est petit, et vous ne souhaitez pas vous déplacer dans l'ensemble du fichier avec la solution v / / m $ , vous pouvez faire Ceci:

Choisissez une marque que vous ne vous souciez pas, disons 'k . Maintenant, la séquence de clé suivante fait ce que vous voulez:

GGMK: g / méthody_name / m 'k-1

  • ggmk marque première ligne avec 'k .
  • m 'k-1 déplace la ligne correspondante à 1 ligne avant que la marque ' k (et marque se déplace avec la ligne qui est attachée à).

    Ceci ne déplacera que quelques lignes de correspondance, pas le fichier entier.

    Remarque: cela fonctionne en quelque sorte même si la première ligne contient le motif - et je n'ai pas de Explication pour cela.

    pour les scripts: xxx


0 commentaires