Hatena::Groupcatalyst

dann@catalyst このページをアンテナに追加 RSSフィード

2008-03-31

Catalystのプロジェクト用のタグ生成

| 22:55 |  Catalystのプロジェクト用のタグ生成 - dann@catalyst を含むブックマーク はてなブックマーク -  Catalystのプロジェクト用のタグ生成 - dann@catalyst  Catalystのプロジェクト用のタグ生成 - dann@catalyst のブックマークコメント

さっきのやつのctags版.

ctagspという名前でPATHの通ったところに保存。

#!/usr/bin/env perl
use strict;
use warnings;
use File::Basename qw(dirname);
use File::Spec::Functions qw(catfile);
use Cwd;

my $basedir = find_module_base();
die "Can't find module base directory\n" unless $basedir;

chdir($basedir) or die "chdir $basedir:$!";

run_ctags();
exit 0; # not reached

sub run_ctags {
    my @ctags = ('ctags', '-R');
    print STDERR "@ctags\n";
    exec(@ctags);
    die "exec failed: $!";
    # not reached.
}

sub find_module_base {
    my $curdir = shift || cwd;
    chomp($curdir);

    while ($curdir && $curdir ne '/') {
        return $curdir if looks_like_base($curdir);
        $curdir = dirname $curdir; # try ../
    }
    return; # not found.
}

sub looks_like_base {
    my $dir = shift;

    return ( -d catfile($dir, 't')
            && -e catfile($dir, 'README')
            && (-e catfile($dir, 'Makefile.PL')
                || -e catfile($dir, 'Build.PL')));
}

.vimrc

set tags+=./tags;/

~/.vim/ftplugin/perl.vim

noremap ,c <Esc>:!ctagsp<CR>

vim中からprove

| 20:55 |  vim中からprove - dann@catalyst を含むブックマーク はてなブックマーク -  vim中からprove - dann@catalyst  vim中からprove - dann@catalyst のブックマークコメント

emacsからprove

http://saltyduck.blog12.fc2.com/blog-entry-23.html

おぉ、そうかモジュールのディレクトリっぽいところを上に辿ってけばいいのか。vimだけでやること考えていたけど、この方法でいいですね。

/usr/local/bin/perlを/usr/bin/envに変えたのと、looks_like_baseの判定を緩くしました。

以下のコマンドをprvでPATHの通ったところに保存

#!/usr/bin/env perl
use strict;
use warnings;
use File::Basename qw(dirname);
use File::Spec::Functions qw(catfile);
use Cwd;

my @test_files = @ARGV;
@test_files = qw(t) unless @test_files;

my $basedir = find_module_base();
die "Can't find module base directory\n" unless $basedir;

chdir($basedir) or die "chdir $basedir:$!";

run_prove();
exit 0; # not reached

sub run_prove {
    my @prove = ('prove', '-vl', @test_files);
    print STDERR "@prove\n";
    exec(@prove);
    die "exec failed: $!";
    # not reached.
}

sub find_module_base {
    my $curdir = shift || cwd;
    chomp($curdir);

    while ($curdir && $curdir ne '/') {
        return $curdir if looks_like_base($curdir);
        $curdir = dirname $curdir; # try ../
    }
    return; # not found.
}

sub looks_like_base {
    my $dir = shift;

    return ( -d catfile($dir, 't')
            && -e catfile($dir, 'README')
            && (-e catfile($dir, 'Makefile.PL')
                || -e catfile($dir, 'Build.PL')));
}

~/.vim/ftplugin/perl.vimに以下を追加。

noremap ,t <Esc>:!prv -lv t/%<CR>

以下で書いていた問題は解決した。

http://catalyst.g.hatena.ne.jp/dann/20080330/1206892065

後はプロジェクトのディレクトリのtagの更新もこれベースでいける。vimで更新されたtagを読むにはどうすればいいかだけ調べないと。

vimをIDEっぽく使う (autocomplpop + ctags)

| 18:53 |  vimをIDEっぽく使う (autocomplpop + ctags) - dann@catalyst を含むブックマーク はてなブックマーク -  vimをIDEっぽく使う (autocomplpop + ctags) - dann@catalyst  vimをIDEっぽく使う (autocomplpop + ctags) - dann@catalyst のブックマークコメント

LLを使ううえで大変なことは、Eclipseがないことに尽きる。補完がしにくいし、ソースコードjumpがしにくい。けれど、これはautocomplpopとctagsを組み合わせると、Eclipseまで完璧ではないもののそれに近いことが実現できる。

  • ctags+vimで該当箇所へのjump
    • ポイントは、使うモジュールの全部のタグを作っておいて、cronでまわして生成しておくこと
    • ただし、Eclipseは型がわかっているから、一発で該当箇所にjumpできるけど、LLの場合だとそこまで完璧にはいかない。
    • Eclipseを使っていたときもJavaDoc(HTML)は使わないで、ライブラリのソースコードをattachしてEclipse上でソースコードをjumpしながら読んでいた。それに近い感じ。
  • autocomplpopでtagとbufferから補完
    • これで、がんがん補完できる。autoで補完候補がでるのが肝。

