Saya melihat bahwa Anda dapat menampilkan byte offset saat ini menggunakan statusline %o
, tetapi saya tidak menemukan fungsi atau perintah yang melakukan hal yang sama. Apakah ada cara untuk mendapatkan byte offset saat ini secara pragmatis?
Saya melihat bahwa Anda dapat menampilkan byte offset saat ini menggunakan statusline %o
, tetapi saya tidak menemukan fungsi atau perintah yang melakukan hal yang sama. Apakah ada cara untuk mendapatkan byte offset saat ini secara pragmatis?
Jawaban:
Coba ini:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
Ini mengembalikan offset dalam file 1, yang sama dengan %o
di statusline
. Anda bisa, tentu saja, kurangi 1 untuk mendapatkan offset berbasis 0.
:help col()
: [t] hasilnya adalah Angka, yang merupakan indeks byte dari posisi kolom yang diberikan dengan {expr} . Saya menganggap itu byte byte 1 berbasis ...
abcäb
? (Saya belum memeriksa)
The jawaban lain tidak bekerja untuk saya ketika saya membuka file biner tanpa garis akhir. Tampaknya ada bug di vim ketika datang untuk menghitung byte dalam file biner tanpa eol. (sunting: ya, ini adalah bug. Saya telah mengirimkan tambalan , yang diterima di 7.4.781 ).
Untuk menemukan byte offset, sambil menghitung bug dalam versi Vim lama, gunakan:
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
Bug ini juga memengaruhi %o
specifier di mis rulerformat
.
col('.')
sebenarnya mengembalikan byte offset di baris? Terakhir saya melihat, itu hanya menunjukkan kolom kursor.