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 )
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:
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
Hier sind die Standardwerte für args:
%Vor%danke.
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.
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.
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
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\+
.
Tags und Links vim