什么让我失望主要是试图获得我想要的新线条。相信我,我已经在谷歌搜索并搜索了这个网站,但无法得到我想要的。我要么解析错误,要么得到我想要的错误。
我想要的是这个
for (let val of await gen()) {
...
}
第一行绿色,第二个黄色,第三个白色。我能想到的东西给了我这个:
/c/what/ever/folder/here
(gitbranch)
$ STARTTYPING HERE
注意(gitbranch)之前的额外空格以及“$”
之前缺少换行符到目前为止,这是我的PS1:
/c/what/ever/folder/here
(gitbranch) $ STARTTYPING HERE
我想要这个,因为我们有时会有很长的分支和目录名称而且讨厌让我的提示从任何地方开始,但是在最左边
答案 0 :(得分:1)
我认为涉及sed
会产生一些输出,这些输出实际上会混淆您用于PS1
的双引号字符串中的扩展。
如果您愿意,可以切换到拼接特殊字符串,单引号字符串和双引号字符串(例如"$foo"'"not $expanded'$'\n'
),但这有点令人困惑。
相反,为什么不跳过解析git branch
的输出,只是直接询问分支?
假设您希望分支名称(第二行)在不在Git存储库中时不显示 ,则可行:
branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
PS1="\[\033[32m\]\w${branch:+\[\033[33m\]\n($branch)}\[\033[00m\]\n$ "
魔法在:+
parameter expansion语句中:如果左侧非空,它会分配/返回加号右侧的所有内容;没有其他的。可以把它想象成其他编程语言中的$cond ? $trueval : $falseval
三元运算符。
如果您想要一个默认字符串而不是第二行,请尝试:
PS1="\[\033[32m\]\w\[\033[33m\]\n(${branch:-no branch detected})\[\033[00m\]\n$ "
如果您使用的是全新的仓库,但尚未提交任何内容,则该代码会提示您位于分支机构HEAD
中。如果您想要master
或其他内容,请执行以下操作:
branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
if [ "$branch" = "HEAD" ]; then
branch="master, brand new"
fi
您可能已经这样做了,但如果您希望在更改目录时提示更新,则运行该代码一次将无效;无论你第一次运行它的git分支,它都会“坚持”。要实现这一点,请通过函数将该代码插入PROMPT_COMMAND
bash变量,如下所示:
prompt_with_git() {
branch=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
PS1="\[\033[32m\]\w${branch:+\[\033[33m\]\n($branch)}\[\033[00m\]\n$ "
}
PROMPT_COMMAND=prompt_with_git
一旦你source
,那就应该有用了。
请注意,这需要一个支持此处使用的rev-parse
命令和参数的Git。手动执行已提交的仓库文件夹中的git rev-parse --abbrev-ref HEAD
以检查您的仓库是否存在;如果有错误,您可能需要升级您的Git。