えんでぃの技術ブログ

えんでぃの技術ブログ

ネットワークエンジニアの視点で、IT系のお役立ち情報を提供する技術ブログです。

【Cmder+CygWin】Windows用の使いやすいターミナル

f:id:stopendy:20190114233719p:plain

お伝えしたいこと

本記事では、Windowsユーザ向けにオススメのターミナルソフトウェアを紹介したいと思います。
具体的には、CmderとCygWinの組み合わせです。

上記ソフトウェアの組み合わせによって、WindowsコマンドプロンプトPowerShellが抱える以下の問題を解決できます。

  • コマンドが使いにくい。Linuxのコマンドにはよく慣れているのに...
    • Bash実行環境を追加
    • 使い慣れたgrep、less、awkなどのコマンドを実行可能に
    • パイプ(|)、シェルスクリプト、~などのシェル機能も利用可能
  • ターミナルの機能が貧弱。コピペも大変
    • MacのiTerm2に負けないデザイン性と機能性を持ちます
    • 色、透明度、ショートカットキーなどをカスタマイズ可能
  • SSH接続やファイル転送のGUI操作が面倒
    • 既存ツールをコマンドに置き換えることで、作業を効率化できます
    • Teraterm: sshコマンドが使える。コピペ時の確認メッセージ、自動ログ取得にも対応
    • WinSCP: scp、ftpコマンドなどで代用

Cmder + CygWin の構成

Cmderは、GUI部分を担います。
優れたデザインのターミナル画面と、使いやすくするための付加機能を提供します。

Cmder自身はシェル機能を持ちません。
内部でコマンドプロンプトPowerShellを呼び出すことで、シェルを提供しています。
上記以外にも、CygWin(Bash) とも連携することができます。

今回はCmderに対し、CygWin を組み合わせてWindowsのターミナルを使いやすくする手順を紹介します。

導入イメージ

GUI部分を担うCmderのスクリーンショットを貼ります。

画面はこんな感じです。

f:id:stopendy:20190114233719p:plain

画面を非アクティブにしたときに、少し暗くするといった設定もできます。

f:id:stopendy:20190114233712p:plain

設定すれば、Teratermのように「改行を含む文字列をコピペしたとき」に確認メッセージを出せます。

f:id:stopendy:20190114233606p:plain

設定画面もリッチです。

↓フォントの設定

f:id:stopendy:20190114233618p:plain

↓配色の設定

f:id:stopendy:20190114233623p:plain

↓Cmderと連携するシェルの設定

f:id:stopendy:20190114233614p:plain

上記画像の通り、CmderのデザインはMacのiTerm2にも負けていないと思います。

Cmderと何を組み合わせるか

Cmderと組み合わせるシェルは、Linuxに慣れているのであればCygWinがオススメです。
Windowsに慣れている場合はcmdやPowerShellでも良いと思います。

CygWinの特徴は以下の通りです。

  • Unix環境をエミュレーションする
  • ほぼ、Bash実行環境と言ってよい
  • Cmderと比べると、以下の差分がある
    • apt-cygによってLinuxパッケージを追加インストール可能 (yum/aptと似ている)
    • Linuxライクなディレクトリ構造を持つ (Windowsファイルは/cygdrive配下にある)

CygWinのセットアップ

f:id:stopendy:20190114233704p:plain

ここでは、CygWinのセットアップ手順を紹介します。
Cmderとの連携設定は、Cmderのセットアップにて説明します。

CygWinを導入しない場合は読み飛ばしてください。

CygWinのインストール

下記公式サイトからインストーラをダウンロードして実行します。
64bit版、32bit版がありますので、正しい方を選択してください。

https://CygWin.com/install.html

インストーラを起動したら、ウィザードに沿って以下のように選択します。

  • 5回ほど「次へ」を選択する
  • ダウンロードサイトの選択画面では、"http://ftp.iij.ad.jp" などを選択する
  • パッケージ選択画面では、以下のように選択する
    • View: Full
    • Search: パッケージ名で検索し、必要なものにチェックを入れる。最低限、★のついたものは入れる (apt-cyg導入に必要)
      • wget (Web)
      • curl (Net)
      • gcc-core (Devel)
      • gcc-g++ (Devel)
      • make (Devel)
      • openssh (Net)
      • xinetd (Net) ※telnet
      • vim (Editors)
      • git (Devel)
    • 「次へ」を2回ほど選択すると、依存関係を含めて上記パッケージをインストールする
  • 画面に従ってインストーラを終了する

これでCygWinがインストールできました。
CygWinが単体で正しく起動することを確認しておきましょう。

