vi / vim在窗口内取消缓冲区移动


11

:set wrap在vi / vim中使用时,即使将光标移动到新行(即使通过显示行(gj / gk)而不是实际行(j)在文件中导航),整行换行的内容也将被放置在显示缓冲区中。 / k)。例如,如果一条线被5条屏幕线环绕,并且当前在显示缓冲区之外,则导航到该行以使整个行适合屏幕时,缓冲区将跳5条线。有没有一种方法可以禁用此行为?请注意,set display+=lastline当通过将一条换行的行从屏幕移开而被迫离开屏幕时,将允许显示部分行,但这不能解决在导航到最初位于缓冲区外的行时发生的缓冲区跳转。

澄清:如果上面的描述含糊不清,则要点是,我希望能够在启用换行的情况下在vim中平滑滚动,这样行将部分显示在屏幕外,而不必全部显示。


1
您能否确认您的意思是:您希望线的包裹部分的一部分不显示并能够平滑滚动?'wrap'恐怕Vim 会在完全打开时显示行
Benoit

精确地 我认为没有办法覆盖滚动时完整显示换行的行为吗?谢谢。
user001

1
不,我知道。尽管等待答案,但没人知道Vim可以做什么。
Benoit

1
同意@Benoit。据我所知不可能。
Fredrik Pihl

1
当前,有关该主题的vim_dev邮件列表上有讨论。看来您不是唯一一位接受此请求的人。
兰迪·莫里斯

Answers:


1

不是一个完整的答案,但可能是领先者。有scroll选择。该选项的帮助包括:

{Vi有点不同:“滚动”提供屏幕行数而不是文件行数,当换行时有所不同}


谢谢,这是有帮助的。<Ctrl-E>(向下)和<Ctrl-Y>(向上)组合键提供了我想要的基本行为。如果有一种方法可以检测光标是在窗口的顶部还是底部,那么一种临时解决方案是将向上和向下箭头键有条件地映射到<Ctrl-Y> gk和<Ctrl-E> gj,分别。当光标不在窗口的顶部或底部时,则需要将它们映射到gk和gj(条件语句中的else语句)。有没有一种简单的方法来检测光标是在当前窗口的顶部还是底部?
user001

0

在正常模式下,可以使用gkgjg<up>g<down>)在换行显示的部分之间跳转。该vim Wiki页面介绍了如何永久更改行为。


1
当然,我已经将这些行为映射到了方向箭头键。但是,这与导航到该行时必须显示的整个换行不同。此行为与gj / gk或j / k的使用无关。我希望能够部分导航到最初不在缓冲区内(不在屏幕上)的行,而不会显示整个包裹的行。
user001

好,那我误会了。好吧,我想您的行要么被包裹,要么没有被包裹。您想要的介于两者之间,但我认为这根本不可能。
jpjacobs 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.