如果我不在会话中screen
,那么退出 Vim 时,VIM 窗口的剩余部分下方会出现一个 bash 提示符。这样做的副作用是我的回滚缓冲区被破坏,特别是当我在 VIM 中翻阅了一个长文件时。只有当我不在窗口screen
中时才会出现此问题,screen
VIM 退出后会像以前一样显示 bash 提示符和前面的行。
我尝试添加set
t_ti=
t_te=
对我来说.vimrc
,修复这个问题的唯一效果就是破坏了 VIM,导致问题在内部screen
和外部都发生。因此,我删除了该行。
为充分起见,我确实altscreen on
有.screenrc
。
这是在 Ubuntu Server 12.04.1 LTS 上,带有 Bash 4.2.24、Screen 4.00 和 VIM 7.3(不是 vim-tiny),在 Windows 7 笔记本电脑上的 Cygwin 版本 NT-6.1-WOW64 中通过 SSH 访问。
谢谢。
编辑:请注意,在相同的 Cygwin 安装中,我可以通过 SSH 进入不同的服务器 (CentOS),并且 VIM 不会破坏回滚缓冲区。因此,我并不怀疑 Cygwin 存在问题。CentOS 机器没有安装屏幕,我不需要添加set t_ti= t_te=
到.vimrc
。
答案1
您不应该取消设置 t_ti 和 t_te,或者只在必要时取消设置。来自 vim 帮助:
对于正常编辑,终端将进入“原始”模式。用“t_ti”和“t_ks”定义的字符串将发送到终端。通常,这会使终端处于 termcap 代码有效的状态并激活光标和功能键。当 Vim 退出时,终端将恢复到 Vim 启动之前的模式。用“t_te”和“t_ke”定义的字符串将发送到终端。
我相信你的问题只是: - 你取消了这些设置(请删除设置这些的行和/或 - vim 无法识别(或不知道使用的 termcaps)你正在使用的终端
我建议:
- 删除 vimrc 中的“set t_ti= t_te=”部分
- 然后尝试不同的终端:例如,要使用“xterm”作为 TERM 来测试 vim,您可以输入(从您的 bash 提示符中):
TERM=xterm vim
(在同一行上,如图所示,且分配位于命令之前)
当您找到一个在 vim 中正确显示并且 vim 知道的组合(因此可以正确设置终端序列)时,它应该可以工作。除非您覆盖 vim 资源文件中的终端序列,或者如果有其他选项强制它在退出时清除终端。
对上述内容的解释:在 bash(以及 sh 和其他程序)中,在命令之前设置变量将使该命令将该变量设置为该值,并且在命令退出后不会影响变量的值。例如:
bash-2.05b$ echo $TERM
xterm
bash-2.05b$ TERM=vt100 ls -F
this/ this.tar
bash-2.05b$ echo $TERM
xterm
(仅在 ls 调用期间 TERM=vt100)(尝试不同的 TERM 值很好)