(任意) apt-cygのインストール

任意なのですが、ついでに便利なパッケージマネージャーであるapt-cygも入れておきましょう。
Linuxでいうyumやaptに相当するツールです。

CygWinを起動し、下記コマンドを実行することで導入できます。

wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg

chmod 755 apt-cyg
mv apt-cyg /usr/local/bin

以降、apt-cyg install <package-name>でパッケージをインストールできます。

Cmderのセットアップ

f:id:stopendy:20190114233610p:plain

Cmderのインストール

下記公式サイトからCmderをダウンロードします。
Mini版とFull版がありますが、Full版を選択します。

http://Cmder.net/

ダウンロードした圧縮ファイルを展開し、好きなフォルダ階層に移動します。
Cmderは、インストール無しで動作するプログラムのため、起動すればすぐに使えます。

参考までに、私はインストール不要なアプリケーション (ポータブルアプリケーション) の置き場を決めており、Documents\PortableApps\ 配下にしています。
Documents以外にも、C:\ や D:\ など候補はいくつかあると思いますので、わかりやすい場所に決めて配置しましょう。

Cmderの初期設定

Cmder.exeを起動します。

画面下部のタブバー (タブ以外の部分) を右クリックして、"Settings" を選択します (またはWindows + Alt + P)。
そしてお好みに設定します。

私のオススメ設定を以下に載せておきます。 ※設定画面内は、マウスカーソルを合わせると補足説明が出てきます。これがとても便利です

General > Quake style

Quake Mode (フルスクリーンのようなモード) がお好みの場合は設定します。
Ctrl+@キーでターミナルを開いたり隠したりできます。
私個人としては便利だと思うので使っています。

  • Quake style slide downにチェックを入れる
  • Restore inactive window by hotkeyにチェックを入れる

Quakeモードを使う時は、General > Tab barの以下の設定もオススメします。

  • Close ConEmu with last tabのチェックを外す
    • ConEmuの最後のタブを閉じてもバックグラウンドでCmderが起動し続けます
    • Ctrl+@で呼び出してCtrl+Tでタブ追加すればすぐに再度使えるようになります
  • Minimize on closing last tabにチェックを入れる
    • 最後のタブを閉じたらCmderが自動的に最小化します

General > Size & Pos

Console buffer height: 32766

ターミナルの最大行数を増やす設定です。

General > Tab bar

Lazy tab switch: チェック外す

Cmderのタブは、Ctrl+Tabで切り替えできます (もちろんマウスクリックでも)。
デフォルトでは、Ctrlキーを離したときに画面が切り替わります。
この挙動を変更し、Ctrl+Tabキーを押したらすぐに画面が切り替わるようにします。

General > Confirm

Confirm actionsのチェックを全て外す

面倒な確認メッセージを抑止します。

Startup > Environment

以下の3行を入力しておきます。
最初の1行はすでに入っていると思います。

set PATH=%ConEmuBaseDir%\Scripts;%PATH%
set PATH=%PATH%;%ConEmuDir%..\git-for-windows\cmd
set PATH=%PATH%;%ConEmuDir%..\git-for-windows\usr\bin

Cmder経由でシェルを起動したときに、PATHを通すための設定です。
ここでは、Git for WindowsLinuxコマンド群 (ls、grep、less、ssh、scpなど) にPATHを通しています。
CygWinの場合は不要な設定ですが、cmdやPowerShellを使うときにはあった方が便利になります。

%ConEmuDir% などの設定ファイル中で使える環境変数について、詳細はConEmuのドキュメントを参照してください。
※Cmderは内部的にConEmuを利用している https://conemu.github.io/en/ConEmuEnvironment.html

Keys & Macro

Cmderで利用可能なショートカットキーを編集できます。
以下のように編集するのがオススメです。
右上の検索ウィンドウで「Scroll buffer」などのように検索しながら編集してみてください。

  • Scroll buffer to the top: Ctrl+Home ※ターミナルの先頭を表示
  • Scroll buffer to the bottom: Ctrl+End ※ターミナルの末尾を表示
  • Paste first line of clipboard contents: 割り当てなし ※Linux用途で使用するCtrl+Vが上書きされてしまうため
  • Copy: All active console text output: Ctrl+Shift+A ※ターミナル全体の文字列をコピー
  • Find text in active console: Ctrl+Shift+F ※文字列検索
  • Choose and paste file pathname: 割当解除 ※Ctrl+Shift+Fで重複
  • Split: Duplicate active 'shell' split to bottom: Ctrl+Shift+D ※画面分割
  • Split: Duplicate active 'shell' split to right: Ctrl+Shift+R ※画面分割
  • Choose and paste directory path: 割当解除 ※Ctrl+Shift+Dで重複

