在我的vim插件中,我使用Ruby的w.cursor
获取当前光标位置。
它给我的列号基于1的标签。例如。如果当前行为\t\tfoo
,并且光标位于f
,则其位置将报告为3.
我需要的是基于8的制表符的光标位置(因为这是Haskell标准指定的)。因此,在上面的示例中,我需要f
的列号为17,与ts
设置无关。
我如何得到它?
答案 0 :(得分:2)
注意!在Vim的说法中,列指的是字节索引。 <Tab>
字符由单个(0x09)字节表示,它为您提供1.非ASCII字符(如变音符号或汉字)将“占用”2,3或更多(取决于编码)列,但可由单个/双单元格直观地表示。
显然,你对屏幕宽度感兴趣(<Tab>
可以占据1..8个单元格之间),Vim的文档称为虚拟列,并且可以通过virtcol()
等函数和最近的strdisplaywidth()
。