#ubuntu-14.04 #zsh
#ubuntu-14.04 #zsh
Вопрос:
В моей .zsh
конфигурации есть следующие строки:
function zle-line-init zle-keymap-select {
VIM_PROMPT="${${KEYMAP/vicmd/ [NORMAL]}/(main|viins)/}"
PS1=$'e[0;36m%ne[m at e[0;33m%me[m in e[0;32m%~e[me[0;34m$(vcs_info_wrapper)e[me[1;33m$VIM_PROMPTe[mn$ '
zle reset-prompt
}
Что происходит, так это то, что если окно терминала слишком узкое, каждый раз, когда перерисовывается приглашение, предыдущая строка удаляется. Например, допустим, у меня есть следующее приглашение:
first line
some text here
another text here
sergiyb at wing in ~ [master *]
$
Затем я нажимаю Escapeи получаю
first line
some text here
sergiyb at wing in ~ [master *] [NORMAL]
$
Теперь, если я нажмуi, я получу это
first line
sergiyb at wing in ~ [master *]
$
Аналогично, если я ввожу команду ls
, в ней отображаются все файлы, но удаляется последняя строка:
sergiyb at wing in ~ [master *]
$ ls test_dir_with_files_1_to_10
file1 file2 file4 file6 file8
Однако, если окно терминала достаточно широкое, этого не происходит, например
sergiyb at wing in ~ [master *]
$ ls test_dir_with_files_1_to_10
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Также, если я попытаюсь сделать свою строку PS1 короче, например, удалив имя пользователя, это перестанет происходить, пока я не уменьшу ширину терминала еще больше.
Есть идеи, что вызывает это и / или как это можно решить?
Ответ №1:
zsh
невозможно точно определить размер приглашения, поскольку он не знает, что терминал не отображает управляющие коды ANSI в виде печатаемых символов. Вместо этого используется zsh
собственное форматирование.
PS1=$'%F{cyan}%n%f at %F{yellow}%m%f in %F{green}%~%F{blue}$(vcs_info_wrapper)%B%F{yellow}$VIM_PROMPT%f%bn$ '
Комментарии:
1. Могу ли я получить яркий и темно-желтый с ними? В escape-кодах ANSI это будет
e[0;33m
иe[1;33m
.2.
%B/%b
Пара должна включать жирный / яркий для второго желтого слова.