如何获取整个文件中的当前字节偏移


13

我看到您可以使用来在状态行中显示当前的字节偏移量%o,但是我发现没有函数或命令可以执行相同的操作。有没有一种实用的方法来获取当前字节的偏移量?

Answers:


8

尝试这个:

function! FileOffset()
    return line2byte(line('.')) + col('.') - 1
endfunction

这将返回1为基础的文件偏移量,这是相同的%ostatusline。当然,您可以减去1以获得基于0的偏移量。


一个问题,col('.')实际上返回行中的字节偏移吗?最后我看了一下,它只是显示了光标列。
EvergreenTree 2015年

@EvergreenTree根据:help col()[t]结果是一个数字,它是{expr}给出的列位置的字节索引。我认为这是基于1的字节偏移量…
lcd047

答案仅在以下行的文件中起作用abcäb吗?(我尚未检查)
VanLaser 2015年

1
@VanLaser它在我的快速测试中有效。您告诉我们在扩展测试后它是否仍然有效。
lcd047

刚刚经过测试,它就可以正常工作:)
VanLaser 2015年

6

当我打开没有结尾的二进制文件时,另一个答案对我不起作用。在计算没有eol的二进制文件中的字节时,vim中似乎存在一个错误。(编辑:是的,这是一个错误。我已经提交了一个补丁,该补丁已在7.4.781中被接受)。

要找到字节偏移量,同时解决旧版Vim中的错误,请使用:

let offset = line2byte(line('.')) + col('.') - 1
if version < 781 && &l:binary == 1 && &l:eol == 0
    " Vim prior 7.4.781 had a bug where the line count is off by 1 or 2.
    " See https://groups.google.com/forum/#!msg/vim_dev/zX45zm-cnc0/-BWjjh5tlX8J
    let offset += 1
    let offset += line('.') == 1
endif

此错误还会影响%o例如中的说明符rulerformat

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.