SlideShare a Scribd company logo
Perl Hacks
  on Vim
            Lin You-An
          c9s / Cornelius
       pause id: CORNELIUS
Lin You-An
VIM & Perl
how can vim improve
perl coding productivity
 vim       coding   产   ?
The worst way to edit
          编辑
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
#!/usr/bin/env perl
my $hppiness = PerlChina->join();

     Oops!
      lost “a”
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                            xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                          xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                         xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                        xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                      xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                     xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                    xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                  xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
                 xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
               xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
            xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
        xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
      xN
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
#!/usr/bin/env perl
my $hppiness = PerlChina->join();
#!/usr/bin/env perl
my $hppiness = PerlChina->join();

               if this costs 4 sec
#!/usr/bin/env perl
my $hppiness = PerlChina->join();

                      if this costs 4 sec

        if x 50 times this kind of situation per day
#!/usr/bin/env perl
my $hppiness = PerlChina->join();

                      if this costs 4 sec

        if x 50 times this kind of situation per day
#!/usr/bin/env perl
my $hppiness = PerlChina->join();

                        if this costs 4 sec

          if x 50 times this kind of situation per day
     and you work for more than 300 day per year
                                        = 16.6 hours
#!/usr/bin/env perl
my $hppiness = PerlChina->join();

                        if this costs 4 sec

          x 50 times this kind of situation per day ?
     and you work for more than 300 day per year
                                        = 16.6 hours
#!/usr/bin/env perl
my $hppiness = PerlChina->join();

                        if this costs 4 sec


              Awful
          x 50 times this kind of situation per day ?
     and you work for more than 300 day per year
                                        = 16.6 hours
What can you do in
   16.6 hours
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
or more hacking
sleep...
时间   钱
The VIM way...
VIM:
#!/usr/bin/env perl
my $hppiness = perlchina->join();
                        F   h
VIM:
#!/usr/bin/env perl
my $hppiness = perlchina->join();
       a ppend a
VIM:
#!/usr/bin/env perl
my $hppiness = perlchina->join();
    f   P
VIM:
#!/usr/bin/env perl
my $hppiness = Perlchina->join();
                ~
VIM:
#!/usr/bin/env perl
my $hppiness = PErlchina->join();
                 ~
VIM:
#!/usr/bin/env perl
my $hppiness = PERlchina->join();
                  ~
VIM:
#!/usr/bin/env perl
my $hppiness = PERLchina->join();
                   ~
So What is VIM ?
VIM   IDE
VIM is an
 Editor
VI Improved
Move More Efficiently.
               动
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
Features
1. Mode
More Than
4 Edit Mode
INSERT
NORMAL
 VISUAL
 SELECT
  ... et cetera
ESC
      [Ii]NSERT
      NORMAL
      [Vv]ISUAL
1.1 Normal Mode
Motion
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
HJKL
←↓↑→
h ,j ,k ,l
H ,M ,L
 w ,e ,b
f[x] , t[x]
[{ , ]} , %
 ( ,) ,{ ,}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	             Cursor
}

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something            [{

   my @outs = grep /pattern/ , @list;
	 	
}

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}                                  f@

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}                                       $

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}      ^

sub func1 {



}
# comments ...
    H
foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	 M
}

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}

sub func1 {



}
      L
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

    my @outs = grep
	
}                     C
                             Insert mode
sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}

sub func1 {



}
# comments ...

foreach my $foo ( @bar ) {

    # do something

   my @outs = grep /pattern/ , @list;
	 	
}

     %
sub func1 {



}
:h motion.txt
1.2 Insert Mode
Editing text
Insert Mode

• i : Insert text before the cursor
Insert Mode

• i : Insert text before the cursor
• I : Insert text before the first non-blank in the
  line
Insert Mode

• i : Insert text before the cursor
• I : Insert text before the first non-blank in the
  line
• a : Append text after the cursor
Insert Mode

• i : Insert text before the cursor
• I : Insert text before the first non-blank in the
  line
• a : Append text after the cursor
• A : Append text at the end of the line
1.3 Visual Mode
Select region
Visual Mode

• v : start Visual mode per character.
Visual Mode

• v : start Visual mode per character.
• V : start Visual mode linewise.
Visual Mode

• v : start Visual mode per character.
• V : start Visual mode linewise.
• Ctrl-v : start Visual mode blockwise.
Visual Mode

