2016-07-30 27 views
4

eine einfache Art und Weise Wollen Sie diese Datei zu erstellen:Vim wizardry, dies zu tun

def foo1(): 

def foo2(): 

def foo...(): 

def fooN(): 

, ohne sich jede Funktion Signatur eingeben. Möglich? In Excel würde ich 'def foo' eine Spalte machen, eine Integer-Spalte machen, dann eine '():' Spalte, kopiere Einfügen in eine .py-Datei, aber ich möchte eine ebenso einfache Lösung in vim oder sublime! Wer weiß, wie man diese Zauberei macht?

+1

Mit dem '...' tun meinst du dasselbe für die anderen Zahlen oder es wird wörtlich genommen? –

+0

Ich meinte für alle 3 - (N-1), hätte besser geschrieben werden können, sorry –

Antwort

4

Für diesen Trick verwenden wir vim. Beginnen Sie mit der Eingabe der ersten Definition oben im Code. Im Einfügemodus Typ:

def foo1():

Dann Modus Ausfahrt Einsatz mit <esc>.

Wir werden jetzt ein vim-Makro erstellen, um dies so oft wie Sie möchten zu replizieren. Gehe zum Anfang der Datei mit gg.

Starten Sie nun recording a macro mit qq. Dadurch wird Ihr Makro im "q" -Register gespeichert. Erstellen Sie zunächst eine Kopie der Funktionsdefinition mit yyp. Wenn Sie möchten, können Sie über O<esc>j eine leere Zeile erstellen. Dann increment die Funktionsnummer Ihrer Kopie mit Ctrl + a. Beenden Sie mit 0 an den Anfang der Zeile und beenden Sie die Aufnahme des Makros mit q.

Jetzt einfach das Makro so oft wiederholen, wie Sie möchten. Geben Sie beispielsweise [email protected] ein, um es 100 Mal abzuspielen. Voilà!

+1

ooooo wow das ist großartig, sehr beeindruckt von Ihrem Wissen! Ich habe diese Lösung auch etwas erweitert, wenn die Funktionskörper identisch sind. Wenn die Funktion # Zeilen lang ist, ersetzen Sie yyp durch y # y, shift + g, p. VIELEN DANK! –

+1

Ich würde persönlich die Makro-Ansatz folgen, aber es gibt immer 100 Möglichkeiten, das gleiche in vim zu tun. U könnte zum Beispiel benutzerdefiniertes Snippet in UltiSnips verwenden und die Funktion Python-Interpolation verwenden, um dieses Snippet immer zur Hand zu haben - für die spätere Verwendung. – P4C

3

Ändern Sie den Wert der Variablen N auf Ihre Bedürfnisse:

:let N=5 
:execute "normal! ".N."idef foo0():\r\r\<Esc>" | g/\d\+/ :.,$s//\=submatch(0)+1/ 

Nbezeichnet die Anzahl der foo Funktionen beginnend 1-N

+1

Wow, das ist großartig! Das ist eine wirklich dichte Codezeile ... ich werde die Docs besuchen, um zu sehen, was das Zeug bedeutet. Vielen Dank! –

+1

Sie können einfach eine Karte kopieren und einfügen oder hinzufügen. Sie werden auch bemerken, dass es im Ersatzbefehl einen kniffligen Trick gibt, um die Nummer der Funktion zu erhöhen! Wenn Sie es nicht bekommen haben, zögern Sie nicht :) –