你能让vi在打开时“自动滚屏”吗?

4
我经常使用vi编辑器,先暂停vi,运行cli上的一些命令,然后fg回到vi中处理结果。例如,修复运行cli命令时出现的错误。
但是,当我从fg回到vi时,vi会“清除”当前终端缓冲区,因此我无法在滚动缓冲区中看到“最后一屏”的终端输出。
在vi(或screen,我使用screen)中是否有某种设置可以解决这个问题?
我在谷歌上搜了很久都没有答案。我也意识到还有其他的工作流可以解决这个问题,但它们并不完美(比如在vi内部运行就无法使用shell完成等)。
7个回答

8
如果你正在使用 screen,那么在一个窗口中进行编辑,在另一个窗口中进行编译,然后只需使用 ^A[n] 序列在终端输出和代码屏幕之间切换是有意义的。

我同意。 另一种选择是分割屏幕,同时查看并在它们之间使用^A<Tab>。 - Andy
1
对于Vim来说,:make命令非常有用(尤其是当绑定到一个键[组合]时)。 - strager
谢谢您的建议,但正如我在原帖中所说,我的思维已经习惯了“挂起-运行-fg”工作方式,并且在某些情况下我更喜欢这种方式。我正在寻找一个不涉及不同工作流程的答案。我还想知道如何控制终端。 - apinstein

2

回答你在 这个回答 中评论中提到的问题:实际上似乎是 t_ti 变量。在你的 ~/.vimrc 文件中添加一行:

set t_ti=""

你可以在vim中输入该命令,以在:提示符处首先尝试它。


这对我的设置没有任何影响(vim 7.0,AIX 5.3和$TERM设置为aixterm - 除了.vimrc之外无法更改任何内容)。另请参见:https://dev59.com/pHI-5IYBdhLWcg3wlpaW - Davide

2
我不确定这是否会对你有所帮助,但vim试图恢复它启动时发现的屏幕。我喜欢这种行为,并花了很多时间在一台无法正常工作的机器上“修复”vim安装。
我必须设置t_tit_te变量。我的直觉是你应该取消t_te的设置。

我认为他正在使用普通的vi,而不是Vim。 - strager
我正在使用vim(别名vi=vim,抱歉在问题中混淆了)。这种方法听起来非常有趣... 我查看了这两个项目的帮助文档,但它超出了我的专业领域...坦白地说,我不知道termcap是如何工作的等等... 你建议我使用哪些确切的命令? - apinstein
这在我的AIX上不起作用。看了那个网页,我发现可以使用类似 vim -T ansi myfile 的东西启动,这部分解决了“屏幕被擦掉”的问题。不幸的是,使用ansi会失去所有漂亮的着色和其他功能,所以治疗比问题更糟糕。 - Davide

1

我不知道这是否有帮助,但是:我现在使用的是Mac,但在大学时我曾使用NetBSD和Linux。当时总是很烦恼像lessmanvi等程序退出时会清除屏幕。我可以通过-X选项在less中关闭它,但对于其他程序来说这不是一个选项。

我在xterm中找到了一个配置设置,解决了我的问题。我不记得选项是什么了;它可以通过其中一个菜单或者-xrw命令行选项获得。

显然,只有在使用xterm时才有用。


在 Mac 上,我将 TERM 设置为 dtterm 来解决这个问题。我认为他想做同样的事情,但是使用 screen,这是我不用的东西。 - Craig S
你在说哪个xterm?Hardy Hardon的那个 - 即XTerm(229)不接受-xrw。此外,在AIX上,less -X也无法解决这个问题。 - Davide

0

这不是一种解决方案,而是我刚开始使用的一个好的变通方法。创建以下vi包装脚本(我将其放在我的~/bin/vim-wrapper中),并可能使用类似以下命令别名:

alias vi='~/bin/vim-wrapper'

vim-wrapper的内容(有关详细信息,请参见此答案):

#!/bin/bash
LINES=$(tput lines)
for i in `seq 1 $LINES`; do
    echo $i
done
vim $@

这将完全解决屏幕被清空的问题。不幸的是,它并不能解决在vim中编辑长文件时需要向上滚动相当多的问题。但是,如果您在类似于xterm的终端(我使用gnome terminal 2.22.1)中设置足够大的缓冲区,那么就没问题了。


0

将终端类型更改为ansi可能会起作用:

:set term=ansi

但我相信一定会有一些负面影响。


如果在“screen”下运行,则不太可能。它会拦截所有类似于curses的TTY输出,并重新排序输出。 - Alnitak
如果按照你所写的去做,这完全没有帮助。如果在调用vi之前设置它,例如使用vim -T ansi whaterver-the-other-options-are,那么问题就部分解决了(部分解决的意义与我的回答相同:https://dev59.com/pkbRa4cB1Zd3GeqP4NQc#1783816)。但是治标不治本,因为会破坏多个功能(例如语法高亮)。 - Davide

0

有可能通过滚动屏幕 Ctrl+ECtrl+Y 也能解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接