おそらく多くの人が初めて触れたターミナルはconhost.exeではないでしょうか.
Windows10時代まではcmd.exeやPowerShellを呼び出すとConsoleHost(conhost.exe)が使われていました.
私はまだアップデートしていないため分かりませんが, windows11からはWindowsTerminalがデフォルトになるようです.
ConsoleHostからWindowsTerminalに乗り換え
Windows11なら既にインストールされているはずですし, windows10ならMicrosoft Storeからインストールできます.
cmd.exeやPowerShellは勿論, WSLも動きます.
WindowsTerminalではタブやウィンドウの概念があり, ターミナルマルチプレクサのような操作が可能です.
更に, 外観, 操作などを自由で複雑に設定が可能です.
WindowsTerminalの設定
私は以下のような感じでEmacsとWindowsを合わせたような操作設定にしてみました.
操作 | キー |
---|---|
フォーカス移動上 | alt+shift+p |
フォーカス移動下 | alt+shift+n |
フォーカス移動左 | alt+shift+b |
フォーカス移動右 | alt+shift+f |
ウィンドウ分割(下) | alt+shift+2 |
ウィンドウ分割(下) | alt+shift+5 |
ウィンドウを閉じる | ctrl+shift+w , alt+shift+d |
ウィンドウのサイズを変更(上) | alt+shift+up |
ウィンドウのサイズを変更(下) | alt+shift+down |
ウィンドウのサイズを変更(右) | alt+shift+right |
ウィンドウのサイズを変更(左) | alt+shift+left |
など
フォントや配色は以下のようになりました.
色んなプログラミング/ターミナル用のフォントを試しましたが, 自分の場合はこれに落ち着きました.
シェルの設定
UNIX系OSだけの話になってしまいますが, 多くのシェルにはbashが使われています.
プロンプト部分を変えるだけでも大分使い勝手が上がるので変えましょう!
色々とコネコネしまして, 出来たプロンプトがこんな感じ.
赤で囲った上が説明で下が実際のプロンプトです.
2行使い, 1行目にステータス, 2行目にプロンプト本体を表示することで長いコマンドを入力しても改行されずらくしています.
私は以下を.bashrc
に加えました.(ご自分の環境にコピペする場合は必要に応じてちゃんと書き換えてください)
gitステータス取得処理部分
function parse_git_dirty {
status=$(git status 2>&1 | tee)
dirty=$(echo -n "${status}" 2> /dev/null | grep "modified:" &> /dev/null; echo "$?")
untracked=$(echo -n "${status}" 2> /dev/null | grep "Untracked files" &> /dev/null; echo "$?")
ahead=$(echo -n "${status}" 2> /dev/null | grep "Your branch is ahead of" &> /dev/null; echo "$?")
newfile=$(echo -n "${status}" 2> /dev/null | grep "new file:" &> /dev/null; echo "$?")
renamed=$(echo -n "${status}" 2> /dev/null | grep "renamed:" &> /dev/null; echo "$?")
deleted=$(echo -n "${status}" 2> /dev/null | grep "deleted:" &> /dev/null; echo "$?")
bits=''
if [ "${renamed}" == "0" ]; then
bits=">${bits}"
fi
if [ "${ahead}" == "0" ]; then
bits="*${bits}"
fi
if [ "${newfile}" == "0" ]; then
bits="+${bits}"
fi
if [ "${untracked}" == "0" ]; then
bits="?${bits}"
fi
if [ "${deleted}" == "0" ]; then
bits="x${bits}"
fi
if [ "${dirty}" == "0" ]; then
bits="!${bits}"
fi
if [ ! "${bits}" == "" ]; then
echo " ${bits}"
else
echo ""
fi
}
function parse_git_branch() {
BRANCH=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
if [ ! "${BRANCH}" == "" ]; then
STAT=$(parse_git_dirty)
echo "[${BRANCH}${STAT}]"
else
echo ""
fi
}
シェル本体
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\e[01;32m\]\u\[\e[m\]\[\e[01;32m\]@\[\e[m\]\[\e[01;32m\]\h\[\e[m\] \[\e[01;33m\]\H\[\e[m\][$?]\[\e[36m\]$(parse_git_branch)\[\e[m\]:\[\e[01;36m\]\w\n\[\e[00m\]\$ '
else
PS1='\u@\h \H[$?]$(parse_git_branch):\w\n\\$ '
fi
Powerlineなどを導入すればもっとカッコいいプロンプトにできますが, 私の場合は移植性に重きをおいているので, 敢えて導入していません.
今度, 作業用のデスクトップだけはゴリゴリにカスタムしてみようかな