• v : start Visual mode per character.
• V : start Visual mode linewise.
• Ctrl-v : start Visual mode blockwise.
                 operator       y (yank) , d
                (delete) , c (change) ... etc
2. Syntax Highlight Support
/opt/local/share/vim/vim72
$ ls -1 syntax/ | wc -l
   520


              more than 500 syntax files
Syntax
Perl code needs syntax
but we design more
   syntax in Perl.
              Perl
Modules need syntax too
Template::Declare
  template simple => sub {
     html {
       head {}
       body {
          p {'Hello, world wide web!'}
       }
     }
  };

   # ... templates
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
package MyView;
use Markapl;

tempalte '/a/page.html' => sub {
  h1("#title") { "Hi" };
  p(".first") { "In the begining, lorem ipsum...." };
  p(style => "color: red;") { "But...." };
}
Jifty::DBI::Schema
  package TestApp::Model::Phone;
  use Jifty::DBI::Schema;
  use Jifty::DBI::Record schema {
     column user =>
        references TestApp::Model::User by 'id',
        is mandatory;
     column type => ...;
     column value => ...;
  };
~/.vim/syntax/[filetype].vim
~/.vim/syntax/[filetype].vim

syn match [id] [re] [options]
~/.vim/syntax/[filetype].vim

syn match [id] [re] [options]
syn region [id] start=[re] end=[re]
~/.vim/syntax/[filetype].vim

syn match [id] [re] [options]
syn region [id] start=[re] end=[re]
syn keyword [id] [keyword] ...
~/.vim/syntax/[filetype].vim

syn match [id] [re] [options]
syn region [id] start=[re] end=[re]
syn keyword [id] [keyword] ...

