TL; ড
:set statusline=%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P
যদিও আমার প্রস্তাবিত সমাধান অন্যান্য উত্তরগুলির চেয়ে অনেক বেশি পৃথক নয়, আমি আরও বিস্তারিত ব্যাখ্যা ভাগ করতে চাই।
আসল আচরণ
প্রথমে vim
স্ট্যাটাস লাইনটি কীভাবে আঁকুন তা নির্ধারণ করুন। দায়িত্বশীল ফাংশনগুলি হ'ল win_redr_status()
এবং win_redr_ruler()
।
vim
বাফার লাগে নাম , একটি যোগ স্থান যদি কোনো পতাকা অনুসরণ করতে হয় (যেমন [Help]
, [Preview]
, [+]
, [RO]
)। তারপর এটা যোগ পতাকা ।
সাধারণত এটি শাসকের জন্য 18 টি চরিত্রের ঘর বরাদ্দ করে। যদি বাফার নামের অংশটি অবশিষ্ট স্থানের সাথে ফিট না করে তবে এটি বাম থেকে vim
ছাঁটাই করে এবং <
শুরুতে যুক্ত করে।
কীম্যাপের জন্য যদি জায়গা থাকে তবে এটি এটিকে শেষে (ডান সারিবদ্ধ) যুক্ত করে।
এখন, শাসক। এটি <row>,<col>-<virtcol>
অংশ এবং আপেক্ষিক অবস্থান নিয়ে গঠিত (ডানদিকে সংযুক্ত)
এখানে একটা সীমাবদ্ধতা হল বাফার নামের সঙ্গে অংশ অন্তত নিতে হবে এর অর্ধেক এর প্রস্থ ।
সমাধান
এখন ডক্স দ্বারা প্রস্তাবিত মানটি নেওয়া যাক :
:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
কোথায়
%< - where to truncate the line if too long
%f - buffer name (path to a file, or something)
%h - help flag
%m - modified flag
%r - readonly flag
%= - separater between the left (buffer name) and the right (ruler) parts
%-14.(...%) - minimum field width == 14
%l - line
%c - column
%V - virtual column
%P - percentage
সুতরাং, প্রথমে %<
বাদ দেওয়া যেতে পারে, যেহেতু প্রথমদিকে ডিফল্টরূপে বাফারের নামটি কাটা হয়। তারপরে, এটি প্রাকদর্শন পতাকা ( %w
) হারিয়েছে । এছাড়াও, যখন উইন্ডোটি 18 * 2
অক্ষরের চেয়ে কম প্রশস্ত হয়, ডান অংশটি স্থিতি রেখার অর্ধেকেরও বেশি অংশ নেয়।
সুতরাং, কমপক্ষে আমরা বাদ %<
এবং যোগ করতে পারি %w
:
:set statusline=%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P
আমরা আরও এগিয়ে যেতে পারি এবং নিশ্চিত করতে পারি যে ডান অংশটি স্থিতি রেখার অর্ধেকের বেশি না নেয়:
set statusline=%!MyStatusLine()
function! MyStatusLine()
let l:w = min([14,winwidth(0)/2-3])
return '%f %h%w%m%r%=%-' . l:w . '.(%l,%c%V%) %P'
endfunction
তারপরে আমরা এটি তৈরি করতে পারি যে বৈশিষ্ট্যগুলি সংকলিতvim
হয়েছিল তার উপর নির্ভর করে ।
if has("quickfix")
...
endif
তবে আমি বলব যে এটি ব্যবহারিক নয়, এবং পূর্ববর্তী সমাধানটি বেশিরভাগ উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য যথেষ্ট। তবে, যদি শেষ সমাধানটি আপনার পক্ষে কাজ করে না, তবে কী ভুল তা আমাকে বলুন এবং আমি আরও ভাল একটি নিয়ে আসার চেষ্টা করব।
লরেন্স গনসাল্ভেস দ্বারা প্রস্তাবিত সমাধানের সাথে সমস্যাটি হ'ল যদি কোনও পতাকা না থাকে তবে বাম এবং ডান অংশগুলির মধ্যে দুটি স্পেস থাকে:
:set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%)