一切都在标题中。这个想法是能够在双击时重置终端窗口垂直中间的 bash 提示符↩。发布了一个非常好的答案这里,但仅适用于 Zsh。
有人有 Bash 解决方案吗?
答案1
vcent () {
local n m i
m="$((LINES/2))"
n="$((LINES-m))"
for ((i=0; i<m; i++)); do
printf '\n'
done
printf "\033[${n};0H"
}
该函数使用“定位光标”ANSI 转义序列(见这里)。
Enter应相当于Ctrl+ m。要将函数分配给EnterEnter,请调用以下命令:
bind -x '"\C-m\C-m": vcent'
笔记:
- EnterEnter不会让你丢失当前正在输入的行。
- 当您单击Enter执行命令时,您会遇到延迟。 Bash(严格来说: Readline)需要等待以确保它不会EnterEnter。 这由 Readline 中的变量控制
keyseq-timeout
,默认值为500
(毫秒)。 - 有时用户按住Enter将提示移至底部(如果原始命令行不为空,则第一个Enter将执行它)。通过按住Enter您可以生成多个击键。在我们的设置中,根据数字是奇数还是偶数,您将触发该函数(可能多次)或该函数和一个附加的(最后一个)Enter将执行当前行。该行可能会执行,也可能不会执行,但无论哪种情况,您都不会将提示移到底部。如果您需要这样做,请按住Ctrl+ j。此组合应像正常组合一样起作用Enter,但我们的绑定不会影响它。
- 为了使绑定永久生效,请将函数和添加
bind …
到您的~/.bashrc
。 - 如果您将一些文本(shell 代码)粘贴到命令行中,并且其中有一个空行,则 Readline 可能会得到EnterEnter,因此相邻的行可能会连接在一起,这是非常错误的(可能很危险)。为避免这种情况,请在 Readline 中设置
enable-bracketed-paste
为。On