Zsh 提示自定义
Zsh Prompt Customization
您好,我知道您设置了提示变量来像这样编辑提示
export PROMPT="This is the date %d"
你如何执行命令并在提示加载时每次打印结果。
实际上有两种(主要)方法可以实现这一点:
使用命令替换 运行 命令作为提示的一部分
setopt promptsubst
PROMPT='Date %d Result $(a_command) '
promptsubst
必须启用,否则 zsh
将不会进行任何参数扩展、算术扩展或命令替换。
另外,提示文字需要在设置PROMPT
时用引号引起来,不要展开。所以要么把它放在单引号中,要么,如果你 have/want 使用双引号,在 $
前面加上 \
以在必要时单独引用它们:
PROMPT="Date %d Result $(a_command) Const $(another_command)"
这将在设置 PROMPT
时扩展 $(another_command)
(因此它只是 运行 一次,其结果将永久替换)并且每次显示提示时 $(a_command)
.
利用precmd
函数(或钩子)和psvar
数组:
autoload -Uz add-zsh-hook
a_function () {
psvar[1]=$(a_command)
}
two_function () {
psvar[2]=$(two_command)
}
add-zsh-hook precmd a_function
add-zsh-hook precmd two_function
PROMPT='Date %d Result1 %v Result2 %2v '
- 如果设置,
precmd
函数将在打印提示之前 运行。您还可以在 precmd_functions
数组中将函数列表设置为 运行。
add-zsh-hook
提供了一种向该数组添加函数的简单方法。
提示中的%Nv
被psvar
数组的第N个元素代替。如果 N
被遗漏 (%v
),则假定 N==1
(对于其他采用数字参数的提示标记也是如此)
乍一看,第二种方法可能比 promptsubst
复杂得多。但这只是非常简单的替换的情况。使用 precmd
允许使用更复杂的函数,而不会由于在 $( )
.
中塞入几行代码而使 PROMPT
的定义不可读
您也可以结合这两种方法并在某些或所有情况下放弃使用 psvar
:
autoload -Uz add-zsh-hook
setopt promptsubst
a_function () {
a_parameter=$(a_command)
}
two_function () {
psvar[2]=$(two_command)
}
add-zsh-hook precmd a_function
add-zsh-hook precmd two_function
PROMPT='Date %d Result ${a_parameter} %2v'
您好,我知道您设置了提示变量来像这样编辑提示
export PROMPT="This is the date %d"
你如何执行命令并在提示加载时每次打印结果。
实际上有两种(主要)方法可以实现这一点:
使用命令替换 运行 命令作为提示的一部分
setopt promptsubst PROMPT='Date %d Result $(a_command) '
promptsubst
必须启用,否则zsh
将不会进行任何参数扩展、算术扩展或命令替换。另外,提示文字需要在设置
PROMPT
时用引号引起来,不要展开。所以要么把它放在单引号中,要么,如果你 have/want 使用双引号,在$
前面加上\
以在必要时单独引用它们:PROMPT="Date %d Result $(a_command) Const $(another_command)"
这将在设置
PROMPT
时扩展$(another_command)
(因此它只是 运行 一次,其结果将永久替换)并且每次显示提示时$(a_command)
.
利用
precmd
函数(或钩子)和psvar
数组:autoload -Uz add-zsh-hook a_function () { psvar[1]=$(a_command) } two_function () { psvar[2]=$(two_command) } add-zsh-hook precmd a_function add-zsh-hook precmd two_function PROMPT='Date %d Result1 %v Result2 %2v '
- 如果设置,
precmd
函数将在打印提示之前 运行。您还可以在precmd_functions
数组中将函数列表设置为 运行。 add-zsh-hook
提供了一种向该数组添加函数的简单方法。
提示中的%Nv
被psvar
数组的第N个元素代替。如果N
被遗漏 (%v
),则假定N==1
(对于其他采用数字参数的提示标记也是如此)
- 如果设置,
乍一看,第二种方法可能比 promptsubst
复杂得多。但这只是非常简单的替换的情况。使用 precmd
允许使用更复杂的函数,而不会由于在 $( )
.
PROMPT
的定义不可读
您也可以结合这两种方法并在某些或所有情况下放弃使用 psvar
:
autoload -Uz add-zsh-hook
setopt promptsubst
a_function () {
a_parameter=$(a_command)
}
two_function () {
psvar[2]=$(two_command)
}
add-zsh-hook precmd a_function
add-zsh-hook precmd two_function
PROMPT='Date %d Result ${a_parameter} %2v'