snippetsEmuを導入する。

MacTextMate'sというエディタのすにぺっとをエミュレートするナイスなプラグイン

$ cd ~/src
$ wget http://www.vim.org/scripts/download_script.php?src_id=8450
$ mkdir -p ~/.vim/after/ftplugin
$ vim snippy_plugin.vba

コマンドモードで

:so %
:q

昔は一緒にインストールされたんだけど、php用のすにぺっとファイルを以下に保存。

~/.vim/after/ftplungin/php_snippets.vim

内容はこんな感じ。
もともとのファイルをPEARコーディング規約にあわせて修正したり追加したりした記憶。

if !exists('loaded_snippet') || &cp
    finish
endif

let st = g:snip_start_tag
let et = g:snip_end_tag
let cd = g:snip_elem_delim

exec "Snippet php <?php<CR>".st.et."<CR>?>"

exec "Snippet if if (".st."condition".et.") {<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet ifelse if (".st."condition".et.")<CR>{<CR>".st.et."<CR>}<CR>else<CR>{<CR>".st.et."<CR>}<CR>".st.et
exec "Snippet else else {<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet elseif elseif (".st."condition".et.") {<CR><Tab>".st.et."<CR>}<CR>"
exec "Snippet if? $".st."val".et." = (".st.et.")? ".st.et.": ".st.et.";<CR>".st.et
exec "Snippet for for ($".st."i".et." = ".st.et."; $".st."i".et." < ".st.et."; $".st."i".et."++) {<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet foreach foreach ($".st."variable".et." as $".st."key".et." => $".st."value".et.") {<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet while while (".st.et.") {<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet do do {<CR><Tab>".st.et."<CR>} while (".st.et.");<CR>".st.et
exec "Snippet switch switch (".st."variable".et.") {<CR>case ".st.et.":<CR><Tab>".st.et."<CR><Tab>break;<CR>".st.et."<CR>default:<CR><Tab>".st.et."<CR><Tab>break;<CR>}<CR>".st.et
exec "Snippet case case ".st.et.":<CR><Tab>".st.et."<CR><Tab>break;<CR>".st.et

exec "Snippet incll include_once '".st."file".et."';<CR>".st.et
exec "Snippet incl include '".st."file".et."';<CR>".st.et
exec "Snippet req require '".st."file".et."';<CR>".st.et
exec "Snippet reql require_once '".st."file".et."';<CR>".st.et

exec "Snippet function function ".st."functionName".et."(".st.et.")<CR>{<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet define define('".st."CONSTANT".et."', ".st.et.");<CR>".st.et
exec "Snippet array $".st."arrayName".et." = array(".st.et.", ".st.et.");".st.et
exec "Snippet print print \"".st."string".et."\"".st.et.";".st.et."<CR>".st.et

exec "Snippet $_R $_REQUEST['".st."variable".et."']".st.et
exec "Snippet $_S $_SERVER['".st."variable".et."']".st.et
exec "Snippet $_G $_GET['".st."variable".et."']".st.et
exec "Snippet $_P $_POST['".st."variable".et."']".st.et
exec "Snippet $_C $_COOKIE['".st."variable".et."']".st.et
exec "Snippet -globals $GLOBALS['".st."variable".et."']".st.et.st."something".et.st.et.";<CR>".st.et

exec "Snippet class class ".st."ClassName".et."<CR>{<CR><TAB>function __construct(".st.et.")<CR><TAB>{<CR><Tab><Tab>".st.et."<CR><Tab>}<CR><Tab>".st.et."<CR>}<CR>"
exec "Snippet public public function ".st."functionName".et."(".st.et.")<CR>{<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet protected protected function ".st."functionName".et."(".st.et.")<CR>{<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet private private function ".st."functionName".et."(".st.et.")<CR>{<CR><Tab>".st.et."<CR>}<CR>".st.et
exec "Snippet const const ".st."CONSTANT".et." = ".st.et.";<CR>".st.et

vimのインストール

$ mkdir -p $HOME/src
$ cd $HOME/src
$ wget ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2
$ wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz
$ tar pxvf vim-7.2.tar.bz2
$ tar zxvf vim-7.2-lang.tar.gz
$ cd vim72
$ ./configure --prefix=$HOME --enable-multibyte --with-features=big --without-x --disable-gui
$ make
$ make install

