コマンドプロンプトを魔改造する

適当にブログのドメイン決めたら、後になって「hatenablog.jp」っていうドメインでも取れるということを知って、 そっちにすれば良かったと後悔してました*1

半分備忘録として、Windowsコマンドプロンプト魔改造して、強くする手順を 残しておきたいと思います。

Kaoriya版のvimでvimrcを開いたときの様子ですが、 こんな感じのコマンドプロンプトに進化させることができます。 f:id:e8l:20150808232951p:plain

準備

まずは、色々とソフトウェアを導入します。 それぞれの導入の仕方などは適当に調べてください。

Clink

http://mridgers.github.io/clink/

コマンドプロンプトBashぽくするためのツールです。 例えばこんなことができるようになります。 - Ctrl-r でコマンドの履歴を検索 - コピペが容易に - マウスドラッグですぐ選択&選択領域のコピー - Ctrl-v でペースト - タブ補完 あとLuaスクリプトで色々書けたりするそうです。

ConEmu

http://conemu.github.io/

コンソールエミュレータです。 フォントを色々選べたり、256色(24bitカラー)表示ができたり、タブで色んなコンソールを開けたり、イケてるやつです。 「PowerShellを使いたい」「Git Bashを使いたい」「そもそもPuTTYしか使わん」って人もコレを噛ませると結構QoL上がると思います。

バイナリを落とそうとすると、アルファ版とかプレビュー版とか安定版とか出てきますが、 公式にあるように、プレビュー版を選んでおけばいいと思います。

Linuxコマンドを提供してくれるもの

好みでMSYSなどをインストールしてlsなどのコマンドを使えるようにしておきます。 今の環境は、以下の記事を参考にしてMSYSとMinGWを導入しました。

www.devlog.alt-area.org

gccやg++を使いたいときにMinGWを入れるのはさておき、 lsなどのコマンドを導入するなら最近はGowを入れればいいんじゃないかなって思います。

github.com

ウィルス対策ソフトによってはこれらのコマンド呼び出すときにサンドボックスでウィルスチェックする場合があるので、 例外にでもぶち込んでおくといいです。


基本的にここまでで大体完了しているんですが、 あとちょっとだけ設定をすることでQoLを上げられます。

設定

ちゃんと256色表示ができるようにする

ConEmu使えば256色表示できるのですが、ちゃんと設定してないと表示されないので一応チェックします。

そもそも、コマンドプロンプトで256色表示?って思うかも知れないですけど、 vimの使用に際してイケてるカラースキームを使うとか、PowerLineやlightlineを使うとかするときに 256色表示できないとQoLが下がる気がします。

公式ドキュメントに従って設定を確認して下さい*2

ConEmu | ANSI X3.64 and Xterm-256 Support

.bashrc的なものを利用可能にする

コマンドプロンプト(cmd.ext)に/kオプションがあるのをご存知でしょうか? 何かというと、コマンドプロンプト起動時に/kオプションで指定したパスのバッチファイルを実行後 そのままコマンドプロンプトを使用できるというもので、ほぼほぼ.bashrc的な動作が可能になります。

ConEmuの"Settings"→"Startup"(→"Tasks")でコマンドプロンプトの実行コマンドが

cmd.exe -new_console:a

のようになっているかと思うので、

cmd.exe /k [batch path] -new_console:a

と設定しておけば色々便利になると思います*3

.bashrc的なものを用意する

先ほどの設定でコマンドプロンプト起動時に様々な設定が可能になったので、 適当な場所に.bashrc代わりのバッチファイルを用意してみます。

バッチファイルの詳しい書き方は以下のページと、その下部にある関連ページへのリンクを参考にして下さい。

Windowsバッチファイルの作成と実行 CapmNetwork

ここでは、いくつか書き方のtipsやよく使うようなコマンドを記述しておきます。

まず、利用するバッチファイルの先頭に@echo offの記述を入れておきます。 これを入れておかないと、色んな事前処理の結果が表示されてしまうので注意です。

次に、(環境)変数の設定ですが

set HOGE=VALUE

の形式で行います。パスを追加するときは、

set PATH=%PATH%;新しいパス

です。 以下の記事によると、永続的に書き込んでくれるsetxというコマンドがあるようですが、 起動時に毎回実行するバッチファイルへの処理なのでsetで大丈夫です。

konbu13.hatenablog.com

callというコマンドを使うと、他のバッチファイルを呼び出すことができます。 Visual Studioを導入している方はcallコマンドを使ってVisual Studioに用意されている バッチファイル(いわゆる「開発者コマンドプロンプト」の実体)を呼び出しておくといいです*4

最後にエイリアスです。コマンドプロンプトではaliasの代わりにdoskeyというコマンドを使います。

doskey alias=command [options] [params]

エイリアスに与えられたオプションや引数をすべて渡したいときには$*を末尾につけることで実現可能です。

doskey alias=command $*

ところで、コマンドプロンプトにおいて、cdやechoなどはコマンドプロンプト自体が処理するので、 パス上にcd.exeやecho.exeがあったとしてもそれらは呼び出されません。 しかし、事前にエイリアスでそれらの実行ファイルをフルパスで呼び出すようにしておけば、いつものcdの代わりに別のcdが実行されるようになります。 しかも、バッチファイル内ではcdと入力してもエイリアスを設定した方のコマンドが実行されないので、 他のバッチファイルに影響を及ぼさずに利用可能です。

個人的に引数を与えずにcdを実行したときにpwdと同等の処理を行うことが気に食わなかったので、 引数を与えずに実行したときには事前に設定したホームディレクトリに移動するようなバッチファイルを作成し、 それを代わりに実行させるようにエイリアスを設定しました。 拙い出来ですがGitHubで公開しているので良かったら使ってやって下さい。

MyBatches/cd.bat at master · e8l/MyBatches · GitHub

あとは、コマンドプロンプトの画面クリアがclsだったり、findが用意されてしまっていたりするので、エイリアスで直しておくといいです。

終わりに

以上で、強いコマンドプロンプトができたと思います。 Linuxには敵わないですが、大分QoLを上げられると思います。

ただ、フツーにCygwin+minttyでいいと思います。 僕が単純に好きじゃないからこうしてるだけですので……。

また、gitやmsysのbashでもいいと思います。 ただ、これらはConEmuを通すことでQoLをさらに上げられると思います。

あと、色々くっつけて調整したcmderというのもあるので、こちらを検討してみてもいいでしょう。

gooseberrycreative.com

*1:あれ、最初と文体が変わった? とか思わない。

*2:画像の用意が面倒だった。これくらいなら英語読めますよね?

*3:「-new_console:a」というのは、「コマンドを管理者権限で実行する」って意味だったと思います。

*4:npmでパッケージを導入するときにときどきMSBuildへのパスが通ってない的なエラーが出ますし。