是否有可能在bash中复制vim的`zz`的效果?

时间:2014-03-02 10:22:13

标签: bash vim

在Vim中,在正常模式下执行zz将获取光标当前所在的行,并将该行与光标一起移动到当前窗口的垂直中心。

有没有办法在bash中复制此行为,将当前命令提示符移动到屏幕的垂直中心,并随之滚动命令缓冲区?

我在StackOverflow而不是Unix/Linux上发帖,因为如果bash本身不支持这一点,我对需要编写自定义代码的解决方案持开放态度。

2 个答案:

答案 0 :(得分:4)

Vim控制整个屏幕区域。 Bash只负责输入行。它不知道屏幕其余部分的内容,这是其他程序控制的,并且无法重新定位。

请注意,屏幕上的内容无法通过其上运行的程序读取。了解屏幕上的内容的唯一方法是从一个干净的状态开始,并记录打印的每个字符和终端命令。 Vim做到了这一点; Bash不会也不会。

答案 1 :(得分:2)

牛米。已经解释过bash本身无法做到这一点。但是,您仍然可以将命令直接发送到底层终端,以实现类似于您想要的效果。例如,假设您的bash输入行位于屏幕中间的某个位置,以下内容将通过发送几行空行向下滚动,然后将您置于屏幕中间:

 declare -i L; declare -i M; L=`tput lines`/2; M=$L-1; for (( c=1; c<=$L; c++ )); do echo; done; tput cup $M

请注意,当您位于屏幕上半部分的某个位置(它会将您置于屏幕中间,但不会向后滚动)时,这不起作用。

有关详细信息,请参阅man tputman terminfo