Vi que era possível exibir o deslocamento de bytes atual na linha de status usando %o
, mas não encontrei nenhuma função ou comando que faça o mesmo. Existe uma maneira de obter o deslocamento atual de bytes pragmaticamente?
Vi que era possível exibir o deslocamento de bytes atual na linha de status usando %o
, mas não encontrei nenhuma função ou comando que faça o mesmo. Existe uma maneira de obter o deslocamento atual de bytes pragmaticamente?
Respostas:
Tente o seguinte:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
Isso retorna o deslocamento com base em 1 no arquivo, que é o mesmo que %o
em statusline
. Obviamente, você pode subtrair 1 para obter o deslocamento baseado em 0.
:help col()
: [o] resultado é um número, que é o índice de bytes da posição da coluna fornecido com {expr} . Suponho que é o byte baseada em 1 compensado ...
abcäb
:? (Eu não tenho verificado)
A outra resposta não funcionou para mim quando abri um arquivo binário sem final de linha. Parece que há um erro no vim quando se trata de contar bytes em um arquivo binário sem eol. (edit: sim, isso foi um bug. Enviei um patch , que foi aceito em 7.4.781 ).
Para encontrar o deslocamento de bytes, enquanto contabiliza o erro nas versões antigas do Vim, use:
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
Este bug também afeta o %o
especificador, por exemplo rulerformat
.
col('.')
na verdade, retorna o deslocamento de bytes na linha? A última vez que olhei, apenas mostrou a coluna do cursor.