PHPのバージョンを複数管理する(その2)
前回はphp-buildで複数のPHPバージョンをコンパイルし、php-versionでcliで動作するPHPのバージョンを変更するところまでやりました。
今回はApacheが利用するPHPを切り替えてみようと思います。
1.Apache諸設定
とりあえず最低限PHPを動作させる設定にします。
$ vi /usr/local/Cellar/httpd/2.2.22/etc/apache2/httpd.conf #LoadModule追記 LoadModule php5_module libexec/libphp5.so AddType application/x-httpd-php .PHP
2.libphp5.so切替シェル作成
こちらを参考にさせていただきました。
ほっとんどコピペです。てへぺろ☆
$ touch ~/bin/apache-php-version $ chmod +x ~/bin/apache-php-version $ vi apache-php-version
#!/usr/local/bin/zsh PROGRAM_APPNAME=$(basename $0) PROGRAM_VERSION="1.0.0" APACHE_LIBEXEC_DIR="${APACHE_PATH}/libexec" show_help() { echo "${PROGRAM_APPNAME} ${PROGRAM_VERSION}" >&2 echo "" >&2 echo "Usage : ${PROGRAM_APPNAME} <version>" >&2 echo "Example: ${PROGRAM_APPNAME} 5.4.0RC6" >&2 exit 1 } check_php_home() { if [[ ! -d ${PHP_VERSIONS} ]] then echo "Sorry, but ${PROGRAM_APPNAME} requires that \$PHP_VERSIONS is set and points to an existing directory." >&2 exit 1 fi } check_apache_path() { if [[ ! -d ${APACHE_PATH} ]] then echo "Sorry, but ${PROGRAM_APPNAME} requires that \$APACHE_PATH is set and points to an existing directory." >&2 exit 1 fi } set_up_apache_module_path() { apache_module_path=$PHP_VERSIONS/$PHP_VERSION/libphp5.so } check_apache_module_path() { if [[ ! -f ${apache_module_path} ]] then echo "Sorry, apache module not found: $apache_module_path" exit 1 fi } check_apache_libexec_dir() { if [[ ! -d ${APACHE_LIBEXEC_DIR} ]] then echo "Directory not found: $APACHE_LIBEXEC_DIR" exit 1 fi } replace_apache_module() { echo "Copy $apache_module_path to $APACHE_LIBEXEC_DIR/libphp5.so" cp $apache_module_path $APACHE_LIBEXEC_DIR/libphp5.so } restart_apache() { echo "Restarting apache..." sudo apachectl restart } [ $# != 1 ] && show_help PHP_VERSION=$1 check_php_home check_apache_path set_up_apache_module_path check_apache_module_path check_apache_libexec_dir replace_apache_module restart_apache
$APACHE_PATHが実はまだ設定されていません。
.zshrcにパスを追加します。aliasも
export APACHE_PATH=/usr/local/Cellar/httpd/2.2.22 alias apache-php-version='zsh ~/bin/apache-php-version'
3.動作確認
DocumentRootにphpinfo()を呼び出すphpを放ってコマンドを実行してみる
$ apache-php-version 5.4.5 Copy /Users/sasakiyasuyuki/.phpenv/versions/5.4.5/libphp5.so to /usr/local/Cellar/httpd/2.2.22/libexec/libphp5.so Restarting apache... Password:
http://localhost/phpinfo.phpでバージョンが5.4.5であるのを確認。
5.3snapshotも
$ apache-php-version 5.3snapshot Copy /Users/sasakiyasuyuki/.phpenv/versions/5.3snapshot/libphp5.so to /usr/local/Cellar/httpd/2.2.22/libexec/libphp5.so Restarting apache...
http://localhost/phpinfo.phpでバージョンが5.3.16-devであるのを確認。
おkですな。
PHPのバージョンを複数管理する(その1)
PHP5.4はまだ実用しないけど、traitなど新しい機能があるのでcliでは触っておきたい。
今からやろうとしてるFuelPHPは5.3以上でないと動作しなく、FuelPHPの実用も考えているので5.3も入れておきたい。
ということでrbenvならぬphpenvをいれてみることにする。
普段作業メモ残さないのがこちらのアカウントになりますので今回はブログ書きながらの作業となります。
1.Formuraある?
パッケージ管理はbrew使ってます。
$ brew search | grep php
単にbrew searchだけだと現在install可能なformuraが表示されるのだけれどPHPはないので
素直にbrew search phpすると
$ brew search php josegonzalez/php/php53-pcntl josegonzalez/php/php54-http josegonzalez/php/php54-ssh2 etc
josegonzalez/phpのformuraを登録する必要があるみたいなのでbrew tapする
$ brew tap josegonzalez/php Cloning into '/usr/local/Library/Taps/josegonzalez-php'... remote: Counting objects: 1418, done. remote: Compressing objects: 100% (675/675), done. remote: Total 1418 (delta 733), reused 1303 (delta 638) Receiving objects: 100% (1418/1418), 205.05 KiB | 95 KiB/s, done. Resolving deltas: 100% (733/733), done. Tapped 64 formura
Formuraに追加されたらしい
$ brew search php php53-pspell php53-xhprof php54-inclued php54-pcntl etc
これでbrew install する準備が整った
※ついでだけどapacheもinstallしとく
$ brew tap Homebrew/dupes $ brew install httpd $ sudo httpd -k start
It works出たらおk
2.phpenv install
$ brew install phpenv Error: phpenv is a head-only formula Install with `brew install --HEAD phpenv` '--HEADつけろと言われた $ brew install --HEAD phpenv ==> Cloning https://github.com/CHH/phpenv.git Cloning into '/Library/Caches/Homebrew/phpenv--git'... remote: Counting objects: 17, done. remote: Compressing objects: 100% (13/13), done. remote: Total 17 (delta 3), reused 14 (delta 1) Unpacking objects: 100% (17/17), done. ==> /usr/local/Cellar/phpenv/HEAD/bin/phpenv-install.sh ==> Caveats To finish installing phpenv: * Add ~/.phpenv/bin to your $PATH * Add "eval $(phpenv init -)" at the end of your ~/.bashrc * Restart your shell ==> Summary /usr/local/Cellar/phpenv/HEAD: 5 files, 20K, built in 6 seconds
~/.phpenvができるので.bashrcとか.zshrcに環境変数の初期化とか初期化の設定をする
# rbenv eval "$(rbenv init -)" # phpenv if [ -f ~/.phpenv/bin/phpenv ]; then export PATH=$PATH:~/.phpenv/bin eval "$(phpenv init -)" fi
終わったら$ source ~/.zshrcで設定を適用
3.php-build install
$ brew install php-build ==> Downloading https://github.com/CHH/php-build/zipball/v0.8.0 ######################################################################## 100.0% ==> Caveats Tidy is enabled by default which will only work on 10.7. Be sure to disable or patch Tidy for earlier versions of OS X. ==> Summary /usr/local/Cellar/php-build/0.8.0: 46 files, 196K, built in 4 seconds $ php-build --definitions #ビルドできるバージョン 5.2.17 5.3.10 5.3.11 5.3.11RC1 5.3.11RC2 5.3.12 5.3.13 5.3.14 5.3.15 5.3.2 5.3.3 5.3.6 5.3.8 5.3.9 5.3.9RC3 5.3.9RC4 5.3snapshot 5.4.0 5.4.0RC1 5.4.0RC2 5.4.0RC3 5.4.0RC4 5.4.0RC5 5.4.0RC6 5.4.0RC7 5.4.0RC8 5.4.0alpha3 5.4.0beta1 5.4.0beta2 5.4.1 5.4.1RC1 5.4.1RC2 5.4.2 5.4.3 5.4.4 5.4.5 5.4snapshot
4.php-version install
$ brew install php-version ==> Downloading https://github.com/wilmoore/php-version/tarball/0.9.3 ######################################################################## 100.0% ==> Caveats Add the following script block to `$HOME/.bashrc`, `$HOME/.zshrc`, or your shell's equivalent configuration file. Change `5.x.x` to the version of PHP you'd like your shell to default to or remove `php-version 5.x.x >/dev/null` if you do not wish to have a default version of PHP loaded into your `$PATH`. The large comment block is optional: ######################################################################################## # php-version (activate default PHP version and autocompletion) # PHP_HOME => should reflect location of compiled PHP versions # PHPVERSION_DISABLE_COMPLETE=1 => to disable shell completion ######################################################################################## export PHP_VERSIONS=$(dirname $(brew --prefix php)) [ -f $(brew --prefix php-version)/php-version.sh ] && source $(brew --prefix php-version)/php-version.sh && php-version 5.x.x >/dev/null ==> Summary /usr/local/Cellar/php-version/0.9.3: 3 files, 20K, built in 3 seconds
php-versionコマンドを使用する際、$PHP_VERSIONの環境変数が設定されている必要があります。
なお、$PHP_VERSIONはインストールされるPHPのディレクトリを指定します。
.zshrcもしくは.bashrcに以下のように書きます。
# PHP Install Directory $PHP_VERSION=~/.phpenv/versions # terminal起動時にphpの切り替えを行う source $(brew --prefix php-version)/php-version.sh && php-version 5.3snapshot >/dev/null
5.PHPのビルド
いよいよphp-buildを使ってのPHPビルドになります。
参考サイトではapacheのmoduleだけ有効にしているようで、他のmoduleは?とか思ったけどこのまま進みます。
php-buildからphpをビルドする場合、configureは/usr/local/share/php-build/definitions/5.xのファイルにて設定します。
$ vi /usr/local/share/php-build/definitions/5.3snapshot configure_option "--with-apxs2" "/usr/sbin/apxs" install_package "http://snaps.php.net/php5.3-latest.tar.bz2" install_pyrus install_xdebug "2.2.0"
したらばLet's コンパイル
$ php-build 5.3snapshot ~/.phpenv/versions/5.3snapshot
コケた。/usr/libexec/apache2/libphp5.soのコピーでPermission Deniedとか出たのでsudoつけてみる。
$ sudo php-build 5.3snapshot ~/.phpenv/versions/5.3snapshot
今度は大丈夫でした。
以降、別バージョンのPHPをビルドすると、/usr/libexec/apache2下に生成されたlibphp5.soが上書きされてしまうので$PHP_VERSIONS下に退避させます。
sudo mv /usr/libexec/apache2/libphp5.so $PHP_VERSIONS/5.3snapshot
同じ要領で5.4snapshotもいれてしまいます。
とトライしたところ、以下のようなエラーが発生
/var/tmp/php-build/source/5.4snapshot/ext/curl/interface.c:2682:5: error: non-void function '_php_curl_setopt' should return a value [-Wreturn-type] ZEND_FETCH_RESOURCE(sh, php_curlsh *, zvalue, -1, le_curl_share_handle_name, le_curl_share_handle);
バグっぽい。どこがってのはわからないけど、5.4.5はビルドできたのでまぁいっか。
6.php-versionで切り替えみる
今現在は5.3snapshotが適用されています。
$ php -v PHP 5.3.16-dev (cli) (built: Aug 20 2012 06:49:39) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies with Xdebug v2.2.0, Copyright (c) 2002-2012, by Derick Rethans
これをphp-versionで5.4.5に切り替えてみます。
$ php-version 5.4.5 SWITCHED PHP VERSION TO: 5.4.5 NEW PHP ROOT DIRECTORY : /Users/sasakiyasuyuki/.phpenv/versions/5.4.5 $ php -v PHP 5.4.5 (cli) (built: Aug 21 2012 23:22:25) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies with Xdebug v2.2.0, Copyright (c) 2002-2012, by Derick Rethans
おおおーーー。できた。
本記事はいったんここで終わりにし、次回、Apacheモジュールの切り替えと、Pyrusでphpunitの導入を実際に試してみます。
補足 デフォルトのconfigure option
configure-optionはapxs2しか指定しませんでしたが、configure-optionのデフォルトはこちらになります。
$ vi /usr/local/Cellar/php-build/0.8.0/share/php-build/default_configure_options --without-pear \ --with-gd --enable-sockets --with-jpeg-dir=/usr --with-png-dir=/usr --enable-exif --enable-zip --with-zlib --with-zlib-dir=/usr --with-kerberos --with-openssl --with-mcrypt=/usr --enable-soap --enable-xmlreader --with-xsl --enable-ftp --enable-cgi --with-curl=/usr --with-tidy --with-xmlrpc --enable-sysvsem --enable-sysvshm --enable-shmop --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pdo-sqlite --enable-pcntl --with-readline --enable-mbstring --disable-debug
バージョンごとに設定するのが面倒だという人はこちらに書くのもいいかもですね。
世の中は意外と甘かった
先週書いたブログですが、思いの他多数の情報が寄せられ僕感激(涙
一番いいのはこのブログ読んでくれた地元のエンジニアが一緒にやりましょうとコンタクトとってくれるのがいいのだけど世の中そんなに甘くはないよね
世の中は意外と甘かった(笑)
県内県外問わず色んな方からメッセージが寄せられ、青森で現在行われてる勉強会の情報や、これから勉強会を行うにあたってのアドバイスなど教えていただきました。
感謝感謝。
せっかくですので、現在青森(青森市中心)にて行われている勉強会について
こちらで紹介させてください。
1.東北セキュリティ情報勉強会
第8回は青森開催!!!
デザイナや開発系の方へ、スマートフォンセキュリティの実情と対策、その他気を付ける点について共有できたらと思います。
だそうで。青森市のシンボル的スポット「アスパム」で開催されますので、県外の人も観光がてらに是非!!!
2.Ruby勉強会@青森
8/18日(土)に勉強会がありますねー > http://www.facebook.com/events/405721746157728/
ガチでRuby始めようと思っているので初学者だけど出る!!!
3.WDHA
今回は東北セキュリティ情報勉強会と合同でやるそうで。8月は自習とか。。。
前回は「一歩先行く!ツール活用で製作効率アップ」でした。
これ聴きたかったなぁー。⇒⇒⇒「HTML5/Sass/CoffeeScriptーツールを活用した、Webサイト制作新時代」
4.webA
コンセプトは「Webに楽しく触れ合おう」みたいなノリでWeb初学者にとても優しい勉強会のようです。
座談会、おやつ交流会などがあるのがポイント!もうなんか和気藹々感が漂ってますよね。
以上でした。
そのうち自分でも何か主催できたらなーと思いつつ、今はほったらかしにしてた仕事の企画書を作らねば。。。
うずうず・・・うずうず・・・
勉強会したい出たい!
ライトニングトークしたい聞きたい!
どうなってるんだ青森は
IT勉強会カレンダー
こんちくしょー
青森、弘前市全てのエンジニア合わせると1000人とか超えると思うんだけど
表立った活動(Facebook, Twiter, ブログ)をしているエンジニアが見つからない
セミナーもあるにはあるんだけど、
情報セキュリティなんちゃらとか、クラウド活用なんちゃらとか
たっくさん説明を練習してきた人が黙々と説明し続ける
涙も笑いもないセミナーなんかに興味なんかない訳ですよ
という感じで早くも詰んでしまったので
自分で何とかする方法を考える
まず勉強会を開催するにあたって人を集めなきゃならないんだけど、
「来てくれる人」「発表してくれる人」を探すのがこれまた大変
上でも書いてるようにネットで見つからないときたもんだ
そこで以下の方法を考えてみた
1.母校でプログラミング講師(無料)
学生に対してアプローチし、コネクションを作っておいて
県内就職した学生を勉強会に引っ張りこむ案
母校の先生には提案はしたんだけれども結果は現在保留中
1ヶ月待って返信ないからダメかな。もう夏休み突入しただろうし
別の専門学校にも提案してみるかはちょっと検討中
2.企業へ直接アタック
「市内のエンジニアを募って勉強会を開催したいと考えています。
つきましては、勉強会に参加してくださるエンジニアをご紹介していただけないでしょうか?」
んーーーーー。なんか怪しいよこれ。人事の人が見たらヘッドハントされるんじゃねとか思われそう。
「市内のIT企業が協賛する勉強を企画しています。ご協力いただけないでしょうか?」
怪しくはないけど、自社の許可がいるな。何よりその後のやり取りが面倒くさそう。
純粋に成長志向が強いエンジニアと勉強したいだけだから、
正直企業にはあんまり介入してほしくないというのが正直なところ。
理想は「好きだからやってる勉強会」
・・・
がぁーっと書いてみたけど、イマイチ効果的な集客方法がわからん
一番いいのはこのブログ読んでくれた地元のエンジニアが
一緒にやりましょうとコンタクトとってくれるのがいいのだけど
世の中そんなに甘くはないよね
ブログ名も
青森県のエンジニアをブログで探す人がいたらHitするように
「片田舎で暮らすエンジニアの雑記」から
「青森で暮らすITエンジニアのブログ」に変更した
(「片田舎 エンジニア」でググるとトップに出てたのに。ぬぐぐぅ。。)
そんな感じで地元のエンジニアの方で勉強会に参加、
主催してみたいという方がいたらぜひとも私までご連絡ください。
プロフィールページにてメール、Twitter, Facebookを公開しています。
iTerm2 + oh my zsh + tmuxで快適なターミナル環境を構築
MacBookProを購入してから2週間くらいたったけど、あんまり触れていないのですorz
普段はターミナルで作業をすることがほとんどなので、まずはターミナル環境を整えるところから。。。
iTerm2
デフォルトのTerminal.appでもよいけど、ネット徘徊するとiTerm2使っている人が多いのでiTerm2にしてみる。
インスコは至って簡単。こちらからiTerm2のzipをダウンロードして解凍。中にあるiTerm2をアプリケーションに突っ込めばおk。
iTerm2のカラーテーマ
vimはもっぱらmolokaiのカラースキーマを使っているのでターミナルもそうする。
molokaiテイストのテーマはここからダウンロード。(getafe.itermcolorsというファイルがiTerm2のカラーテーマ)
iTerm2を起動して、Profiles->Edit Profiles->ColorsタブのLoad Preset...からimportでダウンロードしたテーマをロードでおk
zsh
ずっと憧れてたzshだけど、「漢のzsh」シリーズ読んで敷居が高いというか、なんというか。コマンド補完とか使えりゃ十分なんで、oh-my-zshいれておすまい。
インスコはこちらを参考にさせていただきました。
自分でいじったところといえばテーマぐらいですね。楽しく快適に作業するためには見た目重要。
oh-my-zshでも40種類ぐらいのテンプレートを用意してくれてますので、気にいるものがあればいいですね。
テーマのサンプルはこちらで確認できます。(私は「simple」にしました)
tmux(terminal multiplexer)
ターミナルマルチプレクサ(響きがかっこいいです☆)。zshであーだこーだやっているうちにGNU Screenがーみたいなのに行き着いて、最近はtmuxがーみたいなノリでtmuxいれてみました。
フルスクリーンアプリケーションでターミナルのパネル分割とか複数ウィンドウ管理とかいい感じです。
キーバインドもvimテイストにして一体感抜群。
インスコはこちらを参考にさせていただきました。
iTerm2と同じところにあるtmuxを使うべきか悩んだのですが、パッケージ管理が複雑になりそうなので、homebrewでインスコ。
キーバインドは、半分以上パクったけど、今回はちゃんと試した(つもり)
いつもは試さずに丸パクリしているので自分成長したなーと。
~/.tmux.conf
# prefix1キー set-option -g prefix C-t unbind-key C-b bind t send-prefix # Loading .tmux.conf bind r source-file ~/.tmux.conf; display-message "Reload Tmux Config" # utf8 enabled set-window-option -g utf8 on # View # ステータスライン更新間隔(秒) set -g status-interval 5 set -g status-left-length 100 set -g status-right-length 50 set-option -g set-titles on # www1.hoge.com→www1のみ表示。 set-option -g set-titles-string "@#(hostname | sed 's/\\\\..*//')" # ステータスラインカスタム関連 set -g status-bg black set -g status-fg white set -g status-attr dim # 左部:whoami@hostname set -g status-left '#[fg=green,bold][#20(whoami)@#H]#[default]' # 右部:[2011/03/06(Sun)20:21] set -g status-right '#[fg=green,bold][%Y/%m/%d(%a)%H:%M]#[default]' set -g message-attr bold set -g message-fg white set -g message-bg red set -g pane-active-border-fg white set -g pane-active-border-bg black set-window-option -g mode-bg white set-window-option -g mode-fg black set-window-option -g window-status-bg black set-window-option -g window-status-fg white set-window-option -g window-status-current-bg green set-window-option -g window-status-current-fg black set-window-option -g window-status-current-attr bold # Key Bindings # vertical split window bind C-v split-window -h unbind-key '"' # horizontal split window bind C-s split-window -v unbind-key % # open last window bind C-t last-window # new window(default) bind c new-window # pane to window bind b break-pane # Pane Size bind -r H resize-pane -L 6 bind -r L resize-pane -R 6 bind -r J resize-pane -D 6 bind -r K resize-pane -U 6 # Pane Move bind -r h select-pane -L bind -r j select-pane -D bind -r k select-pane -U bind -r l select-pane -R # Pane exit bind q kill-pane # Window exit bind Q kill-window # Display Pane Number bind i display-panes # copy mode set-window-option -g mode-keys vi bind -t vi-copy v begin-selection bind -t vi-copy y copy-selection bind -t vi-copy Y copy-line bind / list-keys -t vi-copy
そのうちdotfiles管理もやっていきまつ。
初MacBookをいきなりSSD換装してみた
念願の初MacBookProを購入!!
MBP13インチが刷新されると噂されてたのですが、
先日のWWCD 2012の発表では
Retina以外はマイナーアップグレートみたいなもんじゃないですか。
MBPがMBAのように薄くなって、HDDからSSDになることを望んでいたのに。。。
(いやそれMBAやんと思ったけど)
Newモデルは高いので整備済のページ見てみたら2つ前のだけど、MBPが安い。
C2D時代のProより安い。
SSDも安くなってきてるし、換装したら結構使えるんでないかと思って
頭を床にスリスリしてポチっと。
ついでにパーツとかもポチっと。
やりたいことはこんな感じ
・メモリ増設4G⇒8G
・起動ディスクをHDD⇒SSDに変更
・DVD使わないので外したHDDをマウント
必要なもの
・CFD Elixir W3N1333Q-4G(2枚入り) 3,000円ちょっと
・Crucial M4 128GB CT128M4SSD2 10,000弱
・SlimBay9.5SA-HDD.SA 2,280円
・トルクスドライバーセット(使うのはT6) 1,500円ぐらい
・精密ドライバー(使うのは#0) 持ってた
という感じに2万円以内に抑えることができた。
メモリ増設の仕方は他のノーパソも一緒だけどMacさんのは親切にちゃんとこういうサイトもあるし、マニュアルもある。
SSD換装はやり方はこれに書いてた。
MacBookのHDDをSSDに換装してみました。
基本これの通りにやればできると思うんだけど、そうはいかないところが何点か
1.Lionの起動ディスクがない!?
SSDに換装してから気づいたんだけど、起動ディスクがないので何もできなくなった。(Lionが最初からインストールされているPCはそうみたい)
USBメモリを起動ディスク代わりにするやり方があったので、そちらで対応。
(最初にSSDとDVD/HDD換装すれば元々のリカバリ領域使えるけど、いきなり全部換装するなんてワイルドなことはできなかった。)
なくなくHDDに戻し、起動後、USBのリカバリディスクを作ってOSの再インストール。
山ライオンが出たら無料でダウンロードできるはずなので、その時に起動ディスクを作っておくとしよう。
USBリカバリディスクの作り方はこちら
2.SSDが読み込まれない!?
OSインストールしようとしたけど、ディスクが選択できない。。。。。
SSDをフォーマットすんの忘れないでね(笑)
3.裏蓋がしまらない!?
テクノハウス東映で買ったベイマウンタを載せてみたのはいいけど、裏蓋がしまらない。
下の画像のように、ニッパーとかでいらない部分を切り落とすといい感じに収まってくれました☆(左:before、右:After)
換装の結果はというと。。。。
爆速!!!!!
パスワード入力画面まで換装前は30秒かかっていたのが、10秒になりました。
AppleStoreで換装等をお願いすると高くついてしまうので(保障分だと思えばいいんだけど)、
安く快適にMacBookを使いたいという人は、型落ちを購入して自分でいじくるのがお得かもしれません。
(自分で換装すると保障が利かなくなるのでそこは自己責任でよろしく!)
私の場合、本体込み計85,000円くらいで安くて快適なMacBookProが出来上がりました。ちゃんちゃん
vimをちまちま使いはじめて3ヶ月。ちょっと整理してみるよ
今年からjavaでお仕事をすることがなくなり、IDE(eclipse)からvimに乗り換えました。
ここんところ、vimrcの設定値やpluginの管理などが煩雑になってきたので自分ルールを決めて
快適なvimライフを送りたいと思います。
1.今回の作業の目的
- 自宅, 会社、PC移行時など同じ環境を作りたい、同期させたい
- Plugin管理の煩雑さを解消
- 設定値の整理(ファイル細分化とか)
- 会社でvimを広める際に僕の環境を簡単にコピーさせる
ヒントになったやりとりがコレ↓
@tazyamah ありがとう!
3.オールインワンパッケージの解凍
vim73-aio.zipをCとかDドライブ直下に解凍する
pluginを足す際は$VIMRUNTIME/pluginとかに配置するものなのだけど、
この方法だとplugin等の管理が大変になるのでVIMランタイムは解凍後は一切触らないようにします。
また、アップデートの際は新しいパッケージを解凍してそのまま上書きしてやれば大丈夫です。
4._vimrc,_gvimrc
オールインワンパッケージを展開するとsample_vimrc, sample_gvimrcというファイルがあります。
これをプロファイルディレクトリへ移動してリネームします。(Windows7の場合はC:\User\
_sample_vimrc → _vimrc
_sample_gvimrc → _gvimrc
_(アンダースコア)つきvimrcはUnixでいうところの.vimrcです。Windowsの場合は_(アンダースコア)つきのvimrcがユーザ固有のvim設定となります。
設定値に関してまだそこまで詳しくはないので基本はsampleをそのまま使っていきます。
5.日本語入力固定モード
ものすごく煩わしい日本語入力時の対応。僕の場合、IMEをONにしておいて、
(ESCとIMEをよくミスタッチしてしまうので)
im_control.vimをダウンロードして
ユーザープロファイルディレクトリの.vim/pluginにおきます。(VIMRUNTIME上には置かない)
_gvimrcに
source ~/.vim/_gvimrc_im
で、.vim以下に_gvimrc_imを作って
"---------------------------------------- " 日本語入力固定モード "---------------------------------------- source ~/.vim/plugin/im_control.vim " 「日本語入力固定モード」の動作モード let IM_CtrlMode = 4 " 「日本語入力固定モード」切替キー inoremap=IMState('FixMode') " 「日本語入力固定モード」のバッファローカルモード let b:IM_CtrlBufLocal = 1
でOK。(im_control.vimはconsoleでは使えないのであくまでもgvim用のファイルに書きます)
参考元はこちら
6.plugin管理
最初はvundleで管理しようと思ったんだけど、
@tazyamah「時代はNeoBundleですよ」
ということらしいので、plugin管理にはneobundleを使うよ!
install、使用方法はこちら
_vimrcの整理がてら僕の環境は以下のようになりました。
まずはgitでneobundle.vimをclone
$ mkdir -p ~/.vim/bundle $ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
その後、_vimrcに
source ~/.vim/_vimrc_neobundle
で、~/.vim/_vimrc_neobundleに
set nocompatible filetype off if has('vim_starting') set runtimepath+=~/.vim/bundle/neobundle.vim call neobundle#rc(expand('~/.vim/bundle')) endif " このへんは必須です! " let NeoBundle manage NeoBundle " required! "NeoBundle 'Shougo/neobundle.vim' " recommended to install NeoBundle 'Shougo/vimproc' " after install, turn shell ~/.vim/bundle/vimproc, (n,g)make -f your_machines_makefile NeoBundle 'Shougo/vimshell' NeoBundle 'Shougo/unite.vim' " ここから自分で使うplugin " とりあえずいつもいれるzen-codingを NeoBundle 'git://github.com/mattn/zencoding-vim.git' filetype plugin on filetype indent on
したらばvimを起動してコマンドモードで
:NeoBundleInstall
その後、vimを起動しなおしーの挿入モードで
html:4s
を入力して
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title></title> </head> <body> </body> </html>
出た!!!
やばい。bundle気持ちよすぎ
7.整理
ここまでの構成をまとめると、ユーザプロファイルディレクトリ以下の状態はこうなった
https://github.com/ya-sasaki/windows-vim
プロファイルディレクトリ ├─.vim " ユーザランタイムディレクトリ │ ├─bundle " bundle管理フォルダ │ ├─plugin " bundle管理外のplugin │ | └im_control.vim " 日本語固定入力用 │ ├_gvimrc_basic " gvim基本 │ ├_gvimrc_im " IM設定 │ ├_vimrc_basic " gvim,vim基本 │ └_vimrc_neobundle " neobundle設定 ├_gvimrc " gvim用ユーザ設定 └_vimrc " gvim,vim用共通ユーザ設定
8.環境構築 from git
ここまで作った環境は一旦ご破算して、オールインワンパッケージが既にある前提で環境構築してみる。
一旦任意のディレクトリにgit://github.com/ya-sasaki/windows-vim.gitをcloneする
$ mkdir work $ cd work $ git clone git://github.com/ya-sasaki/windows-vim.git
clone後は、windows-vim下の.vimフォルダ、_vimrc、_gvimrcをユーザプロファイルディレクトリへコピペ
neobunleがまだ入っていないのでcloneする
$ mkdir -p ~/.vim/bundle $ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
終わったらvimを起動して:NeoBundleInstall
わぁーい簡単簡単