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

时间:2012-10-24 05:20:13

标签: vim

visible area 所代表的下面的vim窗口中,如何从函数中获取X相对于Y的水平位置?< / p>

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

例如,X相对于Y垂直位置为4,因为窗口向下滚动了四行。我可以将此作为带有line("w0") - 1的零基索引。

我如何确定窗口在给定时刻向右滚动多少列?我已经尝试了virtcol(".") - wincol()但是如果光标超过双倍宽度的字符,那么就会略微关闭。

3 个答案:

答案 0 :(得分:1)

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

winsaveview().leftcol

答案 1 :(得分:0)

如果您希望数字列宽使用max([len(line('$')), &numberwidth])+1

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

答案 2 :(得分:0)

很遗憾vim没有更直接的方法来获得这个,但以下方法将有效

gem install nokogiri

技巧是let cursor_pos = getpos('.') normal g0 let scroll_x = col('.') setpos('.', cursor_pos) 动作,它将光标移动到窗口的左边,然后我们就可以获得当前的光标列。