hi [id]   guibg=[color] ctermfg=[color]
~/.vim/syntax/perl/*.vim
~/.vim/syntax/perl/jifty.vim
~/.vim/syntax/perl/template-declare.vim
~/.vim/syntax/perl/markapl.vim
" Fold Jifty Templates
syn region jifty_td_fold
    start=+^(privates+)=templates+
    end=+^};+ transparent fold keepend

" Fold Jifty Template Delcare Tags
syn region jifty_tag_fold
     start="^z(s*)<(div|table|row|form|script|
cell|row|th|tfoot)>s*{"
     end="^z1};=" fold keepend
Fold Jifty::DBI schema columns and action params

 syn region jfscolumn
      start=+^s*(param|column)>+
      end=+;+ contained
      contains=jfspropertybe,jfsproperty,jfscol,jfscolname,
         perlComment, perlString, perlFunction, perlFloat,
perlNumber, perlSpecialString, perlStringUnexpanded
         fold
:help syntax.txt
4.
  key
mapping
:map
:nmap
:vmap
:imap
:smap
:xmap
... more
:map       (all)

:nmap      (normal mode)

:vmap      (visual mode)

:imap      (insert mode)

:smap      (select mode)

:xmap      (visual , select mode)
... more
:nmap <C-c><C-c> :!perl -Wc %



Ctrl C      Ctrl C

     let perl check current perl script syntax
use Tab and Shift-Tab to indent region ,
        instead of “>” and “<“

nmap         <tab>   v>
nmap         <s-tab> v<

vmap         <tab>   >gv
vmap         <s-tab> <gv
imap <F2> <C-R>=strftime("%c")<CR>
imap <F2> <C-R>=system(‘perl -MDateTime -e
DateTime->now’)<CR>



               to insert timestamp
cmap   <c-a>   <home>
cmap   <c-e>   <end>
cnoremap <c-b>        <left>
cnoremap <c-d>        <del>
cnoremap <c-f>        <right>
cnoremap <c-n>        <down>
cnoremap <c-p>        <up>

cnoremap   <esc><c-b> <s-left>
cnoremap   <esc><c-f> <s-right>

           support bash-like key mapping
:h map.txt
5.
Text Object
Text Object

• word
• string      ⇛             action
• paragraph       (yank,delete,change ...etc)

• block
Operator Mapping

v|c|d       i|a            { | [ | ( |“ |‘

   visual                         Region
  change    Inner Object            {}
  delete     An Object              []
                                    ()
                                    ““
Operator                            ‘‘
va{
Perl.Hacks.On.Vim Perlchina
sub( blah , blah )
           ci(


     sub( )

   sub( new_args )
“Hello World”
          di”


     “”

“Hello New World”
Vim7.1 Comes with
  tag block region
<aaa> Hola </aaa>
           vit


<aaa> Hola </aaa>

            Visual Select
Alias
   "dl" delete character (alias: "x")   |dl|
   "diw" delete inner word               *diw*
   "daw" delete a word                  *daw*
   "diW" delete inner WORD (see |WORD|)            *diW*
   "daW" delete a WORD (see |WORD|)               *daW*
   "dd" delete one line               |dd|
   "dis" delete inner sentence           *dis*
   "das" delete a sentence              *das*
   "dib" delete inner '(' ')' block    *dib*
   "dab" delete a '(' ')' block       *dab*
   "dip" delete inner paragraph           *dip*
   "dap" delete a paragraph              *dap*
   "diB" delete inner '{' '}' block    *diB*
   "daB" delete a '{' '}' block
8.
FOLDS
FOLD IS
Perl.Hacks.On.Vim Perlchina
Fold Methods
Fold Methods
 Syntax Fold
Fold Methods
   Syntax Fold
                 :set foldmethod=syntax


set fold method as syntax , check out more options in:
             $VIMRUNTIME/syntax/*.vim
Perl built-in syntax
/opt/local/share/vim/vim72/syntax/perl.vim


if exists("perl_want_scope_in_variables")
“ .....
if exists("perl_extended_vars")
“ .....
  if exists("perl_fold")
“ .....
                                you can enablethose features in
                                         your .vimrc

                             let perl_fold = 1
                             let perl_extended_vars = 1
                             “ .... etc
for complex things like
                                        @{${"foo"}}.



let   perl_include_pod = 1
let   perl_extended_vars = 1
let   perl_want_scope_in_variables = 1
let   perl_fold = 1
let   perl_fold_blocks = 1
                                         for something like
                                           $pack::var1
Fold Methods
 Syntax Fold
 Marker Fold
Fold Methods
 Syntax Fold
 Marker Fold

          :set foldmethod=marker

               fold region by markers , the
               default marker is “{{{“ , “}}}”
# fold this {{{
sub do_something {

    # a lot of work ...

}
#   }}}
# fold this {{{
sub do_something {

    # a lot of work ...
    # foldlevel 2 {{{2
         # foldlevel 4 {{{4

         # }}}4
      # foldlevel here is 3
    # }}}2
}
#   }}}
Perl.Hacks.On.Vim Perlchina
Fold Methods
 Syntax Fold
 Marker Fold
 Indent Fold
Fold Methods
 Syntax Fold
 Marker Fold
 Indent Fold
          :set foldmethod=indent

                use indent to fold
Fold Methods
 Syntax Fold
 Marker Fold
 Indent Fold
 Manual Fold
:set foldmethod=manual

          create folds manually
autocmd   BufWinLeave *.*          silent mkview
autocmd   BufWinEnter *.*          silent loadview

                autocmd   mkview , loadview
                                          ~/.vim/view/
Fold Methods
 Syntax Fold
 Marker Fold
 Indent Fold
 Manual Fold
 Expr Fold (Custom Fold Function)
:set foldexpr=MyFoldLevel(v:lnum)


                customized fold function
Fold Methods
 Syntax Fold
 Marker Fold
 Indent Fold
 Manual Fold
 Expr Fold (Custom Fold Function)
 Diff Fold
*za*
          za    When on a closed fold: open it. When folds are nested, you
               may have to use "za" several times. When a count is given,
               that many closed folds are opened.
za             When on an open fold: close it and set 'foldenable'. This
               will only close one level, since using "za" again will open

zA
               the fold. When a count is given that many folds will be
               closed (that's not the same as repeating "za" that many
               times).

                                       *zA*
          zA    When on a closed fold: open it recursively.

zm             When on an open fold: close it recursively and set



zM
               zm         Fold more: Subtract one from 'foldlevel'. If 'foldlevel' was
                        already zero nothing happens.

zr                      'foldenable' will be set.

                                                     *zM*

zR             zM          Close all folds: set 'foldlevel' to 0.
                        'foldenable' will be set.




zj , zk

[z , ]z
:h folding
10. QuickFix
:grep
:grep [pattern] [filepath]
Result ⇛ QuickFix Window
QuickFix Window
:set grepprg=/path/to/grep
:copen
:cclose
:cnext
:cprevious
QuickFix Window Toggle
com! -bang -nargs=? QFix cal QFixToggle(<bang>0)
fu! QFixToggle(forced)
   if exists("g:qfix_win") && a:forced == 0
      cclose
      unlet g:qfix_win
   else
      copen 10
      let g:qfix_win = bufnr("$")
   en
endf
nn        <leader>q :QFix<cr>


           nmap to “q” , the default <leader> key is “”
9.
Helpful Settings
Should we re-indent code
       manually ?
PerlTidy++
:set equalprg=perltidy
:set equalprg=perltidy

 to re-format a region , set perltidy as your reformater

              then press “=” , it will pass to perltidy
autocmd Filetype perl :set equalprg=perltidy


                 when filetype is perl
             use autocmd to set equalprg
to reformat SQL ,
we have SQL::Beautify module
SQL::Beautify
 $ cat bin/sql-beautify.pl
 #!/usr/bin/env perl
 use warnings;
 use strict;
 use SQL::Beautify;
 local $/;
 my $sql = SQL::Beautify->new( query => <STDIN> , spaces =>
 4 , break => "n" );
 print $sql->beautify;


autocmd Filetype sql :set equalprg=sql-beautify.pl

  command! -range SQLF :'<,'>!/Users/c9s/bin/sql-beautify.pl
Javascript::Beautifier
  [localhost]$ cat bin/js_beautifier
  #!/usr/bin/env perl
  use JavaScript::Beautifier qw/js_beautify/;
  local $/;
  $js_source_code = <STDIN>;
  my $pretty_js = js_beautify( $js_source_code, {
       indent_size => 2,
       indent_character => ' ',
  } );
  print $pretty_js;

autocmd Filetype javascript
  :set equalprg=js-beautify.pl


   command! -range JSF :'<,'>!/Users/c9s/bin/js_beautify.pl
HTML Entities      $ cat bin/html-entities.pl
                   use HTML::Entities;
                   for ( <STDIN> ) {
                      print encode_entities( $_ ) . "n";
                   }
command! -range Entities :'<,'>!/Users/c9s/bin/html-entities.pl


              " <a href="">YAPC ASIA</a>


&quot; &lt;a href=&quot;&quot;&gt;YAPC ASIA&lt;/a&gt;
Morse Encoder
    use Convert::Morse qw(as_ascii as_morse is_morsable);
    print as_morse( $_ ) . “n” for ( <STDIN> );

command! -range Morse :'<,'>!/Users/c9s/bin/morse-encode.pl

                sub handler_start {
                  my ( $kernel, $heap, $session ) = @_[ KERNEL, HEAP, SESSION ];
                  print "Session ", $session->ID, " has started.n";
                  $heap->{count} = 0;
                  $kernel->yield('increment');
                }

        ... ..- -... .... .- -. -.. .-.. . .-. ..--.- ... - .- .-. - {
             -- -.-- -.--. $-.- . .-. -. . .-.. --..-- $.... . .- .--. --..-- $... . ... ... .. --- -. -.--.- -...- .--.-. ..--.- [ -.-
             .--. .-. .. -. - .-..-. ... . ... ... .. --- -. .-..-. --..-- $... . ... ... .. --- -. -....- >.. -.. --..-- .-..-. .... .- .
             $.... . .- .--. -....- >{-.-. --- ..- -. - } -...- ----- -.-.-
             $-.- . .-. -. . .-.. -....- >-.-- .. . .-.. -.. -.--. .----. .. -. -.-. .-. . -- . -. - .----. -.--.- -.-.-
        }
source code
  traverse
Case:

    use Data::Dumper;
Your::App->do_something();


         we need to find Data/Dumper.pm in @INC
                   then type something like
        $ vim /opt/local/..../site_perl/Data/Dumper.pm
fu! GetCursorModuleName()
  let cw = substitute( expand("<cWORD>") , '.{-}((w+)(::w+)
*).*$' , '1' , '' )
  return cw
endfunction


fu! TranslateModuleName(n)
  return substitute( a:n , '::' , '/' , 'g' ) . '.pm'
endf



fu! GetPerlLibPaths()
  let out = system('perl -e ''print join "n",@INC''')
  let paths = split( out , "n" )
  return paths
endf
fu! FindModuleFileInPaths()
  let paths = GetPerlLibPaths()
  let fname = TranslateModuleName(     GetCursorModuleName()     )
  let methodname = GetMethodName()

  if TabGotoFile( 'lib/' .   fname , methodname )
    return
  endif

  for p in paths
    let fullpath = p . '/' . fname
    if TabGotoFile( fullpath , methodname )
      break
    endif
  endfor
endfunction

nmap <leader>fm :call FindModuleFileInPaths()<CR>
         type  “fm”  rather  than  type  $  perldoc  -­‐m  Module::Name
Install CPAN Module from <cWORD>
 nmap <C-x><C-i> :call InstallCPANModule()<CR>
 function! InstallCPANModule()
   let l = getline('.')
   let cw = substitute( expand('<cWORD>') , ";$" , "" , "g" )
   let cw = substitute( cw , "['"]" , "" , "g" )
   echo "Installing CPAN Module: " . cw . "n"
   silent exec "!cpanp i " . cw . " >& /dev/null"
   echo "Donen"
 endfunction
Skeletons

au bufnewfile *.pl 0r ~/.vim/skeleton/template.pl
au bufnewfile *.pod 0r ~/.vim/skeleton/template.pod
au bufnewfile *.pm 0r ~/.vim/skeleton/template.pm
more than one skeleton for perl code

fu! ReadTemplate()
  let sname = input( "template type:" )
  exec '0r ~/.vim/skeleton/perl/' . sname .
'.pl'
endf
command! NewFromSkeleton :call ReadTemplate()
nm cr= ^f=cf;
nm cl= ^f=c^
Pod Helper
fu! PodHelperFunctionHeader()
  let subname = substitute( getline('.') , 'subs+(w+)s
+.*$' , '1' , "" )
  let lines = [
          '=head2 ' . subname ,
          '' ,
          '' ,
          '' ,
          '=cut' ,
          '',
         ]
  for text in lines
     :call append( line('.') - 1 , text )
  endfor
  :call cursor( line('.') - len( lines ) + 2 , 1 )
endf
nmap <leader>pf :call PodHelperFunctionHeader()<CR>
abbr _perlbin #!/usr/bin/env perl
         abbr _s $self
detect features
if has('perl')

endif

if has(‘netbeans_intg’)

endif
crossplatform settings
 if has('mac')

 elseif has(‘win32’)

 elseif has(‘unix’)

 endif
if you compiled vim
      with perl
function! WhitePearl()
perl << EOF
     VIM::Msg("pearls are nice for necklaces");
     VIM::Msg("rubys for rings");
     VIM::Msg("pythons for bags");
     VIM::Msg("tcls????");
EOF
endfunction
:perl $a=1
:perldo $_ = reverse($_);1
:perl VIM::Msg("hello")
:perl $line = $curbuf->Get(42)
:perl   VIM::Msg("Text")                # displays a message
:perl   VIM::Msg("Error", "ErrorMsg")   # displays an error message
:perl   VIM::Msg("remark", "Comment")   # displays a highlighted message
:perl   VIM::SetOption("ai")            # sets a vim option
:perl   $nbuf = VIM::Buffers()          # returns the number of buffers
:perl   @buflist = VIM::Buffers()       # returns array of all buffers
:perl   $mybuf = (VIM::Buffers('qq.c'))[0] # returns buffer object for 'q
:perl   @winlist = VIM::Windows()       # returns array of all windows
:perl   $nwin = VIM::Windows()          # returns the number of windows
:perl   ($success, $v) = VIM::Eval('&path') # $v: option 'path', $success
:perl   ($success, $v) = VIM::Eval('&xyz') # $v: '' and $success: 0
:perl   $v = VIM::Eval('expand("<cfile>")') # expands <cfile>
:perl   $curwin->SetHeight(10)          # sets the window height
:perl   @pos = $curwin->Cursor()        # returns (row, col) array
:perl   @pos = (10, 10)
:perl   $curwin->Cursor(@pos)           # sets cursor to @pos
:perl   $curwin->Cursor(10,10)          # sets cursor to row 10 col 10
11.
Plugins
perlprove.vim
 parse test output to quickfix window

        ':make *t', or ':make t'
SnipMate
snippet cla class .. initialize .. end
    class ${1:`substitute(Filename(), '^.', 'u&', '')`}
        def initialize(${2:args})
            ${3}
        end

    end
                                code snippet
DBExt.vim
Database extension support
  Oracle, Sybase, MSSQL ,
    MySQL, DBI etc..
xml.vim
 xml related
FuzzyFinder.vim
 Fuzzy/Partial pattern explorer
The_NERD_TREE.vim
    Directory Tree Explorer
The NERD Commenter
     Comment Helper
taglist.vim
     ctags
macro , function , variable
autocomplpop.vim
MRU
most recently used
bufexplorer.vim
    Buffer Explorer
git-vim
cpan-list.vim
http://github.com/c9s/cpan-list.vim
template-init.vim
http://github.com/c9s/template-init.vim
vimrc
http://oulixe.us/_vimrc
http://oulixe.us/_gvimrc
The old way to
install vim scripts
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
Perl.Hacks.On.Vim Perlchina
Download
Read Install details
Read Install details
             Awful!
Awful!
Perl.Hacks.On.Vim Perlchina
Vimana
  Vim script Manager
• Vimball
• Archive File ( zip , rar )
• .vim extension file
• Cache::File
• App::CLI
• Archive::Any
• ...etc
it’s on CPAN


 $ cpan Vimana
$ vimana search xml
$ vimana search xml
rrd.vim             - Edit RRD data with Vim.
qt.vim              - tiny tool for the uic used in Qt from
Trolltech
syntax-for-xul      - Highlighting for XML User interface Language.
maven2.vim          - Compiler plugin for maven2
 .... skip
$ vimana info xml.vim
$ vimana install xml.vim
$ vimana   install   xml.vim
$ vimana   install   rails.vim
$ vimana   install   the-nerd-tree.vim
$ vimana   install   taglist.vim
$ vimana   install   snipmate
$ vimana   install   fuzzyfinder.vim
etc ...
                               ALL Works
Future Plan

•upgrade
• remove
• config
• support makefile
Git Repository
http://github.com/c9s/Vimana/tree/master
Thank You

More Related Content

PDF
Perl.Hacks.On.Vim Perlchina
PDF
Good Evils In Perl
PDF
Perl.Hacks.On.Vim
PDF
RubyConf Portugal 2014 - Why ruby must go!
PDF
Vim Hacks
PDF
The Perl API for the Mortally Terrified (beta)
PDF
PHP7. Game Changer.
PDF
Make Your Own Perl with Moops
Perl.Hacks.On.Vim Perlchina
Good Evils In Perl
Perl.Hacks.On.Vim
RubyConf Portugal 2014 - Why ruby must go!
Vim Hacks
The Perl API for the Mortally Terrified (beta)
PHP7. Game Changer.
Make Your Own Perl with Moops

What's hot (20)

PDF
VIM for (PHP) Programmers
PDF
Abuse Perl
PPT
You Can Do It! Start Using Perl to Handle Your Voyager Needs
KEY
Refactor like a boss
PPTX
PHP Powerpoint -- Teach PHP with this
PDF
Ruby 2.0
KEY
Rails for PHP Developers
PDF
Ruby - Uma Introdução
ODP
Introduction to Perl - Day 1
PDF
Perl 6 in Context
PDF
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
ODP
perl usage at database applications
KEY
Introduction to Perl Best Practices
PDF
Ruby 入門 第一次就上手
PDF
Static Optimization of PHP bytecode (PHPSC 2017)
PDF
What's new in PHP 8.0?
ODP
Beginning Perl
PPT
CGI With Object Oriented Perl
PDF
Just-In-Time Compiler in PHP 8
PDF
Improving Dev Assistant
VIM for (PHP) Programmers
Abuse Perl
You Can Do It! Start Using Perl to Handle Your Voyager Needs
Refactor like a boss
PHP Powerpoint -- Teach PHP with this
Ruby 2.0
Rails for PHP Developers
Ruby - Uma Introdução
Introduction to Perl - Day 1
Perl 6 in Context
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
perl usage at database applications
Introduction to Perl Best Practices
Ruby 入門 第一次就上手
Static Optimization of PHP bytecode (PHPSC 2017)
What's new in PHP 8.0?
Beginning Perl
CGI With Object Oriented Perl
Just-In-Time Compiler in PHP 8
Improving Dev Assistant

Viewers also liked (20)

PPT
Introduction To Managing VMware With PowerShell
PDF
HTML5の基礎と応用 ~Open Web Platform~ WebSocket / WebRTC / Web Audio API / WebGL 第二版
PDF
メディア芸術基礎 II HTML5とは何か? HTML5、はじめの一歩
PPTX
WF4 + WMI + PS + αで運用管理
ZIP
関西Vim勉強会#5 vimrcの書き方
KEY
Plack perl superglue for web frameworks and servers
PPTX
開発者のための最新グループポリシー活用講座
PDF
Cactiでのcliツールについて
PDF
PowerShellを使用したWindows Serverの管理
PPTX
Phreebird Suite 1.0: Introducing the Domain Key Infrastructure
PDF
Vmware esx top commands doc 9279
PDF
グループポリシーでWindowsファイアウォール制御 120602
PDF
開発者のためのActive Directory講座
PPTX
Windows スクリプトセミナー 基本編
PDF
VMworld 2013: PowerCLI Best Practices - A Deep Dive
PPT
ESX performance problems 10 steps
PDF
Building vSphere Perf Monitoring Tools
PDF
Python for Penetration testers
PDF
Windows スクリプトセミナー WMI編 VBScript&WMI
PDF
おさらいグループポリシー 120320
Introduction To Managing VMware With PowerShell
HTML5の基礎と応用 ~Open Web Platform~ WebSocket / WebRTC / Web Audio API / WebGL 第二版
メディア芸術基礎 II HTML5とは何か? HTML5、はじめの一歩
WF4 + WMI + PS + αで運用管理
関西Vim勉強会#5 vimrcの書き方
Plack perl superglue for web frameworks and servers
開発者のための最新グループポリシー活用講座
Cactiでのcliツールについて
PowerShellを使用したWindows Serverの管理
Phreebird Suite 1.0: Introducing the Domain Key Infrastructure
Vmware esx top commands doc 9279
グループポリシーでWindowsファイアウォール制御 120602
開発者のためのActive Directory講座
Windows スクリプトセミナー 基本編
VMworld 2013: PowerCLI Best Practices - A Deep Dive
ESX performance problems 10 steps
Building vSphere Perf Monitoring Tools
Python for Penetration testers
Windows スクリプトセミナー WMI編 VBScript&WMI
おさらいグループポリシー 120320

Similar to Perl.Hacks.On.Vim Perlchina (20)

PDF
Vim Hacks
PPT
Perl Presentation
PDF
Living With Legacy Code
PPT
Unix Shell Scripting Basics
PPT
Unix shell scripting basics
ODP
Perl Moderno
PDF
PHP Programming and its Applications workshop
PDF
2014 database - course 2 - php
PPTX
Perl basics for Pentesters
PPT
Plunging Into Perl While Avoiding the Deep End (mostly)
PPT
Cleancode
PDF
Module 03 Programming on Linux
PDF
Zend Certification Preparation Tutorial
PDF
Diving into HHVM Extensions (php[tek] 2016)
PDF
JIP Pipeline System Introduction
ODP
Whatsnew in-perl
PPT
Php Reusing Code And Writing Functions
PPTX
PHP Basics and Demo HackU
ODP
Introduction to Perl
Vim Hacks
Perl Presentation
Living With Legacy Code
Unix Shell Scripting Basics
Unix shell scripting basics
Perl Moderno
PHP Programming and its Applications workshop
2014 database - course 2 - php
Perl basics for Pentesters
Plunging Into Perl While Avoiding the Deep End (mostly)
Cleancode
Module 03 Programming on Linux
Zend Certification Preparation Tutorial
Diving into HHVM Extensions (php[tek] 2016)
JIP Pipeline System Introduction
Whatsnew in-perl
Php Reusing Code And Writing Functions
PHP Basics and Demo HackU
Introduction to Perl

Recently uploaded (20)

PDF
Network Security Unit 5.pdf for BCA BBA.
PPT
Teaching material agriculture food technology
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
sap open course for s4hana steps from ECC to s4
PDF
KodekX | Application Modernization Development
PDF
Electronic commerce courselecture one. Pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
cuic standard and advanced reporting.pdf
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Programs and apps: productivity, graphics, security and other tools
Network Security Unit 5.pdf for BCA BBA.
Teaching material agriculture food technology
Diabetes mellitus diagnosis method based random forest with bat algorithm
Per capita expenditure prediction using model stacking based on satellite ima...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Big Data Technologies - Introduction.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
“AI and Expert System Decision Support & Business Intelligence Systems”
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
20250228 LYD VKU AI Blended-Learning.pptx
sap open course for s4hana steps from ECC to s4
KodekX | Application Modernization Development
Electronic commerce courselecture one. Pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
cuic standard and advanced reporting.pdf
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
MIND Revenue Release Quarter 2 2025 Press Release
Programs and apps: productivity, graphics, security and other tools

Perl.Hacks.On.Vim Perlchina