Cmderの便利なショートカットキーは、本ブログの末尾にてまとめて紹介しています。

Mark/Copy

Text selectionの値をL-ShiftからNo-Modに変更します。

デフォルトでは、Cmderからローカルのvimを開いた時に左側のシフトキーを押しながらでないと、マウスドラッグでテキストを選択できません。
これをShiftキー無しでもテキストを選択できるようにします。

Features > Colors

ターミナル画面の色合いを変更できます。
デフォルトはMonocai というテーマが設定されていますが、この画面で色設定を変更して自作のテーマとして保存できます。

また、Fade when inactive の設定を変えることで、Cmderのウィンドウが非アクティブになったときに画面を少し暗く見せるかの設定ができます。

私個人としてはNord Color Schemeが好きで、個人的に使っています。
CmderのUI部分を担っているのはConEmuというソフトなので、対応する定義ファイルをリポジトリからコピーして適用することで利用可能です。
詳細は割愛しますが、nord-conemuの手順を参考に、ConEmu.xmlを編集するという手順です。
ConEmu.xmlのパスは、Cmder設定画面 (Win+Alt+P) の右上にあるStorageと書かれた部分から確認できます。

Features > Transparency

画面の透明度の設定はこちらでできます。

一通りの設定が終わったら、右下の Save settings ボタンで設定を保存します。

CygWinとの連携設定

いよいよCmderからCygWinを呼び出せるようにします。 再び設定画面を開きます (Windows + Alt + P)。

Startup > Tasksを選択します。
Cmderで新しいタブを追加するとき、Cmderが呼び出すシェル (CygWin/cmd/PowerShellなど) を指定できるのですが、この画面からシェルを追加登録/削除/並べ替えできます。

まず、CygWinを追加登録します。

  • '+' ボタンを選択し、以下のように設定する

    • タスク名 (左上の部分) : bash::CygWin
    • Default task for new console: チェック推奨 (Cmderで新規タブを追加するとき、デフォルトでbash::CygWinが選択される)
    • Default shell (Win + X): チェック推奨
    • Commands (右下の部分): 以下のように入れる
      set "PATH=<CygWinインストールディレクトリ>\bin;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe /usr/bin/bash.exe --login -i -new_console:p:C:"<CygWinインストールディレクトリ>\CygWin.ico"

      具体的には、以下のようになる。

      set "PATH=C:\CygWin64\bin;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe /usr/bin/bash.exe --login -i -new_console:p:C:"C:\CygWin64\CygWin.ico"

  • 'Up'、'Down' ボタンで、以下の順序に調整する

    • bash::CygWinを一番上に
    • 他は好きな順序で並べる

↓参考URL
https://conemu.github.io/en/CygWinMsysConnector.html#CygWin64-shortcut

次に、設定画面のStartup セクションを開きます。
Cmderを起動したとき、デフォルトで表示するTask (シェル) を指定します。

デフォルトは Specified named task の値が {cmd::Cmder} になっていると思うので、これを {bash::CygWin} に変更します。

これでCmder + CygWin連携構成を実装できました。

(参考) 知っておくと便利なCmderのショートカットキー

以下のショートカットキーが便利です。

  • Linux Bash でおなじみのショートカット (Ctrl + C, L, D, U, K, Q, Z, ...)
  • 設定を開く (Windows + Alt + P)
  • 新しいタブを開く (Ctrl + T)
  • タブを閉じる (Ctrl + W) ※bashなら Ctrl + D でexitした方が楽
  • スクロールバッファ削除 (Ctrl + Shift + L)
  • 画面スクロール (Ctrl + ↑、↓)
  • 表示/非表示切替 (Ctrl+@)
  • 今回紹介した手順でカスタマイズしたショートカット
    • ターミナルの先頭を表示 (Ctrl+Home)
    • ターミナルの末尾を表示 (Ctrl+End)
    • ターミナル全体の文字列をコピー (Ctrl+Shift+A)
    • 文字列検索 (Ctrl+Shift+F)
    • 下に画面分割 (Ctrl+Shift+D)
    • 右に画面分割 (Ctrl+Shift+R)

まとめ

いかがでしたでしょうか。
CygWin + Cmderを導入することで、Windows OS特有の作業ストレスを大幅に軽減できます。
Cmderは業務で数年使い続けてきて、本当に良いソフトだと実感しています。
皆様もぜひお試しください。