VTRyo Blog

一歩ずつ前に進むブログ

bash on windowsってすごーい!powerlineとTmuxを駆使してMacのターミナルっぽくする

はじめに

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

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

f:id:vtryo:20180714145644j:plain

しかし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

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

$ cd /usr/local/lib/python2.7/dist-packages/powerline/config_files
$ cp -r * ~/.config/powerline

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

設定ファイル

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

$ vim ~/.config/powerline/themes/powerline.json

f:id:vtryo:20180714151149j:plain

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

"location_query": "tokyo, japan"

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

f:id:vtryo:20180714151252j:plain

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

f:id:vtryo:20180714151447j:plain

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

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

$ vim ~/.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"
                        }
                ]
        }
} 

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

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

f:id:vtryo:20180714151809j:plain

おお、きたぞきたぞ。

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

f:id:vtryo:20180714151835j:plain

また、zshrcに以下の記述をしておくと、

$ vim ~/.zshrc

#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
}
$ tm

でTmuxを起動できるようになったりします。偉大すぎる。

トラブルシューティング

最初に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立てて・・・とかやりたくなかったのでだいぶよくなりました。

参考

ADACHIN SERVER Lab 【OS X】tmux 2.4とpowerlineのインストールも変わった!

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

~/.ssh/config で簡単に複数ホストへのSSH接続を管理する

tmuxを使い始めたので基本的な機能の使い方とかを整理してみた