vim 屏幕内:缩进显示不正确

vim 屏幕内:缩进显示不正确

当我在 unix 屏幕外使用 vim 编辑文件时,vim 正确显示该文件。然而,当我在 unix 屏幕内打开同一个文件时,缩进“似乎”变得混乱。

我说“似乎”是因为缩进实际上是正确的(如果您在第二张图像中看到突出显示的光标,它实际上位于正确的行首)

这里可能有什么问题?

编辑:不仅仅是我的文件,甚至 vim 消息也看起来很混乱 在此输入图像描述 我已经尝试了所有可能的方法,还在屏幕代码中更改了 CRLF 代码,但无法摆脱这个问题。最后改用tmux,效果还不错。

外屏: 外屏

内屏: 内屏

答案1

图片似乎显示了这些功能在职的

  • 颜色(也许)
  • 光标寻址 (某物将光标移动到正确的位置)
  • 选项卡(未知:如果终端声称支持硬件选项卡但根本不支持,则第二行将从左边距开始)

但第二行就是问题所在。 Vim 可以尝试将光标从大括号处直接向下移动(使用换行符),然后得到回车/换行符。这可以解释这个空间,vim 做了这种类型的优化screen.c

    else if (plan == PLAN_NL)
    {
        if (noinvcurs)
        screen_stop_highlight();
        while (screen_cur_row < row)
        {
        out_char('\n');
        ++screen_cur_row;
        }
        screen_cur_col = 0;
    }

在你的stty设置,那就是onlcr

 onlcr (-onlcr)
             Map (do not map) NL to CR-NL on output.

这似乎是正常关闭的。您的其中一项stty设置可能会混淆 vim(或屏幕),因此结果如图所示。

例如,在快速检查中我这样做了(使用文字制表符)

$ stty ocrnl
$ cat >foo
$ cat >foo <<EOF
if(a) {
        /*then b */
}
EOF
$ vim foo

并看到这个(证明 vim 可能会被设置混淆ocrnl):

if(a) {
        /*then b */

                   }

但是然后(退出 vim)并且

$ stty -ocrnl
$ vim foo

节目

if(a) {
        /*then b */
}

就其价值而言,vi-like-emacs 在这种情况下做了正确的事情。

相关内容