Posted at

bash on windowsってすごーい!powerlineとTmuxを駆使してMacのターミナルっぽくする(Tera Termも卒業する)

More than 1 year has passed since last update.


はじめに

私はプライベートでmacOS Sierraを使用していて、ターミナルはこんな感じに設定しています。

題名にもある通り、tmuxとpowerlineを使ってます。

image

しかしWindowsのコマンドプロンプトはどうしても使いづらいです。

「あ~業務端末もMacにしてくれないかな~」と嘆いていましたが、偉大な先輩たちはそんな文句も言わずWindowsでもイケてるターミナルを構築しているんですよね。

そういうわけで、この画像に限りなく近いターミナルをWindowsでも構築することに。

※macで構築する場合はADACHIN SERVER Labにわかりやすく書いてあります。


cmderを入れるとよい

偉大な記事です。もうこれだけで全然違います。こちらの記事を参考にまずはcmdから離れます。

記事にも記載されてますが、mini版を落としました。


Bash on Windows + cmderでまともなターミナルを獲得する(tmuxに関する追記有り)

cmderをダウンロード


Macではzshを使用しているので、Windowsでも合わせてzshをデフォルト起動に設定しました。

zshをインストールしていない場合は以下の手順でできます。

C:\Users\username

入 bash #bashと入力すればbashが起動します
root@DESKTOP-XXX:/mnt/c/Users/username# apt-get install zsh

あとは参考記事に記載されたとおり、zshをデフォルトで起動する設定を加えればOKです。


powerlineのインストール

powerlineはpipを使ってインストールするので、pipが入ってない場合は先にインストールします。

$ apt-get install python-pip

その後、powerlineをインストールします。

pip install powerline-status

すると、以下の場所にディレクトリが配置されます。

/usr/local/lib/python2.7/dist-packages/powerline

さらに下の階層にある、config_filesというディレクトリをホームディレクトリにコピーしたいので先にディレクトリを作成しておきます。

$ mkdir -p ~/.config/powerline

ディレクトリを移動して、ソースをコピーします。


/usr/local/lib/python2.7/dist-packages/powerline/config_files

$ cp -r * ~/.config/powerline


これでホームディレクトリでconfigを自由に編集できますね。


設定ファイル

ホームディレクトリにコピーしたファイルをちょっといじってみます。


~/.config/powerline/themes/

$ vim powerline.json


image

70行目あたりから天気の記述があると思います。ターミナルに天気を表示させたい場合、locationの記述が必要らしいのでわかりやすく86行目に追記しておきます。

"location_query": "tokyo, japan"

※画像MacですがWindowsも同じです。

image


Tmuxをインストール

以下のコマンドでインストールします。

$ apt-get install tmux

$ tmux -V

tmux 1.8

バージョンが見れたので無事インストール完了です。

以下のコマンドを叩くと、起動するはずです。

$ tmux

緑色のバーが出てきたらOKです。


設定ファイル

次はconfigファイルを新規作成して、細かい設定をしていきます。

$ vim ~/.tmux.conf

bind r source-file ~/.tmux.conf \; display-message "Reload Config!!"
set-window-option -g mode-keys vi

unbind-key C-b
set-option -g prefix C-s
bind-key C-s send-prefix

#mouse_linux
#set -g mouse on

setw -g window-status-current-fg blue

bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

#tmux powerline
run-shell "powerline-daemon -q"
source "/usr/local/lib/python2.7/dist-packages/powerline/bindings/tmux/powerline.conf"
set-option -g default-terminal screen-256color
set -g terminal-overrides 'xterm:colors=256'

set-option -g status-position top

キーバインドをデフォルトの(Ctrl-b)から(Ctrl-s)変えています。

次に一度exitでTmuxから離脱して、再度Tmuxを起動します。

すると今変更したconfigがリロードされるので、ステータスバーの表示が変わると思います。

※次回以降のリロードはキーバインドで設定したCtrl-s + rでリロードできちゃいます。

$ exit

$ tmux

無題.png

画像をみてもらえばわかると思いますが、右のステータスバーの表示がuptime-ロードアベレージ-日付-hostnameになっています。Macではここを天気-バッテリー残量-日付-時間-hostnameにしてるので、ここも似たような感じに設定変更します。

以下の内容で記述します。


~/.config/powerline/themes/tmux/default.json

{                                                                                      

"segments": {
"right": [
{
"function": "powerline.segments.common.wthr.weather"
},
{
"function": "powerline.segments.common.bat.battery"
},
{
"function": "powerline.segments.common.time.date"
},
{
"function": "powerline.segments.common.time.date",
"name": "time",
"args": {
"format": "%H:%M",
"istime": true
}
},
{
"function": "powerline.segments.common.net.hostname"
}
]
}
}

編集後、リロードします。

すると、ステータスバーがこんな風に!

無題.png

おお、きたぞきたぞ。

ペインを分割していけば、最初の画像みたいになるでしょう。

無題.png

また、zshrcに以下の記述をしておくと、$ tm <windowname>でTmuxを起動できるようになったりします。偉大すぎる。

#tmux

function tm() {
if [ -n "${1}" ]; then
tmux attach-session -t ${1} || \
tmux new-session -s ${1}
else
tmux attach-session || \
tmux new-session
fi
}


トラブルシューティング

最初にconfigを作成したときは一度exitして、再度tmuxコマンドを叩くとconfigをリロードしてくれるのですが、リロードしても設定が反映されない場合がありました。

前に立ち上げたTmuxのプロセスが残ってる場合があるので、そいつらをkillしてあげてください。

$ ps aux | grep tmux


.ssh/configを作成してTera Termいらずにする

「Windowsのコマンドプロンプトは使いたくない、なのでターミナルは無難にTera Termにしとこう」などという私はもういない。

だいぶ使いやすいターミナルになったので、bash on windowsからSSHできるようにしておけば何の問題もないですね。

これでWindowsローカルからAnsibleを叩くこともできてしまいますね!(それが一番やりたかった)


おわりに

bash on windowsを舐めてましたすいません。Betaとかって書いてますけど「もうこれただのUbuntuじゃん!」とか言いながらワイワイやってました。

わざわざVM立ててAnsible立てて・・・とかやりたくなかったのでだいぶよくなりました。


参考