Answers:
下面的代码(使用zsh功能,但priciple也可以与其他shell一起使用)定义了两个shell函数,prompt_middle
和prompt_restore
。
第一个函数通过在提示下面强制适当数量的空行来使提示始终位于终端的中间位置。后一种功能恢复了正常行为。
您可以将这些功能分配给某些快捷方式,或使用某些逻辑在这两种模式之间切换。
# load terminfo modules to make the associative array $terminfo available
zmodload zsh/terminfo
# save current prompt to parameter PS1o
PS1o="$PS1"
# calculate how many lines one half of the terminal's height has
halfpage=$((LINES/2))
# construct parameter to go down/up $halfpage lines via termcap
halfpage_down=""
for i in {1..$halfpage}; do
halfpage_down="$halfpage_down$terminfo[cud1]"
done
halfpage_up=""
for i in {1..$halfpage}; do
halfpage_up="$halfpage_up$terminfo[cuu1]"
done
# define functions
function prompt_middle() {
# print $halfpage_down
PS1="%{${halfpage_down}${halfpage_up}%}$PS1o"
}
function prompt_restore() {
PS1="$PS1o"
}
我个人而不是在两种模式之间切换,我会使用一种更简单的方法(你需要$halfpage_up/down
上面的定义):
magic-enter () {
if [[ -z $BUFFER ]]
then
print ${halfpage_down}${halfpage_up}$terminfo[cuu1]
zle reset-prompt
else
zle accept-line
fi
}
zle -N magic-enter
bindkey "^M" magic-enter
这将检查当前命令行是否为空(请参阅我的其他答案),如果是,请将提示移至终端中间。现在,您可以通过另外按键快进您的提示ENTER
(或者您可能要将其称为双击,类似于双击)。