Vi que podía mostrar el desplazamiento de bytes actual en la línea de estado usando %o
, pero no encontré ninguna función o comando que haga lo mismo. ¿Hay alguna manera de hacer que el byte actual se compense pragmáticamente?
Vi que podía mostrar el desplazamiento de bytes actual en la línea de estado usando %o
, pero no encontré ninguna función o comando que haga lo mismo. ¿Hay alguna manera de hacer que el byte actual se compense pragmáticamente?
Respuestas:
Prueba esto:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
Esto devuelve el desplazamiento basado en 1 en el archivo, que es el mismo que %o
en statusline
. Por supuesto, puede restar 1 para obtener el desplazamiento basado en 0.
:help col()
: [l] l resultado es un Número, que es el índice de bytes de la posición de la columna dada con {expr} . Supongo que es el desplazamiento de byte basado en 1 ...
abcäb
:? (No lo he comprobado)
La otra respuesta no funcionó para mí cuando abrí un archivo binario sin final de línea. Parece que hay un error en vim cuando se trata de contar bytes en un archivo binario sin eol. (editar: sí, esto fue un error. He enviado un parche , que fue aceptado en 7.4.781 ).
Para encontrar el desplazamiento de bytes, mientras se tiene en cuenta el error en las versiones antiguas de 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 error también afecta al %o
especificador en, por ejemplo rulerformat
.
col('.')
realmente devuelve el desplazamiento de bytes en la línea? Lo último que miré, solo mostró la columna del cursor.