Windowsで快適なターミナル環境を作る


WindowsでもMacのようなターミナル環境がほしいと思い試行錯誤したが, やっと落ち着いた.
ほしい機能は以下の通り.

  • Linuxコマンドが使える
  • タブが使える
  • Emacsで不便にならない
  • Anacondaのpythonを呼べる

※pyenv版の設定はこちら


※ユーザ名はモザイクかけてあります.

ターミナル環境を作る

Cygwin, Fatty, Winptyにより自分の満足する環境を作る.

Cygwin

CygwinはLinuxコマンドを使えるようにするもの.

今回必要なものは以下の通り.

  • make
  • gcc-core
  • gcc-g++
  • gdb
  • mingw64-x86_64-gcc-g++
  • mingw64-i686-gcc-g++

これらはCygwinインストーラーから導入できる.
Cygwinの環境構築に関しては, こちらを参照.

Fatty

Fattyは, Cygwinをタブ化するもの.
https://github.com/juho-p/fatty からzipをダウンロードしてコンパイルする.
zip展開後, makeと打てばsrc内にfatty.exeが作成される.

Fattyのタブに関するデフォルトのコマンドはやや使いにくく,
Shift + 矢印がEmacsで使えなくなるのは痛いので, 下記の通り変更.

機能 元コマンド 変更後
新規タブ Ctrl + Shift + T Alt + T
タブ終了 Ctrl + Shift + W Alt + W
タブ切り替え Shift + →, ← Alt + →, ←
タブ移動 Ctrl + Shift + →, ← Ctrl + Alt + →, ←

変更方法は, どこを探しても見当たらなかったため, src/wininput.cを直接書き換えた.
エディタでwin_tab_changewin_tab_createで検索をかければ変更箇所はすぐにわかる.

(変更箇所1) Before

(変更箇所1) After

(変更箇所2) Before

(変更箇所2) After

コンパイル後, Windowsのショートカット作成機能から,
C:\fatty-master\src\fatty.exe -e bash --login -i
を作成する. (fatty.exeへのパスは人それぞれ)
(注意) --loginが無いと, Cygwinの.bashrcを読んでくれない.

Winpty

上記の設定のままでは, pythonを呼んだときにCygwinのpythonが呼ばれてしまう.
Anacondaのパスを通しても, cygwinから呼ぶと応答が返ってこない.
そこでWinptyでwrapしてやる必要がある.

https://github.com/rprichard/winpty からzipをダウンロード後, 展開して, ./configureしてmake.
build内のwinpty.exeを適当なところに移動.

.bashrcに以下を追加. (winptyへのパスは人それぞれ)

ANA_PATH=/cygdrive/c/Users/(ユーザ名)/Anaconda3
export PATH=$ANA_PATH:$ANA_PATH/Library/bin:$ANA_PATH/Scripts:$PATH
alias 'python'='/cygdrive/c/winpty-master/build/winpty.exe python'
alias 'ipython'='/cygdrive/c/winpty-master/build/winpty.exe ipython'

また, Octaveも同様にoctave-cli.exewinptyでwrapしてやることで, octaveと打つだけで使えるようになる.

alias 'octave'='/cygdrive/c/winpty-master/build/winpty.exe /cygdrive/c/Octave/Octave-4.4.0/bin/octave-cli.exe'

参考URL

こういう解決法を最初に思いつく人ってすごい.

おまけ

この環境にたどり着くまでに試したこと

  • WSL (Windows Subsystem for Linux)
  • Windows側との連携がいまいち
  • タブがない
  • Cmder
  • Emacsで→でキャレットを移動中テキストが消えていく