双击后是否重置终端窗口垂直中间的 bash 提示符?

双击后是否重置终端窗口垂直中间的 bash 提示符?

一切都在标题中。这个想法是能够在双击时重置终端窗口垂直中间的 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

相关内容