NAME

Vim::X::Line - A line in a Vim buffer

VERSION

version 1.3.0

METHODS

new( buffer => $buffer, index => $i )

Creates a new Vim::X::Buffer object. Both buffer and index arguments are required.

clone

Makes a copy of the object.

content( $new_content )

Sets the content of the line to ne $new_content or, if $new_content is not given, returns the current content.

append( @lines )

Append the @lines after the current line.

Carriage returns in lines will cause them to be splitted.

dec()

Makes the object point to the previous line. Returns the object or undef if at the beginning of the buffer and can't backtrack anymore.

inc()

Makes the object point to the next line. Returns the object or, undef if at the end of the buffer and can't advance anymore.

rewind( $condition )

Move back in the buffer until $condition is met.

The condition can be a regular expression, or a coderef that will return true on success. If the condition is not met, the method returns false and the line index of the object is not modified.

ff( $condition )

Move forward in the buffer until $condition is met.

The condition can be a regular expression, or a coderef that will return true on success. If the condition is not met, the method returns false and the line index of the object is not modified.

BIG HUGE WARNING

When created, the line objects store the buffer and index of the line they correspond to, so they are more like cursors than representations of the actual lines. If lines are added or deleted in the buffer, the object will not be updated in consequence. For example, this won't do what you think:

    vim_append( '1 meh', '2 meh', '3 meh' );

    for my $line ( vim_lines ) {
        $line->delete if "$line" =~ /meh/;
    }

    vim_msg join ' ', vim_lines;   # prints '2 meh'

That's because the original line #2 become line #1 after the first delete. For things to work correctly, you can process the lines in reverse order:

    vim_append( '1 meh', '2 meh', '3 meh' );

    for my $line ( reverse vim_lines ) {
        $line->delete if "$line" =~ /meh/;
    }

    vim_msg join ' ', vim_lines;   # prints nothing!

OVERLOADING

The line object, when used as a string, will yield its content. And if used in a numerical context, it'll returns its line number.

As an additional piece of sugar is the overloading of '<<=', which sets the content of the line.

    $line <<= "$line" =~ s/foo/bar/rg;

    # equivalent to

    $line->content(  $line->content =~ s/foo/bar/rg );

The Vim::X::Buffer the line belongs to. Read-only.

Sets or gets the line number of the object.

AUTHOR

Yanick Champoux <yanick@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Yanick Champoux.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

3 POD Errors

The following errors were encountered while parsing the POD:

Around line 179:

Unknown directive: =description

Around line 222:

Unknown directive: =attribute

Around line 226:

Unknown directive: =attribute