在vim中获取当前缓冲区的偏移量(特别是通过python脚本)

16 投票
2 回答
8643 浏览
提问于 2025-04-15 14:38

我想要获取以下内容的偏移量:

  1. 当前光标的位置
  2. 当前选中的范围

在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.evalvim.command 通常是最方便的(有时候也是唯一的;-))方法,可以深入到你需要的程度;-)。哦,我总是尽量使用一个编译了几乎所有功能的vim;-)。

撰写回答