Hostnamen-Teil von PROMPT - zsh abschneiden

Ich habe einige Instanzen, die Teil einer Cloud-Umgebung sind. Ihr Name wird mit einer UUID versehen, wie zum Beispiel:

<name-of-host>-411a7a0e-b409-46a0-bf8f-546ffc50ee2b

Ich möchte es nicht verstecken, da es mir hilft, zu wissen, auf welchem ​​Computer ich mich befinde, und ich nur die ersten 20 Zeichen sehen möchte.

Meine Standardeingabeaufforderung lautet wie folgt:

PROMPT="[%[email protected]%m %1~]%(#.#.$) "

Mein erster Versuch war also:

PROMPT="[%[email protected]%20>...>%m %1~]%(#.#.$) "

Dies funktioniert jedoch nicht, wie es so aussieht:

[email protected]<command prompt is right here>

Dann habe ich es so versucht:

PROMPT="[%[email protected]%{%20>...>%m%} %1~]%(#.#.$) "

Es zeigt die Eingabeaufforderung korrekt an, aber wenn ich etwas wie bck-i-search versuche (STRG-R), der Teil innerhalb der %{...%} wird ĂĽberschrieben.

In den ZSH-Dokumenten wird erklärt, warum:

%{...%}
Include a string as a literal escape sequence.  The
string within the braces should not change the cur-
sor position.  Brace pairs can nest.

Gibt es eine andere Möglichkeit, das zu erreichen, was ich will?

Antworten:

3 fĂĽr Antwort â„– 1

Sie können Kürzungen - wie bei "Nur bis hier abschneiden" - mit beenden %>> oder %<<:

PROMPT="[%n%20>...>%m%>> %1~]%(#.#.$) "

Hier ist der relevante Teil aus dem ZSH Handbuch:

Der Teil der Aufforderungszeichenfolge, der abgeschnitten werden soll, wird bis zum Ende der Zeichenfolge oder bis zum Ende der nächsten einschließenden Gruppe der Zeichenfolge ausgeführt `%(" konstruieren oder zur nächsten Kürzung, die auf der gleichen Gruppierungsebene angetroffen wird (d. h. Kürzungen innerhalb von a `%(" sind getrennt), was immer zuerst kommt. Insbesondere eine Kürzung mit dem Argument Null (z. `%<<") markiert das Ende des Bereichs der Zeichenfolge, die abgeschnitten werden soll, während die Abschneidung von dort an deaktiviert wird. Zum Beispiel die Eingabeaufforderung `%10<...<%~%<<%# " druckt eine abgeschnittene Darstellung des aktuellen Verzeichnisses, gefolgt von einem `%" oder `#"gefolgt von einem Leerzeichen. Ohne das `%<<"Diese beiden Zeichen würden in der zu kürzenden Zeichenfolge enthalten sein.


1 fĂĽr Antwort â„– 2

Da sich der Hostname nicht von Befehl zu Befehl ändert, können Sie ihn einfach als Literal-String in PROMPT einfügen, anstatt ihn zu verwenden %m.

Das ist so etwas wie

short_hostname="$(hostname|sed -e "s/-.*//")"
PROMPT="[%[email protected]${short_hostname} %1~]%(#.#.$) "

Lies jetzt