with-featuresオプションは現状ではbigとfuge違いないらしい
http://www.ac.cyberhome.ne.jp/~yakahaira/vimdoc/various.html#+feature-list

またdisられてますよ

*-users.jpの比較 by ならべて(http://narabete.com)

  2008/05ハブサイトブームで誕生 デザイン 使い勝手 情報量 期待
AIR-users.jp - - -
js-users.jp - - - -
mac-users.jp - - -
nakano-users.jp - - - -
opera-users.jp - - - -
perl-users.jp - - -
php-users.jp × - - ×
pyobjc-users.jp - - - -
python-users.jp - - - -
rails-users.jp - - -

最新版はこちら
http://narabete.com/table/1081/1666-1664-1785-1713-1864-1590-1592-1682-1668-1665/1548-1551-1552-1638-1478

is_intとis_mumericの間の関数が欲しい

is_intはint型チェック、is_mumericは数値っぽいものをチェック。
string型でもintっぽいかどうかチェックしたい。

<?php
function range_int($val) {
  return (is_numeric($val) && (string)$val === (string)(int)$val);
}
$arr = array(
    "123",
    "0",
    "-1",
    0123,
    2147483647,
    2147483648,
    0,
    11,
    9011,
    00,
    0x12,
    true,
    " ",
    "",
    1.1,
    "123.1",
    "00",
    "0x123",
    "123a",
    "ada",
    "--1",
    "999999999999999999999999999999999",
    false,
    null,
    '1 '
);
foreach ($arr as $val) {
    print range_int($val)? 'T': 'F';
    print ' ';
    if ($val === null) {
        print 'null';
    } elseif ($val === true) {
        print 'true';
    } elseif ($val === false) {
        print 'false';
    } elseif (is_string($val)) {
        print '"' . $val . '"';
    } else {
        print $val;
    }
    print "\n";
}
T "123"
T "0"
T "-1"
T 83
T 2147483647
F 2147483648
T 0
T 11
T 9011
T 0
T 18
F true
F " "
F ""
F 1.1
F "123.1"
F "00"
F "0x123"
F "123a"
F "ada"
F "--1"
F "999999999999999999999999999999999"
F false
F null
F "1 "
F ".1"

is_numeric

T "123"
T "0"
T "-1"
T 83
T 2147483647
T 2147483648
T 0
T 11
T 9011
T 0
T 18
F true
F " "
F ""
T 1.1
T "123.1"
T "00"
T "0x123"
F "123a"
F "ada"
F "--1"
T "999999999999999999999999999999999"
F false
F null
F "1 "
T ".1"

is_int

F "123"
F "0"
F "-1"
T 83
T 2147483647
F 2147483648
T 0
T 11
T 9011
T 0
T 18
F true
F " "
F ""
F 1.1
F "123.1"
F "00"
F "0x123"
F "123a"
F "ada"
F "--1"
F "999999999999999999999999999999999"
F false
F null
F "1 "
F ".1"

SJIS-win→SJIS

<?php
$str = "あアア①㈱㌦〜" . pack('C*', 0xF8, 0x9F);
echo mb_convert_encoding($str, 'SJIS-win', 'SJIS-win') . "\n";
echo mb_convert_encoding($str, 'SJIS', 'SJIS') . "\n";
echo mb_convert_encoding($str, 'SJIS', 'SJIS-win') . "\n";
echo mb_convert_encoding($str, 'SJIS-win', 'SJIS') . "\n";
あアア①㈱㌦〜[絵文字]
あアア①㈱㌦〜?
あアア???〜?
あアア①㈱㌦〜?

あれ?

PEAR::Pager

Pagerにはマニュアルに載ってないオプションが結構ある。
PEAR :: Manual :: Pager::factory

  • fixFileName
  • httpMethod
  • formID
  • importQuery
  • altFirst
  • altLast
  • prevImgEmpty
  • nextImgEmpty
  • accesskey
  • attributes
  • onclick
  • curPageSpanPre
  • curPageSpanPost
  • firstLinkTitle
  • nextLinkTitle
  • prevLinkTitle
  • lastLinkTitle
  • showAllText
  • extraVars
  • excludeVars
  • currentPage

accesskeyとかおっと思うのですが、ページナンバーがそのままアクセスキーになる糞仕様。
10とかアクセスキーに設定しても意味ないじゃん。
nextAccesskey、firstAccesskeyとかいうオプション作ればいいのに。