- はじめに -
この記事は、Xonsh Advent Calendar 2017 - Qiitaの9日目の記事です。
1日目にXonshを勧める記事を書いて「アドベントカレンダーでxonshrcのオススメ設定が出揃う」と言ったものの、なかなかそれらしい記事が出てこないので書いておきます。
Python Prompt Toolkitが使えるなら、アドベントカレンダー内の以下の記事もオススメです。
qiita.com
追記2018/06/22:
さらにちゃんとまとめました
vaaaaaanquish.hatenablog.com
vaaaaaanquish.hatenablog.com
追記2019/08/28
さらに最新のxonsh 0.9.10のEnvを全て実装付きでまとめました
こちらのほうが参考になると思います。
vaaaaaanquish.hatenablog.com
- 私のxonshrc -
先に結論として設定している最もシンプルな部分のrcを出しておきます。
xonshrcを制御するxonsh/configファイルについては基本的にはdefaultのものを利用しています。
# vi風の操作 $VI_MODE = True # Ctrl + D で終了しない $IGNOREEOF = True # tabではなく空白4つ $INDENT = " " # 補完時に大小区別しない $CASE_SENSITIVE_COMPLETIONS = False # 補完選択Enterで即実行しない $COMPLETIONS_CONFIRM = True # 連続重複コマンドを保存しない $HISTCONTROL = (ignoredups) # 括弧を補完 $XONSH_AUTOPAIR = True # ディレクトリ名を入力すればcdできる $AUTO_CD = True # エラー全て吐くように $XONSH_SHOW_TRACEBACK = True # プロンプトの設定タイムアウトのメッセージ抑制 $SUPPRESS_BRANCH_TIMEOUT_MESSAGE = True # 見た目ウザかったら切か変更する # 参考:http://xon.sh/tutorial.html#customizing-the-prompt # プロンプト上には場所だけ出す $PROMPT = "{INTENSE_YELLOW}[ {cwd} ] {GREEN}$ " # 下部にuser, host情報を追加 $BOTTOM_TOOLBAR = "{BACKGROUND_WHITE}{BLACK}{user}@{hostname}" # 右にbranch情報 $RIGHT_PROMPT = "{curr_branch}" # lsコマンドの結果の見た目 $LS_COLORS="di=34:ln=35:so=32:pi=33:ex=31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30" #えいりあす aliases["lt"] = "ls -ltr" aliases["l"] = "ls -ltr" aliases["la"] = "ls -la" aliases["ll"] = "ls -l" aliases["so"] = "source" aliases["v"] = "vim" aliases["vi"] = "vim" aliases["vx"] = "vim ~/.xonshrc" aliases["vv"] = "vim ~/.vimrc" aliases["vs"] = "vim /etx/ssh/ssh_config" aliases["cp"] = "cp -i" aliases["rm"] = "rm -i" aliases["ju"] = "jupyter notebook"
見た目はこんな感じ
これだけで大体良い感じですが、Pythonで関数を作ってそこにaliasを貼ることももちろんできるので、加えて幾つか記述していますがそれらについてはまた別途。
- xonshrcで使える環境変数まとめ -
以下ではxonshrcで使える環境変数をまとめておきます。
基本的には、以下Referenceに書いてある内容です。
Environment Variables — xonsh 0.9.11 documentation
見た目、表示系
# カラーテーマ # 自分はdefaultでiTerm2側の設定を利用 # xonfig styles コマンドで全てのスタイル表示 # 良さげなのだと'native' $XONSH_COLOR_STYLE = ‘default’ # 下部に表示するツールバー # prompt-toolkitが導入されているShellのみ $BOTTOM_TOOLBAR # Shell上のシンタックスハイライト強調表示 $COLOR_INPUT = True # コマンド実行の戻り値にもシンタックスハイライト $COLOR_RESULTS = True # インデント文字列 # 空白4つとかTabとか任意に $INDENT = " " # 改行した時にでてくる左端の文字 # 指定された長さ以下だった場合は繰り返し表示される $MULTILINE_PROMPT = "." # 右揃えで表示する文字列 $RIGHT_PROMPT = "" # プロンプトのサブプロセス、書式設定などのタイムアウト $VC_BRANCH_TIMEOUT = 0.1 # プロンプトの設定タイムアウトのメッセージ抑制 $SUPPRESS_BRANCH_TIMEOUT_MESSAGE = False # MercurialのbranchをTerminalに表示するか $VC_HG_SHOW_BRANCH = True # datetime.strptime()で出せる時間の表示の仕方 $XONSH_DATETIME_FORMAT = ‘%Y-%m-%d %H:%M’ # xonshの見た目の色々、文字のシンボル # http://xon.sh/envvars.html#xonsh-gitstatus $XONSH_GITSTATUS_* # エラーが出たときトレースバックを表示するかどうか $XONSH_SHOW_TRACEBACK = False # defaultプロンプトの見た目設定 # http://xon.sh/tutorial.html#customizing-the-prompt $PROMPT = xonsh.environ.DEFAULT_PROMPT # titleとpromptのカスタマイズ # http://xon.sh/tutorial.html#customizing-the-prompt $PROMPT_FIELDS = xonsh.prompt.PROMPT_FIELDS # PROMPTのエラー表示版 $XONSH_STDERR_POSTFIX $XONSH_STDERR_PREFIX
操作
# マウス操作で履歴戻ったりするかどうか # prompt_toolkitが導入されているShellのみ $MOUSE_SUPPORT = False # Ctrl + D で終了しない $IGNOREEOF = False # vi風の操作 $VI_MODE
補完
# キー入力ごとに評価する $UPDATE_COMPLETIONS_ON_KEYPRESS = False # プロンプト間でコマンドをcacheしない設定にするか # Trueにすると毎回キー入力待ち再評価が発生する $UPDATE_PROMPT_ON_KEYPRESS = False # 補完時に大文字小文字区別するか # LinuxだとdefaultでTrue # 個人的にはFalse派 $CASE_SENSITIVE_COMPLETIONS # コマンド履歴の保存の仕方 # ignoredupsは重複コマンドを保存しない # ignoreerrは失敗したコマンドを保存しない $HISTCONTROL = (ignoredups, ignoreerr) # 補完時に[]と()を考慮する $COMPLETIONS_BRACKETS = True # ユーザ確認する前に補完を表示する上限数 $COMPLETION_QUERY_LIMIT = 100 # Tab補完メニューで表示する行数 # prompt-toolkitが導入されているShellのみ $COMPLETIONS_MENU_ROWS = 5 # Tab補完メニューが表示されている時にEnterで即実行するか # Trueなら実行しない # prompt-toolkitが導入されているShellのみ $COMPLETIONS_CONFIRM = False # Tab補完のPathのsubsequence matching # ~/u/ro で ~/lou/carcolh をよしなに補完してくれるみたいなやつ $SUBSEQUENCE_PATH_COMPLETION = True # Pythonスクリプトの補完 # 基本的にdefaultがサイコー # prompt-toolkitが導入されているShellのみ $COMPLETIONS_DISPLAY = multi # あいまい補完をするか $FUZZY_PATH_COMPLETION = True # 補完サジェストを出す # defaultでTrue $AUTO_SUGGEST_IN_COMPLETIONS = True # 補完サジェストを 右矢印キーで入力 # $SHELL_TYPE=prompt_toolkitが指定されている必要あり # defaultがTrueなのでptkが入っていればデフォで動いてるはず $AUTO_SUGGEST = True # BASHの補完機能をそのまま利用するための # defaultでは以下、tupleを指定する $BASH_COMPLETIONS = ('/usr/share/bash-completion/bash_completion', ) # パターンマッチなどglobした時に結果をソートするか $GLOB_SORTED = True # 実行可能なファイルの拡張子 # 大文字で書く必要がある $PATHEXT = [".EXE"] # 変なコマンドを入力したら もしかして を出す $SUGGEST_COMMANDS = True # もしかして最大数 $SUGGEST_MAX_NUM = 5 # もしかしてサジェストの誤字数 $SUGGEST_THRESHOLD = 3 # 出力後に新しい空行を追加するか $XONSH_APPEND_NEWLINE = False # [], ()などの括弧を補完するか $XONSH_AUTOPAIR = False # 全てのコマンド実行をcacheするか $XONSH_CACHE_EVERYTHING = False # コードをcacheしておくか(T)、毎回コンパイルして実行するか(F) $XONSH_CACHE_SCRIPTS = True
ディレクトリ移動
# ディレクトリ名を入力すればcdできる $AUTO_CD = False # ディレクトリ移動したらスタックにpush # dirstack実装 : https://pypkg.com/pypi/xonsh/f/xonsh/dirstack.py $AUTO_PUSHD = False # pushdした時にdirで現在のスタック内容を表示しない $PUSHD_SILENT = False # dirstack最大数 $DIRSTACK_SIZE = 20 # CD時にshとのroot関係が壊れないようにPATH指定するやつ # zshでいうこれ : https://robots.thoughtbot.com/cding-to-frequently-used-directories-in-zsh $CDPATH = ("/", ) # cwdコマンドで指定したディレクトリに向けたショートカット $DYNAMIC_CWD_ELISION_CHAR = "/" # cwdプロンプト変数の文字数の指定 $DYNAMIC_CWD_WIDTH = (inf, ‘c’)
変数、設定
# PYTHON_PATH $PATH = (...) # 前回の作業ディレクトリ $OLDPWD # サブプロセスモードで文字列内の環境変数を展開するか $EXPAND_ENV_VARS = True # xonshの場所 $XONSH_CONFIG_DIR = $XDG_CONFIG_HOME/xonsh # 外部のaliasを優先するかどうか # $XONSH_CONFIG_DIR/config.jsonに書くのでxonshrcに書いても意味はない $FOREIGN_ALIASES_OVERRIDE = False # $XONSH_CONFIG_DIR/config.jsonが読まれたかどうかがboolで入ってるので判定用 $LOADED_CONFIG # 読見込まれたRCが動いているかのbool値のlist $LOADED_RC_FILES = (~/.xonshrc) # 連続でコマンド実行した時にスリープする秒数 $XONSH_PROC_FREQUENCY = 0.0001 # pretty printingの戻り値があるかどうか # import pprintしたりするなら $PRETTY_PRINT_RESULTS # configファイルへのPATH $XONSHCONFIG = $XONSH_CONFIG_DIR/config.json # rcファイルへのPATH $XONSHRC = ['/etc/xonshrc', '~/.xonshrc'] # デスクトップ標準のディレクトリ $XDG_CONFIG_HOME = ~/.config # デスクトップ標準のデータディレクトリ $XDG_DATA_HOME = ~/.local/share # 実際のxonshデータが入っている場所 $XONSH_DATA_DIR = $XDG_DATA_HOME/xonsh # ディレクトリプッシュがされているかどうかのフラグ $PUSHD_MINUS # xonsh環境が変化したかのフラグ $UPDATE_OS_ENVIRON # python実行環境へのPATH $VIRTUAL_ENV # インタラクティブ実行で動いてるかどうかのフラグ $XONSH_INTERACTIVE # xonshがログインシェルになっているかどうかのフラグ $XONSH_LOGIN # xonshスクリプトを実行している場合、そのスクリプトへの絶対Path $XONSH_SOURCE
Windows向け
# Windowsのanxicon用 $ANSICON = False # 補完した時に"/"を強制的に使用 $FORCE_POSIX_PATHS = False # cmd.exe上で色を変える $INTENSIFY_COLORS_ON_WIN = True # Winでユニコード使う $WIN_UNICODE_CONSOLE
その他
# readline, prompt_toolkit, random, best # 基本的にはptlが使われてそれ以外の状況ではよしなに選択してくれるbestでOK $SHELL_TYPE = best # プロンプトのタイトル # http://xon.sh/tutorial.html#customizing-the-prompt $TITLE = xonsh.environ.DEFAULT_TITLE # 文字コード $LANG = ‘C.UTF-8’ # サブプロセスが利用するエンコーディング $XONSH_ENCODING # エンコーディングエラーを処理するフラグ # https://docs.python.org/3/library/codecs.html#error-handlers $XONSH_ENCODING_ERRORS = surrogateescape # サブプロセスでエラーが出た時終了させるかどうか # xonshプロンプト上ではあまり良くないが、 xonshスクリプトを実行する時効果あり # subprocess.CalledProcessErrorがraiseされる $RAISE_SUBPROC_ERROR # historyでjson以外にsqliteが選べる $XONSH_HISTORY_BACKEND = ‘json’ # historyファイルの保存先 $XONSH_HISTORY_FILE = ~/.xonsh_history # コマンドやファイルのhistory保存数 # http://xon.sh/envvars.html#xonsh-history-size $XONSH_HISTORY_SIZE = (8128, 'commands') # Standard I/OをHistoryに保存するか $XONSH_STORE_STDIN $XONSH_STORE_STDOUT # 端末エミュレータによるTerminalの設定色々。基本触る機会はない $TERM # エラーのトレースバックログを保存するPathの指定 $XONSH_TRACEBACK_LOGFILE = "/" # デバッグ機能、数値に応じて以下が出てくる # 1, 重複importの抑制情報 # 2, 入力変換、コマンド置換の情報 # 3, PLYデバッガによる解析結果 $XONSH_DEBUG = 0
- おわりに -
ひとまずまとめて終わりです。
またアドベントカレンダー内に空きがあれば自作のrcに書いている関数群を出していこうと思います。
誰か今からpip installして埋めてくれてもいいのよ!