zsh(bash)からxonshに乗り換えたい
ここ数年は手元の端末ではzshを使用していたが、最近xonshを試しています。
約2年の時を経てxonshに再チャレンジしようとしてる。特に理由はないんだけど。 https://t.co/Uybrmq6HEs
— Koh (@koh_sh) February 16, 2021
基本的な情報は下記。ざっくり言うとpython製のシェルです。
現状はxonshrcを育てたりしている最中なのですが、これまでzsh(bash)でできていたことをxonshでやろうとした際の設定をいくつかメモしておきます。
*動作環境
koh@Kohs-MacBook-Pro-M1 ~ $ sw_vers ProductName: macOS ProductVersion: 11.2.1 BuildVersion: 20D74 koh@Kohs-MacBook-Pro-M1 ~ $ xonsh --version xonsh/0.9.26 koh@Kohs-MacBook-Pro-M1 ~ $ python --version Python 3.9.1 koh@Kohs-MacBook-Pro-M1 ~ $
直前のコマンドの戻り値 $?
$?
の代わりに_.rtn
でとれます。
koh@Kohs-MacBook-Pro-M1 ~ $ ls nothing ls: nothing: No such file or directory koh@Kohs-MacBook-Pro-M1 ~ $ echo $? $? koh@Kohs-MacBook-Pro-M1 ~ $ ls nothing ls: nothing: No such file or directory koh@Kohs-MacBook-Pro-M1 ~ $ print(_.rtn) 1 koh@Kohs-MacBook-Pro-M1 ~ $
ちなみにzshだと setopt print_exit_value
を設定すると戻り値が0以外の時に表示してくれますが、xonshだと xontrib load prompt_ret_code
するとプロンプトに表示してくれます。こちらの方が見やすい
koh@Kohs-MacBook-Pro-M1 ~ $ xontrib load prompt_ret_code koh@Kohs-MacBook-Pro-M1 ~ $ ls nothing ls: nothing: No such file or directory koh@Kohs-MacBook-Pro-M1 ~ [1]$ true koh@Kohs-MacBook-Pro-M1 ~ $
直前のコマンドの最後の引数 $_
zsh(bash)だと $_
でとれたんですがxonshだととれないようです。
koh@Kohs-MacBook-Pro-M1 ~ $ echo aa bb aa bb koh@Kohs-MacBook-Pro-M1 ~ $ echo $_ $_ koh@Kohs-MacBook-Pro-M1 ~ $
!$
は使えるようなのでこちらで代用します。
bashismというxontribが必要です。
koh@Kohs-MacBook-Pro-M1 ~ $ xontrib load bashisms koh@Kohs-MacBook-Pro-M1 ~ $ echo aa bb aa bb koh@Kohs-MacBook-Pro-M1 ~ $ echo !$ bb koh@Kohs-MacBook-Pro-M1 ~ $
sshのホスト名補完
xonshはデフォルトだと補完してくれないのでbash-completionを使用します。
bash-completionをインストールして$BASH_COMPLETIONS
を適宜修正します。
brew install bash-completion2 #macの場合 $BASH_COMPLETIONS=('/opt/homebrew/share/bash-completion/bash_completion')
まとめ
bashからの乗り換え用の情報は公式がまとめていました。
あとはzshのselect-word-style
に相当する設定を探してるのですが今のところ見つからない。
("/"などを区切り文字として認識してくれるやつ)
使っていくうちにまた何か見つけたら追記する予定。