Monday, June 14, 2010

Editing in Vim with Perl regex.

Download Vim : ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2
$tar -jxvf vim-7.2.tar.bz2
$cd vim-7.2
$./configure --with-perl --enable--perlinterp
$make
$sudo make install
$vim --version | grep perl
check for option '+perl' means perl enabled, if you see '-perl' you got wrong thing.
after enabling perl, now you can use perl regex with
:perldo s/find/replace/g

HAPPY VIMMING !!!



Using the Perl interface *perl-using*

*:perl* *:pe*
:pe[rl] {cmd} Execute Perl command {cmd}. The current package is "main". {not in Vi}


*:perldo* *:perld* :[range]perld[o] {cmd}
Execute Perl command {cmd} for each line in the [range], with $_ being set to the text of each line in turn, without a trailing . Setting $_ will change the text, but note that it is not possible to add or delete lines using this command. The default for [range] is the whole file: "1,$". {not in Vi}

Here are some things you can try:

:perl $a=1
:perldo $_=reverse($_);1
:perl VIM::Msg("hello")
:perl $line = $curbuf->Get(42)

*perl-overview*
Here is an overview of the functions that are available to Perl:

: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 ($v, $success) = VIM::Eval('&path') # $v=option 'path', $success=1
:perl ($v, $success) = VIM::Eval('&xyz') # $v='' and $success=0 (no option)
:perl $v = VIM::Eval('expand("")') # expand
: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
:perl $curbuf->Name() # returns buffer name
:perl $curbuf->Count() # returns the number of lines
:perl $l = $curbuf->Get(10) # returns line 10
:perl @l = $curbuf->Get(1 .. 5) # returns lines 1 through 5
:perl $curbuf->Delete(10) # deletes line 10
:perl $curbuf->Delete(10, 20) # delete lines 10 through 20
:perl $curbuf->Append(10, "Line") # appends a line
:perl $curbuf->Append(10, "Line1", "Line2", "Line3") # appends 3 lines
:perl @l = ("L1", "L2", "L3")
:perl $curbuf->Append(10, @l) # appends L1, L2 and L3
:perl $curbuf->Set(10, "Line") # replaces line 10
:perl $curbuf->Set(10, "Line1", "Line2") # replaces lines 10 and 11
:perl $curbuf->Set(10, @l) # replaces 3 lines


*perl-Msg* VIM::Msg({msg}, {group}?)
Displays the message {msg}. The optional {group} argument specifies a highlight group for Vim to use for the message.

*perl-SetOption* VIM::SetOption({arg})
Sets a vim option. {arg} can be any argument that the ":set" command accepts. Note that this means that no
spaces are allowed in the argument! See |:set|.

*perl-Buffers* VIM::Buffers([{bn}...])
With no arguments, returns a list of all the buffers in an array context or returns the number of buffers
in a scalar context. For a list of buffer names or numbers {bn}, returns a list of the buffers matching {bn}, using the same rules as Vim's internal |bufname()| function.

*perl-Windows* VIM::Windows([{wn}...]) With no arguments, returns a list of all the windows in an array context or returns the number of windows in a scalar context. For a list of window numbers {wn}, returns a list of the windows with those numbers.

*perl-DoCommand* VIM::DoCommand({cmd}) Executes Ex command {cmd}.


*perl-Eval* VIM::Eval({expr})
Evaluates {expr} and returns (success, val). success=1 indicates that val contains the value of {expr}; success=0 indicates a failure to evaluate the expression. '@x' returns the contents of register x, '&x' returns the value of option x, 'x' returns the
value of internal |variables| x, and '$x' is equivalent to perl's $ENV{x}. All |functions| accessible from the command-line are valid for {expr}.

*perl-SetHeight* Window->SetHeight({height})
Sets the Window height to {height}, within screen limits.

*perl-GetCursor* Window->Cursor({row}?, {col}?)
With no arguments, returns a (row, col) array for the current cursor position in the Window. With {row} and {col} arguments, sets the Window's cursor position to {row} and {col}. Note that {col} is numbered from 0, Perl-fashion, and thus is one less than the value in Vim's ruler.

*perl-Buffer* Window->Buffer() Returns the Buffer object corresponding to the given Window.

*perl-Name* Buffer->Name() Returns the filename for the Buffer.

*perl-Number* Buffer->Number() Returns the number of the Buffer.

*perl-Count*
Buffer->Count() Returns the number of lines in the Buffer.

*perl-Get* Buffer->Get({lnum}, {lnum}?, ...)
Returns a text string of line {lnum} in the Buffer for each {lnum} specified. An array can be passed with a list of {lnum}'s specified.

*perl-Delete* Buffer->Delete({lnum}, {lnum}?)
Deletes line {lnum} in the Buffer. With the second {lnum}, deletes the range of lines from the first {lnum} to the second {lnum}.

*perl-Append* Buffer->Append({lnum}, {line}, {line}?, ...)
Appends each {line} string after Buffer line {lnum}. The list of {line}s can be an array.

*perl-Set* Buffer->Set({lnum}, {line}, {line}?, ...)
Replaces one or more Buffer lines with specified {lines}s, starting at Buffer line {lnum}. The list of {line}s can be an array. If the arguments are invalid, replacement does not occur.

$main::curwin
The current window object.

$main::curbuf
The current buffer object.



References :
http://www.vim.org/download.php#unix
http://vim.wikia.com/wiki/VimTip393
http://users.skynet.be/antoine.mechelynck/vim/compunix.htm
http://www.softpanorama.org/Editors/Vimorama/vim_perl_support.shtml#perl-compiling

Followers