কীভাবে পুরো ফাইলে বর্তমান বাইট অফসেট পাবেন


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? (আমি চেক করি নি)
ভ্যানল্যাসার

1
@ ভ্যানলেজার এটি আমার দ্রুত পরীক্ষায় কাজ করে। এটি যদি বর্ধিত পরীক্ষার পরেও কাজ করে তবে আপনি আমাদের জানান।
lcd047


6

অন্যান্য উত্তর আমার জন্য কাজ করে নি যখন আমি লাইনে শেষ ছাড়া একটি বাইনারি ফাইল খোলা। এটি ইওল ছাড়াই বাইনারি ফাইলটিতে বাইটগুলি গণনা করার ক্ষেত্রে ভিমে একটি বাগ রয়েছে বলে মনে হয়। (সম্পাদনা: হ্যাঁ, এটি একটি বাগ ছিল I আমি একটি প্যাচ জমা দিয়েছি , যা .4.৪.78৮১ এ গৃহীত হয়েছিল )।

পুরানো ভিম সংস্করণগুলিতে বাগের জন্য অ্যাকাউন্টিং করার সময় বাইট অফসেটটি সন্ধান করতে:

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.