xonsh にした動機とか
今までシェルには fish
を使ってきましたが, xonsh
に乗り換えることにしました.
xonsh
がナニモノでナゼおすすめかは,ばんくし氏による「
Pythonistaに贈るXonshのススメ」あたりを見て頂くといいです.
ざっくり言うと sh
も Python
も動かせちゃうシェル.
だからこそ「Pythonistaに贈る」との煽り文句がついたわけですが,私は Python
わからん人です.
それでも引っ越す理由は,関数を Python
で書けるので python
の勉強になるからです.
後ろ向きな理由としては fish
独自の文法を覚える気が湧かないからですね.
とりま xonshrc
とりあえずばんくし氏の「 xonshrcを書く」から,撮み食いしてコピペしました.
プロントについて
他はばんくし氏の撮み食いに等しいですが,プロンプトだけは拘りました.
私は fish
のテーマでは oh-my-fish/theme-yimmy を愛用していました.
そこで yimmy に似せつつ (下図上側),より良いカンジにしようと思いました (下図下側).
yimmyではユーザー名・ホスト名・カレントディレクトリ・ブランチ情報を一行に左詰めに表示し,改行した先にコマンドを入力させます.
このスタイルの良いところは
- シンプルながら情報量が多いこと
- 2行使うため,履歴を遡った時,プロンプトと標準出力の区別がつきやすいこと
- ほぼ行頭からコマンド入力できるため,少々長くても安心なこと
だと思います.
一方で,
- カレントパスは親ディレクトリ名もフルネームにして欲しい
- プロンプトと直前の標準出力との境界はもっとはっきりしさせたい
といった要望がありました.そこで
- 1行目は
- 左に
[ フルパス ] git status
- 右に
ユーザー名@ホスト名
- 左に
- 2行目はコマンド入力行
- 標準出力の後に空行を挿入
となるようにしました (先程の画像を参照).
初回投稿時は \n
で一行目に空行を入れていましたが,
$XONSH_APPEND_NEWLINE
という環境変数を見つけたので,標準出力の後に空行を挿入するよう変更しました (2019-04-15).この方が xonsh
起動時に無駄な空白が1行目に入らず済みます.
色使いも似せようと思いましたが, xonsh
による git status
の色使いを変更するのが面倒だったので,色被りしない範囲で見易そうな色を選択した次第です.
ちなみにウィンドウ幅を小さくすると,右側のユーザー名@ホスト名
が省略されるのもちょっとステキ.
実装したスクリプトは以下の通り.
# Look & Feel inspired by oh-my-fish/theme-yimmy
# http://xon.sh/tutorial.html#customizing-the-prompt
$PROMPT = "{RED}┌{INTENSE_GREEN}[ {cwd} ] {gitstatus}\n{RED}└{INTENSE_GREEN}> "
$RIGHT_PROMPT = "{user}@{hostname}"
$XONSH_APPEND_NEWLINE = True
ばんくし氏は下記のスクリプトにより,ウィンドウ下部にユーザー名・ホスト名を表示するようにしています.私の場合はこの情報をプロンプト右側に持ってきたので,下部には情報を表示しないことにしました.
# 私の場合は以下をコメントアウト
$BOTTOM_TOOLBAR = "{BACKGROUND_WHITE}{BLACK}{user}@{hostname}"
よくアクセスするパスへのショートカット
aliases["cd.fav"] = "cd ~/path/to/the/favorite/directory"
といった感じで cd.キーワード
形式でお気に入り登録してます.一般的にどうやってるのかは知らない.
その他
連続した重複コマンドを保存しないようにする $HISTCONTROL = (ignoredups)
については,
ignoredups は未定義だゾ
と怒られました.
GitHub で先人の設定を検索すると $HISTCONTROL = "ignoredups"
にすればよさそうです.
でも history
コマンド実行すると,連続した重複コマンドが保存されている気がするのだけれど……?
あとの設定はほとんどばんくし氏のコピペなので,省略します.