どうもこんばんわ。Macユーザです。
Macは素敵なマシンだと思いますが、そのまま何も考えずに使うとハマることが多々あります。
なまじ基本的なUnix環境が揃っていたりするあたり、特にLinuxユーザの方の場合は微妙な違いや妙な動作に
イライラすることがあるかもしれません。
当エントリでは、それらのうち僕がハマったいくつかと、その対処法についてまとめようかと思います。
# 6/18 virtualenvについてを追加
# 6/21 iterm編追加
# 7/17 MacVim編に追記
なお、僕の使うツール類などは
-
homebrew
-
iTerm2
-
vim
-
zsh
-
tmux
で、僕は主にPythonを使って開発をしています。
また、各ツールの導入やなんかは他にいくらでも記事があるので割愛します。
homebrew編
ググって導入用のスクリプトを叩いてください。
なお、formulaごとのオプションや有用な忠告がみれたりするので、導入パッケージについてはこまめにbrew info
するくせをつけると良いかもしれません。
~ homebrew編終了 ~
iTerm2編
iTermの方が色々いい感じっぽいのでiTermを使います。
公式からインストールしてください。
暴発しやすいキーを無効化
恐らく、皆さんは常時CUIを立ち上げていると思います。
なので⌘+w
は、暴発を招いてモニターを殴りつける原因になるだけの邪悪なキーバインドです。消しましょう。
メニューから、Preference -> Keys
を開きます。Global Shortcut Keysに⌘+wや⌘+qとかを追加して、ignoreにしておきましょう。
metaキーの有効化
Macは、Altとあわせていろんなキーを叩くことで、わけわかんない記号を出せます。
コーディング中に記号達の出番はほぼないので、折角だしmetaキーとして使えるようにします。これでemacserの貴方も安心ですね。
Preference -> Profiles
で貴方の使いたい設定を開きます。
よくわかんないって言う人は、とりあえずsolarizedでググってiTerm2用のテーマをImportするといいと思います。
あとはKeysを開いて、Left option key acts as:
を+Escにします。
端末を再起動してみましょう。alt+dで単語を削除とか、そういった感じで動くと思います。
やりましたね!
zsh編
zshじゃないと生きられない身体にされてしまっているので、zshを導入します。
ただし、Appleが標準で/etc
以下に用意しているくそったれのzshスクリプトが悪さをするので、そいつをどうにかしないといけません。
自分で直接/etc/zshenv
を書き換えるか、brew install --disable-etcdir zsh
としてインストールするか、どちらかで対処しましょう。
上記の詳細はbrew info zsh
とすればそれなりに丁寧に書いてあります。
導入が完了したら、http://tukaikta.blog135.fc2.com/blog-entry-195.html あたりを参考にしてログインシェルを変更してください。
次に、zshの補完関数群をロードするようにします。
brew install zsh-completions
で導入出来ます。次にfpathの設定を行います。
fpath = (
#zsh-completions
/usr/local/share/zsh-completions(N-/)
#homebrew
/usr/local/share/zsh/functions(N-/)
)
export fpath
上記みたいな感じです。
気になる人はbrew --prefixとか使いましょう。
古いエントリなどでは、brew用の補完関数などを別途シンボリックリンクで持ってきたりしていますが、現在ではzsh-completionsにいいやつが存在するので無用です。
基本コマンド編
MacOSに標準で入っているコマンドは、古いBSD由来のものらしく、オプションが違ったり挙動がおかしかったりと大変ストレスなので入れ替えましょう。
"openssl", "readline", "git", "coreutils", "gnu-sed", "wget", "gawk", "ctags", "sl"あたりは導入しておきましょう。
上に書いたcoreutilsですが、普通に入れるとgを接頭につけたコマンド名を打つ必要が出てきます。
brew info
を参考に、PATHとMANPATHの設定を行います。
また、ついでにhomebrewのツールを優先するようにしましょう。
BREW_PATH=`/usr/local/bin/brew --prefix`
typeset -U path
path=(
# 自分のスクリプトとか、自分でビルドしたやつとか
$HOME/Dropbox/bin/mac(N-/)
$HOME/Dropbox/bin(N-/)
$HOME/bin(N-/)
# homebrewで導入したのを優先させる
$BREW_PATH/bin(N-/)
## homebrewでpythonを入れると同時にpipも入れてくれる
## 下記のPATHに入る、が、コマンドに関しては/usr/local/binに自動でシンボリックリンクを
## 張ってくれるようになったので以下は追加しなくて良くなったっぽい。詳しくはbrew info python
#$BREW_PATH/share/python(N-/)
#デフォルトのコマンドをGNUコマンドで
$(brew --prefix coreutils)/libexec/gnubin(N-/)
/usr/bin(N-/)
/bin(N-/)
#sbin
/usr/local/sbin(N-/)
/usr/sbin(N-/)
/sbin(N-/)
)
export path
alias sed='gsed'
最初の部分とかはお好みでやってください。
とりあえず、coreutilsを優先させることで挙動やオプションがGNUのものと同等になるはずです。
これでLinuxで動いたシェルスクリプトが動かねー! なんてこともなくなりますね(多分)
tmux編
iTerm2をはじめ、Macの端末エミュレータはtmux上ではクリップボードとうまく連携出来ないようです。
これはVimを使っていて、set clipboard=unnamed
を有効にしていると、MacVimを含めて端末のVimは一切ペーストが出来ないという悲劇的な状況を生み出します。
上記を回避するためにreattach-to-user-namespace
をbrewからインストールしてください。
次に、上記ツールと連携した状態でtmuxを起動するためのスクリプトを https://gist.github.com/elasticdog/1462391 あたりを参考に導入してください。
最後に、"tmux save-buffer - | reattach-to-user-namespace pbcopy" とか "reattach-to-user-namespace pbpaste | tmux load-buffer - && tmux paste-buffer"
といった動作を、tmuxの適当なバインドにひっつけておけばtmuxのレジスタをクリップボードと連携させることも可能です。
あとそういえば、iTerm用に調整されている感じのtmuxがあったりしますが、あんま意味なさそうな感じなんでhomebrewのでいいと思います。
Python編
Mac標準のPythonはよくないのでbrewで入れましょう。
homebrewで入れたopensslを使わせたいのでbrew install python --with-brewed-openssl
と明示的に指定しておきます。
virtualenv編
素のままでvirtualenvを使うと、MacデフォルトのPythonが優先されたりと具合が悪いのでごにょごにょします。
まず、上記の基本コマンド編で行ったPATH設定によって、homebrewのpythonとpipが優先されていることを確認します。
which python
which pip
次に、virtualenvとvirtualenvwrapperを入れます。僕はpip使うマンです。
導入後、.zprofileに以下の設定を書き込んでください。
# --- virtualenv
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages --python=/usr/local/bin/python'
## virtualenv should use Distribute instead of legacy setuptools
# setuptoolsが更新されたようなので
#export VIRTUALENV_DISTRIBUTE=true
source /usr/local/bin/virtualenvwrapper.sh
#--- pip
# cache pip-installed packages to avoid re-downloading
export PIP_DOWNLOAD_CACHE = $HOME/.pip/cache
なお、本来はVIRTUALENVWRAPPER_PYTHON
を設定すればよしなにしてくれるっぽい気がするのですが、何故か頑に標準のpythonを使いたがるので別途VIRTUALENVWRAPPER_VIRTUALENV_ARGS
で明示的に設定しています。
ちなみに私のpython戦闘力は農民クラスなのでおかしいところがあったら突っ込んでください。
書き込んだら、zshの設定をリロードしましょう。
Vim編
自分でビルドしてもいいですが、僕はヘタレなのでbrewのを使います。
brew install vim --override-system-vi --with-lua --with-ruby --with-python --with-python3
としておきましょう。勿論、luaやrubyやpython3も先に導入しておきます。特にluaは、最近導入が活発なので入れておくと良いのではないでしょうか。
MacVim編
以前のMacVimはPythonスクリプトがクラッシュしていたのですが、最新版を入れることで正常に動くようになりました。
また、ShougoWareのif_lua高速化の恩恵を受けるためにも一番いいのを入れましょう。
brew install macvim --with-lua
とします。
また、いつの間にかbrewの標準フォーミュラでもluajitがサポートされているようなので、入れたい方は--with-luajit
としましょう。
詳しいところはこちらのブログ様を参考にしてください。
最新パッチ&if_luaなMacVimで高速検索&補完!
あと、MacVim-Kaoriyaのバイナリもif_lua付きのバイナリが更新されてたりしたんで、そっちでもいいかもしんないですね。
最後に
思いつつままに適当にあげてみたので、今後追加や修正があるかもしれません。