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%)