Wie übergeben Sie Argumente von: Befehl an Funktion?

8

Ich möchte einen Befehl schreiben, dieser Befehl hätte folgendes Format:

%Vor%

oder

%Vor%

ähnlich wie

%Vor%

oder

%Vor%

Der Befehl MyCMD ruft schließlich eine Funktion auf, um etwas zu arbeiten. Ich habe diese Zeile geschrieben ( funktioniert nicht )

%Vor%

Hier ist das Problem, wie man mit diesen Argumenten umgeht:

  • Problem 1 Ich lese über die Hilfe, -range und -count können nicht gleichzeitig verwendet werden, aber ich brauche beide. Ich habe mir auch einige vim-Befehle angeschaut, wie zum Beispiel: delete,: print, wenn wir diese Befehle verwenden, können wir sowohl range als auch count angeben. Außerdem habe ich festgestellt, dass vim doc zwei Einträge desselben Befehls enthält, wenn ein {count} oder [count] verfügbar ist. wie:

    %Vor%

oder

%Vor%

warum ist das? Warum nicht nur mit [count] ? (Das wäre eine andere kleine Frage )

  • Problem 2 von meinem Entwurf, all diese Argumente sind optional, sie haben Standardwerte (siehe Tabelle unten). Wie kann ich diese Argumente an die Funktion übergeben (ich überprüft <q-args> and <f-args> ) und wie kann ich unterscheiden, welche Benutzereingaben für welches Argument sind? zum Beispiel gibt Benutzer

    :MyCMD 5 g

    %Vor%

Hier sind die Standardwerte für args:

%Vor%

danke.

    
Kent 05.04.2013, 22:42
quelle

2 Antworten

9

Für Ihren komplexen benutzerdefinierten Befehl können Sie sich nicht ausschließlich auf Vims eingeschränkte Analyseoptionen verlassen; Sie können den Bereich mit -range behandeln, müssen aber die Argumente selbst analysieren.

%Vor%

Innerhalb von MyFUNC (was wahrscheinlich mit :function MyFUNC( ... ) range definiert werden sollte, um nur einmal aufgerufen zu werden), split() die Argumente in whitespace. Alternativ könnten Sie die Funktion so definieren, dass sie eine variable Anzahl von Argumenten verwendet und <f-args> verwendet. Beachten Sie jedoch, dass die Anzahl der Funktionsargumente begrenzt ist (auf 20 IIRC).

Das <bang>0 ist ein netter Trick, um den Knall in einen Booleschen zu verwandeln, was normalerweise das ist, was Sie brauchen.

    
Ingo Karkat 06.04.2013, 10:03
quelle
0

Stellen Sie schwierige Fragen. Ich habe wirklich keine Lösungen, aber hier sind meine Ergebnisse.

%Vor%

Nach dem Ausführen der folgenden Szenarien:

%Vor%

Jetzt mit -count anstelle von -range

%Vor%

Ergebnisse:

%Vor%

Wie Sie sehen können, ist es nicht einfach. Mein Vorschlag wäre, -range mit Ihrem Befehl zu verwenden. Und dann analysiere die <q-args> nach einer Zahl über \d\+ .

    
Peter Rincker 05.04.2013 23:21
quelle

Tags und Links