我在缓冲区中有一些隐藏的字符,水平滚动会浪费大量时间。
有什么方法可以禁用它吗?我找不到任何相关选项。
编辑:演示已添加。您会看到vim将滚动偏移量基于该文件的未隐藏部分,因此,分配终止。
<c-s>
来挂起终端机,以便屏幕不会更新。然后,您可以盲目地进行更改,然后返回到该行的开头,然后单击<c-q>
以恢复。其他可能无济于事的选项:确保每个可见字符之间的隐藏字符数相同或扩大窗口。
我在缓冲区中有一些隐藏的字符,水平滚动会浪费大量时间。
有什么方法可以禁用它吗?我找不到任何相关选项。
编辑:演示已添加。您会看到vim将滚动偏移量基于该文件的未隐藏部分,因此,分配终止。
<c-s>
来挂起终端机,以便屏幕不会更新。然后,您可以盲目地进行更改,然后返回到该行的开头,然后单击<c-q>
以恢复。其他可能无济于事的选项:确保每个可见字符之间的隐藏字符数相同或扩大窗口。
Answers:
我已经写了一个禁用水平滚动的解决方案(通过取消@ЯрославРахматуллин的建议),但是我认为您不会喜欢它:
augroup NoScrollPlease
autocmd!
autocmd CursorMoved * norm!99zH
augroup END
这样可以防止通过再滚动一次的极其精确的方法向右滚动。*
*因为我不知道您向右滚动了多远或行的长度,所以我正在随意滚动99个半屏宽度的“远”量。还要注意,在向左滚动“返回”之前,我不会费心检查您是否实际上已经向右滚动。如果你确实要使用此解决方案,您可能想通过比较值敲东西了getcurpos()
,'sidescroll'
和'columns'
。
您将不使用此功能的原因是滚动问题的根本原因是另一个问题:Vim不允许您将光标“移出屏幕”。因此,如果以某种方式向左滚动,使光标在滚动后不在屏幕上,则Vim会帮助将光标与光标一起移动并将其向左移动。
但是,由于它用于确定光标是否在屏幕上的计算与用于确定是否滚动到原始问题的计算相同,因此最终结果是,如果尝试移动此“解决方案”,在通常会导致横向滚动的情况下,将鼠标指针移至右侧,现在光标根本无法移动。**
**为了更加精确,根据当前位置和移动,光标可能会向右移动;它只是不会移动到通常会发生滚动的位置。
因此,恐怕您计划的解决方法不会成功。如果您想要一个可行的解决一般问题的方法,则需要在Vim源代码中实现。
正如您已经指出的那样,这不太可能很快出现,因此,对于gif中显示的问题的特定实例,最好的解决方法是最好的方法是请插件作者停止conceal
完全使用它,而改为从缓冲区中完全删除隐藏的文本。
基于隐蔽的输出和文档中提到的内容vim-plugin-AnsiEsc
,这可能是他们可以实现的,但是如果不了解插件的功能,很难确定。
如果你有办法来编辑文件,你可能想换颜色设置与\[
和\]
,按照说明在这里:
[...]要做的是将'\ 033 [1; 33m”括在'['和']'中以黄色开头的颜色,这告诉外壳程序“这些转义的方括号之间的所有内容,包括括号本身,是非印刷字符[...]
否则,整个颜色代码将被视为字符,因此可能需要考虑水平滚动。
我不确定这是问题所在,但是看到日历的来源(带有syntax off
)和当前行为,让我想到了这一点。
conceal
(请参阅注释中的讨论)。
编辑:这是一个已知的错误,已关闭“无法修复”:https : //github.com/vim/vim/issues/260
原始答案:
我的vim不会水平滚动,直到光标到达屏幕边缘为止。
您正在使用sidescrolloff
吗?
我不知道完全禁用水平滚动,但是此设置应使其等待光标离开边缘:
:set sidescrolloff=0
'sidescrolloff=0'
因为Vim认为光标已经超出边缘:它的计算基于未隐藏的文本,而不是可见的文本。
:set wrap