4

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

Y------------------------+
1 File contents          |
|                        |
|   +-X--------------+   |
|   |4|              |   |
|   |5| Visible area |   |
|   |6|              |   |
|   +-+--------------+   |
$    ^                   |
+----|-------------------+
     \
       line numbers

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

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

4

3 回答 3

2

这是一个不修改光标位置的解决方案:

winsaveview().leftcol
于 2020-10-23T07:50:13.840 回答
0

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

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

于 2012-10-24T10:20:34.980 回答
0

不幸的是,vim 没有更直接的方法来获得这个,但是下面的方法会起作用

let cursor_pos = getpos('.')
normal g0
let scroll_x = col('.')
setpos('.', cursor_pos)

诀窍是g0运动,它将光标移动到窗口的左侧,从那里我们可以得到当前的光标列。

于 2018-04-08T03:43:09.270 回答