วิธีรับค่าไบต์ปัจจุบันในไฟล์ทั้งหมด


13

ฉันเห็นว่าคุณสามารถแสดงออฟเซตไบต์ปัจจุบันในสถานะการใช้%oงาน แต่ฉันไม่พบฟังก์ชันหรือคำสั่งที่ทำเช่นเดียวกัน มีวิธีการรับไบต์ปัจจุบันชดเชยอย่างจริงจัง?

คำตอบ:


8

ลองสิ่งนี้:

function! FileOffset()
    return line2byte(line('.')) + col('.') - 1
endfunction

นี้จะส่งกลับ 1-based ชดเชยในแฟ้มซึ่งเป็นเช่นเดียวกับใน%o statuslineแน่นอนคุณสามารถลบ 1 เพื่อรับออฟเซ็ตแบบ 0


คำถามหนึ่งข้อที่col('.')จริงแล้วส่งคืนอ็อตต์ไบต์ในบรรทัดหรือไม่? ครั้งสุดท้ายที่ฉันดูมันเพิ่งจะแสดงคอลัมน์เคอร์เซอร์
EvergreenTree

@EvergreenTree ตาม:help col(): [t] เขาส่งผลให้เป็นหมายเลขซึ่งเป็นดัชนีไบต์ตำแหน่งคอลัมน์ที่กำหนดด้วย {} ฉันคิดว่ามันเป็นออฟเซ็ต 1 ไบต์ที่ใช้ ...
lcd047

การทำงานของคำตอบในไฟล์จะมีบรรทัดนี้เท่านั้น: abcäb? (ฉันไม่ได้ตรวจสอบ)
VanLaser

1
@VanLaser มันทำงานในการทดสอบอย่างรวดเร็วของฉัน คุณบอกเราว่ามันยังใช้งานได้หรือไม่หลังจากการทดสอบเพิ่มเติม
lcd047

เพิ่งผ่านการทดสอบและการทำงาน :)
VanLaser

6

คำตอบอื่น ๆ ที่ไม่ได้ทำงานสำหรับฉันเมื่อฉันเปิดแฟ้มไบนารีไม่มีสายตอนจบ ดูเหมือนว่ามีข้อผิดพลาดในกลุ่มเมื่อมันมาถึงการนับไบต์ในไฟล์ไบนารีโดยไม่ต้อง 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

ข้อผิดพลาดนี้ยังมีผลต่อระบุในเช่น%orulerformat

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.