J'ai vu que vous pouviez afficher le décalage d'octet actuel dans la ligne d'état en utilisant %o
, mais je n'ai trouvé aucune fonction ou commande qui fasse de même. Existe-t-il un moyen d'obtenir un décalage pragmatique de l'octet actuel?
J'ai vu que vous pouviez afficher le décalage d'octet actuel dans la ligne d'état en utilisant %o
, mais je n'ai trouvé aucune fonction ou commande qui fasse de même. Existe-t-il un moyen d'obtenir un décalage pragmatique de l'octet actuel?
Réponses:
Essaye ça:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
Cela renvoie le décalage basé sur 1 dans le fichier, qui est le même que %o
dans statusline
. Vous pouvez, bien sûr, soustraire 1 pour obtenir le décalage basé sur 0.
:help col()
: [le] résultat est un nombre, qui est l'indice d'octet de la position de colonne donnée avec {expr} . Je
abcäb
:? (Je n'ai pas vérifié)
L' autre réponse n'a pas fonctionné pour moi lorsque j'ai ouvert un fichier binaire sans fin de ligne. Il semble qu'il y ait un bug dans vim quand il s'agit de compter les octets dans un fichier binaire sans eol. (edit: oui, c'était un bug. J'ai soumis un patch , qui a été accepté en 7.4.781 ).
Pour trouver le décalage d'octet, tout en tenant compte du bogue dans les anciennes versions de Vim, utilisez:
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
Ce bogue affecte également le %o
spécificateur dans eg rulerformat
.
col('.')
retourne réellement le décalage d'octet dans la ligne? La dernière fois que j'ai regardé, il a juste montré la colonne du curseur.