Cygwin関係のメモ


# セットアップ前の環境変数の設定

下のように設定:

```
CYGWIN=error_start:C:\cygwin64\bin\gdb.exe winsymlinks:native
HOME=C:\cygwin64\home\%USERNAME%
LD_LIBRARY_PATH=C:\cygwin64\lib;C:\cygwin64\usr\local\lib
```

何でライブラリのパスまで書いてるんだっけ？…忘れた…(汗

二重引用符で囲っていないので，空白文字がどこかに含まれる場合は付けておいた方がよいかもしれない．

`%USERNAME%`と書いてある部分は，各々の環境に合わせて変更すること．
USERNAME変数を定義しない，つまりデフォルトにしてWindowsに任せると，時々，期待に反する値が設定される場合があり，それが原因で誤動作を招く場合がある．
USERNAME変数を定義するなど，ハードコードした方が良いかもしれない．

本来は必要無いだろうと思うが:
```
CYGWIN_ROOT=C:\cygwin64
```
という風に変数を定義しておくと，Windows側でこの情報を使いたい時に便利かもしれない．

#### 参考情報

- [Environment Variables -- Chapter 2. Setting Up Cygwin](https://cygwin.com/cygwin-ug-net/setup-env.html)
- [The CYGWIN environment variable -- Chapter 3. Using Cygwin](https://cygwin.com/cygwin-ug-net/using-cygwinenv.html)

# setup-x86_64.exeの実行

実行してインストール．特に言うことは無いだろう．

# apt-cyg (またはcyg-fast)のインストール

Cygwinのパッケージマネージャは，通常は`setup-x86_64.exe`だが，`apt-cyg`はCygwinのターミナルから使用できるCygwinのパッケージマネージャツール．

詳しい歴史は知らないが，このツールはいくつかforkがあり，`cyg-fast`はそのうちの一つらしい．
真偽は確かめていないが，[ここ](http://seesaawiki.jp/w/kou1okada/d/apt-cyg "apt-cyg - PIB")によると，`cyg-fast`は署名検証を行っていないかもしれない．



#### 参考情報

- [apt-cyg をインストールする(2016年版) - Qiita](http://qiita.com/hkuno/items/df06db4bb406a17d2494 "apt-cyg をインストールする(2016年版) - Qiita")
- [apt-cyg - PIB](http://seesaawiki.jp/w/kou1okada/d/apt-cyg "apt-cyg - PIB")
- [cyg-fast](https://github.com/tmshn/cyg-fast) (ホスト場所が変わった？)
- [cyg-fastの紹介とknife soloの実行環境の作り方](http://qiita.com/d9magai@github/items/ff867393b7c257135e70)

# シェルやエディタの設定

## .vimrcの編集

Emacsも使いますが，Cygwinではvimをよく使うので，まずはvimをインストールして`.vimrc`を[ここから](https://github.com/tell/tips/blob/master/vim/dot.vimrc)コピペ．

## .bash_profileの編集

diffの結果を貼り付けようかと思ったけれども，長いので概要だけ．
コメントアウトされている`PATH`，`MANPATH`，`INFOPATH`の設定を有効にする．

そして，ちょっとした遊びとして, 次のコマンドを最後に置く:

     [ `which fortune` ] && fortune

## .bashrcの編集

下にコメントアウトを外して有効にした設定を挙げる:

    set -o ignoreeof
    [[ -f /etc/bash_completion ]] && . /etc/bash_completion
    export HISTIGNORE=$'[ \t]*:&:[fb]g:exit:ls' # Ignore the ls command as well
    alias rm='rm -i'
    alias cp='cp -i'
    alias mv='mv -i'
    alias df='df -h'
    alias du='du -h'
    alias less='less -r'                          # raw control characters
    alias grep='grep --color'                     # show differences in colour
    alias ls='ls -hF --color=tty'                 # classify files in colour
    alias ll='ls -l'                              # long list
    alias la='ls -A'                              # all but . and ..
    alias l='ls -CF'                              #

## .ssh/configの編集

```text:.ssh/config
Host *
    Compression yes
    CompressionLevel 9
    ServerAliveInterval 60
```

Cygwin (Windows)では，ControlMasterをサポートしないようなので設定していません．

## .tmux.confの編集

```text:.tmux.conf
bind ^C new-window -n bash -c "#{pane_current_path}"
bind c new-window -n bash -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

set-window-option -g mode-keys vi
```

`tmux`は，負荷がかかるとデッドロックしたかのように動作しなくなってしまうようなので，使わない方がよいかもしれない．

### References

- [【メモ】tmux1.9対応](http://qiita.com/fieldville/items/8d3821d0ed7861b77376)

## [experimental] alternativesを使ってコマンドを配置する

インストールは:

    $ cyg-fast install alternatives

これで終わり．特に苦労することは無かった…
他の色々なパッケージをインストールしていると，既にインストールされている可能性が高い．

Javaを設定してみる:

    $ /usr/sbin/alternatives.exe --install /usr/local/bin/java java /cygdrive/c/Program\ Files/Java/jdk1.8.0_40/bin/java.exe 10
    $ alias java='java -Dfile.encoding=UTF-8'
    $ /usr/sbin/alternatives.exe --install /usr/local/bin/javac javac /cygdrive/c/Program\ Files/Java/jdk1.8.0_40/bin/javac.exe 10
    $ alias javac='javac -J-Dfile.encoding=UTF-8'

こんな感じ．

まぁ，設置はできたけど使う時に何が起きるかは未検証．
注意点としては，例えば，上のようなデモでは`$(realpath $(which java))`とやると空白が入るので，二重引用符で囲う必要がある(`"$(realpath $(which java))"`)，とかかな．