退出后如何用以前的bash活动替换vim屏幕缓冲区?


14

我试图找出什么是bash(或vim)功能。这是场景。我在bash终端中,然后用vim编辑一些内容,然后返回bash。在某些终端中,vim会话屏幕消失,以显示先前的bash shell活动(这就是我想要的?)。

在其他情况下,vim会话屏幕缓冲​​区仍然保留(隐藏了旧的bash shell活动)。我将不得不清除屏幕,或者等到我的bash活动将vim会话缓冲区推出屏幕。

如何控制此行为,以将Vim会话缓冲区替换为以前的bash活动?

谢谢蒂姆


Answers:


10

VIM发送t_tit_ks向所述终端当会话被启动和t_tet_ke何时结束。的t_tit_te原因的末端序列切换到其备用屏幕。

~/.vimrc文件中,您可以vim通过包含以下行使退出时在屏幕上保留文档:

set t_ti=""

如果您有与之类似的行,将其删除应使退出时显示先前的终端内容vim


4

导致此问题的原因可能是使用该程序screen。我发现在screen会话中vim无法返回终端状态。

不知道它是特定于屏幕还是Ubuntu 15.10中的screen / vim组合。与上述原因相同,我猜screen有不同的termcap。


2
添加altscreen on到〜/ .screenrc文件可解决屏幕问题。
BartBiczBoży

3

只需在您的~/.bash_profile文件中添加一行,即可在每次登录时将TERM导出为xterm。进行如下操作;

echo "TERM=xterm; export TERM" >> ~/.bash_profile

现在,下次您登录时,您的问题将得到解决,如果您不想重新登录,则可以执行以下一项操作:

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile

1
那不是export $TERM吗?
chrsblck 2014年

1
@chrsblck:否,因为export将名称(例如,TERM在这种情况下)导出为环境变量而不是局部变量。如果export $TERM在此示例中使用过,那么$TERMvar将解析为xterm您将设置env var $xterm,可能未定义。不过,这是一个好问题,我也总是觉得这是错的。
ekerner 2014年

2

蒂姆 以上两个答案都是正确的。如果$ TERM的termcap条目中定义了执行此操作的功能,则Vim会将终端切换到“备用屏幕”。

您说“在某些终端中(...工作正常...)”和“在其他终端中(...工作正常...”)

您是否为所有这些终端运行完全相同的终端仿真器?

例如,在我的家用Linux机器上,我拥有gnome-terminal,xterm,Konsole,yakuake,也许还有一些我已经忘记的东西,以及与ctrl-alt-F1相关的“虚拟终端” ... ctrl-alt-F6左右。其中大多数可以与“ xterm”的“标准” termcap条目一起使用-虚拟终端除外,虚拟终端的终端定义为“ linux”。

检查终端仿真器本身以及在工作的终端和不工作的终端上的$ TERM值,以了解有什么不同。另外,如果您有时以其他用户身份登录,这可能是问题的核心-由于每个用户都有自己的.bashrc,因此不同的设置可能因用户而异。

希望有帮助!
-pbr


1

这与您的终端以及处理终端信息的机器设置有关。一种便携式解决方案是使用GNU屏幕。为Vim打开一个窗口,为Bash打开另一个窗口,从而将两个会话分开。如果您使用的是图形终端,例如X11上的xterm,Gnome上的Gnome Terminal或OS X上的Terminal.app,则可以打开新窗口或标签来获得相同的效果。

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.