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

Jör*_*chs 13 python vim offset

我想得到偏移量

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

在vim中,从文件的开头开始.我在python中这样做,所以提示如何使用vim的python脚本编写将非常有帮助.

我之前使用过vim.current ..来编写脚本,但它使用的是行和列,而不是一般的偏移量.

我是否必须计算所有先前行长度+当前行的数量,还是有更简单的方法?

Ale*_*lli 14

如果您的vim是使用该+byte_offset选项编译的,那么在通常的Python脚本中import vim,您可以使用,例如:

vim.eval('line2byte(line("."))+col(".")')
Run Code Online (Sandbox Code Playgroud)

从光标位置的文件开始获取字节偏移量,对于其他标记也是如此.更一般地说,如果你有一个行/列对(假设+byte_offset你的vim是如何编译的)是获得字节偏移的方法(还有另一种方式的byte2line函数).

虽然vim模块确实在vim中直接为Python脚本提供了许多功能,但我发现vim.eval并且vim.command通常是最方便的(有时是唯一的;-)方式,可以根据需要进入;-).哦,而且我总是试着用v +编写vim编译,只要我能用它就可以了;-).

  • 或直接:`:echo eval(line2byte(line("."))+ col("."))` (5认同)

Aym*_*man 12

您可能还想查看该statusline设置.这会将bye offset添加到状态行:

set statusline+=%o
Run Code Online (Sandbox Code Playgroud)

看到 :h statusline

请注意,因为默认状态行为空白,并且通过将%o附加到它,您将丢失所有默认值.

  • 打开时显示状态行有一个窗口:`set laststatus = 2` (2认同)