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


14

ここで vimステータスラインを更新する方法について読みまし。そして、私はそれを正常に更新することができます。

ただし、デフォルトのvimステータスラインの形式を保持し、ファイルサイズ、ファイルタイプなどの情報を追加するだけです。

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

   <file-name>                              line_num,col_num        %file

どうすれば次のことができますか?

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

私は試した:

set statusline+=%y

しかし、これはステータスライン全体を上書きし、ファイルタイプ(%y)を表示するだけです。

ヒントはありますか?


2
Vimに興味がある場合は、ViとVimをチェックアウトしてください!
ムル

回答:


15

@muruが言ったように、レンダリングのコードとして設定されている場合、デフォルトのステータス行を正確にシミュレートstatuslineすることはできないようstatuslineです。ただし、かなり接近することは可能です。ruler有効になっている場合のデフォルトのステータス行の表示方法の合理的な近似を次に示します。

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

主な違いは、行番号と列番号の配置です。デフォルトのスペーシングロジックをシミュレートできる場合、それを行う方法がわかりません。おそらくこれはあなたの目的に十分近いでしょう。

私は自分でこの分割バージョンを使用して、.vimrcSyntasticステータスライン情報をルーラー付きの通常のvimステータスラインのように見えるものの中央に配置します。

" 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()参照してください。表示される項目は、正確なステータスライン1を再構築すること、でコンパイル機能に基づいているにコンパイル機能を見て必要があるだろうで与えられた例のステータスラインを使用する方が簡単かもしれません。: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%)ですか?
シャマオケ

4

tl; dr

: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 切り捨て<先頭に追加します。

keymapのスペースがある場合は、最後に追加します(右揃え)。

さて、定規。<row>,<col>-<virtcol> パーツと相対位置で構成されています(右揃え)。

また、バッファ名のある部分はwidthの少なくとも半分をとる必要があるという制限があります。

解決

ここで、ドキュメントによって提案された値を取得しましょう:

: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

しかし、それは実用的ではなく、ほとんどの意図と目的には以前の解決策で十分だと思います。ただし、最後の解決策がうまくいかない場合は、何が悪いのか教えてください。より良い解決策を考えてみます。


ローレンスゴンサルベスが提案した解決策の問題は、フラグがない場合、左と右の部分の間に2つのスペースがあることです。

:set statusline=%f\ %h%w%m%r\ %=%(%l,%c%V\ %=\ %P%)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.