试图阅读出现在窗口底部的文本是非常令人沮丧的。每当我使用 Gedit 等文本编辑器时,我都会在当前打开的文件的底部填充 20 或 40 行空行,以防止我的注意力被强加到窗口底部。
不幸的是,当我使用交互式 shell(例如 python 或 bash)时,无法使用相同的解决方法。
我想找到一种方法来控制 Ubuntu 终端的光标在前一行被填充后停留在哪一行。
还有一个类似的问题在这里,但接受的答案没有解决的问题。
任何建议表示赞赏。
编辑
这是两个 Gedit 窗口的示例。
第一个屏幕截图描绘了一个几乎已满的窗口。再多写一两行,接下来的一个小时我将不得不盯着窗口底部。
第二个屏幕截图描述了解决方案。我在文件底部添加了空行,以便相关的第三行不再在屏幕底部而是在中间。
我正在寻找一种在终端内实现类似效果的方法,以便我使用的任何外壳都不会强迫我将注意力集中在终端窗口的底部,而是让我将视线舒适地保持在窗口的垂直中心。
您可以更改终端提示,使其回显 5 个回车,然后使用 ansi 转义序列在完成提示的其余部分之前向后移动 5 行。如果这对你有用,你可以把它放在你的 .bashrc 中以使其永久化。将其复制并粘贴到您的终端中:
PS1='\n\n\n\n\n\[\033[5A\]\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$'
Run Code Online (Sandbox Code Playgroud)
'\n\n\n\n\n' 向下移动五行,'[\033[5A]' 向上移动五行。如果您想要更多空间,您可以修改这两个。
您可以尝试使用tput更改终端的滚动区域:
tput csr 1 $((LINES/2))
Run Code Online (Sandbox Code Playgroud)
如果checkwinsize启用了 shell 的选项,则$LINES在调整终端大小时应该更新 - 但是为了tput csr在发生这种情况时重新运行命令,您将需要捕获SIGWINCH信号。您可以将这样的陷阱添加到交互式 shell 初始化文件中~/.bashrc,如下所示:
trap 'tput csr 1 $((LINES/2))' WINCH ; kill -s WINCH $$
Run Code Online (Sandbox Code Playgroud)
命令的第二部分kill -s WINCH $$发送一个首字母,SIGWINCH以便tput csr首次调用 shell 时也可以运行命令。
参考: