终端中 zsh 顶部的固定行

SDp*_*SDp 5 terminal plugins zsh window oh-my-zsh

我正在尝试查找是否可以(如果可以的话,如何操作)使用 zsh 在终端顶部放置一条固定线。我想在这一行中放入一些系统信息(例如CPU使用情况、磁盘可用空间、RAM使用情况等),以保留经典的“滚动行为”。

我会在桌面上的窗口终端中使用它。

像这样的东西

任何想法/建议将非常感激,谢谢!

Ada*_*hon 6

zsh我建议不要尝试这样做,而是使用tmux它。如果你在你的中设置以下内容~/tmux.conf应该会达到预期的效果:

set -g status-position top
set -g status-right '#(system-information-command)'
set -g status-intervall 10
Run Code Online (Sandbox Code Playgroud)

它将在顶部放置一个状态栏,system-information-command在其中打印输出的第一行,并每 10 秒更新一次。

推理:

虽然从内部在终端的第一行打印一些内容非常容易zsh,并且如果需要的话,不断更新它也不是那么困难,但保留滚动行为将非常困难,即使不是不可能zsh

原因是向后滚动缓冲区是由终端维护的,而不是由zsh. 任何到终端的输出都是在光标的当前位置完成的。如果在光标位置或之后已经打印了任何内容,它将被覆盖。没有办法插入任何东西。

除非将光标明确设置到某个位置,否则它将位于最后一个输出的末尾,大多数情况下位于终端的最底部。正如所说,将光标放在第一行,写一些东西并将其重置到之前的位置非常容易。但是打印状态行之前第一行中的任何内容都将被覆盖。zsh只能写入终端,无法读取先前的输出。因此,无论状态栏覆盖什么,都无法恢复。

如果您在终端中向上滚动,之前打印的状态行将与终端内容的其余部分一起向下移动。如果命令的输出高于终端,则至少一行将被覆盖。

tmux是终端复用器。它本质上在您的终端内运行一个终端(或多个终端)。zsh然后在其中启动的任何程序都将在“内部”终端中运行。同时状态行将被打印到“外部”终端并且不会干扰 shell 的输出。