xonshのわからなかったことと解決したこと
はじめに
最近Twitter周りでxonsh(コンシュ)についてのツイートを見ない日はないぐらい注目されてますよね
僕は流行りモノ大好きですけど,IT系の知識はそんなにないので
自分と同じノリではじめた人に困った点とその解決について共有しておければなという記事です
とりあえず自己紹介挟んで導入から書いていきます
でもそこは飛ばしてもらってもOKです 似た感じの人にxonshを紹介する時に使えるかもしれません
自己紹介
私について
Pythonを使い始めて半年と少しくらいです
Pythonの認識はWindows, Mac, Ubuntuでだいたい同じ感じに動いてくれる,
簡単便利有能な言語くらいに思っています
またbashからzshに乗り換えたのが4ヶ月前くらいです
Fishはなんか合いませんでした
のでこのシェルは三つ目ですね
何故Xonshを使い始めたのか
- 導入が楽そう
- zshに飽きた
- 多分Windowsでも同じ感じで使えるだろう(未検証)
- 曖昧にシェルスクリプト書くよりはマシにPythonでスクリプト書いたりalias書いたり出来るだろうという期待
みたいな感じです
使っている感じだとTensor FlowのEager Executionがシェルで動くので便利です
シェルで人工知能できます
導入
取りあえずpip install xonsh
したら怒られました
未だにPython 2系を使っていたからです
Anacondaかなにかで3.4以上の系で環境を作ってもう一度試します
インストールが成功後,ターミナルでxonsh
すると取り敢えず何か出てきます
xonsh tutorial
するとWeb上のチュートリアルに飛ぶらしいですが飛びませんでした(High Sierra)
xonsh wizard
すると色々セッティングが始まります
ここやっておくと何が既に出来上がってるのかなんとなくわかるような気がします
Xontribs
拡張機能なしのシェルってかんがえられないでしょ?xonshも拡張機能あるよ xontribsだよって感じのことが書いてあり
拡張機能が一つづつ紹介されます
これを全部答えるとYesに回答したものはpipでインストールしてくれます
exitでxonshから抜けて,元のシェルに行きます
Xonsh 再起動
悩み
しばらくこれに悩まされていました
入れたはずのxontribsが反映されていないみたいです
pip install xxxx
してみるとrequired satisfiedみたいなのが出てきます
解決
pipがだめでした
conda環境以下のpipではなく,2系の元々入っていたpipを使っていました
which pip
とかして出てきたところをunlink /path/to/pip
としたらどうにかなりました
コマンド作る
.xonshrcに何かコマンドを書こう!aliasはっておこう!
aliases['hello'] = hello
def hello(args, stdin):
print('Hello', args[0])
悩み
上のコードが正常に作動しませんでした
何度source ~/.xonshrc
してもNameError: name 'hello' is not defined
解決
zshとは違い,下で書いた関数をaliasにすることは出来ません
xonshrcはPython?ですので先に関数を書いておく必要がありました
プロンプト変える
$PROMPT={ cwd }
とかでなんとかなるようです
自分は以下のようにしています
$PROMPT='{BOLD_GREEN}{cwd}{branch_color}{curr_branch: {}}{NO_COLOR} {BOLD_BLUE}{prompt_end}{NO_COLOR} '
悩み
zshの方の設定だと/path/to/dir
は/p/t/dir
のようにすることが出来るのですが
xonshだとうまく行っていないです
どなたかわかる方いらっしゃいませんか
解決
コメントありがとうございました
https://qiita.com/hashimock/items/c9810430498043fd70eb#comment-10551242ad6b0a8b9fea
$PROMPT='{BOLD_GREEN}{short_cwd}{branch_color}{curr_branch: {}}{NO_COLOR} {BOLD_BLUE}{prompt_end}{NO_COLOR} '
これで解決です!
Vimで.xonshrcを編集する
悩み
Vimで.xonshrcを編集するとシンタックスハイライトがつかないのがつらいです
解決
/usr/share/vim/vim80/filetype.vim
を見ると,以下のように書かれています
" Python, Python Shell Startup Files
" Quixote (Python-based web framework)
au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc,*.ptl setf python
これを真似て.vimrcなどに対して,以下のように,.xonshrc
について記すと.xonshrc
ファイルでシンタックスハイライトが効きます
" Python, Python Shell Startup Files
" Quixote (Python-based web framework)
au BufNewFile,BufRead *.py,*.pyw,.pythonstartup,.pythonrc,*.ptl,.xonshrc setf python
実用ネタ
Slackのステータスで自分がどこにいるか他の人に教えておきたいとかあるじゃないですか?
例えばご飯してるだったり,例えばサーバー室にいるであったり
Xonshでslack server_2
とかやったらStatus変更できるとかあればうれしいですよね!!
def slack(args):
import requests
import json
emoji = ":"+args[0]+":"
req_result = requests.post('https://slack.com/api/users.profile.set',params={
"token":"YOUR_TOKEN",
"profile":"{'status_emoji':'"+ emoji + "'}"
})
print(req_result.content)
aliases['slack'] = slack
これでターミナル上からSlackのステータスを変更できます!!
クリスマス小ネタ
アドベントカレンダーなのでコマンド作ってメリークリスマスしました
コードはGistに置いておきます
https://gist.github.com/hashimock/c39fdaa7139f4647b6ef7b431893a260
おわりに
表層的なところしか触っていない感じなので特に困るところとかありませんでした……
あと2週間くらいありますが,皆様善きクリスマスを!