Answers:
尝试这个:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
这将返回1为基础的文件偏移量,这是相同的%o
中statusline
。当然,您可以减去1以获得基于0的偏移量。
:help col()
:[t]结果是一个数字,它是{expr}给出的列位置的字节索引。我认为这是基于1的字节偏移量…
abcäb
吗?(我尚未检查)
当我打开没有结尾的二进制文件时,另一个答案对我不起作用。在计算没有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
。
col('.')
实际上返回行中的字节偏移吗?最后我看了一下,它只是显示了光标列。