2

У меня странное поведение, которое кажется комбинацией zsh и, возможно, urxvt (?) Моя настройка такова: я запускаю urxvt -e 'tmux' чтобы получить терминал, который запускает zsh в качестве оболочки по умолчанию.

Затем я начал настраивать свой $PROMPT и сейчас он выглядит так:

 zstyle ':vcs_info:*' enable git svn hg bzr
 zstyle ':vcs_info:*' formats $' \e[0;33m(%s:%b)\e[0m'
 precmd () { vcs_info }
 PROMPT+=$'\e[0;31m%n\e[0m'
 PROMPT+="@"
 PROMPT+=$'\e[0;34m%m\e[0m'
 PROMPT+=":"
 PROMPT+=$'\e[0;36m%3c\e[0m'
 PROMPT+=$'\e[0;33m%c\e[0m'
 PROMPT+='${vcs_info_msg_0_}'
 export PROMPT

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

Обычное поведение подсказки заключается в создании новой строки после нажатия клавиши ввода, при желании выполняя команду, которая может присутствовать. Новая строка печатается. Тем не менее, я замечаю другое поведение при определенных обстоятельствах: когда я нажимаю ввод, команда выполняется и выводится на экран. Однако, когда предыдущий запрос не находился в верхней части терминала, последняя строка предыдущего вывода перезаписывается, потому что весь новый вывод перемещается на одну строку вверх.

Может быть, пример в порядке. Начните с пустого терминала и нового приглашения:

user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)

Теперь мы вводим ls -la в этот каталог (пример вывода):

user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)

Обратите внимание, что чего-то не хватает, так как в действительности здесь есть каталог .git :

drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .git

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

user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)ls -la
drwxr-xr-x 7 user user 4096 25. Jan 16:17 .
drwxr-xr-x 7 user user 4096 25. Jan 16:17 ..
user@hostname:very long directory name/with multiple components/foo~very long directory name/with multiple components/foo (git:master)

Как видите, все снова было перемещено вверх, на этот раз заменив .. из последнего вывода и .git из этого вывода.

Но это не происходит на всех установках. Это происходит только тогда, когда окно слишком узкое. Я также проверил это, изменив размеры открытого окна urxvt с zsh внутри. Когда я делаю это слишком узким. Из того, что я вижу, это начинается, как только приглашение занимает около двух третей ширины окна. Тем не менее, я не знаю, почему это происходит в этом случае.

Некоторые примечания:- Это не происходит с bash (даже если само приглашение является многострочным)- RPROMPT и RPROMPT2 пусты - Кажется, это не зависит от типа отображаемой информации (т.е. отключение vcs_info помогает, только если приглашение становится достаточно коротким)снова)- Это не происходит, когда приглашение многострочное (а вторая строка не достигает отметки в две трети)- Это не происходит в консоли (tty), но это происходит с xterm и urxvt.

Сводка: моя подсказка zsh перемещается, когда строка вверх, если строка подсказки занимает около двух третей длины окна.

1 ответ1

1

Я, кажется, исправил это, используя %{fg[color]%} вместо кодов цвета bash (конечно, для этого мне нужно загрузить модуль цвета).

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