2009-07-27 9 views
4
Réorganiser

I ont 2 méthodes dans un fichier source:méthodes utilisant vim

def Foo 
    puts "hello" 
    puts "bar" 
end 

def Bar 
    puts "hello" 
    puts "bar" 
end 

Je voudrais échanger l'ordre des méthodes, donc bar est tout d'abord.

En supposant que le curseur est sur le d en def Foo, la méthode simple consiste à:

 
shift v -> jjjj -> d -> jjj -> p -> O -> esc 

Mais cela se sent un peu verbeux et ne tient pas compte bien des méthodes arbitrairement longues:

Qu'est-ce que le moyen le plus efficace de le faire dans Vim, au clavier?

EDIT Gardez à l'esprit, je voudrais la solution pour tenir compte d'une situation où les méthodes sont dans un contexte d'une grande classe, donc G est probablement mieux éviter

Répondre

15

En supposant que le curseur se trouve quelque part dans la première méthode, appuyez sur dap}p et ils devraient être échangé.

Ce que fait dap est simplement "supprimer un paragraphe". Essayez :help object-select pour apprendre l'autre façon de supprimer/sélectionner des objets texte dans VIM.

EDIT: Remplacé G par } dans la commande.

+0

Toi, monsieur, je viens de me faire exploser :) – johnw188

+0

+ 1 pour une awesomeness complète, y at-il un moyen de résoudre ceci sans la touche G? il fonctionne dans le contexte d'une grande classe –

+0

wow :) –

0

de la ligne 1, 5ddGp, ou 5dd: 5p est le plus concis/le plus court que je puisse penser.

+0

de toute façon pour éviter le comptage des lignes dans le problème de la tête? –

0

personnellement, j'irais « 4DD » puis vers le bas sous la barre et appuyez sur 'p', mais je ne suis pas un gourou vim

1

Un couple de façons hors de ma tête. On pourrait dire

5DD/fin [touche Entrée] pO

Supprime cinq lignes, les recherches pour la fin, place les lignes ci-dessous, ajoute un espace.

Si vous avez installé VimRuby, je crois que vous pouvez utiliser% pour sauter entre def et end. Dans ce cas, on pourrait dire

v% x5jpO

Edit: Je remets à Spatz à ce sujet: P

2

trouvé une autre méthode (de godlygeek sur #vim):

avec:

def function(): 
    first 
    first 
    first 

def lol(): 
    second 
    second 
    second 

de la ligne 1, comptez jusqu'à la 'def lol', qui est 5. Puis:

:1,5m$ 
3

similaires à

d}}p 
de Spatz

supprimer la ligne vierge suivante (ci-dessous Foo), passez à la ligne suivante vide (sous la barre), la pâte.