Windows
Terminal
console
powerline
cmder

Windows + Cmderでカッコよくて見やすいターミナル、コンソール環境を作る(めんどくさがり屋な人向け)

たぶん、Cmderに関しては、他にもいろいろ記事あると思います。
この記事は基本的には自分用の覚書です。

このまま設定するとこんな感じの見た目になります。

terminal01.png

以下のような構成にしてるつもり

  • 手順を淡々と記載する
  • Powerlineも使える環境にする
  • カッコよくて見やすいターミナル、コンソールを目指す
  • Cmder、Powerlineの説明とかは特になし

カッコよくて見やすくすること目的にしてますが、他にオススメ設定あれば、コメントで教えてください。

1. Cmderのダウンロードと解凍、配置

Cmderのサイト (http://cmder.net/)から、
[Download Full]を探してダウンロードします。

zip形式なので解凍します。
実行ファイル等は、圧縮ファイル内のルートパスに入っているので、
解凍ソフトやオプションによっては、のちのち面倒なので、
"cmder"フォルダ作って、その中に解凍するか、同様のオプションで解凍するのがよいです。

"cmder"フォルダは、今後、一生置くかもしれない場所(パス)に置きましょう。
パスは途中にスペース文字なし、それほど深くないパスが無難だと思います。

2. Cmderの実行と基本設定

2.1. まずは、実行

"cmder"フォルダ内の"Cmder.exe"をダブルクリックなどで実行します。
(環境によっては拡張子は表示されないので、アイコン付きのアプリケーションを実行。)

2.2. 基本設定を進める

開いたウィンドウの左上の、λのアイコンを左クリックして、
[Settings]をクリックします。

※ 注意 ※ : Settingsウィンドウで、[Reset]はしないようにします。
ここでリセットするとConEmuのデフォルトに戻って面倒なことになります。

2.2.1. ウィンドウサイズを設定する

Settingsウィンドウの
[General] > [Size & Pos]に移動します。

[Window size]というカテゴリがあるので、設定していきます。
個人的なオススメは、[Normal]を選んで、

  • Width: 70%
  • Height: 90%

くらいの設定。
サイズは、デスクトップ領域に対する%で指定できます。
その場合は、%をつけるのを忘れずに!

2.2.2. 各種色を設定する

画面の色は、見た目のカッコよさ、見やすさには重要です。
個人的には、黒と白の対比はハッキリと、
その他の色は明るめに出る発色が好みなので、それに向けて調整していきます。
※ この辺は好みの問題。以下の設定は、私の個人的な好み。

Settingsウィンドウの
[Features] > [Colors]に移動します。

[Schemes]では、<Cobalt2>が私の好みに近いので、これを選択します。
ここから、色が明るめに発色されるように微調整します。

以下は、私の設定値(暫定)です。

発色は、利用しているディスプレイやドライバ、カラープロファイル等にもよって、
違ってくるので、利用進めているうちに微調整はしたくなってくるかもしれません。

色の横の番号 10進のRGB値
0. 0 0 0
1/4. 115 115 255
2. 30 213 62
3/6. 57 220 249
4/1. 255 51 51
5. 255 115 255
6/3. 251 231 119
7. 255 255 255
8. 46 46 46
9. 128 173 242
10. 97 228 78
11. 0 221 221
12. 247 60 69
13. 255 51 128
14. 255 241 115
15. 238 238 238

あとで、微調整する用に、自分のカラー設定を[Schemes]の1つとして保存しておきます。
この場合は、<Cobalt2>と表示されている部分を上書きして、MyColorなどの名前にして、
入力した名前の右側の[Save]ボタンを押します。

2.2.3. エクスプローラのコンテキストメニュを設定する

コンテキストメニュの設定をしておくと、
任意のフォルダを右クリックして、[Cmder Here]などで、
そのフォルダのパスでCmderを開けるようになります。

Settingsウィンドウの
[Integration]に移動します。

[Menu Item:]に、Cmder Here などコンテキストメニュとして表示したい文字列を入力します。

[Command:]部分は、

{cmd} -cur_console:n

と表示されていると思いますが、

{cmd::Cmder} -cur_console:n

に修正します。

[Icon file:]は、そのままだとConEmuのアイコンになりますが、それでもいい場合は、そのままで。
Cmderのアイコンにしたい場合は、cmderフォルダ内のiconsフォルダに、各種アイコンがあるので、
アイコンファイルのフルパスを指定します。

ここで、[Register]ボタンを押すと、コンテキストメニュに追加されます。

自分のやっていることに完全に責任が持てる大人である場合は、同様の手順で、
"Cmder Here as Admin"などの名前で、
"{cmd::Cmder as Admin} -cur_console:n"などのCommandを登録すると、
管理者権限でCmderを開く用のコンテキストメニュの追加もできます。
通常は、"Cmder Here"を使って、管理者権限が必要な場合のみ"Cmder Here as Admin"を選択するとかになるかと。
安全な設定ではないので、管理者権限のコンテキストメニュは作らずに、
必要に応じて、"runas"コマンドで実行するなどの方が、安全性は高いかも。

コンテキストメニュで開いたタブのアイコンを指定したい場合は、
{cmd::Cmder} -cur_console:nC:"アイコンのフルパス"
を指定することになります。

2.2.4. ここで一旦保存。

Settingsウィンドウの
[Save Settings]を押して、ここまでの設定を保存します。

3. フォントとPowerlineの設定

3.1. とりあえず、必要なものを入手

フォントとPowerline用のスクリプトは、GitHubから入手できます。
公開してくれている方、どうもありがとう!!

  • Powerline化する用のLuaスクリプトなど

https://github.com/AmrEldib/cmder-powerline-prompt

  • Powerlineのパッチ適用済みのMyricaフォント

プログラミング向けに非常に視認性の高いMyricaフォントに、
Powerlineのパッチ等があたったフォントです。
(Myricaのバージョンはやや古いかもしれないので、それが受け入れられない人は、別途自分でビルドするとよいです。)

https://github.com/pomutemu/milly

Cmderを[Full Download]したので、Git for Windowsの環境がすでに利用できます。
curlコマンド等も利用できるので、その辺使って入手するとよいです。

やや無駄が多いですが、もう面倒なので、ここでは、GitでShallow cloneするやりかたでやってみます。
(100MB程度ダウンロードすることになるかも。)

まずは、入手用に適当なフォルダを作って、
そのフォルダ上で、右クリックしたら、さきほど作った、Cmder Hereコンテキストメニュをクリックします。

あとは、以下のコマンドで、それぞれshallow cloneします。

git clone --depth 1 https://github.com/AmrEldib/cmder-powerline-prompt
git clone --depth 1 https://github.com/pomutemu/milly

3.2. Powerlineの適用

shallow cloneした、cmder-powerline-promptディレクトリ内の、
拡張子が .luaのファイルをすべて、
cmderフォルダ内の configフォルダにコピーします。

デフォルト設定から変更したい場合は、
_powerline_config.lua.sampleファイルを、_powerline_config.luaに名前変更して、
configフォルダにコピーします。
簡単な設定変更の場合は、このファイルを編集します。
Git利用時もフォルダ名をフルパスで表示したい場合などは、
plc_prompt_type = "smart"を、plc_prompt_type = "full"にするとよいです。

3.3. フォントの適用

shallow cloneした、millyディレクトリ内の、
Myrica-MM.ttfファイル(拡張子が付くかは設定による)を右クリックして、
[インストール]を選択してフォントをインストールします。

インストール後に、Cmderを開いて、
開いたウィンドウの左上の、アイコンを左クリックして、
[Settings]をクリックします。

[General] > [Fonts]に移動して、
[Main console font]と[Alternative font]で、
Myrica MMを選択します。

[Size]を見やすいサイズに設定したら、[Save Settings]で設定完了です。

4. vi使う方へ

vi使いたい方は、%HOME%フォルダに、_vimrcを置いて、エンコーディング指定しておくと幸せになれるかもしれません。

※ すでに、%HOME%\_vimrc%HOME%\.vimrcが存在する場合は、
上書きすると既存設定が上書きされるので注意が必要です。

Cmderを開いて、以下のコマンドでテンプレートをコピーします。
(テンプレート不要な場合は、コピーの手順は省略可)

cp "%CMDER_ROOT%\vendor\git-for-windows\etc\vimrc" "%HOME%\_vimrc"

あとは、コピーした、_vimrcを開いて編集するだけです。

vi "%HOME%\_vimrc"

例えば、以下くらいは設定しておくとよいかもです。

set number
set encoding=utf-8
set fileencodings=utf-8,cp932

5. もっと色んな状況でカッコよく表示したい場合

configフォルダのluaスクリプトでいろんなことができます。
頑張れば、もっとカッコよくオシャレに表示できます!

5.1. Pythonのvenvなどを使う場合

私は、普段はPython使いというわけではないですが、
仕事上、Anacondaなどを使う機会があって、
Cmder + Powerlineの場合、そのままだと、Pythonのvenvや、AnacondaのEnvironmentが、
そのままでは分からなくなってしまうみたいです。
(普段はIDE使ってるので不便ってほどではないですが。)

環境変数のVIRTUAL_ENVや、CONDA_DEFAULT_ENVなどが存在する場合は、
Powerlineのプロンプト上に情報を追加するようなluaスクリプトを作ると表示できるようになります。

powerline_prompt.luapowerline_npm.luaあたりを参考に、
luaまったく知らなくても気合で作ると、案外簡単に作れたりします。
(※ まともなプログラマは気合で作ってはいけません。)

こんな感じになります。

pyvenv01.png

こちらは、別記事にする、かつ、スクリプトは公開予定です。

※ luaまったく分からずに、気合で作っただけなので、今のとこ利用はオススメしませんが、こんな感じです。
powerline_pyvenv.luaなどの名前で、configフォルダに置きます。
まじめに検証等したら、GitHubなどに上げようと思います。

--Python venv symbol. Used to indicate the name of a venv or CONDA environment.
if not plc_prompt_venvSymbol then
    plc_prompt_venvSymbol = "🐣"
end


-- Extracts only the folder name from the input Path
-- Ex: Input C:\Windows\System32 returns System32
---
local function get_folder_name(path)
    local reversePath = string.reverse(path)
    local slashIndex = string.find(reversePath, "\\")
    return string.sub(path, string.len(path) - slashIndex + 2)
end


-- * Segment object with these properties:
---- * isNeeded: sepcifies whether a segment should be added or not. For example: no Git segment is needed in a non-git folder
---- * text
---- * textColor: Use one of the color constants. Ex: colorWhite
---- * fillColor: Use one of the color constants. Ex: colorBlue
local segment = {
  isNeeded = false,
  text = "",
  textColor = colorWhite,
  fillColor = colorMagenta
}

---
-- Sets the properties of the Segment object, and prepares for a segment to be added
---
local function init()
  local envVal = clink.get_env("VIRTUAL_ENV")

  if envVal then
    envVal = get_folder_name(envVal)
  else
    envVal = clink.get_env("CONDA_DEFAULT_ENV")
  end

  if envVal then
    segment.text = " "..plc_prompt_venvSymbol..envVal.." "
    segment.isNeeded = true
  else
    segment.isNeeded = false
  end
end 

---
-- Uses the segment properties to add a new segment to the prompt
---
local function addAddonSegment()
  init()
  if segment.isNeeded then 
      addSegment(segment.text, segment.textColor, segment.fillColor)
  end 
end 

-- Register this addon with Clink
clink.prompt.register_filter(addAddonSegment, 57)