%o
在状态行中显示当前字节偏移,但是我发现没有函数或命令可以执行相同的操作。有没有一种实用的方法来获取当前字节的偏移量?#1 楼
尝试以下操作:function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
这将返回文件中从1开始的偏移量,与
%o
中的statusline
相同。当然,您可以减去1以获得基于0的偏移。#2 楼
当我打开没有结尾的二进制文件时,另一个答案对我不起作用。在计算没有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
。
评论
一个问题,col('。')是否实际上返回行中的字节偏移量?最后我看了一下,它只是显示了光标列。
–EvergreenTree
2015年7月6日在16:12
@EvergreenTree根据:help col():[t]结果是一个数字,它是{expr}给定的列位置的字节索引。我认为这是从1开始的字节偏移量...
–lcd047
2015年7月6日在16:14
答案仅在以下行的文件中起作用:abcäb吗? (我没有检查)
– VanLaser
2015年7月6日在16:14
@VanLaser它在我的快速测试中有效。您告诉我们在扩展测试后它是否仍然有效。
–lcd047
15年7月6日在16:16
刚刚测试过,它可以工作:)
– VanLaser
15年7月6日在16:17