【问题标题】:Can you make vi "advance" the screen when opened?打开时可以使vi“前进”屏幕吗?
【发布时间】:2010-10-12 10:40:55
【问题描述】:

我经常在 vi 中工作,暂停 vi,在 cli 上运行一些东西,然后 fg 回到 vi 以处理结果。例如,修复我运行 cli 命令时出现的错误。

但是,当我 fg vi 时,vi “擦除”当前终端缓冲区,我在回滚缓冲区中看不到终端输出的“最后一屏”。

vi(或屏幕,我使用屏幕)中有一些设置可以帮助我吗?

我在谷歌上搜索了很长时间没有答案。我也意识到还有其他工作流程可以解决这个问题,但它们并不完美(从 vi 内部运行意味着没有 shell 完成等)。

【问题讨论】:

    标签: vim scroll gnu-screen


    【解决方案1】:

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

    【讨论】:

    • 我同意。另一种选择是拆分屏幕,同时查看它们和它们之间的 ^A
    • 对于 Vim,:make 命令非常有用(尤其是在绑定到键 [组合] 时)。
    • 感谢您的想法,但正如我在原帖中所说,我的思想已经适应了“suspend-run-fg”的工作方式,而且我更喜欢在某些情况下这样做。我正在寻找不涉及不同工作流程的答案。反正我也想知道怎么控制这个词。
    【解决方案2】:

    我不能 100% 确定这是否会对您有所帮助,但 vim 会尝试恢复它在启动时找到的屏幕。我喜欢这种行为,并花了相当多的时间在一台机器上“修复”了 vim 安装,但它不起作用。

    我必须设置 t_tit_te 变量。我的直觉是你应该取消设置 t_te。

    【讨论】:

    • 我认为他使用的是普通 vi,而不是 Vim。
    • 我正在使用 vim。 (别名 vi=vim,很抱歉问题中的混淆)。这种方法听起来真的很有趣......我查看了这两个项目的帮助,但它有点超出我的驾驶室......坦率地说我不知道​​ termcap 是如何工作的等等......你会建议我使用什么确切的命令?
    • 这在我的 AIX 上不起作用。看着那个网页,我发现我可以用vim -T ansi myfile 之类的东西启动,这部分解决了“屏幕消失”的问题。不幸的是,使用 ansi,所有漂亮的颜色和其他功能都丢失了,因此治疗比问题更糟糕。
    【解决方案3】:

    在您对this answer 的评论中回答您的问题:它似乎实际上是t_ti 变量。在您的~/.vimrc 中添加一行内容:

    set t_ti=""
    

    您可以先在vim 中尝试,方法是在: 提示符下输入该命令。

    【讨论】:

    【解决方案4】:

    我不知道这是否会有所帮助,但是:这些天我使用 mac,但我曾经在 uni 使用 NetBSD 和 Linux。我总是觉得lessmanvi 等程序在退出时会清除屏幕。我可以在less 中使用-X 选项将其关闭,但这不是其他选项(字面意思)。

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

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

    【讨论】:

    • 在 Mac 上,我将 TERM 设置为 dtterm 以解决此问题。我认为他想做同样的事情,但屏幕是我不使用的东西。
    • 你说的是哪个xterm? Hardy Hardon 的 - 即 XTerm(229) 不接受 -xrw。另外less -X在AIX上也没有解决问题。
    【解决方案5】:

    将您的终端类型更改为 ansi 可以工作:

    :set term=ansi
    

    但我敢肯定会有一些负面影响。

    【讨论】:

    • 不太可能,如果在“屏幕”下运行。它拦截所有curses风格的TTY输出,并对输出重新排序。
    • 如果你按照你写的去做,那根本没有帮助。如果您在调用 vi 之前设置它,例如使用vim -T ansi whaterver-the-other-options-are,则问题部分解决(部分与我的回答相同:stackoverflow.com/questions/630519/…)。但解决方法比问题更糟糕,因为一些功能会被削弱(例如语法突出显示)
    【解决方案6】:

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

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

    vim-wrapper的内容(详见this answer):

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

    这将彻底解决屏幕消失的问题。不幸的是,当您在 vim 中编辑长文件时,它不能解决必须向上滚动很多的问题。但是,如果您在类似 xterm 中设置了足够大的缓冲区(我使用 gnome 终端 2.22.1),您就可以了。

    【讨论】:

      【解决方案7】:

      滚动屏幕 Ctrl+ECtrl+Y 可能会起到以下作用嗯。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-30
        • 2017-09-23
        • 2018-08-07
        • 2015-07-17
        • 1970-01-01
        • 1970-01-01
        • 2012-12-05
        • 1970-01-01
        相关资源
        最近更新 更多