Wie kann ich vim verwenden, um dies zu automatisieren ...?

426
flumpb

Ich implementiere im Moment hunderte von ähnlichen Funktionen, die die Form annehmen

String name(String arg1, String arg2, String arg3, String arg4) { trampoline("name=&arg1=&arg2=&arg3=&arg4=", name, arg1, arg2, arg3, arg4); } 

Der schwierige Teil ist, dass die Funktion zwischen 2 und 10 Argumente annehmen kann.

Wenn ich eine Möglichkeit hätte, dass vim mich nach "Name der Funktion:", "Anzahl der Argumente:", "arg1:" fragt, könnte ich diese Funktionen problemlos erstellen.

Wenn Sie weitere Informationen benötigen, um mir zu helfen, wäre ich mehr als bereit zu liefern.

Vielen Dank

0

3 Antworten auf die Frage

1
akira

Nicht wirklich eine Antwort: Wenn Sie sich bereits an einem Punkt befinden, an dem Sie erkennen, dass Sie dies automatisieren sollten (für Hunderte von Funktionen), sollten Sie einen Schritt weitergehen und es vollständig automatisieren: Schreiben Sie einen Code-Generator in insert_your_favourite_language_here.

Ich denke gerade darüber nach, dies zu tun, aber ich würde gerne mit vim besser umgehen. flumpb vor 12 Jahren 0
gute absicht aber für diese aufgabe vielleicht die falsche zeit :) akira vor 12 Jahren 0
Ein guter Punkt, ich habe den Generator geschrieben (in ..... ++) und alle Methoden beendet :). Ich muss vim Scripting in einer freien Zeit zu einem anderen Zeitpunkt lernen flumpb vor 12 Jahren 0
1
uzsolt

Erste Idee: in vim hat for(Try :help for).

Sie können dazu eine einfache Funktion erstellen.

0
Luc Hermitte

Hier ist eine Antwort, die auf mu-template basiert (es sollte leicht sein, es in plain viml mittels zu portieren :put).

VimL: " /template//.template VimL: let s:nb_args = INPUT("Number of args: ") VimL: let s:args=map(copy(range(1,s:nb_args)), '"arg".v:val') VimL: let s:formal = join(map(copy(s:args), "'String '.v:val"), ', ') VimL: let s:real = join(s:args, ', ') VimL: let s:format = join(map(copy(s:args), "v:val.'={'.v:val.'}'"), '&') String name(<+s:formal+>) { trampoline("name=&<+s:format+>", name, <+s:real+>); }