Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

perl omnicompletion for vim (including base class function compleltions .. etc)

branch: master

Merge pull request #19 from DeaR/fix-path-split

Fix path split.
latest commit 60b39ac6cd
Pedro authored
Octocat-spinner-32 autoload add autoload scripts. June 05, 2012
Octocat-spinner-32 bin Fix objvar parsing March 30, 2010
Octocat-spinner-32 ftplugin Fix path split. December 19, 2013
Octocat-spinner-32 test-case Fix Cache October 26, 2010
Octocat-spinner-32 utils fix find_base_classes.pl script November 16, 2009
Octocat-spinner-32 Makefile update makefile September 22, 2010
Octocat-spinner-32 README.mkd Add Mattn to Author List June 05, 2012
Octocat-spinner-32 README.mkd.old New README file March 28, 2010
Octocat-spinner-32 TODO update todo September 10, 2010
Octocat-spinner-32 config.mk fix Makefile. related issue #18 December 07, 2012
Octocat-spinner-32 win32-install.bat win32 installer. April 01, 2010
README.mkd

Screencast

http://www.youtube.com/watch?v=hZ7871WcIv0

Description

perl-completion plugin supports basic perl completion and Moose / DBIx::Class completion.

the rules could be easily extended. see ( ftplugin/perl/perlomni.vim )

core rules including:

  • variable name completion
  • function name completion
  • package method name completion
  • base class method name completion
  • basic Moose completion
  • basic DBIx completion

Requirement

perlomni completion requires vim 7.2 or newer.

and filetype feature should be enabled.

Install

just run make:

$ make install

and add ~/.vim/bin/ to your $PATH env variable , for example, add these lines to your .bashrc or .zshrc:

export PATH=~/.vim/bin:$PATH

please make sure you've enable filetype plugin your .vimrc:

filetype on
filetype plugin on
filetype indent on

NOTE) If you install pathogen.vim , you can make this working without installing.

Usage

In insert mode , press C-x C-o to emit omni completion.

P.S. The completion works in terminal vim is faster than gvim/MacVim.

Write your perl omni completion extensions

Perl omni completion plugin is extensible, you can extend completion rules by simple regular expressions.

your omni completion extension should put in ~/.vim/after/ftplugin/perl/what-ever.vim.

API Functions

AddPerlOmniRule(rule), for example:

cal AddPerlOmniRule({ 'only':1, 'head': '^has\s\+\w\+' , 
    \'context': '\s\+is\s*=>\s*$'  , 
    \'backward': '[''"]\?\w*$' , 
    \'comp': function('s:CompMooseIs') } )

cal AddPerlOmniRule({
    \'only':1, 
    \'context': '&$', 
    \'backward': '\<\U\w\+$', 
    \'comp': function('s:CompBufferFunction') })

Available Rule attributes

only: if one rule is matched, then rest rules won't be check.

contains: if file contains some string (can be regexp)

context: completion context pattern

backward: regexp for moving cursor back to the completion position.

head: pattern that matches paragraph head.

comp: completion function reference.

Cache Functions

GetCacheNS(ns,key)

ns: cache namespace
key:  cache key

SetCacheNS(ns,key,value)

ns: cache namespace
key:  cache key
value:  cache value

Development

Please feel free to ask commit bit of this. just drop me a line. :-)

Author

Samples

" SAMPLES {{{

extends 'Moose::Meta::Attribute';
extends 'AAC::Pvoice';

" module compeltion
my $obj = new B::C;


" complete class methods
Jifty::DBI::Record->

" complete built-in function
seekdir see


" $self completion
"   my $self
" to 
"   my $self = shift;
my $self

" complete current object methods
sub testtest { }
sub foo1 { }
sub foo2 { }

$self->

" smart object method completion
my $var = new Jifty;
$var->

" smart object method completion 2
my $var = Jifty::DBI->new;
$var->

my %hash = ( );
my @array = ( );

" complete variable
$var1 $var2 $var3 $var_test $var__adfasdf
$var__adfasd  $var1 


" moose complete

has url => (
    metaclass => 'Labeled',
    is        => 'rw',
    isa       => 'Str',
    label     => "The site's URL",
);

" role

with 'Restartable' => {
    -alias => {
        stop  => '_stop',
        start => '_start'
    },
    -excludes => [ 'stop', 'start' ],
};

" }}}
Something went wrong with that request. Please try again.