タグは以下のようなスクリプトをcronでまわしてタグを作っている。

#!/bin/sh

echo 'Generating tags for perl ...'
ctags -f ~/.vim/tags/perl/cpan.tags --recurse --totals \
    --exclude=blib \
    --exclude=.svn \
    --exclude='*~' \
    --languages=Perl --langmap=Perl:+.t \
    /usr/local/share/perl/5.8.8/

echo '\nGenerating tags for ruby ...'
ctags -f ~/.vim/tags/ruby/gems.tags --recurse --totals \
    --exclude=blib \
    --exclude=.svn \
    --exclude='*~' \
    --languages=Ruby \
    /var/lib/gems/1.8/gems/
トラックバック - http://catalyst.g.hatena.ne.jp/dann/20080331

2008-03-12

snippetのdictionary生成

| 21:49 |  snippetのdictionary生成 - dann@catalyst を含むブックマーク はてなブックマーク -  snippetのdictionary生成 - dann@catalyst  snippetのdictionary生成 - dann@catalyst のブックマークコメント

snippetsEmuをなかなか使いこなせていないのは、どんなsnippetsがあるかを覚えられないからだという当たり前のことに気づいた。ということで、snippetsから、dictionaryを作ればいいんじゃないかと思った。

dictionaryにsnippetのキーワードが入っていれば、autocomplで候補が表示されるので、snippetsの補完ができるようになる。(なんだか、snippetsEmuの使い方を間違えているのかもしれないけれど...)。

ということで、以下がsnippetsからdictを生成するスクリプト。

使い方は、

snippets2dict.pl perl > perl.dict

以下がsnippets2dict.plのコード。

#!/usr/bin/perl
use strict;
use warnings;

use Carp;
use File::Find;

my $langtype = $ARGV[0];
unless($langtype) {
    die "langtype is required. Usage: snippets2dict.pl perl";
}

my $dir = "$ENV{'HOME'}/.vim/after/ftplugin";
unless(-d $dir) {
    die "$dir isn't exist"
}

find(\&print_file, $dir);

sub print_file {
    if($File::Find::name =~ /([a-zA-Z0-9\-]+)_snippets\.vim$/) {
        my $filetype = $1;

        my $file_path = $File::Find::name;
        my @contents = get_contents($file_path);
        foreach my $line (@contents) {
            if($line =~/Snippet\s+(.+?)\s+/i) {
                if($langtype eq $filetype) {
                    print $1 . "\n";
                }
            }
        }
    }
}

sub get_contents {
    my $file = shift;

    my $fh;
    open $fh, '<', $file or Carp::confess( "unable to open $file: $!" );

    if (wantarray) {
        my @contents = <$fh>;
        close $fh;
        return @contents;
    }

    my $contents = do { local $/; <$fh> };
    close $fh;
    return $contents;
}

# catalyst系のsnippetも、これで使えるように!

トラックバック - http://catalyst.g.hatena.ne.jp/dann/20080312

2008-02-17

Catalyst用のsnippet

| 21:56 |  Catalyst用のsnippet - dann@catalyst を含むブックマーク はてなブックマーク -  Catalyst用のsnippet - dann@catalyst  Catalyst用のsnippet - dann@catalyst のブックマークコメント

id:spiritlooseさんのsnippet

http://d.hatena.ne.jp/spiritloose/20080217/1203245464

おぉ、これは大分早くコーディングできそう。

Tabはautocomplのほうとバッティングするから、<C-B>に割当てみることにした。

GalangGalang2012/10/31 00:53I suppose that sounds and smlles just about right.

serowtserowt2012/11/01 06:46dg9QAM , [url=http://lguawwokcygh.com/]lguawwokcygh[/url], [link=http://znungxozrjzp.com/]znungxozrjzp[/link], http://etsniywijzoa.com/

pcoposfcuyapcoposfcuya2012/11/01 13:21FcmCUk <a href="http://fnojtbacntmu.com/">fnojtbacntmu</a>

vgozepoqvgozepoq2012/11/02 02:125rliHl , [url=http://ishgorqhgyly.com/]ishgorqhgyly[/url], [link=http://cugddjtgnaxl.com/]cugddjtgnaxl[/link], http://xhbdujjoggle.com/

トラックバック - http://catalyst.g.hatena.ne.jp/dann/20080217