WindowsでもMacのようなターミナル環境がほしいと思い試行錯誤したが, やっと落ち着いた.
ほしい機能は以下の通り.
- Linuxコマンドが使える
- タブが使える
- Emacsで不便にならない
- Anacondaのpythonを呼べる
※pyenv版の設定はこちら
2024年1月 追記: Windows TerminalにCygwinを設定するのが素直な方法になった
以下はsettings.json
の変更メモ
{
"command": "newTab",
"keys": "alt+t"
},
{
"command": "closeTab",
"keys": "alt+w"
}
{
"commandline": "C:\\cygwin64\\bin\\bash.exe --login -i",
"icon": "C:\\cygwin64\\Cygwin-Terminal.ico",
"name": "Cygwin"
}
ターミナル環境を作る
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_change
やwin_tab_create
で検索をかければ変更箇所はすぐにわかる.
コンパイル後, 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.exe
をwinpty
でwrapしてやることで, octave
と打つだけで使えるようになる.
alias 'octave'='/cygdrive/c/winpty-master/build/winpty.exe /cygdrive/c/Octave/Octave-4.4.0/bin/octave-cli.exe'
2022/12/30追記
cygwin最新版でwinptyがコンパイルエラーになるようになった。
エラー部分をコメントアウトしても正常に動かなかったため、使用をやめた。
普通のwindows版pythonではwinptyを使わずとも.bashrcにパスを与えるだけで動くことを確認した。
(現CygwinバージョンでAnacondaを動かすとどうなるかは確認していない)
PY_PATH="/cygdrive/c/Users/(ユーザー名)/AppData/Local/Programs/Python/Python39"
export PATH=$PY_PATH:$PY_PATH/Scripts:$PATH
なお、cygwin同梱のpythonでは、psutilのpip installがうまくいかず、jupyterを入れることはできなかった。
参考URL
こういう解決法を最初に思いつく人ってすごい.
おまけ
この環境にたどり着くまでに試したこと
- WSL (Windows Subsystem for Linux)
- Windows側との連携がいまいち
- タブがない
- Cmder
- Emacsで→でキャレットを移動中テキストが消えていく