Stimulator

機械学習とか好きな技術話とかエンジニア的な話とかを書く

xonshrcを書く

- はじめに -

この記事は、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"

見た目はこんな感じ

f:id:vaaaaaanquish:20171209154013p:plain

これだけで大体良い感じですが、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して埋めてくれてもいいのよ!

qiita.com