在vim中获取当前缓冲区的偏移量(特别是通过python脚本)
我想要获取以下内容的偏移量:
- 当前光标的位置
- 当前选中的范围
在vim中,这个偏移量是从文件的开头开始计算的。我是在用python做这件事,所以如果能给我一些关于如何用vim的python脚本来实现的提示,那就太好了。
我之前用过vim.current..来做脚本,但它是用行和列来表示的,而不是一个通用的偏移量。
我是不是需要计算所有前面行的长度加上当前行,还是有更简单的方法呢?
2 个回答
15
你可能还想看看 statusline
这个设置。这个设置会把偏移量加到状态栏上:
set statusline+=%o
可以查看 :h statusline
来了解更多信息。
不过要小心,因为默认的状态栏是空的,如果你在后面加上 %o,就会把所有默认的内容都去掉。
16
如果你的vim是用 +byte_offset
这个选项编译的,那么在一个Python脚本中,在通常的 import vim
之后,你可以使用,比如:
vim.eval('line2byte(line("."))+col(".")')
这样可以获取光标位置距离文件开头的字节偏移量,其他标记也是类似的。更一般来说,如果你有一对行/列坐标(假设你的vim是用 +byte_offset
编译的),这就是获取字节偏移量的方法(还有一个 byte2line
函数可以反向操作)。
虽然vim模块确实让很多功能可以直接在vim中的Python脚本里使用,但我发现 vim.eval
和 vim.command
通常是最方便的(有时候也是唯一的;-))方法,可以深入到你需要的程度;-)。哦,我总是尽量使用一个编译了几乎所有功能的vim;-)。