vimのstatuslineをいじる

vimのstatuslineといえば、**powerline**等が有名ですね。
が、デフォルトでもある程度できるのでやってみます

# :h 'statusline'

> 値は、普通のテキストに挟まれた関数 printf 形式の項目からなる。項目の形
> 式は以下の通りである。
>   %-0{minwid}.{maxwid}{item}
> {item} 以外の欄は指定しなくてもよい。パーセント記号そのものを表示する
>
>
> 欄      意味 ~
> -     その項目を左寄せする。minwid が項目の長さより大きい場合は、
>       既定では右寄せになる。
> 0     数値の頭に0を表示する。欄 '-' が優先する。
> minwid      項目の長さの最小値。余白の穴埋めは '-' と '0' で設定する。
>       50以下でなければならない。
> maxwid      項目の長さの最大値。文字列の項目の切り詰めでは '<' が左に
>       表示される。数値の項目は maxwid-2 文字に切り詰められ、それ
>       に ">数" が続く。ここで "数" は表示されなかった文字数であ
>       り、指数表記に似ている。
> item      以下で説明するアルファベット1文字。
>
> :h 'statusline'

この説明なのですが続きが個人的に分かりづらかったので書き直してみました

## 各欄について

  * 必ず必要となるのは`%`と`{item}`のみ
  * %がないと`{item}`もただの文字列として認識される

つまり、`file: %f`とすると`file: <現在のファイル名>`と表示されるが`file: f`だとそのまま`file: f`と表示される。


## `{item}`の一覧

| item | 種類    | 意味 |
| :--: | :--:    | :--: |
| f    | 文字列  |   バッファ内のファイルのパス(入力された通り、またはカレントディレクトリに対する相対パス) |
| F    | 文字列  |   バッファ内のファイルのフルパス。 |
| t    | 文字列  |   バッファ内のファイルのファイル名 (パスを除く)。 |
| m    | フラグ  |   修正フラグ。表示されるのは "[+]"。'modifiable' がオフのときは"[-]"。 |
| M    | フラグ  |   修正フラグ。表示されるのは ",+" または ",-"。 |
| r    | フラグ  |   読み込み専用フラグ。表示されるのは "[RO]"。 |
| R    | フラグ  |   読み込み専用フラグ。表示されるのは  ",RO"。 |
| h    | フラグ  |   ヘルプバッファフラグ。表示されるのは "[ヘルプ]"。 |
| H    | フラグ  |   ヘルプバッファフラグ。表示されるのは ",HLP"。 |
| w    | フラグ  |   プレビューウィンドウフラグ。表示されるのは "[プレビュー]"。 |
| W    | フラグ  |   プレビューウィンドウフラグ。表示されるのは ",PRV"。 |
| y    | フラグ  |   バッファ内のファイルのタイプ。例えば "[vim]"。'filetype' を参照。 |
| Y    | フラグ  |   バッファ内のファイルのタイプ。例えば ",VIM"。'filetype' を参照。 |
| q    | 文字列  |   "[Quickfix List]"、"[Location List]" または空文字。 |
| k    | 文字列  |   他言語用マッピング |:lmap| が使われているとき、変数"b:keymap_name" または 'keymap' を "<keymap>" と表示する。 |
| n    | 数値    |   バッファ番号。 |
| b    | 数値    |   カーソル下の文字の文字コードの10進数表現。 |
| B    | 数値    |   同上、ただし16進数表現。 |
| o    | 数値    |   カーソル下の文字がファイル内で何バイト目であるか。先頭では1。 覚え方: ファイル先頭からの隔たり (に1を足したもの) {Vimが |+byte_offset| 機能付きでコンパイルされたときのみ有効} |
| O    | 数値    |   同上、ただし16進数表現。 |
| N    | 数値    |   印刷時のページ番号 ('printheader' 内でのみ有効)。 |
| l    | 数値    |   何行目にカーソルがあるか。 |
| L    | 数値    |   バッファ内の総行数。 |
| c    | 数値    |   何列目にカーソルがあるか。 |
| v    | 数値    |   画面上の何列目にカーソルがあるか。 |
| V    | 数値    |   画面上の何列目にカーソルがあるか。表示形式は -{num}。値が 'c' と等しければ表示されない。 |
| p    | 数値    |   現在行がファイル内の何％の位置にあるか (|CTRL-G| と同様) |
| P    | 文字列  |   現在表示されているウィンドウ内のテキストが、ファイル内の何％の位 置にあるか。これは 'ruler' で説明されているものに似ている。翻訳 されていない限り、値は常に3文字である {訳注: 日本語版では全角2文 字になりうる}。 |
| a    | 文字列  |   既定のタイトルと同様の引数ファイルリストを "({current} of {max})" と表示する。ファイル引数の数が0または1の ときは空。 |
| {    | 数値    |F  '%{' と '}' の間の expression を評価し、結果に置き換える。 閉じ括弧 '}' の前には '%' がつかないことに注意。expression は '}' の文字を含むことができないので、これを回避するには関数呼び出 しを使用すること。 |
| (    | 非表示  |   項目グループの開始。グループ内の項目全てに対する幅と寄せ方の設定 に使える。どこかで %) で閉じられなければならない。 |
| )    | 非表示  |   項目グループの終了。欄 width は指定できない。 |
| T    | 数値    |   'tabline' 用: ラベル「タブページ N」の開始。最後のラベルの後に %T を書くこと。この情報はマウスクリックに使われる。 |
| X    | 数値    |   'tabline' 用: ラベル「タブ N を閉じる」の開始。ラベルの後に %X を書くこと。例: %3Xclose%X。%999X は「カレントタブを閉じる」を 意味する。この情報はマウスクリックに使われる。 |
| <    | 非表示  |   行が長すぎるときに切り詰める位置。既定では先頭。欄 width は指定 できない。 |
| =    | 非表示  |   左寄せ項目と右寄せ項目の区切り。欄 width は指定できない。 |
| #    | 非表示  |   強調グループを設定する。この後に名前を書き、その後にまた # を書 く。つまり、%#HLname# と書くと、強調グループ HLname になる。カレ ントウィンドウ以外のステータスラインに対しても同じ強調が施され る。 |
| *    | 非表示  |   使われる強調表示グループを User{N} に設定する。ここで {N} は欄 minwid から取られる。例えば `%1*` と設定する。`%*` や `%0*` で通常の強 調表示を復元する。強調表示グループ User{N} と StatusLine の違い は、非カレントウィンドウのステータス行の強調表示を設定するグルー プの StatusLineNC に適用される。数 N は 1 以上 9 以下である。 |hl-User1..9| を参照。 |


