Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定vim中的水平滚动位置_Vim - Fatal编程技术网

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

如何确定vim中的水平滚动位置,vim,Vim,在下面的vim窗口中,由可见区域表示,如何从函数中获取X相对于Y的水平位置 Y------------------------+ 1 File contents | | | | +-X--------------+ | | |4| | | | |5| Visible area | | | |6| | | | +-+--------------+

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

Y------------------------+
1 File contents          |
|                        |
|   +-X--------------+   |
|   |4|              |   |
|   |5| Visible area |   |
|   |6|              |   |
|   +-+--------------+   |
$    ^                   |
+----|-------------------+
     \
       line numbers
例如,
X
相对于
Y
的垂直位置是四行,因为在窗口中向下滚动了四行。我可以用
行(“w0”)-1
将其作为一个从零开始的索引


I如何确定在给定时刻向右滚动窗口的列数?我已经尝试了
virtcol(“.”-wincol()
,但是如果光标位于一个双宽度字符上,这一点就稍微有点不合适了。

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


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

不幸的是,vim没有更直接的方法来实现这一点,但下面的方法可以实现

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

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

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

winsaveview().leftcol

在最基本的示例中,假设我只想在状态行中显示类似于显示430的第3-83列的
,以指示屏幕左侧或右侧有隐藏数据。