У меня есть несколько экземпляров, которые являются частью облачной среды. К их имени добавляется UUID, например:

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

Я не хочу скрывать это, так как это помогает мне узнать, на какой машине я нахожусь, поэтому я хотел бы видеть только первые 20 символов.

Моя подсказка по умолчанию выглядит так:

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

Итак, моя первая попытка была:

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

Тем не менее, это не работает, как показано ниже:

user@name-of-host...<command prompt is right here>

Тогда я попробовал так:

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

Он отображает подсказку правильно, но когда я пытаюсь что-то вроде bck-i-search (CTRL-R), часть внутри %{...%} перезаписывается.

Документы ZSH объясняют, почему:

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

Есть ли другой способ добиться того, чего я хочу?

2 ответа2

3

Вы можете завершить усечение - как в "усечении только до этого" - с помощью %>> или %<<:

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

Вот соответствующая часть из руководства ZSH:

Часть строки приглашения, которая должна быть усечена, проходит до конца строки или до конца следующей включающей группы конструкции `%(', или до следующего усечения, обнаруженного на том же уровне группировки (т.е. усечения внутри `%(' является отдельным), который всегда стоит первым. В частности, усечение с нулевым аргументом (например, `%<<') отмечает конец диапазона строки, которая должна быть усечена при отключении усечения с этого момента. Например, приглашение `%10<...<%~%<<%# ' напечатает усеченное представление текущего каталога, за которым `%' или `#', а затем пробел. Без `%<<' эти два символа будут включены в строку для усечения.

1

Поскольку имя хоста не меняется от команды к команде, вы можете просто включить его в PROMPT в виде литеральной строки вместо использования %m .

То есть что-то вроде

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .