Tôi thấy rằng bạn có thể hiển thị bù byte hiện tại trong dòng trạng thái bằng cách sử dụng %o
, nhưng tôi không tìm thấy chức năng hoặc lệnh nào giống như vậy. Có cách nào để lấy byte hiện tại một cách thực tế không?
Tôi thấy rằng bạn có thể hiển thị bù byte hiện tại trong dòng trạng thái bằng cách sử dụng %o
, nhưng tôi không tìm thấy chức năng hoặc lệnh nào giống như vậy. Có cách nào để lấy byte hiện tại một cách thực tế không?
Câu trả lời:
Thử đi:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
Điều này trả về phần bù dựa trên 1 trong tệp, giống như %o
trong statusline
. Tất nhiên, bạn có thể trừ 1 để lấy phần bù dựa trên 0.
:help col()
: [t] anh ấy kết quả là một Số, là chỉ số byte của vị trí cột được đưa ra với {expr} . Tôi coi đó là phần bù byte dựa trên 1 ...
abcäb
? (Tôi chưa kiểm tra)
Các câu trả lời khác không làm việc cho tôi khi tôi mở một tập tin nhị phân mà không cần dòng kết thúc. Có vẻ như có một lỗi trong vim khi nói đến việc đếm byte trong tệp nhị phân không có eol. (chỉnh sửa: có, đây là một lỗi. Tôi đã gửi một bản vá , được chấp nhận trong 7.4.781 ).
Để tìm bù byte, trong khi tính toán lỗi trong các phiên bản Vim cũ, hãy sử dụng:
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
Lỗi này cũng ảnh hưởng đến %o
specifier trong ví dụ rulerformat
.
col('.')
thực sự trả lại byte bù trong dòng không? Lần cuối tôi nhìn, nó chỉ hiển thị cột con trỏ.