cafegale(LeafCage備忘録)スマートフォン用の表示で見るcafegale(LeafCage備忘録)LeafCage備忘録(はてなダイアリー)と統一しました。325日目の記事です。長めになりますので、お時間があるときにお読みください。Vimのステータスラインを改造するプラグインが、Lokaltog/powerline、bling/vim-airlineに続いてitchyny/lightline.vimが登場しました。私は今までステータスラインやタブラインは自前で改造していましたが、モダンなラインも経験してみたかったので、導入することにしました。ここぽんのーと(当記事の内容)設定方法コンポーネント作成方法カラースキーム作成方法[lightlineの設定方法]まずコンポネントを用意します。そのコンポネントの中から表示したいものを選択し、ラインの各配列に並べていけば完成です。標準のコンポネントg:lightline.componentは以下のようになっています。'modified']]ステータスラインがアクティブであるときの左側の領域に、一番目のグループとしてmodeとpasteの情報が、二番目のグループとしてreadonlyとfilenameとmodifiedが表示されます。同じグループでは同じハイライトが使われます。お手軽にやりたいのなら標準のコンポネントの中から表示したいものをセレクトして並べればOKです。私は少し凝ったことをしたいのでコンポネントをいくつか自作することにします。ステータスラインについて、設定できる場所は以下のようになっています。g:lightline.active.leftアクティブなステータスラインの左側の領域g:lightline.active.rightアクティブなステータスラインの右側の領域g:lightline.inactive.leftアクティブでないステータスラインの左側の領域g:lightline.inactive.rightアクティブでないステータスラインの右側の領域[以前使っていたステータスラインと同等以上の機能を実現させたい]私が長い間使っていたステータスライン(とタブライン)はこちらです。バッファ番号を表示させたい編集中のファイル名だけでなくディレクトリも知りたいファイルの総行数を表示させたいカレントディレクトリをタブライン右上に表示させたいctrlp.vimやunite.vimなど他の、ステータスラインを書き換える系のプラグインまでいじるつもりはない(そのプラグインが設定するデフォルトのステータスラインをそのまま使いたい)ので、標準のステータスラインからあまりに掛け離れたハイライトを使いたくない現在のカラースキーム(改造したevening)に調和する色を使いたいlightline.vimはステータスラインだけではなくタブライン('guioptions'オプションに"e"が含まれていないときに利用されるもの。'tabline')の改造も出来るので、ついでにやってみます。この要件を満たすためにいろいろいじって、出来上がったのがこちらになります。地味目な淡い感じがなかなか良いのではないでしょうか。以下では実際の設定について解説します。[lightlineの表示部分を作成する](前準備)以下のコマンドを定義しました。lightline#update()g:lightlineを変更した後でこれを呼ぶと変更内容がすぐに確認できます。(コンポーネントの作成)編集中のファイルのディレクトリを知るためのコンポーネントは標準では用意されていません。新しく作る必要があります。単純な処理なので、文字列の評価だけで何とかなりそうです。g:lightline.componentを使います。'%.35(%{expand("%:h:s?\\S$?\\0/?")}%)'%から始まるのはオプション'statusline'で評価される特別な文字列です。%)は括弧内が35文字より長くなったら先頭から切り詰めるという意味です。%{}は、この括弧の中の要素を評価します。winnr())}%<'%nでバッファ番号を表し、コンマの数でウィンドウ番号を表します。'%L'バッファ内の総行数を表します。":~")}%)'カレントディレクトリを表します。35文字で切り詰めています。'%{&et?"et":""}%{&ts}:%{&sw}:%{&sts},%{&tw}'タブ関係のオプション値と'textwidth'を表示します。'%3l:%-3v'標準のlineinfoが気に入らないので書き換えました。複雑な情報を表示させるには関数を登録できるg:lightline.component_functionを利用します。Vim関数の始まりから数えた現在行数を表示させる関数を作ります。''endfunctionタブページ用の関数はg:lightline.tab_component_functionを使います。この関数にはタブページ番号が引数として渡されます。len(tabpagebuflist(a:n)))endfunctionタブページ番号に、タブページの中にどれだけウィンドウが開かれているのかを,の数で表したものを添加します。1]endfunctionバッファ番号と、ファイル名(長ければ16文字にまで切り詰め)を表示します。[ピースを填(は)める]準備は整いました。後はこれらのコンポーネントをパズルのピースのごとく各場所に填(は)め込んでいくだけです。'fileencoding']]現在アクティブなウィンドウとそうでないウィンドウのステータスラインです。非アクティブでも情報は欲しいので、表示する内容を極端に削ったりはしていません。リストの中のリスト1つに付き別の色で表示されます。同じリストの中にある要素は同じ色が使われます。区切りもg:lightline.separatorが使われるか、g:lightline.subseparatorが使われるかといった違いがあります。g:lightline.tab.activeg:lightline.tablineがタブラインです。右側に現在バッファの総行数とカレントディレクトリと補佐的な情報を表示しています。g:lightline.tabはタブページを示すタブの一つ一つに表示する内容です。非アクティブでも表示内容は変更しないようにしました。[lightlineカラースキームを設定する]カラースキームを変更するにはg:lightline.colorschemeにカラースキーム名を設定します。するとg:lightline#colorscheme#{カラースキーム名}#paletteという変数から設定が読み込まれます。いうことはlightline/colorscheme/{カラースキーム名}.vimというファイルを用意しないといけないのかと思われがちですが、この変数はvimrcで定義することが出来ます。別にファイルを用意する必要はありません。g:lightline#colorscheme#{カラースキーム名}#paletteは色設定を収めた辞書になっています。s:pという形で代入するようにするといいでしょう。以下のように書きます。{}}g:lightline.colorschemeは任意の名前に変更してください。私はとりあえずlclightlineにしました。それぞれステータスラインの非アクティブ時、ノーマルモード時、インサートモード時、ビジュアルモード時と、タブラインについての設定です。{文字装飾(省略可能)}]を表しています。カラーターミナルの文字色なんて書いてられるかーい!という方は、lightline#colorscheme#fill()を使うとカラーターミナルの文字色を自動設定してくれるので便利です。{文字装飾(省略可能)}]で済みます。{文字装飾(省略可能)}]の形式に変換してくれます。非アクティブなステータスラインの中央部分は本来のステータスラインの色と同じ色である、背景グレーに文字色黒を選択しました。他のプラグインが一時的にステータスラインを標準色のもので書き換えても違和感を少なくすることが出来ます。inactive.leftの先頭にも同じ色を使って、あくまでベースはこの色であると主張させます。0](s:STL_ATTRIBUTECOLOR)の色が使われます。["bold"])')ノーマルモードでの色は非アクティブ時の色と同じ物を使っています。要素の最後に'bold'を追加して太字にするようにします。'bold']]インサートモードでは濃い色に変更してインサートに入ったことを主張させるようにします。s:p.visual.middle[0]ビジュアルモードでは不思議な雰囲気を醸せるようにしました。実はあまり気に入っていないので改善の余地有りです。s:STL_ATTRIBUTECOLOR]タブラインは渋い感じにしました。s:pこれにて設定完了です。この設定部分をまとめて読みたい方は私のvimrcをご覧ください(執筆時点で1130行目当たりから)。色を決めるときには、色見本を表示させるプラグインがあると便利です。せらんメモ[ctrlp.vimとの競合を何とかする。]ctrlp.vimが開くControlPバッファは:noautocmdで開かれるため、lightlineがバッファが開かれたことを検知できず、ctrlp.vimのステータスラインを上書きしてしまいます。ctrlp.vimではautoloadの代わりに、ControlPバッファが開かれたときと閉じられたときに実行させる関数を指定することが出来るので、これを利用してlightline.vimがステータスラインを上書きするのを阻止しましょう。0を指定すれば上書きを防げます。333日目の記事です。alti.vimはctrlp...2013-10-16ctrlp.vimの拡張を作るときにVim7.3.1170以前ではスクリプトローカル関数をFuncr...こういうのは無理。»プロフィールid:leafcage世間的にはマイナーなソフトウェアなどが好き。(ツイプロフィール)github/LeafCagevimに関する記事(はてなグループ)はてなブログをはじめよう!leafcageさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。