如何确定vim中的水平滚动位置

ant*_*tak 5 vim

在下面由 表示的 vim 窗口中,如何从函数中visible area获取X相对于 的水平位置?Y

Y------------------------+
1 File contents          |
|                        |
|   +-X--------------+   |
|   |4|              |   |
|   |5| Visible area |   |
|   |6|              |   |
|   +-+--------------+   |
$    ^                   |
+----|-------------------+
     \
       line numbers
Run Code Online (Sandbox Code Playgroud)

例如,相对的垂直位置是四,因为窗口中向下滚动四行。我可以将其作为从零开始的索引。XYline("w0") - 1

我如何确定在给定时刻窗口向右滚动了多少列?我已经尝试过virtcol(".") - wincol(),但如果光标位于双角字符上,那么仅此一点就会稍微偏离。

ZyX*_*ZyX 0

如果您想要数字列宽度,请使用max([len(line(\'$\')), &numberwidth])+1.

\n\n

\xe2\x80\x9水平位置\xe2\x80\x9d 是什么意思?wincol()是窗口中的水平位置,col(".")是距行开头的字节偏移量,strchars(getline(\'.\')[:(col(\'.\')-1)])是距行开头的 unicode 代码点数,len(split(getline(\'.\')[:(col(\'.\')-1)], \'.\\@=\'))是距行开头的字符数。

\n