在 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()
但是如果光标超过双倍宽度的字符,那么就会略微关闭。
答案 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)
动作,它将光标移动到窗口的左边,然后我们就可以获得当前的光标列。