ডিফল্ট স্ট্যাটাসলাইনের ফর্ম্যাটটি কী?


14

আমি এখানে ভিএম স্ট্যাটাসলাইন আপডেট করার পদ্ধতি সম্পর্কে পড়েছি । এবং আমি এটি সফলভাবে আপডেট করতে সক্ষম হয়েছি।

তবে আমি ডিফল্ট ভিআইএম স্ট্যাটাসলাইনের ফর্ম্যাটটি ধরে রাখতে চাই এবং এটিতে আরও কিছু তথ্য যুক্ত করতে চাই যেমন ফাইল-আকার, ফাইলের ধরণ ইত্যাদি

Vim ডিফল্ট স্থিতি লাইন:

   <file-name>                              line_num,col_num        %file

আমি নিম্নলিখিতটি কীভাবে করতে পারি?

  1. আমি ফাইল-নামের পরে তথ্য যুক্ত করতে চাই
  2. স্থিতির বর্তমান বিন্যাসটি প্রদর্শন করুন ( :set statuslineকিছুই প্রদর্শন করে না)

আমি চেষ্টা করেছিলাম:

set statusline+=%y

তবে এটি পুরো স্ট্যাটাসলাইনটিকে ওভাররাইট করে এবং কেবল ফাইল-প্রকার ( %y) প্রদর্শন করে ।

কোন ইঙ্গিত?


2
আপনি যদি ভিমে আগ্রহী হন, তবে ভি এবং ভিম চেকআউট করুন !
মুরু

উত্তর:


15

@ মুরু যেমন বলেছিলেন, ডিফল্ট স্ট্যাটাস লাইনটি যখন রেন্ডারিংয়ের কোড হিসাবে সেট করা থাকে তখন সেটি সেটিংয়ে নির্দিষ্ট করা যায় না এমনটি হুবহু অনুকরণ করা সম্ভব বলে মনে হয় না । তবে বেশ কাছাকাছি যাওয়া সম্ভব। ডিফল্ট স্থিতি রেখাটি সক্ষম করার সময় দেখায় waystatuslinestatuslineruler

:set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%)

প্রধান পার্থক্যটি হ'ল লাইন এবং কলাম সংখ্যার অবস্থান। যদি ডিফল্ট ব্যবধানের যুক্তি অনুকরণ করা সম্ভব হয় তবে আমি এটি করার কোনও উপায় বের করতে সক্ষম হইনি। সম্ভবত এটি আপনার উদ্দেশ্যে যথেষ্ট কাছাকাছি হবে।

.vimrcশাসকের সাথে সাধারণ ভিআইএম স্ট্যাটাস লাইনের মতো দেখতে সিন্টাস্টিক স্ট্যাটাস লাইন তথ্যটি মাঝখানে রাখার জন্য আমি নিজেই এর একটি বিভক্ত সংস্করণ ব্যবহার করি :

" start of default statusline
set statusline=%f\ %h%w%m%r\ 
" NOTE: preceding line has a trailing space character

" Syntastic statusline
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

" end of default statusline (with ruler)
set statusline+=%=%(%l,%c%V\ %=\ %P%)

7

কোডটি খালি স্থিতির স্ট্রিংয়ের কোনও মান সেট করে না, তবে কেবল কিছু ডিফল্ট ব্যবহার করে কাজ করে। দেখুন src/screen.c, ফাংশনwin_redr_status() । দেখানো আইটেম কম্পাইল বৈশিষ্ট্যের উপর ভিত্তি করে করা হয়, তাই পুনর্গঠনে সঠিক statusline এক কম্পাইল বৈশিষ্ট্য তাকান করতে হবে এটা উদাহরণস্বরূপ statusline দেওয়া ব্যবহার করতে সহজ হতে পারে। :h statusline:

Examples:
Emulate standard status line with 'ruler' set 
  :set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

প্রস্থ (14) এর পরে ডট প্রতীক (।) এর অর্থ কী %-14.(%l,%c%V%)?
শামাউকে

5

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