让 vim 使用备用屏幕

让 vim 使用备用屏幕

这件事让我抓狂。我已经在互联网和 SE 上搜索过,发现了很多相关问题,但没有一个能解决我的问题。

我在 tmux 中使用 Zsh。直到几天前一切都运行良好,但现在当我退出 vim 时,缓冲区的内容仍保留在屏幕上。我不想这样。我通过传递-X选项在 less 上获得了这种行为。问题是 vim 终端配置看起来很好:

:set t_ti?t_ti=^[[?1049h :set t_te?t_te=^[[?1049l

tmux 的alternate-screen选项是on

我不知道现在该看哪里。

仅供参考,这是我的点文件:https://github.com/fuadsaud/JARVIS

答案1

首先,这些t_tit_te设置看起来不错。

但要检查一下显而易见的事情(抱歉)......

当您说 时^[,这必须是一个控制字符 (Escape),而不是两个字符 (^[)。我不确定如何在 vim 中具体检查这一点,但在我的 vim 上,:set t_ti? 它以不同的颜色显示^[,这有点表明它是一个控制字符。

另外,您没有提到您正在运行什么终端仿真器和平台。它可能有影响,您应该将其与 vim 和 tmux 的版本一起放在您的问题中。但是,如果您说您已经可以使用命令less(没有 -X分别),那么这表明您的终端仿真器和 tmux 设置是正确的,而我怀疑是 vim 的问题。

确认如下(记住^[必须输入作为控制字符,例如Ctrl-v后跟Escape):

less /etc/hosts         # should use alternate screen (desired)

less -X /etc/hosts     # should leave it's output on screen (undesired)

echo -n "^[[?1049h"; less -X /etc/hosts; echo -n "^[[?1049l"
    # should use alternate screen (desired)

如果最后一条命令使用 less 给出了所需的行为。尝试使用 vim 采取同样的方法:

echo -n "^[[?1049h"; vim /etc/hosts; echo -n "^[[?1049l"
    # should use alternate screen (desired)

退出 vim 后,屏幕应该恢复到之前的内容(您想要的行为)。如果是这样,那么您可以使用别名或包装器脚本来组合一个非常笨拙的解决方法。但是,如果您在诊断中到达这个阶段,那么几乎肯定是 vim 或其部分配置存在问题,在退出时没有发送 t_te 序列,我首先将 .vimrc 和 .vim 移开,然后使用干净的配置进行测试:

cd
mv .vimrc .vimrc-safe
mv .vim .vim-safe

然后是二进制切割时间,这应该很有趣。:-) 希望这会有所帮助。

相关内容