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