在终端中水平滚动


12

因此,我相信已经有两个问题。所有这些都与之相关tail -f,因此人们给出了“少用”的切切答案。

我需要所有内容,每个命令等。问题是我需要运行许多控制台窗口,即使有多个监视器,仍然需要缩小它们。结果,几乎所有的输出都被换行所困扰,难以读取。

一个建议的解决方案是echo -ne '\e[?7l',它有些起作用。现在的问题是,有没有办法在控制台上获取滚动条?

Ubuntu 12.10,终端


作为一个示例(响应所有“这不是终端的工作方式”的注释!),我指出WindowsUbuntu控制台确实支持此功能。之类的应用程序例如lsmcedit可以在其中正常工作,因为屏幕宽度缓冲区宽度是分开处理的。
CZ

Answers:


10

您要问的是一个无限宽度的终端,其中一部分正在显示。这既不是终端传统上的工作方式,也不是应用程序期望它们如何工作。

例如,如果终端具有无限宽度,那么当视觉应用程序想要在屏幕中间显示某些内容时,它们应如何工作?

您可以使用GNU进行处理screen(您应该能够从几个大小不同的终端上附加屏幕会话,以便屏幕知道如何显示较大终端的小窗口)并将screen窗口宽度设置为某种很大,然后欺骗视觉应用程序,使他们认为屏幕宽度是原始宽度。

喜欢(内screen

c=$COLUMNS # assuming your shell has that variable
screen -X width -w 1000
stty cols "$c"

一些视觉应用程序可以很好地工作,而有些则不能很好(当它们进行相对定位或依赖终端包装时进行安装)。vim似乎工作正常。

然后,要滚动和复制粘贴数据,唯一的选择是使用screen复制模式。(<prefix>])并在光标周围移动(info -f screen -n Movement有关在复制模式下移动的信息,请参阅)。

tmux 可能具有类似的功能。

这个terminator终端仿真器(基于Java)不是terminatorubuntu附带,它也可以使用无限的终端宽度来实现:

  • 线永远不会被包裹
  • 可视应用程序被告知,屏幕宽度是适合窗口的大小,而不是无穷大。
  • 它的效果也比screen上面的基于基础的解决方案更好,因为它的terminfo条目声称它不进行换行,因此应用程序意识到这一点,并且行首的BS不会移至上一行的末尾。

我已经在GUI环境中,因此,如果要在可视化编辑器中打开文件,可以从终端启动GUI。无论如何,将它们复制到终端中比在终端中复制要容易得多,因为您无法真正轻松地在终端中拖动选择一个块而不会使其截止。运行screen -X width -w 1000收益No screen session found.,有什么想法吗?
srcspider

@srcspider正如我说的,您需要在中执行此操作screen。首先开始screen
斯特凡Chazelas

好的,我想我现在就明白了,基本上我应该参加screen -X width -w 1000 <mycommand>
srcspider 2013年

1
@srcspider。编号screen是基于终端的终端仿真器。因此,您需要像运行命令一样先启动它,xterm或者gnome-terminal先运行该screen命令。然后,在该新的终端仿真器中,运行该screen -X命令告诉screen更改其窗口宽度。另请参阅我对terminator模拟器的修改后答案,我怀疑您会喜欢它。
斯特凡Chazelas

谢谢!即使我不知如何不让他们工作,至少现在我知道为什么我不能让他们那样工作。
srcspider

6

虽然Emacs主要是编辑器和IDE¹,但它恰好可以很好地解决您的问题。您可以在Emacs窗口中运行程序,然后Emacs在无限宽度和高度的哑终端中显示该程序。如果光标在缓冲区的末尾,则窗口将在程序产生输出时滚动;否则,窗口将滚动。如果您移动光标,则窗口将随着输出的增长而保持不变。

键入M-x shell RET(即Alt+ x shell Return)以在Emacs缓冲区中启动shell。键入C-u M-x shell RETM-1 M-x shell RET启动另一个Shell。您可以在每个外壳中运行一个程序,并根据需要在多个窗口中排列缓冲区。

¹ 有时据说它是一个比编辑器更好的OS,但是只有不使用它的人才知道–这只是个玩笑。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.