回答:
これを試して:
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('.')
実際に行のバイトオフセットを返しますか?最後に見たところ、カーソル列が表示されていました。