zsh объявляет ПРИГЛАШЕНИЕ, используя несколько строк

#variables #zsh #prompt

#переменные #zsh #приглашение

Вопрос:

Я хотел бы объявить свое приглашение ZSH с использованием нескольких строк и комментариев, что-то вроде:

 PROMPT="
    %n       # username
    @
    %m       # hostname
            # space
    %~       # directory
    $
            # space
"
  

(например, что-то вроде perl regex «игнорировать режим пробелов»)

Я мог бы поклясться, что раньше делал что-то подобное, но больше не могу найти эти старые файлы. Я искал варианты «приглашения объявить zsh в нескольких строках», но не совсем нашел его.

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

редактировать: Возможно, я неправильно помню комментарии — вот пример без комментариев.

Комментарии:

1. Поскольку # в вашем коде они находятся внутри строки, они не вводят комментарии, а являются буквальной частью строки. В zsh нет ничего похожего на игнорирование пробелов , как в регулярном выражении Perl.

Ответ №1:

Не совсем то, что вы ищете, но вам не нужно определять PROMPT в одном назначении:

 PROMPT="%n"    # username
PROMPT ="@%m"  # @hostname
PROMPT =" %~"  # directory
PROMPT ="$ "
  

Вероятно, ближе к тому, что вы хотели, это возможность объединения элементов массива:

 prompt_components=(
   %n   # username
   " "  # space
   %m   # hostname
   " "  # space
   "%~"  # directory
   "$"
)
PROMPT=${(j::)prompt_components}
  

Или вы могли бы позволить j флагу добавлять разделители пробелов, а не помещать их в массив:

 # This is slightly different from the above, as it will put a space
# between the director and the $ (which IMO would look better).
# I leave it as an exercise to figure out how to prevent that.
prompt_components=(
 "%n@%m"  # username@hostname
 "$~"  # directory
 "$" 
)

PROMPT=${(j: :)prompt_components}