我正在尝试找出 bash(或 vim)功能是什么。情况如下。我在 bash 终端中,然后使用 vim 编辑一些内容,然后退出回到 bash。在某些终端中,vim 会话屏幕会消失,显示之前的 bash shell 活动(这是我想要的?)。
在其他情况下,vim 会话屏幕缓冲区会保留(隐藏旧的 bash shell 活动)。我必须清除屏幕,或者等到我的 bash 活动将 vim 会话缓冲区推出屏幕。
我如何控制此行为以用以前的 bash 活动替换 vim 会话缓冲区?
谢谢蒂姆
答案1
当会话开始时,Vim 会向终端发送t_ti
和,当会话结束时,Vim 会向终端发送 和 。和序列会导致终端切换到其备用屏幕。t_ks
t_te
t_ke
t_ti
t_te
在您的~/.vimrc
文件中,您可以vim
通过包含以下行来使文档退出时留在屏幕上:
set t_ti=""
如果有类似的行,删除它应该会使退出时出现以前的终端内容vim
。
答案2
~/.bash_profile
每次登录时,只需在文件中添加一行即可将 TERM 导出为 xterm。请按如下方式操作;
echo "TERM=xterm; export TERM" >> ~/.bash_profile
现在,您下次登录时,您的问题将得到解决,如果您不想重新登录,您可以执行以下其中之一...
// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile
答案3
导致此问题的原因可能是使用该程序screen
。我发现当我处于screen
会话中时,vim 无法返回终端状态。
不确定它是否特定于屏幕或 Ubuntu 15.10 中的屏幕/vim 组合。与上面描述的原因相同,我猜screen
有不同的 termcap。
答案4
Tim。以上两个答案都是正确的。如果在 $TERM 的 termcap 条目中定义了此功能,Vim 会将终端切换到“备用屏幕”。
您说“在某些终端(...它运行正常...)”和“在其他终端(...它运行不正确...)”
您是否对所有这些终端运行完全相同的终端仿真器?
例如,在我家的 Linux 机器上,我有 gnome-terminal、xterm、Konsole、yakuake,可能还有一些我忘记了的,还有与 ctrl-alt-F1...ctrl-alt-F6 等相关的“虚拟终端”。其中大多数都可以与“xterm”的“标准”termcap 条目一起使用 - 除了具有名为“linux”的终端定义的虚拟终端。
检查终端仿真器本身以及正常工作的终端和不正常工作的终端上的 $TERM 值,看看有什么不同。此外,如果您有时以不同的用户身份登录,这可能是问题的核心 - 因为每个用户都有自己的 .bashrc,因此各种设置可能因用户而异。
希望有帮助!
-pbr