tmux
powerline
cmder
Windows10
BashOnUbuntuOnWindows

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

参考