我经常在 vi 中工作,暂停 vi,在 cli 上运行一些东西,然后 fg 回到 vi 以处理结果。例如,修复运行 cli 命令时出现的错误。
但是,当我 fg vi 时,vi “擦除”当前终端缓冲区,并且在回滚缓冲区中看不到终端输出的“最后一屏”。
vi(或屏幕,我使用屏幕)中有一些设置可以帮助我吗?
我在谷歌上搜索了很长时间,没有答案。我也意识到还有其他工作流程可以解决这个问题,但它们并不完美(从 vi 内部运行意味着没有 shell 完成等)。
我经常在 vi 中工作,暂停 vi,在 cli 上运行一些东西,然后 fg 回到 vi 以处理结果。例如,修复运行 cli 命令时出现的错误。
但是,当我 fg vi 时,vi “擦除”当前终端缓冲区,并且在回滚缓冲区中看不到终端输出的“最后一屏”。
vi(或屏幕,我使用屏幕)中有一些设置可以帮助我吗?
我在谷歌上搜索了很长时间,没有答案。我也意识到还有其他工作流程可以解决这个问题,但它们并不完美(从 vi 内部运行意味着没有 shell 完成等)。
如果您正在使用,那么在一个窗口中进行编辑,在另一个窗口中进行编译,然后只使用序列在终端输出和代码屏幕之间screen
切换肯定是有意义的吗?^A[n]
我不知道这是否会有所帮助,但是:这些天我使用 mac,但我曾经在 uni 使用 NetBSD 和 Linux。less
像, man
,vi
等这样的程序在退出时会清除屏幕总是让我感到困扰。less
我可以使用该选项将其关闭-X
,但这不是其他选项(字面意思)。
我发现一个配置设置xterm
为我解决了这个问题。恐怕我不记得那个选项了;它可以通过其中一个菜单获得,我认为是通过-xrw
命令行选项。
显然,这只有在您使用xterm
.
滚动屏幕Ctrl+E或 Ctrl+Y也可能起到作用。
将终端类型更改为 ansi 可以工作:
:set term=ansi
但我确信有一些负面影响。
这不是一个解决方案,而是一个很好的解决方法,我刚刚开始使用。为 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 终端 2.22.1),您就可以了。