デフォルトのステータスバーの形式は何ですか?

デフォルトのステータスバーの形式は何ですか?

vimステータス行を更新する方法を読みました。ここ。そして正常に更新できます。

しかし、デフォルトのvimステータス行の形式を維持し、ファイルサイズ、ファイルタイプなどの情報をさらに追加したいと思います。

Vimのデフォルトのステータスバーは次のとおりです。

   <file-name>                              line_num,col_num        %file

次のタスクをどのように実行できますか?

  1. ファイル名の後に情報を追加したい
  2. ステータスバーの現在の形式を表示します(:set statusline何も表示しません)。

私は試した:

set statusline+=%y

ただし、これはステータスバー全体を上書きし、ファイルタイプ(%y)のみを表示します。

どのようなヒントがありますか?

答え1

@muruが言ったように、これは不可能に見えます。正確にstatusline設定で指定できない操作を実行するレンダリングコードに設定されている場合は、デフォルトのステータスバーをシミュレートしますstatusline。しかし、非常に近づくことは可能です。ruler有効な場合、デフォルトのステータスバーの合理的な近似は次のとおりです。

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

主な違いは、行番号と列番号の位置です。これは[-]修正不可能なバッファにも表示されます。デフォルトのインターバルロジックをエミュレートすることが可能であれば、これを行う方法が見つかりませんでした。おそらくこれはあなたの目的に十分近いです。

:help statuslineこのバージョンにはプレビューフラグはありませんが、これは試行されたシミュレーションのデフォルトのステータスバーと非常によく似ています。

私はその分割バージョンを直接使用して、定規を持つ.vimrc一般的なvimステータス行のように見えるものの真ん中にSyntasticステータスライン情報を配置しました。

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

答え2

長すぎます。

: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

したがって、%<デフォルトではバッファ名の先頭が切り捨てられるため、firstは省略できます。その後、プレビューフラグ()がありません%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

しかし、私はこれが実用的ではなく、以前の解決策がほとんどの意図と目的に十分であると言いたいと思います。しかし、最後の解決策がうまくいかない場合は、何が問題なのかを教えてください。


Laurence Gonsalvesが提案した解決策の問題は、フラグがなければ、左側と右側の間に2つのスペースがあることです。

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

答え3

コードは空の状態文字列に値を設定せず、いくつかのデフォルト値として機能します。バラよりsrc/screen.c、機能win_redr_status()。表示される項目はコンパイルされた関数に基づいているため、正確なステータス行を再構成するには、コンパイルされた関数を調べる必要があります。次のサンプルのステータス行を使用する方が簡単な場合があります。:h statusline:

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

関連情報