ついにWindowsにまでcygwin-zshを入れてしまった。minttyとの組み合わせで快適。今まで、なるべくcygwinは避けて生きてきたのに……ホントにzshがないと生きられなくなりつつある。堕ちるところまで堕ちた感じだ。
最近、上のようなことをTwitterでさんざんつぶやいてますが、表題のとおりです。
もうTab補完でどこにでも行けるコレに慣れてしまうと、手放せなくなる、っていうか補完がきかないとコマンドラインでの作業ができないくらいになりつつあります(>_<)
ホントにたくさんのコマンドの補完ルールが最初から入ってるので、どんどんオプションを覚えなくなって、どんどん堕ちていくw
そんな、イイカンジに人を堕落させてくれるzshをWindowsに入れる際に、いろいろとコツがいったので、メモがわりに書き留めておきます。
自分以外にも、Windowsでzshを使うのをためらってた人がいたら、これでzshライフ始めましょう!
Cygwinを使います
Windowsでzshを使うには、Cygwinを使う必要があります。
Cygwinについてはいくらでも情報があるので、ここではもうインストールされているものとします。
zshはCygwinのインストーラからインストールできます。
setup.exeを起動して、Shellsカテゴリにあるzshとminttyを選択します:
Windows標準のDOS窓は横幅が変えられなかったりして大変不便なので、今回はminttyをターミナルとして使います。
他にもPoderosaとかPuTTYを使う方法がありますが、シンプルで簡単に使えるminttyをとりあえず使ってます。
ホントは使い慣れたckwを使いたかったんですが、日本語まわりでcygwinと絶妙に相性がわるいので、断念しました。
「こっちのほうがオススメだよ!」っていうのがあったら教えてください><!
ログインシェルを変更する
UNIXだったらchshするところですけれど、Cygwinにはついてこないようなので、/etc/passwdを直接書き換えてしまいましょう。
エディタで/etc/passwdを開いて、自分のユーザ名に相当する行の一番後ろのカラムを以下のようにzshのパスにします:
ユーザ名:unused:UID:GID:…(中略)…:ホームディレクトリ:/bin/zsh
でも、これだけだとCygwin.batでは依然としてbashが起ち上がってしまいます。
これは、Cygwin.batがbashを決め打ちで起動してしまっているためです。
Cygwin.batを書き換える
自分はこんな感じにしてます:
@echo off | |
REM VisualStudioの環境変数を設定する | |
call "c:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86 | |
REM CygwinコンソールでWindows式のファイルパスを使ったときに警告を出さない | |
set CYGWIN=nodosfilewarning | |
C: | |
chdir C:\cygwin\bin | |
REM ログインシェルを起動 | |
C:\cygwin\bin\sh.exe -c "/usr/bin/mintty - &" |
色々やってますが、重要なのは最後の行だけです。
shを介してminttyをバックグラウンドで起動してます。minttyに「-」を渡して起動すると、ログインシェル、つまり上で設定したzshを起動してくれます。
なんでわざわざバックグラウンド起動するのかというと、minttyはCygwin.batの動いてるDOS窓とは別に、新しくウィンドウを開いてそちらにzshを表示するので、普通に起動するとウィンドウが2枚になってちょっとおマヌケだからです。
バックグラウンドで開くと、Cygwin.batはminttyの実行終了を待たずに実行を終了してDOS窓を閉じてくれるというわけですね。
残りはほとんど環境変数を設定してるだけ、他にもCygwin環境だけで有効にしたい環境変数があれば、ここで設定してしまいましょう。
特に、Windows形式でPATHを設定したい場合には、ここがラストチャンスです。(Cygwin環境に入る際にUNIX風のパスに変換されてしまいます)
さて、これでめでたくzshが使えるようになりました!
「起動してみたら、やたらいっぱい設定聞かれた。ワケわかんないしウザイからもういいよ」
っていう人は、ひとまず↓の内容をホームディレクトリの.zshrcに書いておけば、補完ライフを十分楽しめますよ!
# The following lines were added by compinstall | |
zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate | |
zstyle ':completion:*' list-colors '' | |
zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s | |
zstyle ':completion:*' menu select=2 | |
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s | |
zstyle ':completion:*' verbose true | |
zstyle :compinstall filename '/home/maki/.zshrc' | |
autoload -Uz compinit | |
compinit | |
# End of lines added by compinstall | |
# Lines configured by zsh-newuser-install | |
HISTFILE=~/.histfile | |
HISTSIZE=1000 | |
SAVEHIST=1000 | |
setopt appendhistory extendedglob notify | |
bindkey -e | |
# End of lines configured by zsh-newuser-install | |
autoload colors | |
colors | |
export PROMPT="%B%{${fg[red]}%}[%n@%m] %/ | |
%# %{${reset_color}%}%b" | |
alias ls='ls -G' |
とりあえず、zshでTabキーを連打するところから始めましょう><
「もっとzshの実力を味わいたい!」 という方は、有名な連載『漢のzsh』の「コピペでzsh」からコピってみてくださいねっ!
さて、Windowsでzshライフを快適にするために、もう少しだけ設定が続きますよ。
ウィンドウを出さないようにするとスマートだよね!
すぐに閉じられるとはいうものの、起動時に2枚ウィンドウが出るのはちょっとウザイよね、っていう人は、ショートカットの設定で最小化状態で起動するようにしてしまいましょう:
こうすると、一枚目のウィンドウは最小化のままで目に見えることなく、人知れず静かに閉じられるので、ずいぶんスマートになります。
openコマンドを足す
MacOS Xでコマンドラインをお使いの方はご存知かと思いますが、指定したファイルをOSで関連付けられたアプリケーションで開いてくれるとっても便利なコマンド、それがopenです。
長年愛用していたNYACUSにも同様のopenコマンドが実装されており、自分にとってはなくてはならないコマンドなのですが、zshにはないので、自分で用意することにします。
まず、関連付けられたアプリケーションで開く方法ですが、これはWSHの機能を使ってサクっとスクリプトに任せます。
こんなスクリプトを書きました:
for ( var i=0; i < WScript.Arguments.Length; i++ ) { | |
shell = WScript.CreateObject("WScript.Shell"); | |
shell.Run(WScript.Arguments(i)); | |
} |
引数で並べたファイルをとにかく開いちゃうって内容です。
これをcscriptコマンドで呼び出せばいいわけですが、毎度毎度、「cscript open.js 〜」なんて書くのは興ざめですよね?
ここはzshで関数を書いてショートカットするようにします:
function open(){ | |
cscript //Nologo C:/usr/bin/open.js `cygpath -wd $@` | |
} |
これを.zshrcあたりに書いて、めでたく「open ファイル名」でファイルを開けるようになりました!
ちなみに、cygpathはUNIX形式のパスからWindows形式のパスに変換するコマンドですね。cscriptは、当然Windows形式しか認識しないので、必須なのです。
zshカワイイよ!!zsh!!
こんなカンジで、Windowsでも、Enjoy zsh life!(>~<)b とりあえず自分はこんな設定で使ってますが、「こうしたほうがもっとイイよ!」ってのがあったら教えてください〜
※追記(2011/04/18)
@mongrelPさんに cygstart なる便利コマンドがあることを教えてもらいました。ありがとうございます><!
@Maki_Daisuke →についてなんですが、openのかわりにcygstartというコマンドがあるそうです。aliasするだけでよろしい模様。 http://yanother.blogspot.com/2011/02/zsh.html
というわけで、 alias open=cygstart しておくだけで良かったんですね。なにコレ便利!
0 件のコメント:
コメントを投稿