B1C*_*0PS 3 bash prompt zsh terminal
我在 bash 提示符中显示了我的完整工作目录以及其他信息(git 等),有时它会变得很长。
我想在我的提示末尾添加一个换行符,以便我可以在下一行键入命令,但前提是提示很长,例如超过 50 个字符。
| ~ $ Typing a command here is nice |
Run Code Online (Sandbox Code Playgroud)
| ~/foo/longDirectoryName/longsubirectory/src/package (master +*) $ Typing here s|
| ucks. I want to just start on a new line |
Run Code Online (Sandbox Code Playgroud)
显然,如果我想总是在下一行输入我的命令,我可以添加一个换行符PS1(如这篇文章)。但我还没有找到有条件地做到这一点的方法,因为PS1它只是一个格式字符串。
PS 我实际上正在使用 ZSH 尝试自定义 Agnoster 主题,但我想任何针对 bash 的解决方案通常都会有所帮助。
在 中zsh,这就是%<number>(l:<yes>:<no>)提示扩展的用途。当数字为负数时,如-30,如果距离屏幕右边缘至少还有 30 个字符,则yes输出文本,否则为no,因此:
PS1=$'%~%-30(l::\n)$ '
Run Code Online (Sandbox Code Playgroud)
如果"$ "剩余的字符少于 28 个(减去 30 个),则将插入一个换行符供您在行上使用。
您可以通过以下方式完成50 次或更多:
PS1=$'%~%50(l:\n:)$ '
Run Code Online (Sandbox Code Playgroud)
但是 IMO,保证最小可用空间比最大不可用空间更有用。
有关详细信息,请参阅手册。您会发现其他指令来截断长提示并替换为省略号,例如您可能也会发现它们很有用。
注意 zsh 的提示扩展与bash. 它实际上更接近于tcsh,因此对于bash的解决方案不太可能有多大用处zsh,尽管相反它通常更正确。