282 lines
5 KiB
Text
282 lines
5 KiB
Text
|
=head1 NAME
|
||
|
|
||
|
VI - VI module within perl embedded nvi
|
||
|
|
||
|
=head1 SYNOPSIS
|
||
|
|
||
|
sub wc {
|
||
|
my $words;
|
||
|
$i = $VI::StartLine;
|
||
|
while ($i <= $VI::StopLine) {
|
||
|
$_ = $curscr->GetLine($i++);
|
||
|
$words+=split;
|
||
|
}
|
||
|
$curscr->Msg("$words words");
|
||
|
}
|
||
|
|
||
|
=head1 DESCRIPTION
|
||
|
|
||
|
This pseudo module is available to perl programs run from within nvi and
|
||
|
provides access to the files being edited and some internal data.
|
||
|
|
||
|
Beware that you should not use this module from within a C<perldo> or
|
||
|
from within an C<END> block or a C<DESTROY> method.
|
||
|
|
||
|
=head2 Variables
|
||
|
|
||
|
These are set by nvi before starting each perl command.
|
||
|
|
||
|
=over 8
|
||
|
|
||
|
=item * $curscr
|
||
|
|
||
|
Object that represents the current screen.
|
||
|
It can be used as the ScreenId parameter of the functions below,
|
||
|
or you can use object oriented syntax.
|
||
|
|
||
|
# the following two are equivalent
|
||
|
$curscr->DelLine(57);
|
||
|
VI::DelLine($curscr, 57);
|
||
|
|
||
|
=item * $StartLine
|
||
|
|
||
|
Line number of the first line of the selected range or of the file if no
|
||
|
range was specified.
|
||
|
|
||
|
=item * $StopLine
|
||
|
|
||
|
Line number of the last line of the selected range or of the file if no
|
||
|
range was specified.
|
||
|
|
||
|
=back
|
||
|
|
||
|
=head2 Functions
|
||
|
|
||
|
=over 8
|
||
|
|
||
|
=item * AppendLine
|
||
|
|
||
|
VI::AppendLine(screenId,lineNumber,text);
|
||
|
|
||
|
Append the string text after the line in lineNumber.
|
||
|
|
||
|
=item * DelLine
|
||
|
|
||
|
VI::DelLine(screenId,lineNum);
|
||
|
|
||
|
Delete lineNum.
|
||
|
|
||
|
=item * EndScreen
|
||
|
|
||
|
VI::EndScreen(screenId);
|
||
|
|
||
|
End a screen.
|
||
|
|
||
|
=item * FindScreen
|
||
|
|
||
|
VI::FindScreen(file);
|
||
|
|
||
|
Return the screen id associated with file name.
|
||
|
|
||
|
=item * GetCursor
|
||
|
|
||
|
($line, $column) = VI::GetCursor(screenId);
|
||
|
|
||
|
Return the current cursor position as a list with two elements.
|
||
|
|
||
|
=item * GetLine
|
||
|
|
||
|
VI::GetLine(screenId,lineNumber);
|
||
|
|
||
|
Return lineNumber.
|
||
|
|
||
|
=item * GetMark
|
||
|
|
||
|
($line, $column) = VI::GetMark(screenId,mark);
|
||
|
|
||
|
Return the mark's cursor position as a list with two elements.
|
||
|
|
||
|
=item * GetOpt
|
||
|
|
||
|
VI::GetOpt(screenId,option);
|
||
|
|
||
|
Return the value of an option.
|
||
|
|
||
|
=item * InsertLine
|
||
|
|
||
|
VI::InsertLine(screenId,lineNumber,text);
|
||
|
|
||
|
Insert the string text before the line in lineNumber.
|
||
|
|
||
|
=item * LastLine
|
||
|
|
||
|
VI::LastLine(screenId);
|
||
|
|
||
|
Return the last line in the screen.
|
||
|
|
||
|
=item * MapKey
|
||
|
|
||
|
VI::MapKey(screenId,key,perlproc);
|
||
|
|
||
|
Associate a key with a perl procedure.
|
||
|
|
||
|
=item * Msg
|
||
|
|
||
|
VI::Msg(screenId,text);
|
||
|
|
||
|
Set the message line to text.
|
||
|
|
||
|
=item * NewScreen
|
||
|
|
||
|
VI::NewScreen(screenId);
|
||
|
VI::NewScreen(screenId,file);
|
||
|
|
||
|
Create a new screen. If a filename is specified then the screen is
|
||
|
opened with that file.
|
||
|
|
||
|
=item * Run
|
||
|
|
||
|
VI::Run(screenId,cmd);
|
||
|
|
||
|
Run the ex command cmd.
|
||
|
|
||
|
=item * SetCursor
|
||
|
|
||
|
VI::SetCursor(screenId,line,column);
|
||
|
|
||
|
Set the cursor to the line and column numbers supplied.
|
||
|
|
||
|
=item * SetLine
|
||
|
|
||
|
VI::SetLine(screenId,lineNumber,text);
|
||
|
|
||
|
Set lineNumber to the text supplied.
|
||
|
|
||
|
=item * SetMark
|
||
|
|
||
|
VI::SetMark(screenId,mark,line,column);
|
||
|
|
||
|
Set the mark to the line and column numbers supplied.
|
||
|
|
||
|
=item * SetOpt
|
||
|
|
||
|
VI::SetOpt(screenId,command);
|
||
|
|
||
|
Set an option.
|
||
|
|
||
|
=item * SwitchScreen
|
||
|
|
||
|
VI::SwitchScreen(screenId,screenId);
|
||
|
|
||
|
Change the current focus to screen.
|
||
|
|
||
|
=item * TagQ
|
||
|
|
||
|
$screen->TagQ("tag identification string")
|
||
|
|
||
|
Creates a new tag queue object associated to $screen
|
||
|
to which "tags" can be added.
|
||
|
See further about methods you can use on tag queues.
|
||
|
|
||
|
=item * UnmapKey
|
||
|
|
||
|
VI::UnmmapKey(screenId,key);
|
||
|
|
||
|
Unmap a key.
|
||
|
|
||
|
=item * Warn
|
||
|
|
||
|
This is the default warning handler.
|
||
|
It adds any warnings to the error string.
|
||
|
|
||
|
=item * Opt
|
||
|
|
||
|
$screen->Opt;
|
||
|
|
||
|
Returns a tied hash representing the options of the screen.
|
||
|
Note that you can only retrieve and set hash elements.
|
||
|
|
||
|
=item * Map
|
||
|
|
||
|
$screen->Map;
|
||
|
|
||
|
Returns a tied hash representing the mappings of the screen.
|
||
|
Note that you can only retrieve, set and delete hash elements.
|
||
|
|
||
|
=item * Mark
|
||
|
|
||
|
$screen->Mark;
|
||
|
|
||
|
Returns a tied hash representing the marks of the screen.
|
||
|
|
||
|
=item * Line
|
||
|
|
||
|
$screen->Line;
|
||
|
|
||
|
Returns a tied array representing the lines of the screen.
|
||
|
|
||
|
=back
|
||
|
|
||
|
=head2 Tag queue methods
|
||
|
|
||
|
=item * Add
|
||
|
|
||
|
$tagq->Add($filename, $searchstring, $msg)
|
||
|
|
||
|
Adds a tag to the tag queue.
|
||
|
The $searchstring argument is (line)number or
|
||
|
a string representing a regular expression.
|
||
|
|
||
|
=item * Push
|
||
|
|
||
|
$tagq->Push()
|
||
|
|
||
|
Pushes the tag queue onto its associated screen.
|
||
|
The result of the operation is as if the user had enter the
|
||
|
tag command and nvi had found the locations that were added
|
||
|
using the Add method.
|
||
|
|
||
|
For an example, see the make.pl script.
|
||
|
|
||
|
=back
|
||
|
|
||
|
=head1 EXAMPLES
|
||
|
|
||
|
sub showmarks {
|
||
|
my ($mark, $all);
|
||
|
for $mark ('a' .. 'z') {
|
||
|
eval {VI::GetMark($VI::ScreenId, $mark)};
|
||
|
$all .= $mark unless ($@);
|
||
|
}
|
||
|
VI::Msg($VI::ScreenId,"Set marks: $all");
|
||
|
}
|
||
|
|
||
|
sub forall {
|
||
|
my ($code) = shift;
|
||
|
my ($i) = $VI::StartLine-1;
|
||
|
while (++$i <= $VI::StopLine) {
|
||
|
$_ = VI::GetLine($VI::ScreenId, $i);
|
||
|
VI::SetLine($VI::ScreenId, $i, $_) if(&$code);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Now you can do
|
||
|
|
||
|
:perl forall sub{s/perlre/substitution/}
|
||
|
|
||
|
Although you'll probably use
|
||
|
|
||
|
:perldo s/perlre/substitution/
|
||
|
|
||
|
instead.
|
||
|
|
||
|
See L<perlre> for perl regular expressions.
|
||
|
|
||
|
=head1 SEE ALSO
|
||
|
|
||
|
L<nviperl>
|
||
|
|
||
|
=head1 AUTHOR
|
||
|
|
||
|
Sven Verdoolaege <skimo@kotnet.org>
|