Hatena::ブログ(Diary)

cooldaemonの備忘録 RSSフィード

2011-04-26

Unite を始めてみた(ack と組み合わせて使う方法など…)

Vim の Plugin を更新がてら、Yokohama.vim #0 の頃から気になっていた Unite に入門してみました。

基本設定

一先ずインストール後に下記のようなキーマッピングにしてみました。

nmap ;; :Unite
nmap ;s :Unite source<CR>
nmap ;b :Unite buffer<CR>
nmap ;f :Unite file<CR>
nmap ;r :Unite ref/

';' を全て Unite に捧げてます。使用頻度の高い source, buffer, file 以外は、試行錯誤中です。

Unite file でカレントファイルと同じディレクトリのファイル一覧を表示してくれるので、':e' の使用頻度が減り、下記を削除できました。

autocmd BufNewFile,BufRead,BufEnter * exec ':lcd ' . expand("%:p:h") 

ちなみに、Unite + vim-ref の組み合わせは、最高に使い勝手が良いので、Vim をご使用の Erlanger や Perl Mongers は是非ご利用を…。

ack 用の設定

好みの問題ですが、grep より ack の方が好きなので、unite-qf と組み合わせて、下記のようにしてみました。

set grepprg=ack\ -a\ --nocolor
nmap ;q :Unite qf<CR>
nmap ;/ :grep  \| Unite qf<LEFT><LEFT><LEFT><LEFT><LEFT><LEFT><LEFT><LEFT><LEFT><LEFT><LEFT>

<LEFT> 11連発が格好悪いのですが… ";/" で ":grep | Unite qf" まで入力されるので、後は検索ワード(正規表現可)を入れると、ack の結果を Unite で表示します。Unite qf の箇所は、好みで cw20 とかでも良いと思います。

注意点として、ack は、カレントディレクトリ配下を検索範囲とするので、前述の autocmd で lcd を実行する設定を入れないと、カレントファイルが存在するディレクトリ以下を検索範囲にしません。


毎度の如く突っ込み大歓迎。

2011-04-20

neocomplcache + snipMate をやめて neocomplcache 単体に切り替える

久しぶりに neocomplcache を git pull したら snipMate の multiple snippets*1 に対応していたので、neocomplcache 単体に切り替えてみました。

これで、snipMate_complete.vim は、お払い箱です。

.vimrc に追加した内容

始めに、snipMate の TAB キーを模倣するため、マッピングを追加*2

imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>"
smap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>"

次に、snippets の保存ディレクトリを snipMate に合わせる*3

let g:neocomplcache_snippets_dir = $HOME . '/.vim/snippets'

最後に、snippets 内で `Filename()` を使いたかったので snipMate から移植

fun! Filename(...)
  let filename = expand('%:t:r')
  if filename == '' | return a:0 == 2 ? a:2 : '' | endif
  return !a:0 || a:1 == '' ? filename : substitute(a:1, '$1', filename, 'g')
endf

*1:同じトリガーキーを複数登録できる機能

*2:smap を加えないと、デフォルト値で良い場合に TAB で移動できない

*3:neocomplcache_snippets_dir は、カンマ区切りで複数指定可能

2010-07-09

neocomplcache で zencoding.vim 内の snippets を補完する

zencoding.vim 内の Snippets を覚えられなかったので neocomplcache で補完できないかと思い、下記のような Plugin を書いてみました。

http://gist.github.com/469369

需要はあまりないと思いますが晒しておきます。

2010-06-19

vim-ref が Erlang に対応した!

Vim から各種リファレンスを参照できる @thinca 氏作のvim-ref が Erlang に対応したので試してみました。

「:Ref erlang [検索したい単語]」と入力するか、検索したい単語の上で 'K' を押下すると「erl -man」の結果をバッファに表示してくれます。

それだけだと大した事なさそうですが、表示結果をキャッシュに保存して次回以降のレスポンスを早くしてくれたり、検索したい単語を入力中に [TAB] を押下すると候補を補完してくれる機能を持ちます。

補完機能に関してはかなり強力で、モジュール名は勿論、関数名まで補完してくれます。例えば…

入力補完結果
:Ref er[TAB]:Ref erlang
:Ref erlang appli[TAB]:Ref erlang application
:Ref erlang application:t[TAB]:Ref erlang application:takeover

と言った感じです。当然、候補が複数ある場合は、候補の中から選択する事が可能です。

Vim で Erlang を記述している方は、是非、ご利用ください。

ちなみに、Manpageview と異なり vim-ref は :Ref の後に参照するリファレンスを指定できるので、C ファイルを開いているバッファ上でも Erlang のリファレンスを参照できます。

Linked-In Driver や NIF を作成している最中は、地味に嬉しいです。

vim-ref のプラグインを自作する

vim-ref は、プラグインで拡張できる設計となっているので、試しに Twitter 検索用のプラグインを自作してみました。

と言っても、Twitter 検索を実行する適当なコマンドを Perl で自作し、プラグインの中から実行しているだけの簡単な仕組みです。

ref-twitter

search_twitter.pl

Net::Twitter や Term::ANSIColor を利用しているので、非常に行数は少ないのですが、Perl 環境が整っていない方は、準備として CPAN 祭りが必要です。

引数の文字コードは、UTF-8 固定です。

twitter.vim から使うには、PATH の通った場所に配置する必要があります。

twitter.vim

コマンド側で出力結果にエスケープシーケンスで色を付けていたのですが、何もせずに Vim のバッファに結果を表示するとエスケープシーケンスがそのまま表示されてしまいます。

そこで、下記からコードを拝借させて頂き、GVim でも色が付くように修正してから twitter.vim に組み込んでみました。

エスケープシーケンス による色付けを Vim のバッファで再現する - NaN days - subtech

ちなみに、vim-ref では、結果をキャッシュに保存する便利関数がプラグインから利用しやすい形で提供されています。しかし、常に最新の情報を参照したいので、今回はあえて利用していません。

vim-ref のプラグインを書く事は、そんなに敷居の高い行為ではないので、是非、お試しあれ。

2010-05-19

Erlang + ManPageView(Vim) で関数を検索

以前、ManPageView を修正し erl -man 対応を行ったのですが、Man がモジュール単位であるため関数名で検索できませんでした。

そこで Man を開いた後に関数名で検索するように無理矢理修正してみました。

http://github.com/cooldaemon/myhome/blob/master/.vim/plugin/manpageview.vim

これで expand("<cword>") と組み合せて使う事ができます。

ref.vim の Erlang 対応まで待とうかと思ったのですが、数行の修正で済むのでついやってしまいました。