Cygwin初心者がCygwinを入れてみて気になったことメモ

開発環境をCygwinで構築する事になったので、ほぼ初めてCygwinを入れてみました。昔に入れたことあったけど、なんか馴染めずに直ぐ消しちゃった記憶があります。今回は使っていかざるを得ないし、前より使いやすくなってるみたいなので、入れてみて気になった事をメモしておきます。

vim(vi)について

viとvimは違う
$ type vi
vi is /usr/bin/vi
$ ls -l /usr/bin/vi
lrwxrwxrwx 1 myuser Domain Users 11 32 15:50 /usr/bin/vi -> vim-nox.exe
$ ls /usr/bin/vim
/usr/bin/vim
$ ls -l /usr/bin/vim
lrwxrwxrwx 1 myuser Domain Users 21 32 13:47 /usr/bin/vim -> /etc/alternatives/vim
$ ls -l /etc/alternatives/vim
lrwxrwxrwx 1 myuser Domain Users 17 32 15:50 /etc/alternatives/vim -> /usr/bin/gvim.exe

この様に、vivimで違うものが動いています。これはsetup.exeでどのパッケージを入れたかによっても変わるかもしれません。

alias vi='vim'

vim-noxというのが良くわからないので、.bashrcに上記を追加して、gvimに統一することにしました。後々になってvim-noxを使ってみたら、ちゃんと使えたけど、.vimrcに色々書く前は、Cygwinvimの動きがなんか変に思えたので、とりあえず統一してしまいたかったというのもあります。

.vimrcの有無で動きが変わる

前述のとおりCygwinでのVimは、CentOS*1で起動するVimとはちょっと動きが違います。特に挿入モードで矢印キーを使うと、改行されてABCDが入力されるという動きをします。.vimrcを内容は空で作ったら、なぜかこれが改善されて、挿入モードでも矢印キーが使えるようになりました。

ただ、その後.vimrcに色々書いていると、また問題が再発したりして、最終的にはこの問題のための設定を.vimrcに書くことになりました。
CentOSは自分の.vimrcがなくても、まだ違和感なく使えた記憶があるけど、Cygwinvimはちょっと使いにくかったです。どっかのディストリビュージョンで、rootでviを起動した時に、自分の.vimrcが読まれなくてこんな動きになったような記憶が、若干あります。CentOSだと一般ユーザーはvimでrootだとviなんだっけ?

:scriptnames
  1: ~/.vimrc
  2: /usr/share/vim/vim73/plugin/getscriptPlugin.vim
  3: /usr/share/vim/vim73/plugin/gzip.vim
  4: /usr/share/vim/vim73/plugin/matchparen.vim
  5: /usr/share/vim/vim73/plugin/netrwPlugin.vim
  6: /usr/share/vim/vim73/plugin/rrhelper.vim
  7: /usr/share/vim/vim73/plugin/spellfile.vim
  8: /usr/share/vim/vim73/plugin/tarPlugin.vim
  9: /usr/share/vim/vim73/plugin/tohtml.vim
 10: /usr/share/vim/vim73/plugin/vimballPlugin.vim
 11: /usr/share/vim/vim73/plugin/zipPlugin.vim

空の.vimrcの時の:scriptnamesです。.vimrcが空だから当然かもしれないけど、filetype.vim、ftplugin.vim、indent.vim、syntax.vimあたりが読み込まれてません。

apt-cyg

$ apt-cyg find vi
You must install wget, tar, gawk and bzip2 to use apt-cyg.

Cygwinインストーラーであるsetup.exeを使うと、パッケージのインストール/アンインストールが出来るけど、yumやaptの様にコマンドラインから使えるGoogle Code Archive - Long-term storage for Google Code Project Hosting.があります。apt-cygは自分で入れないとだけど、入れたら他のLinuxの様にコマンドラインからパッケージ入れられます。ただ、上記のパッケージは事前にsetup.exeで入れておく必要があるようです。

あと、名前似てるけどGoogle Code Archive - Long-term storage for Google Code Project Hosting.というのもあるっぽい。

Cygwin Terminal

C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -

Cygwin Terminalのショートカット、実態はmintty.exe。

Cygwinを入れた時は、確かWindowsコマンドプロンプトを使わせさせられて、すっごい不便だった様な気がします。今はminttyというputtyベースのターミナルエミュレーターがデフォルトになっていました。大体、puttyでリモートのLinuxを使ってるときのような操作感です。

タイトルバーのアイコンを右クリックしてOptionsで設定ができます。ここでの設定はCygwin側のホームディレクトリに.minttyrcという名前で保存されます。

環境変数

PATH

WindowsのPATHがCygwinのPATHにもなってます。なのでJDKとかJREとかのPATHも、Windows側で設定しておけば、Cygwin上でjavacコマンドなどが使えます。JDK/JREは複数のバージョンが入ってると、java.exejavaw.exeなど、%JAVA_HOME%\binにある一部コマンドが、C:\WINDOWS\system32にコピーされたりするようです。これの動きが良く分からず、JDK7とJDK6がインストールされてる状態で、PATHの末尾に使いたいJDKのパスを入れ替えても、Cygwin側で使えるjavaコマンドのバージョンが変わらないというトラブルがありました。

あとPATHに%JAVA_HOME%\binなど%で囲んだ環境変数を使うと、Cygwin側では展開されませんでした。Cygwinを使うなら全部フルパスで書く必要があるみたい。もしくはなんか方法があるんだろうか。

あと64bit版のWindows7だと、32bitなプログラムをインストールする先としてC:\Program Files (x86)というディレクトリがあります。Cygwin上でperlbrewを使ってperlをインストールしようとしたら、PATHに()が含まれるせいで、止まってしまいました。エラーメッセージは忘れちゃったけど、インストールの中でPATHを正規表現で扱ったのかな?半角スペースはエスケープしたけど()は想定外なんだなって、その時思いました。

Windows7は、XPではC:\Documents and Settings\myuser\Application Dataだったスペース入りのパスが、C:\Users\myuser\AppDataになっててとても良くなってるんだけど、C:\Program Filesはそのままで中途半端。そして上記の、ディレクトリ名に()を使うという辺り、やっぱり微妙なOSです。

nodosfilewarning
CYGWIN=nodosfilewarning

警告文をメモするの忘れたけど、CygwinWindows側のファイルパスを使うとワーニングを出します。邪魔なので環境変数に上記を設定すると、ワーニングを出さなくなります。

Cygwinのバージョン確認

$ cygcheck -c cygwin
Cygwin Package Information
Package              Version        Status
cygwin               1.7.11-1       OK

環境

Windows Windows7
Cygwin 1.7.11-1
setup.exe*2 version 2.769

*1:CentOSが一番馴染んでるので

*2:Cygwinインストーラ