# 使用例

## AA(`[*_*]`)を表示したい(ただの文字列を表示したい)

```vim
set statusline=[*_*]
```
<img width="1440" alt="スクリーンショット 2019-01-19 8.17.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/222594/bc05505b-102b-9aad-cc91-a38cdadb8cf5.png">


## 空白を含む文字列を表示したい

```vim
set statusline=use\ \\\ to\ escape\ spaces
```
<img width="1440" alt="スクリーンショット 2019-01-19 8.23.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/222594/f6530d4a-f95e-cec4-0bcc-30a707255df8.png">

## ファイル名表示したい

```vim
set statusline=%f
```
<img width="1440" alt="スクリーンショット 2019-01-19 8.18.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/222594/c7d54de9-484f-d657-3d9e-4a61608d8073.png">


結果画像はる

## 右寄せ表示も足したい

```vim
set statusline=Leftside%=Rightside
```
<img width="1440" alt="スクリーンショット 2019-01-19 8.20.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/222594/9fedff35-9e21-3670-65f3-980062feb352.png">

## 色をつけたい

```vim
set statusline=%#title#This\ line\ should\ be\ highlighted\ like\ markdown-title
```
<img width="1440" alt="スクリーンショット 2019-01-19 8.23.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/222594/5934820c-66a0-8455-7bee-2c499b7c3847.png">

## 複数の色を使いたい

```vim
set statusline=%#title#[title]\ %#moremsg#[list]
```

<img width="1440" alt="スクリーンショット 2019-01-19 8.25.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/222594/5a34f832-77df-f1c7-4737-f3ff920ab494.png">

# 簡易的なまとめ？

  * `%-0{minwid}.{maxwid}{item}`という形式で一つ
  * このうち最も簡略化したものは`%{item}`(**%が必要！！**)
  * 例: `setlocal statusline=[*_*]\ \ F:\ %f,\ ft:\ %y,\ buf:\ %n`:  `[*_*]  F: ~/howm/2019/01/2019-01-17-104438.md, ft: [markdown.vimwiki.qfix_memo], buf: 51 `


[2019-01-17 10:44]