Wikia

Vim Tips Wiki

Type and run templates instead of routine code

Talk0
1,612pages on
this wiki
Tip 710 Printable Monobook Previous Next

created May 4, 2004 · complexity basic · author akeru · version 6.0


There's a template script written in perl (see sources below).

Use this mapping in visual mode:

vnoremap <F6> :!perl E:\\Devtools\\vim\\vimfiles\\template\truler.pl<CR>

The template markers are:

TS:<Single string template here>
TB:
<multistring template here>
TE:
TF: <template file name >

So now we are typing following templates and get them transformed.

Typing this:

TS:public final static int PROXY_TYPE_{$p2}={$p1};
1;HTTP
2;SOCKS
3;SSH
4;HTTPS
5;NOPROXY

Now select this template with values below, press magic button and 'ta-da', we have this code :

public final static int PROXY_TYPE_HTTP=1;
public final static int PROXY_TYPE_SOCKS=2;
public final static int PROXY_TYPE_SSH=3;
public final static int PROXY_TYPE_HTTPS=4;
public final static int PROXY_TYPE_NOPROXY=5;

Here's the same with multiline template, type following:

TB:
public {$p1} is{$p2}Established() \{
 return m{$p2};
\}
TE:
boolean;DirectConnection
boolean;SockConnection
boolean;HTTPConnection

and after transforming we'll got this :

protected boolean isDirectConnectionEstablished() {
  return m_DirectConnection;
}

protected boolean isSockConnectionEstablished() {
  return m_SockConnection;
}

protected boolean isHTTPConnectionEstablished() {
  return m_HTTPConnection;
}

I know it's stupid 'copy-paste' and I don't like it, but sometimes It's required and that simple script saving my time.

Text::Template you can download it from http://search.cpan.org.


# truler.pl
use Text::Template;
$tb=0; $te=0;$template_str="";
$template_dir="E:\\Devtools\\vim\\vimfiles\\template\\";
while (<STDIN>){
 if (/^TF:(.*)$/){#file
 $template_file=$1;
 $template = Text::Template->new(SOURCE => $template_dir.$template_file)
 or die "Couldn't construct template: $Text::Template::ERROR";

 }elsif (/^TS:(.*)$/){#line
 $template_str=$1;
 $template = Text::Template->new(TYPE=> STRING ,SOURCE => "$template_str\n")
 or die "Couldn't construct template: $Text::Template::ERROR";

 }elsif (/^TB:/){#line
 $tb=1;
 }elsif (/^TE:/){#line
 $te=1;
 $template = Text::Template->new(TYPE=> STRING ,SOURCE => "$template_str\n")
 or die "Couldn't construct template: $Text::Template::ERROR";
 }elsif ($tb==1 && $te==0 ) {
 $template_str.=$_;
 }else {

 if (defined $template) {
 chomp;
 @p=split /;/;
 #if ($p > 0) { print "$_\n";

 my %vars = (
 p1 => $p[0],
 p2 => $p[1],
 p3 => $p[2],
 p4 => $p[3],
 p5 => $p[4],
 p6 => $p[5],
 p7 => $p[6],
 p8 => $p[7],
 p9 => $p[8]
 );
 my $result = $template->fill_in(HASH => \%vars);
 if (defined $result) { print $result }
 #}
 } #template_file defined
 }#else of TF
}#end while

CommentsEdit

I have something similar here http://www.ophinity.com/papers/wrangling/index.html#multiply

written in python, so it's inherently superior.


Around Wikia's network

Random Wiki