РЕШЕНИЕ ЕЩЕ НЕ НАЙДЕНО:
Я столкнулся с различными проблемами с zsh
, которые не ожидаются на MaOS Catalina/iTerm2
.
I) Действительно, если я разделю, например, большое оригинальное окно iTerm2 (только один терминал) на 4 панели, и, более того, если у меня длинное приглашение, то первый пробел между end of prompt
и удалением команды.
II) Другие странные поведения: например, если я в этой панели выполняю команду ls
и выполняю после запроса completion
с TAB
, вторая буква 's
' из 'ls
' удаляется ИЛИ другое поведение : между командой ls
и каталогами / файлами, предложенными завершение.
Ниже приведены снимки экрана, чтобы проиллюстрировать и помочь вам понять:
1) Исходные панели, на которых я воспроизводлю ошибку в нижней правой панели:
2) Завершение командой 'ls
': курсор на второй букве 'ls
', то есть 's
'
3) Пример завершения, здесь с помощью команды ls
: нет больше пробела между командой 'ls
' и каталогами / файлами завершено или пробел между последним фиолетовым символом канала и командой 'ls
' удален.
Я хотел бы получить несколько советов по устранению проблем 2) и 3) . В идеале я хотел бы сохранить свое длинное приглашение (из-за длинного PATH текущего каталога) и понять, почему у меня такое странное поведение.
Мое приглашение определено как .zshrc
:
PS1='%F{magenta}|%F{green}%n@%F{cyan}%m%F{magenta}|%f%T%F{magenta}|%B%~%b%F{magenta}|%f '
вы можете увидеть пробел в конце подсказки |%f '
, которая, кажется, не соблюдается
Я знаю, что мои проблемы обязательно возникают из-за длинной подсказки (Если я применяю ту же команду ' ls
'в $ HOME, все работает нормально, т.е. завершение не удаляет пробелы.
Вот почему я также пытался использовать этот код в .zshrc
(из http://aperiodic.net/phil/prompt/ ) для усечения ПУТИ:
###
# Truncate the path if it's too long.
PR_FILLBAR=""
PR_PWDLEN=""
local promptsize=${#${(%):---(%n@%m:%l)---()--}}
local pwdsize=${#${(%):-%~}}
if [[ "$promptsize + $pwdsize" -gt $TERMWIDTH ]]; then
((PR_PWDLEN=$TERMWIDTH - $promptsize))
else
PR_FILLBAR="\${(l.(($TERMWIDTH - ($promptsize + $pwdsize)))..${PR_HBAR}.)}"
fi
Но это ничего не делает, ПУТЬ остается прежней ...
Если у кого-то были проблемы такого же типа, это было бы хорошо сообщить потенциальным решениям, как их исправить. Более того, любые отзывы также приветствуются.
ОБНОВЛЕНИЕ 1: Я получаю лучшие результаты, так как я бы их улучшил, т.е. мне бы этого хотелось zsh
автоматически усекает длинное имя каталога с фиксированным пределом до руда.
Перед этим я покажу вам результат, который я хотел бы получить:
PS1, используемый для этой цифры ниже, получен с:
PS1='%F{magenta}|%F{green}%n@%F{cyan}%m%F{magenta}|%f%T%F{magenta}|%F{75}%-2d~/.../%F{13}%1~%F{magenta}| '
и результат в третьей строке:
ЗАПРОС 1:
Это первый интересный результат для меня, так как я хочу, чтобы текущий каталог имел цвет, отличающийся от указанных выше путей, которые я хочу обрезать.
Как видите, проблема остается, то есть каталог
Travail_3_Alain_Injection_des_Biais_Spectro_dans_XSAF_avec_GCph+WL+XC_et_rajout_dun_Prior_dans_la_matrice_de_Fisher_de_SpecSAF_15_JANVIER_2020
очень, очень долго.
ЗАПРОС 2:
Итак, я знаю, что это может быть сложно реализовать, но возможно ли для усеченного заданного числа максимальных символов иметь возможность усекать все компоненты полного пути (я имею в виду каждый из вышеуказанных каталогов) к другим компонентам, к которым мы применили усечение между началом и концом каталога?
Например, каталог
Travail_3_Alain_Injection_des_Biais_Spectro_dans_XSAF_avec_GCph+WL+XC_et_rajout_dun_Prior_dans_la_matrice_de_Fisher_de_SpecSAF_15_JANVIER_2020
станет:
Travail_3_...SpecSAF_15_JANVIER_2020
Я хочу сохранить 2 разных цвета между полным путем (усеченным, исключенным для текущего каталога, с цветом 75) и текущим каталогом (цвет 13 в моем последнем результате выше) ).
Кстати, что такое функция $reset_color
: обязательно ли ее использовать?
ОБНОВЛЕНИЕ 2: На данный момент я установил следующее подсказка:
PS1='%F{13}|%F{green}%n@%F{cyan}%m%F{13}|%f%T%F{13}|%F{75}%-4d/…… %F{13}%1~%F{13}|%F{15} '
, которая дает следующую визуализацию:
Как видите, я могу отображать до четвертой (с %~4d
) глубины каталогов в первой части моего приглашения. И после этой первой части я делаю отображение текущего каталога (по %1~
).
ЗАПРОС 3:
Это почти тот результат, который я хотел бы get: имея сначала родительский каталог до четвертой глубины в определенном цвете (здесь %F{75}
), а после символа ……
текущий каталог в другом определенном цвете (в моем случае, %F{13}
.
Почти с тех пор, когда я набираю команду cd
, я получаю следующий результат:
`|fab@astro|6:50|/Users/fab/……~|`
Как видите, я хотел бы получить только:
`|fab@astro|6:50|~|`
, т. Е. чтобы заставить исчезнуть путь /Users/fab/……
в подсказку, так как ~
и /Users/fab/
ссылаются на одно и то же.
В более общем смысле, я бы хотел заменить всегда /Users/fab/
на ~
, т. е. для всех запросов, которые я отображаю.
Как это исправить?
ЗАПРОС 4: остается проблема пробела между подсказкой и командой, которая вмешиваться, когда я в маленькой панели. Я понятия не имею, как предотвратить исчезновение этого пространства. У меня есть серио Мы отслеживаем: я понял, что это происходит, когда подсказка отображается в несколько строк из-за того, что панель мала и поэтому подсказка не может содержаться в одной строке, например:
Там я тоже хотел бы исправить эту ошибку "space removing
". Я думаю, что одним из решений может быть усечение второй части моего приглашения (текущего каталога), чтобы оно содержало только одну строку (как я указал выше в REQUEST 2 ) а как это реализовать?
РЕШЕНИЕ ЕЩЕ НЕ НАЙДЕНО: извините, я считал, что zsh -5.8 может решить проблему, но на самом деле, из моих последних тестов, это не так.