Hi Tony,

Actually, I didn't know that highlighting visually and hitting the :
will give me the range.  That's half the battle for me on this.

I've tried putting that into a mapping like this:

map vti :'<,'> !perltidy

but when I visually select a chunk of code then type "vti" I get and
error saying:
"E492: Not an editor command '<,'> !perltidy"

Now my question is, how do I program a mapping so that I don't have to
type the !perltidy after I highlight the lines of code I need cleaned
up.

Thanks,
Kevin

On 11/22/06, A.J.Mechelynck <[EMAIL PROTECTED]> wrote:
Kevin Old wrote:
> Hello everyone,
>
> I have been thinking about implementing this little feature to help
> clean up my code.  Here's the scoop.  I'm a Perl programmer and I use
> a templating module called HTML::Mason which allows perl code within
> certain "tags".  Here's an example of the code:
>
> <% $tmpl->template_top()  %>
>
> % $m->call_next();
>
> <% $tmpl->template_bottom  %>
>
>
> <%init>
> use Myapp::HTML;
> use Myapp:Config qw(IMG_BASE_URL);
>
> my $tmpl = Myapp::HTML->new({
>                                title => 'Something',
>                                js => ['jquery.js'] },
>                                );
> </%init>
>
> <%flags>
> inherit => undef
> </%flags>
>
>
> Between the <%init> tags is just straight Perl code.  I have two maps
> I've setup in vim that will run the contents of a file through an
> external program (perltidy) and clean up my code.  They are:
>
> map ti :%!perltidy " clean entire file
> map mt :.!perltidy " clean current line
>
> Just wondering if there'd be a way that I could write a map that would
> work for a current "block" of code.  Maybe autodetect what block I'm
> in?  In this case whatever block I'm in (init).  If I couldn't
> autodetect the block I'm in, that'd be ok cause I could just map the
> few types of blocks into separate map commands.
>
> Should I go about this with a regex and then pass that line range to
> the external command?
>
> Any help is greatly appreciated!
>
> Kevin

If you type : on a highlighted Visual area, you'll get :'<,'> as the range
(where '< means "the first line of the Visual area" and '> means "the last
line of the Visual area"). If you use that on an ex-command which accepts a
range (defined with the -range modifier) the range will be passed to the
command; otherwise it will be executed once for every line in the range.

v<object> where <object> is a Normal-mode "object", will highlight the
concerned object. Example: vip for the "inner paragraph".


Best regards,
Tony.



--
Kevin Old
[EMAIL PROTECTED]

Reply via email to