पूरी फाइल में करंट बाइट की भरपाई कैसे करें


13

मैंने देखा कि आप उपयोग कर रहे स्टेटसलाइन में वर्तमान बाइट ऑफ़सेट प्रदर्शित कर सकते हैं %o, लेकिन मुझे ऐसा कोई फ़ंक्शन या कमांड नहीं मिला जो ऐसा करता हो। क्या वर्तमान बाइट ऑफसेट व्यावहारिक रूप से प्राप्त करने का एक तरीका है?

जवाबों:


8

इसे इस्तेमाल करे:

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

यह फाइल में 1-आधारित ऑफसेट देता है, जो अंदर की तरह ही %oहै statusline। बेशक, आप 0-आधारित ऑफसेट को प्राप्त करने के लिए 1 को घटा सकते हैं।


एक सवाल, क्या col('.')वास्तव में लाइन में बाइट की भरपाई होती है? पिछले मैंने देखा, यह सिर्फ कर्सर कॉलम दिखाया।
एवरग्रीनट्री

@EvergreenTree के अनुसार :help col(): [t] उसका परिणाम एक संख्या है, जो {expr} के साथ दिए गए कॉलम की स्थिति का बाइट इंडेक्स है । मुझे लगता है कि यह 1-आधारित बाइट ऑफसेट है ...
lcd047

क्या इस लाइन वाले फ़ाइल में उत्तर काम करेगा abcäb:? (मैंने जाँच नहीं की है)
VanLaser

1
@VanLaser यह मेरे त्वरित परीक्षणों में काम करता है। आप हमें बताएं कि क्या यह अभी भी विस्तारित परीक्षण के बाद काम करता है।
lcd047

बस परीक्षण किया गया और यह काम करता है :)
VanLaser

6

अन्य जवाब मेरे लिए काम नहीं किया, जब मैं लाइन समाप्त होने के बिना एक बाइनरी फ़ाइल खोला। ऐसा लगता है कि विम में बग है जब यह बिना बाइनरी फ़ाइल में बाइट गिनने की बात आती है। (संपादित करें: हाँ, यह एक बग था। मैंने एक पैच जमा किया है , जिसे 7.4.781 में स्वीकार किया गया है )।

बाइट ऑफसेट को खोजने के लिए, पुराने विम संस्करणों में बग के लिए लेखांकन करते समय, उपयोग करें:

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.