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

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



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

评论

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

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

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

这就是为什么我要寻找一种替代解决方案-完全禁用水平滚动。

我能想到的最接近的是如果您在终端机中,可以使用挂起终端机,以使屏幕不会更新。然后,您可以盲目地进行更改,然后返回到该行的开头,然后按继续。其他可能无济于事的选项:确保每个可见字符之间的隐藏字符数相同,或扩大窗口范围。

#1 楼

如何禁用水平滚动

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

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


这防止了通过再次滚动至非常精确的方法向右滚动。*

*因为我不知道要走多远您已向右滚动或您的行有多长,我正在任意滚动99个半屏宽度的“远”量。还请注意,在向左滚动“返回”之前,我不会费心检查您是否实际上已向右滚动。如果您确实打算使用此解决方案,则可能需要比较getcurpos()'sidescroll''columns'的值来解决问题。

为什么不想这样做

之所以不使用它,是因为滚动问题是另一个问题:Vim不允许您将光标移出“屏幕外”。因此,如果以某种方式向左滚动,使光标在滚动后不在屏幕上,则Vim会很有帮助地将光标与之一起移至左侧。

但是由于计算它用于确定光标是否在屏幕上与用于确定是否滚动原始问题的光标相同,其最终效果是,如果尝试将光标向右移动,则有了此“解决方案”在通常会导致横向滚动的情况下,现在光标根本不会移动。**


其他选项吗?

所以我担心您计划的解决方法不会成功。如果您想要一个可行的解决一般问题的方法,则需要在Vim源代码中实现。

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

基于未隐藏的输出和文档中对vim-plugin-AnsiEsc的提及,这可能是它们可以实现的,但是很难确定如果没有有关插件功能的知识。

#2 楼

如果您有编辑文件的方法,则可能要用\[\]包装颜色设置,如此处所述:


[...]将'\ 033 [1; 33m“括起来,以'['和']'黄色开始,这告诉外壳程序“这些转义的方括号之间的所有内容,包括括号本身,都是非打印字符[... ]


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

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

评论


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

–丰富
19-10-2在12:59

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

– Padawin
19-10-2在14:14

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

–丰富
19-10-2在15:35

#3 楼

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

原始答案:

我的vim直到光标移到屏幕边缘时才水平滚动。

您在使用sidescrolloff吗?此设置应使其等待,直到光标离开边缘为止:

:set sidescrolloff=0


评论


即使使用“ sidescrolloff = 0”,该问题也仍然存在,因为Vim认为光标已经偏离边缘:它的计算基于未隐藏的文本,而不是可见的文本。

–丰富
19-10-2在12:58

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

–JasonWoof
19-10-4在3:15

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

–JasonWoof
19-10-4在3:19

是的,这真是令人讨厌,但是该错误报告是OP提出此问题以寻求解决方法的原因!

–丰富
19-10-4在8:55