2017-11-15 6 views
1

Ich arbeite an einem make completion in tcsh. Die gewünschte Vervollständigung für neue Wörter kann entweder make-targets oder Variablen sein.tcsh completion: Suffix Variablen mit =

Zum Beispiel:

complete make 'n/*/(footarget1 bartarget2 FOOVAR1= BARVAR2=)/' 

Durch es auf diese Weise zu schreiben, ein neuer Raum wird suffixed nach der Fertigstellung, die nicht bequem ist, wenn ein VAR zu setzen versuchen, (haben den Raum löschen).

Wenn ich das Suffix auf Null setze, ist es nicht sinnvoll, ein Ziel zu vervollständigen (sollte einen Platz für das nächste Argument eingeben).

Gibt es eine Möglichkeit, ein Leerzeichen zu ergänzen, wenn eines der Ziele abgeschlossen ist, aber nichts Suffix, wenn ein VAR ist?

Antwort

1

Es ist einfach, solange alle Ihre Ziele von Variablen durch Groß-/Kleinschreibung getrennt werden können.

complete make \ 
'[email protected]*@(BARVAR2=)@@' \ 
'[email protected]*@(FOOVAR1=)@@' \ 
'[email protected]*@(VAR1= VAR2=)@@' \ 
'[email protected]*@(target1 target2 VAR1 VAR2 BARVAR2 FOOVAR1)@' 

Zur Vervollständigung wird nur die erste (von oben nach unten gelesen) Regel verwendet, die passt.
Wenn Sie mit dem Großbuchstaben 'B' beginnen, wird die erste Regel gefunden, die auf BARVAR2= endet und den Suffix-Platz auslässt.
Wenn Sie mit dem Großbuchstaben 'F' beginnen, wird FOOVAR1= ähnlich abgeschlossen.
'V' hat zwei Optionen, die durch Leerzeichen getrennt sind.
Sie können neue Variablen hinzufügen, indem Sie sie einfach in die Klammer ihres Anfangszeichens einfügen. Wenn Sie andere Anfangszeichen benötigen, kopieren Sie einfach die Zeile '[email protected]*@(BARVAR2=)@@' \ und ersetzen Sie B* durch Ihr Zeichen (z. B. G*) in der neu generierten Zeile.

Wenn Ihre Eingabe nicht mit diesen Großbuchstaben beginnt, wird die letzte Regel angewendet, die auf target1/target2 endet.
Diese werden mit Suffix Leerzeichen hinzugefügt, wenn die Übereinstimmung ohne Mehrdeutigkeit abgeschlossen werden kann.

Als Bonus können Sie diese auch als erste Regeln setzen:

'[email protected]*[email protected](val1)@' \| 
'[email protected]*[email protected](val2)@' 

Wenn Ihr aktuelles Wort BARVAR2= ist, dann ist diese Regel werden Sie val1 als Abschluss geben.
Für FOOVAR1= gibt es val2.

+0

Danke für Ihre Antwort, aber ich war nicht erklärend genug. Nicht alle Variablen beginnen mit VAR. Ich änderte die Variablen in dem Beispiel von VAR1, VAR2 zu FOOVAR1, BARVAR2 –

+0

aktualisierte die Antwort, hoffe es hilft. Der hässliche Teil bleibt, dass es schwer ist, die Makefile-Ziele/Variablen automatisch in den Abschluss zu bekommen. Ich habe noch nie einen Weg gefunden, dies konsistent zu tun (besonders wegen% -Wildkarten in Zielen) – sbulka