vim 用光标滚动,只有底线移动,直到滚动一定数量的行(在 gnu 屏幕中)

vim 用光标滚动,只有底线移动,直到滚动一定数量的行(在 gnu 屏幕中)

Vim 问题,请注意,只有当我在 ubuntu 上打开 gnu 屏幕时,从 Mac 上 shell 时,并且仅在屏幕的顶部窗格中(底部窗格工作正常)时,才会发生这种情况。当我打开 mac 时,它不会发生screen。它不是屏幕中的屏幕。我确实安装了libncurses5

症状: 让我们以我的垂直分屏为例,目前它的 vim 行高为 22 行。因此,当我打开文件并将光标移到第 1 行,然后向下滚动到第 22 行时,一切正常,然后当我继续向下滚动时,仅最后一行发生变化(第 1-21 行永远不会改变,但在哪里第 22 行是,它正确地变为第 23 行)。这将持续到我到达第 37 行(例如,我只看到 1-21 和 37 行),然后当我再次向下滚动到第 38 行并停止时,我看到的是第 2-21 行(因为这些行向上移动了最后一个),但是我现在看到的是第 2-21,37 行,并且 45 现在变得可见。再次向下滚动,我看到 3-37,45,46,这种模式会重复,直到到达文件底部。

本质上我必须向下滚动 36 次才能使其显示 37,45-65,如果我再次向下滚动,页面最终看起来是正确的,显示线性 45-66。

如果我按 1g(转到第 1 行),我会再次看到 2-21,36,44。向上滚动不会将第 2 行替换为 1,但向下滚动 1 现在会显示 1,2,4-21,36,44。

本质上那里有一个 15 行缓冲区。

这只发生在 gnu 屏幕上。

我做了什么:

  • 切换 TERM=xterm-256color, ansi, screen-256color,没有帮助。
  • 将 .vimrc 重命名为 bak.vimrc,在没有 .vimrc 的情况下仍然会发生。

@roaima谢谢您的评论。我看到它是 48。此时我要更改什么?该窗格中只能容纳 22 行 Vim 行。 Vim 设置或终端设置哪一个不正确?

$ stty -a
speed 38400 baud; rows 48; columns 190; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O;
min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

$ echo $LINES
48```

I suspect the whole screen is 48 high, but there is a split pane in the middle.  For the bottom pane vim shows 18 lines (And works correctly also) 

Edit: I do notice that in a correct setup, e.g. when i run my screen layout on the mac, `stty -a` correctly reports `23` rows in screen, and `49` without screen running.  So it seems the lines arent being updated by screen on the ubuntu. 

How would I go about manually setting that in .vimrc, or .screen, or somewhere that it will take affect when I open screen?

答案1

终端中的行数概念 (37) 与实际 (22) 不同。通过运行stty -a应该echo $LINES可以找出原因。

要修复错误的行数,请将其设置为 22:

stty rows 22

如果echo $LINES之后仍然报错号码,

export LINES=22

作为两者的替代方案,您可以强制终端驱动程序正确识别线路;如果这有效,那么stty -aecho $LINES都会报告新更正的值:

kill -WINCH $$

相关内容