macos - 在 zsh PS1(提示)环境变量中使用自定义颜色会导致空格问题
问题描述
我的设置:
- zsh 5.7.1 (x86_64-apple-darwin19.0)
- macOS Catalina 10.15.5
这是标准的 PS1 var:PS1="%n@%m %~ %# "
当我尝试使用 ANSI 颜色或 tput 添加文本着色时出现问题。示例(在不终止颜色的情况下,无论如何它的行为都很奇怪):
PS1="%n@%m \e[38;5;197m%~ %# "
这种缩进的原因可能是什么?
第二个问题发生在提示符中的长字符串转到换行符时 - 换行符后的新字符与第一行重叠,我看不到后者。这只发生在第一个换行符上,第三个换行符正常出现(但排在第二位)。
我尝试使用此答案,但外壳无法解析解决方案:rombez@MacBook-Pro \[\e[38;5;197m\]~
解决方案
ANSI 转义序列不占用终端上的任何空间,因此您必须zsh
说明它们不会影响提示的长度。您可以通过将它们包装在%{...%}
.
PS1="%n@%m %{\e[38;5;197m%}%~ %# "
但是,您不需要zsh
像在bash
. %F
您可以直接使用序列指定颜色,它zsh
知道在计算提示大小时如何处理。
PS1='%n@%m %F{197}%~ %# '
推荐阅读
- laravel - Laravel 从 get 到资源的重定向路由
- python - 等待多个 aiohttp 请求导致“会话已关闭”错误
- gmail-addons - 今天更新到 Gmail 插件平台后,未发布插件的授权被破坏
- symfony - Symfony VichUploaderBundle:找不到字段“xx”的映射
- python - 如何转换包含单个字符串且字符串内有多个条目的列表。蟒蛇 3
- python - 猜谜游戏 - Tkinter 模块
- javascript - “this”和 ObjectName(例如:Person)有什么区别?
- vb.net - vb.net通过函数传递列表而不更改列表值
- swift - 无法识别的选择器发送到实例 - XCode 9.4.1,Swift 4.0
- python - 如何根据 HTML 从统计页面中提取玩家信息?