मैंने देखा कि आप उपयोग कर रहे स्टेटसलाइन में वर्तमान बाइट ऑफ़सेट प्रदर्शित कर सकते हैं %o
, लेकिन मुझे ऐसा कोई फ़ंक्शन या कमांड नहीं मिला जो ऐसा करता हो। क्या वर्तमान बाइट ऑफसेट व्यावहारिक रूप से प्राप्त करने का एक तरीका है?
मैंने देखा कि आप उपयोग कर रहे स्टेटसलाइन में वर्तमान बाइट ऑफ़सेट प्रदर्शित कर सकते हैं %o
, लेकिन मुझे ऐसा कोई फ़ंक्शन या कमांड नहीं मिला जो ऐसा करता हो। क्या वर्तमान बाइट ऑफसेट व्यावहारिक रूप से प्राप्त करने का एक तरीका है?
जवाबों:
इसे इस्तेमाल करे:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
यह फाइल में 1-आधारित ऑफसेट देता है, जो अंदर की तरह ही %o
है statusline
। बेशक, आप 0-आधारित ऑफसेट को प्राप्त करने के लिए 1 को घटा सकते हैं।
:help col()
: [t] उसका परिणाम एक संख्या है, जो {expr} के साथ दिए गए कॉलम की स्थिति का बाइट इंडेक्स है । मुझे लगता है कि यह 1-आधारित बाइट ऑफसेट है ...
abcäb
:? (मैंने जाँच नहीं की है)
अन्य जवाब मेरे लिए काम नहीं किया, जब मैं लाइन समाप्त होने के बिना एक बाइनरी फ़ाइल खोला। ऐसा लगता है कि विम में बग है जब यह बिना बाइनरी फ़ाइल में बाइट गिनने की बात आती है। (संपादित करें: हाँ, यह एक बग था। मैंने एक पैच जमा किया है , जिसे 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
।
col('.')
वास्तव में लाइन में बाइट की भरपाई होती है? पिछले मैंने देखा, यह सिर्फ कर्सर कॉलम दिखाया।