Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加buildstatus后zsh提示换行到换行符_Zsh_Zshrc_Buildkite - Fatal编程技术网

添加buildstatus后zsh提示换行到换行符

添加buildstatus后zsh提示换行到换行符,zsh,zshrc,buildkite,Zsh,Zshrc,Buildkite,我正在尝试将我的Buildkite(ci构建服务器)项目状态添加到zsh提示符!我已经编写了一个ruby脚本,该脚本提取状态并将其放入一个冒号分隔的文件中,格式如下: # .buildkite_status project1: √ project2: x √ 和x是ansi颜色编码的 在我将$ci_build变量/函数添加到RPROMPT之前,我有一个可以正常工作的提示 现在我的提示看起来像 ~/.dotfiles »

我正在尝试将我的Buildkite(ci构建服务器)项目状态添加到zsh提示符!我已经编写了一个ruby脚本,该脚本提取状态并将其放入一个冒号分隔的文件中,格式如下:

# .buildkite_status
project1: √
project2: x
√ 和x是ansi颜色编码的

在我将$ci_build变量/函数添加到RPROMPT之前,我有一个可以正常工作的提示

现在我的提示看起来像

~/.dotfiles »                                         ± master*:3cce1cb
在我想要的改变之后

~/.dotfiles »                                         ± master*:3cce1cb √
我面临的问题是ci_构建的引入正在包装我的提示符。经过一周的阅读文档和调整,我已经没有建议了。我真的很想让它工作,但更希望它能正常工作

以下是问题的图像:

zsh.rc
build_status(){
当前_目录=$(basename$PWD)
var=$(cat~/.buildkite_状态| grep\^$当前目录:| awk-F':''{print$2}')
echo-n$var | tr'\n''
}
本地git_格式=“%{${fg_bold[黄色]}%}±%b%c%u:%.7i%{${reset_color}%}”
zstyle':vcs_信息:git*'启用git
zstyle':vcs_信息:git*'检查更改是否为true
zstyle':vcs_信息:git*'获取修订版本true
zstyle':vcs_信息:git*'stagedstr“+”
zstyle':vcs_信息:git*“unstagedstr”*“
zstyle':vcs_信息:git*'格式“$git_格式”
zstyle':vcs\u信息:git*“actionformats”%a$git\u格式
precmd(){
风投资讯
建立用户状态
}
zle-keymap-select(){zle reset prompt;}
zle-N zle键映射选择

VI_MODE_INDICATOR=“%{$fg_bold[red]]]}该问题是由包含
构建状态的输出的方式引起的:

local ci_build='%{$(build_status)%} '
根据zsh手册

%{…%}

包含字符串作为文字转义序列。大括号内的字符串不应更改光标位置

zsh假设
$ci_build
只包含转义序列,打印长度为0个字符,同时它还包含显示状态的字符和空格,因此实际上长了2个字符

由于终端中没有实际的右对齐,zsh根据其感知的长度计算右提示符的位置。由于右提示符比计算的长度长2个字符,因此右提示符环绕在行尾,将光标放在下一行

这个问题的快速解决方法是在
%{…%}
中使用
%G
告诉zsh将输出一些字符。
%G
代表一个字符,对于更多字符,您可以使用适当数量的
%G
或将匹配的数字放在
%
%G
之间:

local ci_build='%{$(build_status)%2G} '


更干净的解决方案是将ANSI代码(可能还有您正在使用的特殊字符)保留在状态文件之外,只需使用zsh功能即可。

当使用单个
awk-F://^$current\u目录://{print\$2}时,为什么要将反模式三重管道与
cat file | grep regex | awk blah一起使用呢“~/.buildkite\u status
可以避免两个昂贵的叉子吗?不确定您所说的“我面临的问题是ci\u版本的引入正在包装我的提示。”请发布屏幕截图。
local ci_build='%{$(build_status)%2G} '