如何禁用水平滚动?


37

我在缓冲区中有一些隐藏的字符,水平滚动会浪费大量时间。

有什么方法可以禁用它吗?我找不到任何相关选项。

水平滚动演示不正确

编辑:演示已添加。您会看到vim将滚动偏移量基于该文件的未隐藏部分,因此,分配终止。


6
您不能禁用它,但是可以:set wrap
EvergreenTree

8
@Enuy,我的意思是,线实际上是比窗口宽度,但一些文本(bash类似的颜色代码)被隐藏。因此,Vim认为它已经到达了窗口的边缘,但从视觉上看还没有到达。我会说这是一个错误。
tommcdo 2015年

8
@tommcdo是的,我明白您的意思。如果仅在行的末尾隐藏部分才是导致包裹的原因,并且包装线存在类似的问题,并且从Bram获得了WONTFIX:code.google.com/p/vim/issues/detail?
id=260

3
这就是为什么我在寻找替代解决方案-完全禁用水平滚动。
2015年

3
我能想到的最接近的是,如果您在终端机中,则可以使用它<c-s>来挂起终端机,以便屏幕不会更新。然后,您可以盲目地进行更改,然后返回到该行的开头,然后单击<c-q>以恢复。其他可能无济于事的选项:确保每个可见字符之间的隐藏字符数相同或扩大窗口。
马特·博姆

Answers:


2

如何禁用水平滚动

我已经写了一个禁用水平滚动的解决方案(通过取消@ЯрославРахматуллин的建议),但是我认为您不会喜欢它:

augroup NoScrollPlease
  autocmd!
  autocmd CursorMoved * norm!99zH
augroup END

这样可以防止通过再滚动一次的极其精确的方法向右滚动。*

*因为我不知道您向右滚动了多远或行的长度,所以我正在随意滚动99个半屏宽度的“远”量。还要注意,在向左滚动“返回”之前,我不会费心检查您是否实际上已经向右滚动。如果你确实要使用此解决方案,您可能想通过比较值敲东西了getcurpos()'sidescroll''columns'

为什么你不想这样做

您将不使用此功能的原因是滚动问题的根本原因是另一个问题:Vim不允许您将光标“移出屏幕”。因此,如果以某种方式向左滚动,使光标在滚动后不在屏幕上,则Vim会帮助将光标与光标一起移动并将其向左移动。

但是,由于它用于确定光标是否在屏幕上的计算与用于确定是否滚动到原始问题的计算相同,因此最终结果是,如果尝试移动此“解决方案”,在通常会导致横向滚动的情况下,将鼠标指针移至右侧,现在光标根本无法移动。**

**为了更加精确,根据当前位置和移动,光标可能会向右移动;它只是不会移动到通常会发生滚动的位置。

还有其他选择吗?

因此,恐怕您计划的解决方法不会成功。如果您想要一个可行的解决一般问题的方法,则需要在Vim源代码中实现。

正如您已经指出的那样,这不太可能很快出现,因此,对于gif中显示的问题的特定实例,最好的解决方法是最好的方法是请插件作者停止conceal完全使用它,而改为从缓冲区中完全删除隐藏的文本。

基于隐蔽的输出和文档中提到的内容vim-plugin-AnsiEsc,这可能是他们可以实现的,但是如果不了解插件的功能,很难确定。


0

如果你有办法来编辑文件,你可能想换颜色设置与\[\],按照说明在这里

[...]要做的是将'\ 033 [1; 33m”括在'['和']'中以黄色开头的颜色,这告诉外壳程序“这些转义的方括号之间的所有内容,包括括号本身,是非印刷字符[...]

否则,整个颜色代码将被视为字符,因此可能需要考虑水平滚动。

我不确定这是问题所在,但是看到日历的来源(带有syntax off)和当前行为,让我想到了这一点。


问题不在于颜色,而在于特征隐藏的字符conceal(请参阅注释中的讨论)。
Rich

是的我明白。也许有些事情我不太了解,但是在bash中我遇到了类似的问题,即PS1使用了颜色字符(事实上它们是颜色并不重要),并且终端无法正确返回新行位置,因为它将颜色中的字符算作有效字符,而由于它们不可见,因此必须忽略它们。动画使我想起了这个问题(水平分页“太早”完成了,好像它是根据行中字符数来完成的,这就是我答案中链接中提到的内容)。
padawin

我同意,这两个问题相似。但是出现此问题的行为是由于Vim计算字符(不是终端)的方式所致,所以恐怕您在第一段中提出的建议对此无济于事。
Rich

0

编辑:这是一个已知的错误,已关闭“无法修复”:https : //github.com/vim/vim/issues/260

原始答案:

我的vim不会水平滚动,直到光标到达屏幕边缘为止。

您正在使用sidescrolloff吗?

我不知道完全禁用水平滚动,但是此设置应使其等待光标离开边缘:

:set sidescrolloff=0

即使这样,问题仍然存在,'sidescrolloff=0'因为Vim认为光标已经超出边缘:它的计算基于未隐藏的文本,而不是可见的文本。
Rich

哦,那确实是越野车。我发现了有关此问题的错误报告,并将其添加到我的答案中。vim维护者不想修复它。
JasonWoof

无法解决此错误...但是,您可以在缓冲区中使用纯文本来实现日历着色,并为color / etc实现prop_type_add()和prop_add()。
JasonWoof

是的,这真是令人讨厌,但是该错误报告是OP提出此问题以寻求解决方法的原因
Rich
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.