Ads by Google
新しい記事を書く事で広告が消せます。
--/--/-- --:-- | スポンサー広告 | トラックバック(-) | コメント(-)
Macでurxvt + screen + zsh + vim再び
前回環境を作ってからなんやかんやでiTermに戻ってた.iTermは最新版では機能的には良い感じになってたけど,その変わりもっさり具合がひどくなってて,特にVimでNERD_treeを表示していると1秒間に2行ぐらいしかスクロールできないほど重い感じ.というわけで,前回の続きでurxvtに再挑戦することに.
前回満足いかなかった点としては,無理矢理「英数」「かな/カナ」キーでIMEをon/offしてたので時折変な挙動を示したいた点と,フォント設定がうまくいってなくて見た目がださかった点が大きかった.この2点がそこそこ解決できたので簡単に説明してみる.ちなみに,環境は10.5 Leopardなので,もしかしたら10.6 Snow Leopardではうまくいかない点があるかも.
環境整備
まずは,前回同様何はともあれ最新版のX11をXQuartzから持ってくる.今書いている時点で2.4.0が最新版.ちなみに2.4.0はSnow Leopardでは使えなくて2.4.1を待てみたいなことが書いてあるので,Snow Leopardな人は入れない方が良いのかも.あと,MacPortsは既に設定済みであるということで話を進める.例によってBeginning OS Xを参考にするのがおすすめ.
urxvtのインストール
前回はおれおれPortfileを作っていたけども,現在は公式で256色表示のvariantがあるのでそれを使えるので簡単.設定は~/.Xdefaultに書く.エントリの最後にくっつけたやつでOsaka-等幅フォントが使えてそれなりに美しく見える.
% sudo port install rxvt-unicode +xterm_colors_256
screenのインストール
MacPorts公式のやMacに付属のscreenではなぜかpbcopyやpbpasteといったコマンドが使えないので,GNU screen on Mac OS X - mootoh.clipで紹介されている方法を参考に自力でscreenを入れる.
% git clone http://git.savannah.gnu.org/cgit/screen.git
% cd screen/src
% sh autogen.sh
% ./configure --enable-colors256 --enable-rxvt_osc --disable-telnet --prefix=/usr/local
% make
% sudo make install
あと,このままだとrxvt-256colorのterminfoがないとエラーが出るので,/opt/local/share/terminfo/72 /rxvt-256colorを/usr/share/terminfo/72/にコピーした(正しい対処か分からないけど).ちなみに/opt /local以下にあるやつはncurseswインストール時についてくるやつで,rxvt-unicodeもVimもncurseswに依存している.
screenrcは適当でもいいけど,以下の2行はたぶんないと色がおかしくなる.
defbce "on"
term rxvt-256color
zshのインストール
zshはgit.sourceforge.jp Git - splhack/MacPorts.git/summaryからPortfileを頂いてきて,インストールする.+cjk以外のvariantsは適当に.
% sudo port install zsh-devel +cjk +doc +examples +mp_completion +pcre
Vimのインストール
MacPortsでさくっと.
% sudo port installl vim +huge +perl +python +ruby
Mac UIM
今回は日本語入力にとしてMac UIMを使うのでmacuim - Project Hosting on Google Codeからダウンロードしてインストール.次にエントリの最後にくっつけた内容で~/.MacOSX/environment.plistを作成.前回同様,LANG属性は入れていない.Mac UIMインストール後に再ログインを求められるし,environment.plistを反映させるためにもここで再ログイン.
次に,xinitrcを/usr/X11/lib/X11/xinit/xinitrcから引っ張ってきてMac UIMの起動コードを追加する.
% cp /usr/X11/lib/X11/xinit/xinitrc ~/.xinitrc
# start some nice programsの下に以下を追加
/Library/Frameworks/UIM.framework/Versions/Current/bin/uim-xim --engine=anthy &
さらに,「英数」「かな/カナ」キーでMac UIMをon/offできるようにする.晴 - Note X11.app上で日本語入力する設定覚書を参考に.XmodmapとMac UIMの設定をいじる(これもエントリ最後にくっつけている).これによって,Mac UIMのon/off以外にもバックスラッシュの入力と変換中のフォントの設定ができる.Mac UIMの設定はシステム環境設定からもできるので,その他気になるところは適当にいじると良いと思う.AnthyにもVi協調モードがあってこれを有効にするとEscキーでNormalモードに戻るときにAnthyも同時にOffとなる.
X11.appの設定
前回同様,urxvt-helperを作成して,defaultsコマンドでX11.app実行時にurxvtが立ち上がるようにする.chmodで実行権を与えるのを忘れずに.
% defaults write org.x.X11 app_to_run "/usr/local/bin/urxvt-helper"
あとは,X11.appの環境設定の入力のところで,「X11の代替キーを有効にする」のチェックを外す.これをしておかないと先ほどの「英数」,「かな/ カナ」キーの入力がX11に届かない.あと「3 ボタンマウスをエミュレート」はチェックを入れておくとOption+クリックでペーストできるので便利.その他は適当に.
感想とか
これでだいたいやったことは説明したと思う.何か抜けている可能性が高いし,間違ってるかも知れないし,分かりにくいところもあると思うので,何かあれば教えて下さい.
全体としては,非常に軽快に動作する上に,日本語入力もほぼ通常の環境と変わらず行え,256色でアンチエイリアスの効いたフォントも十分見られる範囲.あと,Vimのkuプラグインなどで必要となるOption-jとかOption-kとかの入力は,Command-j,Command-kで行える.
不満は半透明表示ができないこと.urxvt自体はshadingで透明度を設定できるようになっているので,コンパイルオプションが間違っているのか X11.appの問題なのか分からないけど,そのうち解決することを期待したい.あと,この設定だとCommandキーがAltキーとして取られるので,urxvtを使っている間はCommand-cでコピーなどのMac本来のショートカットキーが使えない.
というわけで,多少の不満はあるものの,256色表示できない残念なTerminal.appやとても重たいiTerm.appに比べたら,だいぶ良い環境が作れたのではないかと思う.あとはkinput2.macimが復活してATOKも使えたら良いのになぁとも思う.最後にスクリーンショットを貼っておく.
設定ファイルいろいろ gist: 209829 - GitHub
2009/10/14 15:42 | Mac | トラックバック(0) | コメント(0)
Vimperatorからdel.icio.us IncSearchを使うプラグインを作った
ローカルにdeliciousのブックマークをキャッシュしておいてから,インクリメンタルサーチで簡単に検索できるdel.icio.us IncSearchをVimperatorから使えるプラグインを作ってみた.一応,Hatebu IncSearch ,livedoor clip IncSearch, Google Bookmarks IncSearchでも使えるようにしたつもり.
使い方としては,まず.vimperatorrcに使うブックマークサービスの名前(deliciousの場合不要)と一回に表示する検索結果の数(デフォルトの15でよければ不要)を書きます.
" delicious, hatebu, livedoorclip, googlebookmarksのどれか
let sbmincsearch_service_name = "delicious"
" あんまり大きくすると遅くなるかも
let sbmincsearch_max = 50
すると,deliciousならdeliciousIncsearch,hatebuならhatebuIncsearchという風にコマンドが定義されて,それを使ってIncSearch拡張のデータベースからインクリメンタルサーチできます.元の拡張の検索関数を使っているので,|によるOR検索や,!によるNOT検索,[tag]によるタグの識別なども使えます.
さらに,はてなブックマーク拡張のVimperatorプラグインのようにcompleteオプションを指定することもできます.というか,はてブ拡張のVimpプラグインの実装をとても参考にしました.
autocmd VimperatorEnter .* :set complete+=I
のように,completeにIを加えると,:openや:tabopenの結果にインクリメンタルサーチの結果を含めることができます.あと,ブックマークの同期コマンドは用意していないので,通常のIncSearch拡張の画面から同期して下さい.
2009/09/19 17:00 | Firefox | トラックバック(0) | コメント(6)
Tree Style TabとMultiple Tab HandlerをVimperatorから使うプラグイン その2
以前に作ったTree Style TabとMultiple Tab HandlerをVimperatorから使うプラグインをもう少しバージョンアップしてみた.Firefox 3.5 + Vimperator 2.1でのみ動作確認しています.
前回からの変更点はたぶん以下のような感じ.
- Vimperatorのタブ移動コマンドでは,TreeStyleTabで畳んでいるタブから次のタブへ移動するときに次のタブへ行かずにタブを展開してその子タブへ移動してしまうので,それを修正するようにタブの移動コマンドを再定義した.
- TreeStyleTabで<C-w>k, <C-w>j, <C-w>h, <C-w>lでそれぞれタブバーの位置を上下左右に配置できる.APIがあったからやってみたけど,これはあんまりいらないかも.
- MultipleTabHandlerでタブのURIをコピーする時のフォーマットをカスタマイズできるようになったので,それを利用するmcopyコマンドを定義.これでcopy.jsとまではいかなくてもそれなりに柔軟に,しかも複数タブ同時にURLやタイトルをコピーすることができる.MultipleTabHandlerの設定画面で定義したフォーマットを使えるのでそこそこ便利だと思う.
- MultipleTabHandlerとTreeStyleTabが両方インストールされているときには,ツリーの構造に従ってタブを選択するコマンドを作成した.zsで同じレベルのタブ全部,ztで同じツリーのタブ全部を選択できる.
例によって問答無用でデフォルトのマッピングを上書きしたりするので,ご利用には十分ご注意下さい.
2009/09/19 16:31 | Firefox | トラックバック(0) | コメント(0)
Vimでoperator-userを使って他のプラグインをoperatorとして使えるようにしてみた
kanaさん作のoperator-userを使うと,簡単にoperatorを定義できる.operatorというのはここでは,Vimのコマンドのうちdwとかc$とかのdとかcとかの,動作を指定するコマンドのこと(こんな説明でいいのか,まぁ詳しくは:h operatorで(^-^;)).で,Vimにははじめから便利なoperatorが定義されていて,新たにoperatorを定義できると言われても,さてどうしたもんかと思っていた.
そんなときに,operator-userとは別に,commentop.vimというコメントアウト/アンコメントするためのoperatorを定義するプラグインを見つけて,あーなるほどこれは便利だと思った.ところが,コメント系のプラグインとしては,NERD Commenterが非常に高機能で便利に使っていたので,そこから機能が落ちるのはちょっとなぁとも思っていた.
というわけで,前置きが長くなったけど,それだったらNERD Commenterとoperator-userを組み合わせて新しいoperatorを作ったらいいんじゃね?ということでやったみた.以下を.vimrcなどに書いておけば,,cや,uなどといったoperatorが定義される.
function! s:SID_PREFIX()
return matchstr(expand('<sfile>'), '<SNR>\d\+_')
endfunction
noremap [Operator] <Nop>
map , [Operator]
" デフォルトのマッピング定義を行わない
let g:NERDCreateDefaultMappings = 0
nmap gA <Plug>NERDCommenterAppend
nmap [Prefix]a <Plug>NERDCommenterAltDelims
" NERDCommenter + operator-user
function! s:setCommentOperator(key, name)
call operator#user#define(
\ 'comment-' . a:name,
\ s:SID_PREFIX() . 'doCommentCommand',
\ 'call ' . s:SID_PREFIX() . 'setCommentCommand("' . a:name . '")')
execute 'map' a:key '<Plug>(operator-comment-' . a:name . ')'
endfunction
function! s:setCommentCommand(command)
let s:comment_command = a:command
endfunction
function! s:doCommentCommand(motion_wiseness)
let v = operator#user#visual_command_from_wise_name(a:motion_wiseness)
execute 'normal! `[' . v . "`]\<Esc>"
call NERDComment(1, s:comment_command)
endfunction
call s:setCommentOperator('[Operator]c', 'norm')
call s:setCommentOperator('[Operator]<Scace>', 'toggle')
call s:setCommentOperator('[Operator]m', 'minimal')
call s:setCommentOperator('[Operator]s', 'sexy')
call s:setCommentOperator('[Operator]i', 'invert')
call s:setCommentOperator('[Operator]y', 'yank')
call s:setCommentOperator('[Operator]l', 'alignLeft')
call s:setCommentOperator('[Operator]b', 'alignBoth')
call s:setCommentOperator('[Operator]n', 'nested')
call s:setCommentOperator('[Operator]u', 'uncomment')
一応ポイントとしては,NERDComment()という関数がNERD Commenterの本体で,第一引数を1にしておくと直前のVisual modeで選択された範囲に対して操作を行うというところ.なので,doCommentCommand()でoperatorの操作範囲を一旦Visual modeで選択してからEscするようにしている.NERD Commenterの各コマンドの意味は:h NERDComFunctionalitySummaryを参照ということで.
また,operatorは,例えばddで一行削除やyyで一行ヤンクというように,2回連続入力でその行全体に対して動作したり,Visual mode中では選択範囲に対して動作したりするのだが,operator-userで定義したoperatorもちゃんとそのように振る舞う.そのため,,c,cで一行コメントアウトやVisual mode中に,uで選択範囲をアンコメントといった動作も同時に定義される.なので,NERD Commenterのデフォルト定義は無効にしてある.
さらに,textobj-commentや textobj-indentといった,text objectとももちろん連携可能なので,使いこなせば光の速さでコメント操作ができるようになる!...はず!
あと,調子にのってAlignプラグインもoperator化してみたけど,さすがにこれはちょっと無理があると思った.自分ではたまに使おうと思うけど(^-^;)
2009/09/19 15:35 | Vim | トラックバック(0) | コメント(0)
MacVim-Kaoriyaでデフォルトのvimrcとgvimrcを読まないようにする
Mac上のGVimとしては最強に快適なMacVim-Kaoriyaだけど,デフォルトでKaoriya版GVimに含まれるvimrcとgvimrcが読まれて,個人的にはいらない設定を勝手にされてしまうので,これを回避してみた.
vimrcとgvimrcを読んだらわかる通り,基本的には /Applications/MacVim.app/Contents/Resources/vim/ にちょろっとファイルおくだけだけど,MacVim-Kaoriyaアップデート時に簡単に再設定できるように簡単なワンライナ(?)にしてみた.ついでに,vimrc_local.vim にて set langmenu=ja_ja.utf-8.macvim することで,メニューがMacらしく日本語化される.自分はzshの履歴にこのコマンドを覚えさせといて利用している.
echo "let g:vimrc_local_finish = 1\nset langmenu=ja_ja.utf-8.macvim" > /Applications/MacVim.app/Contents/Resources/vim/vimrc_local.vim; \
echo "let g:gvimrc_local_finish = 1" > /Applications/MacVim.app/Contents/Resources/vim/gvimrc_local.vim
ちなみに,WindowsのKaoriya版GVimでも同様に,デフォルトのvimrcとgvimrcの読み込みを阻止している.あと,Windowsで:set encoding=utf-8する方法 - 永遠に未完成を参考にUTF-8化するのもおすすめ.自分の場合はPoeditで エンコードの変換とmoファイルへの変換を一気にやりました.
2009/07/01 20:53 | Vim | トラックバック(0) | コメント(0)
