#え、今更ですか?
##PowerLineとは
一言で言うと、なんかわからんがターミナルがカッコよくなるツール。
ターミナルのプロンプト(jj1lis@hoge.qiita.com: ~/work $
みたいなやつ)の表示内容は、大抵シェルの環境変数で管理されています。bashやzshなら$PS1
ですね。
これを管理して、見た目もカッコよくしつつgit等のブランチ表示など便利機能も追加してくれるツールがPowerLineです。
御本尊:https://github.com/powerline/powerline
##導入理由
前々からPowerLineの存在自体は何となく知ってはいたものの、「なんか導入面倒そうだし...」と敬遠していました。
しかし最近gitを使っている際に間違えて別のbranchにcommit、そのまま気づかずpushしてしまうことが何度かあり、試しに使ってみようかと腰を上げた次第です。
#導入
環境は以下の通りです
- Linux Mint 19.1 MATE 64-bit
- GNU bash v4.4.20
- pip 9.0.1
##インストール
Pythonで開発されており、pipでパッケージごとインストールできます。
pip3のパッケージはなさそうでした。Python2.7のサポート終わったけど大丈夫だろうかとも思いましたが、動いてるからヨシ!の精神で続行します
$ sudo pip install powerline-shell
##フォント
何やらPowerLine用のフォントを利用しないと表示が気持ち悪いことになるとの話なので用意します。今回はmzyy94さんのRicty Diminished with Powerline patchedを使います。Ricty Diminishedという、日本語環境では有名なフォントのPowerLine対応版のようです。
フォントセットは~/.fonts/
に置いておきます、なければ作っておいて、その中で
$ git clone https://github.com/mzyy94/RictyDiminished-for-Powerline.git
とすればレポジトリごと持ってこれます。
このままでシステムはフォントを認識してくれるはずですが、もしダメならfc-cache
で更新できます。
##セッティング
Gnome端末なら等幅フォントについては
$ gsetting set org.gnome.desktop.interface monospace-font-name 'Ricty Diminished for Powerline Regular 12'
#最後の数字部分はお好みで
とすればシステム全体の設定を変更できます。しかしLinux Mint MATEの標準ターミナルはMATE端末というちょっと違ったもので、手を焼きました。
/usr/share/glib-2.0/schemas/org.mate.terminal.gschema.xml
を見たところ、関係のありそうな部分は
<!-- 前略 -->
<key name="font" type="s">
<default>'Monospace 12'</default>
<summary>Font</summary>
<description>An Pango font name. Examples are "Sans 12" or "Monospace Bold 14".</description>
</key>
というkeyがあるくらいでしたが、
$ gsetting get org.mate.termial font
No such key "font"
といった具合に、「そんなkeyねーよ!」とキレられてしまいました。
仕方ないのでウィンドウ上部の「編集」→「プロファイルの設定」から個別に設定しました。解決案募集中です。
##bashrcに設定
今までの手順で導入すれば、PowerLineの実体は、~/.local/bin/powerline-shell
にあります。この出力を$PS1
に入れることでプロンプトが設定できるのですが、それだけではディレクトリのやbranchの状態の変化が表示されません。
そこで環境変数$PROMPT_COMMAND
に、上記の処理を入れておきます。$PROMPT_COMMAND
内に記述された処理はプロンプトを表示する度に実行されます。
具体的にはこのような内容をbashrcに追記しました。
_powerline_ps1() {
PS1="$(~/.local/bin/powerline-shell $?)"
}
if [ "$TERM" != "linux" ]; then
PROMPT_COMMAND="_powerline_ps1; $PROMPT_COMMAND"
fi
この辺の記述はこちらをパクリ参考にしました。ありがとうございます。
この後新しくシェルを立ち上げるか、source ~/.bashrc
とすれば設定が反映されます。
#VimでもPowerLine
vim-airlineというプラグインを使えば、Vimもイイ感じにカッコよくできます。
僕はvim-plug派なので、こんな感じにvimrcに追記しました。
call plug#begin()
"中略
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()
set t_Co=256
let g:airline_powerline_fonts = 1
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#buffer_idx_mode = 1
let g:airline#extensions#whitespace#mixed_indent_algo = 1
let g:airline_theme = 'dark'
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_left_sep = '»'
let g:airline_left_sep = '▶'
let g:airline_right_sep = '«'
let g:airline_right_sep = '◀'
let g:airline_symbols.crypt = '🔒'
let g:airline_symbols.linenr = '☰'
let g:airline_symbols.linenr = '␊'
let g:airline_symbols.linenr = ''
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.maxlinenr = ''
let g:airline_symbols.maxlinenr = '㏑'
let g:airline_symbols.branch = '⎇'
let g:airline_symbols.paste = 'ρ'
let g:airline_symbols.paste = 'Þ'
let g:airline_symbols.paste = '∥'
let g:airline_symbols.spell = 'Ꞩ'
let g:airline_symbols.notexists = '∄'
let g:airline_symbols.whitespace = 'Ξ'
この辺の記述は@park-jh様のPowerlineは難しくないよ!を剽窃見ながら書きました。ありがとうございます。
let g:airline_theme ='<theme>'
の部分を変えることで色々なテーマを使えます。vim-airlineのwikiに例があるので、好みのものを選びましょう。
注意すべき点は、Vimは標準では8色しか表示できないため一部のテーマは色が表示できません。
そのため、set t_Co=256
とすることで256色まで表示できるようにしています。
最後にvimを開き直し、:PlugInstall
と実行。問題なくインストールが完了すれば完成です。
#その後
常時PowerLineつけっぱだと地味に重くてイライラするので、手動でon/offできるようにしました。
_powerline_ps1() {
PS1="$(~/.local/bin/powerline-shell $?)"
}
_my_ps1(){
PS1="\[\e[1;31m\]\u\[\e[1;32m\]@\H\[\e[1;37m\]:\[\e[1;34m\]\w \$\[\e[m\] "
}
plstart(){
if [ "$TERM" != "linux" ]; then
PROMPT_COMMAND=$(echo -n "_powerline_ps1;$PROMPT_COMMAND"|sed -e "s/_my_ps1;//g")
fi
}
plend(){
if [ "$TERM" != "linux" ]; then
PROMPT_COMMAND=$(echo -n "_my_ps1;$PROMPT_COMMAND"|sed -e "s/_powerline_ps1;//g")
fi
}
if [ "$TERM" != "linux" ]; then
PROMPT_COMMAND="_my_ps1;$PROMPT_COMMAND"
fi
こう書いておくことでシェル起動時は普通のプロンプト、plstart
を実行するとPowerLineプロンプトに切り替わり、plend
で元のプロンプトに復帰できるようにしました。
#参考一覧