ฉันเห็นว่าคุณสามารถแสดงออฟเซตไบต์ปัจจุบันในสถานะการใช้%o
งาน แต่ฉันไม่พบฟังก์ชันหรือคำสั่งที่ทำเช่นเดียวกัน มีวิธีการรับไบต์ปัจจุบันชดเชยอย่างจริงจัง?
ฉันเห็นว่าคุณสามารถแสดงออฟเซตไบต์ปัจจุบันในสถานะการใช้%o
งาน แต่ฉันไม่พบฟังก์ชันหรือคำสั่งที่ทำเช่นเดียวกัน มีวิธีการรับไบต์ปัจจุบันชดเชยอย่างจริงจัง?
คำตอบ:
ลองสิ่งนี้:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
นี้จะส่งกลับ 1-based ชดเชยในแฟ้มซึ่งเป็นเช่นเดียวกับใน%o
statusline
แน่นอนคุณสามารถลบ 1 เพื่อรับออฟเซ็ตแบบ 0
:help col()
: [t] เขาส่งผลให้เป็นหมายเลขซึ่งเป็นดัชนีไบต์ตำแหน่งคอลัมน์ที่กำหนดด้วย {} ฉันคิดว่ามันเป็นออฟเซ็ต 1 ไบต์ที่ใช้ ...
abcäb
? (ฉันไม่ได้ตรวจสอบ)
คำตอบอื่น ๆ ที่ไม่ได้ทำงานสำหรับฉันเมื่อฉันเปิดแฟ้มไบนารีไม่มีสายตอนจบ ดูเหมือนว่ามีข้อผิดพลาดในกลุ่มเมื่อมันมาถึงการนับไบต์ในไฟล์ไบนารีโดยไม่ต้อง eol (แก้ไข: ใช่นี่เป็นข้อผิดพลาดฉันส่งแพทช์ซึ่งได้รับการยอมรับใน 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('.')
จริงแล้วส่งคืนอ็อตต์ไบต์ในบรรทัดหรือไม่? ครั้งสุดท้ายที่ฉันดูมันเพิ่งจะแสดงคอลัมน์เคอร์เซอร์